The WP Remote WordPress Plugin - Version 2.5

Version Description

Download this release

Release Info

Developer willmot
Plugin Icon 128x128 The WP Remote WordPress Plugin
Version 2.5
Comparing to
See all releases

Code changes from version 2.4.13 to 2.5

Files changed (73) hide show
  1. backupwordpress/admin/actions.php +0 -450
  2. backupwordpress/admin/backups.php +0 -74
  3. backupwordpress/admin/constants.php +0 -33
  4. backupwordpress/admin/menu.php +0 -86
  5. backupwordpress/admin/page.php +0 -21
  6. backupwordpress/admin/schedule-form-excludes.php +0 -125
  7. backupwordpress/admin/schedule-form.php +0 -60
  8. backupwordpress/admin/schedule.php +0 -100
  9. backupwordpress/assets/fancyBox/CHANGELOG.md +0 -55
  10. backupwordpress/assets/fancyBox/README.md +0 -199
  11. backupwordpress/assets/fancyBox/demo/1_b.jpg +0 -0
  12. backupwordpress/assets/fancyBox/demo/1_s.jpg +0 -0
  13. backupwordpress/assets/fancyBox/demo/2_b.jpg +0 -0
  14. backupwordpress/assets/fancyBox/demo/2_s.jpg +0 -0
  15. backupwordpress/assets/fancyBox/demo/3_b.jpg +0 -0
  16. backupwordpress/assets/fancyBox/demo/3_s.jpg +0 -0
  17. backupwordpress/assets/fancyBox/demo/4_b.jpg +0 -0
  18. backupwordpress/assets/fancyBox/demo/4_s.jpg +0 -0
  19. backupwordpress/assets/fancyBox/demo/5_b.jpg +0 -0
  20. backupwordpress/assets/fancyBox/demo/5_s.jpg +0 -0
  21. backupwordpress/assets/fancyBox/demo/ajax.txt +0 -15
  22. backupwordpress/assets/fancyBox/demo/iframe.html +0 -22
  23. backupwordpress/assets/fancyBox/demo/index.html +0 -302
  24. backupwordpress/assets/fancyBox/lib/jquery-1.7.2.min.js +0 -4
  25. backupwordpress/assets/fancyBox/lib/jquery.mousewheel-3.0.6.pack.js +0 -13
  26. backupwordpress/assets/fancyBox/source/blank.gif +0 -0
  27. backupwordpress/assets/fancyBox/source/fancybox_loading.gif +0 -0
  28. backupwordpress/assets/fancyBox/source/fancybox_sprite.png +0 -0
  29. backupwordpress/assets/fancyBox/source/helpers/fancybox_buttons.png +0 -0
  30. backupwordpress/assets/fancyBox/source/helpers/jquery.fancybox-buttons.css +0 -85
  31. backupwordpress/assets/fancyBox/source/helpers/jquery.fancybox-buttons.js +0 -115
  32. backupwordpress/assets/fancyBox/source/helpers/jquery.fancybox-media.js +0 -86
  33. backupwordpress/assets/fancyBox/source/helpers/jquery.fancybox-thumbs.css +0 -54
  34. backupwordpress/assets/fancyBox/source/helpers/jquery.fancybox-thumbs.js +0 -157
  35. backupwordpress/assets/fancyBox/source/jquery.fancybox.css +0 -226
  36. backupwordpress/assets/fancyBox/source/jquery.fancybox.js +0 -1449
  37. backupwordpress/assets/fancyBox/source/jquery.fancybox.pack.js +0 -35
  38. backupwordpress/assets/hmbkp.css +0 -89
  39. backupwordpress/assets/hmbkp.js +0 -400
  40. backupwordpress/assets/icon_backupwordpress_16x16.png +0 -0
  41. backupwordpress/assets/icon_backupwordpress_16x16_hover.png +0 -0
  42. backupwordpress/assets/icon_backupwordpress_32x32.png +0 -0
  43. backupwordpress/assets/wpspin_light.gif +0 -0
  44. backupwordpress/backupwordpress.mo +0 -0
  45. backupwordpress/backupwordpress.po +0 -703
  46. backupwordpress/classes/email.php +0 -164
  47. backupwordpress/classes/schedule.php +0 -771
  48. backupwordpress/classes/schedules.php +0 -70
  49. backupwordpress/classes/services.php +0 -233
  50. backupwordpress/classes/wp-cli.php +0 -93
  51. backupwordpress/functions/core.php +0 -442
  52. backupwordpress/functions/interface.php +0 -296
  53. backupwordpress/icon.png +0 -0
  54. backupwordpress/languages/hmbkp-de_DE.mo +0 -0
  55. backupwordpress/languages/hmbkp-de_DE.po +0 -614
  56. backupwordpress/languages/hmbkp-he_IL.mo +0 -0
  57. backupwordpress/languages/hmbkp-he_IL.po +0 -610
  58. backupwordpress/languages/hmbkp-it_IT.mo +0 -0
  59. backupwordpress/languages/hmbkp-it_IT.po +0 -612
  60. backupwordpress/languages/hmbkp-nl_NL.mo +0 -0
  61. backupwordpress/languages/hmbkp-nl_NL.po +0 -610
  62. backupwordpress/languages/hmbkp-pt_BR.mo +0 -0
  63. backupwordpress/languages/hmbkp-pt_BR.po +0 -614
  64. backupwordpress/languages/hmbkp-zh_CN.mo +0 -0
  65. backupwordpress/languages/hmbkp-zh_CN.po +0 -610
  66. backupwordpress/plugin.php +0 -162
  67. backupwordpress/readme.txt +0 -456
  68. plugin.php +17 -48
  69. readme.txt +8 -2
  70. wprp.admin.php +1 -25
  71. wprp.api.php +19 -16
  72. wprp.backups.php +393 -138
  73. backupwordpress/hm-backup/hm-backup.php → wprp.hm.backup.php +59 -45
backupwordpress/admin/actions.php DELETED
@@ -1,450 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Delete the backup and then redirect
5
- * back to the backups page
6
- */
7
- function hmbkp_request_delete_backup() {
8
-
9
- if ( empty( $_GET['hmbkp_delete_backup'] ) || ! check_admin_referer( 'hmbkp-delete_backup' ) )
10
- return;
11
-
12
- $schedule = new HMBKP_Scheduled_Backup( urldecode( $_GET['hmbkp_schedule_id'] ) );
13
-
14
- $schedule->delete_backup( base64_decode( $_GET['hmbkp_delete_backup'] ) );
15
-
16
- wp_redirect( remove_query_arg( array( 'hmbkp_delete_backup', '_wpnonce' ) ), 303 );
17
-
18
- exit;
19
-
20
- }
21
- add_action( 'load-tools_page_' . HMBKP_PLUGIN_SLUG, 'hmbkp_request_delete_backup' );
22
-
23
- /**
24
- * Delete a schedule and all it's backups and then redirect
25
- * back to the backups page
26
- */
27
- function hmbkp_request_delete_schedule() {
28
-
29
- if ( empty( $_GET['action'] ) || $_GET['action'] !== 'hmbkp_delete_schedule' || ! check_admin_referer( 'hmbkp-delete_schedule' ) )
30
- return;
31
-
32
- $schedule = new HMBKP_Scheduled_Backup( urldecode( $_GET['hmbkp_schedule_id'] ) );
33
- $schedule->cancel( true );
34
-
35
- wp_redirect( remove_query_arg( array( 'hmbkp_schedule_id', 'action', '_wpnonce' ) ), 303 );
36
-
37
- exit;
38
-
39
- }
40
- add_action( 'load-tools_page_' . HMBKP_PLUGIN_SLUG, 'hmbkp_request_delete_schedule' );
41
-
42
- /**
43
- * Perform a manual backup via ajax
44
- */
45
- function hmbkp_ajax_request_do_backup() {
46
-
47
- if ( empty( $_POST['hmbkp_schedule_id'] ) )
48
- exit;
49
-
50
- // We want to display any fatal errors in this ajax request so we can catch them on the other side.
51
- error_reporting( E_ERROR );
52
- @ini_set( 'display_errors', 'On' );
53
- @ini_set( 'html_errors', 'Off' );
54
-
55
- // Force a memory error for testing purposes
56
- //ini_set( 'memory_limit', '2M' );
57
- //function a() { a(); } a();
58
-
59
- ignore_user_abort( true );
60
-
61
- hmbkp_cleanup();
62
-
63
- $schedule = new HMBKP_Scheduled_Backup( urldecode( $_POST['hmbkp_schedule_id'] ) );
64
-
65
- $schedule->run();
66
-
67
- exit;
68
-
69
- }
70
- add_action( 'wp_ajax_hmbkp_run_schedule', 'hmbkp_ajax_request_do_backup' );
71
-
72
- /**
73
- * Send the download file to the browser and
74
- * then redirect back to the backups page
75
- */
76
- function hmbkp_request_download_backup() {
77
-
78
- global $is_apache;
79
-
80
- if ( empty( $_GET['hmbkp_download_backup'] ) || ! check_admin_referer( 'hmbkp-download_backup' ) || ! file_exists( base64_decode( $_GET['hmbkp_download_backup'] ) ) )
81
- return;
82
-
83
- $url = str_replace( HM_Backup::conform_dir( HM_Backup::get_home_path() ), home_url(), trailingslashit( dirname( base64_decode( $_GET['hmbkp_download_backup'] ) ) ) ) . urlencode( pathinfo( base64_decode( $_GET['hmbkp_download_backup'] ), PATHINFO_BASENAME ) );
84
-
85
- if ( $is_apache ) {
86
-
87
- // Force the .htaccess to be rebuilt
88
- if ( file_exists( hmbkp_path() . '/.htaccess' ) )
89
- unlink( hmbkp_path() . '/.htaccess' );
90
-
91
- hmbkp_path();
92
-
93
- $url = add_query_arg( 'key', HMBKP_SECURE_KEY, $url );
94
-
95
- }
96
-
97
- wp_redirect( $url, 303 );
98
-
99
- exit;
100
-
101
- }
102
- add_action( 'load-tools_page_' . HMBKP_PLUGIN_SLUG, 'hmbkp_request_download_backup' );
103
-
104
- /**
105
- * cancels a running backup then redirect
106
- * back to the backups page
107
- */
108
- function hmbkp_request_cancel_backup() {
109
-
110
- if ( ! isset( $_GET['action'] ) || $_GET['action'] !== 'hmbkp_cancel' )
111
- return;
112
-
113
- $schedule = new HMBKP_Scheduled_Backup( urldecode( $_GET['hmbkp_schedule_id'] ) );
114
-
115
- // Delete the running backup
116
- if ( $schedule->get_running_backup_filename() && file_exists( trailingslashit( hmbkp_path() ) . $schedule->get_running_backup_filename() ) )
117
- unlink( trailingslashit( hmbkp_path() ) . $schedule->get_running_backup_filename() );
118
-
119
- hmbkp_cleanup();
120
-
121
- wp_redirect( remove_query_arg( array( 'action' ) ), 303 );
122
-
123
- exit;
124
-
125
- }
126
- add_action( 'load-tools_page_' . HMBKP_PLUGIN_SLUG, 'hmbkp_request_cancel_backup' );
127
-
128
- /**
129
- * Dismiss an error and then redirect
130
- * back to the backups page
131
- */
132
- function hmbkp_dismiss_error() {
133
-
134
- if ( empty( $_GET['action'] ) || $_GET['action'] !== 'hmbkp_dismiss_error' )
135
- return;
136
-
137
- hmbkp_cleanup();
138
-
139
- wp_redirect( remove_query_arg( 'action' ), 303 );
140
-
141
- exit;
142
-
143
- }
144
- add_action( 'admin_init', 'hmbkp_dismiss_error' );
145
-
146
- /**
147
- * Display the running status via ajax
148
- */
149
- function hmbkp_ajax_is_backup_in_progress() {
150
-
151
- if ( empty( $_POST['hmbkp_schedule_id'] ) )
152
- exit;
153
-
154
- $schedule = new HMBKP_Scheduled_Backup( urldecode( $_POST['hmbkp_schedule_id'] ) );
155
-
156
- if ( ! $schedule->get_status() )
157
- echo 0;
158
-
159
- else
160
- hmbkp_schedule_actions( $schedule );
161
-
162
- exit;
163
-
164
- }
165
- add_action( 'wp_ajax_hmbkp_is_in_progress', 'hmbkp_ajax_is_backup_in_progress' );
166
-
167
- /**
168
- * Display the calculated size via ajax
169
- */
170
- function hmbkp_ajax_calculate_backup_size() {
171
-
172
- if ( empty( $_POST['hmbkp_schedule_id'] ) )
173
- exit;
174
-
175
- $schedule = new HMBKP_Scheduled_Backup( urldecode( $_POST['hmbkp_schedule_id'] ) );
176
-
177
- $recalculate_filesize = true;
178
-
179
- include_once( HMBKP_PLUGIN_PATH . '/admin/schedule.php' );
180
-
181
- exit;
182
-
183
- }
184
- add_action( 'wp_ajax_hmbkp_calculate', 'hmbkp_ajax_calculate_backup_size' );
185
-
186
- /**
187
- * Test the cron response and if it's not 200 show a warning message
188
- */
189
- function hmbkp_ajax_cron_test() {
190
-
191
- $response = wp_remote_head( site_url( 'wp-cron.php' ) );
192
-
193
- if ( is_wp_error( $response ) )
194
- echo '<div id="hmbkp-warning" class="updated fade"><p><strong>' . __( 'BackUpWordPress has detected a problem.', 'hmbkp' ) . '</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 back ups. See the %3$s for more details.', 'hmbkp' ), '<code>wp-cron.php</code>', '<code>' . $response->get_error_message() . '</code>', '<a href="http://wordpress.org/extend/plugins/backupwordpress/faq/">FAQ</a>' ) . '</p></div>';
195
-
196
- elseif ( wp_remote_retrieve_response_code( $response ) != 200 )
197
- echo '<div id="hmbkp-warning" class="updated fade"><p><strong>' . __( 'BackUpWordPress has detected a problem.', 'hmbkp' ) . '</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 back ups. See the %3$s for more details.', 'hmbkp' ), '<code>wp-cron.php</code>', '<code>' . wp_remote_retrieve_response_code( $response ) . ' ' . get_status_header_desc( wp_remote_retrieve_response_code( $response ) ) . '</code>', '<a href="http://wordpress.org/extend/plugins/backupwordpress/faq/">FAQ</a>' ) . '</p></div>';
198
-
199
- else
200
- echo 1;
201
-
202
- exit;
203
-
204
- }
205
- add_action( 'wp_ajax_hmbkp_cron_test', 'hmbkp_ajax_cron_test' );
206
-
207
- /**
208
- * Load the edit schedule form
209
- */
210
- function hmbkp_edit_schedule_load() {
211
-
212
- if ( empty( $_GET['hmbkp_schedule_id'] ) )
213
- exit;
214
-
215
- $schedule = new HMBKP_Scheduled_Backup( $_GET['hmbkp_schedule_id'] );
216
-
217
- require( HMBKP_PLUGIN_PATH . '/admin/schedule-form.php' );
218
-
219
- exit;
220
-
221
- }
222
- add_action( 'wp_ajax_hmbkp_edit_schedule_load', 'hmbkp_edit_schedule_load' );
223
-
224
- /**
225
- * Load the edit schedule excludes form
226
- */
227
- function hmbkp_edit_schedule_excludes_load() {
228
-
229
- if ( empty( $_GET['hmbkp_schedule_id'] ) )
230
- exit;
231
-
232
- $schedule = new HMBKP_Scheduled_Backup( $_GET['hmbkp_schedule_id'] );
233
-
234
- require( HMBKP_PLUGIN_PATH . '/admin/schedule-form-excludes.php' );
235
-
236
- exit;
237
-
238
- }
239
- add_action( 'wp_ajax_hmbkp_edit_schedule_excludes_load', 'hmbkp_edit_schedule_excludes_load' );
240
-
241
- /**
242
- * Load the add schedule form
243
- */
244
- function hmbkp_add_schedule_load() {
245
-
246
- $schedule = new HMBKP_Scheduled_Backup( date( 'U' ) );
247
- $is_new_schedule = true;
248
-
249
- require( HMBKP_PLUGIN_PATH . '/admin/schedule-form.php' );
250
-
251
- exit;
252
-
253
- }
254
- add_action( 'wp_ajax_hmbkp_add_schedule_load', 'hmbkp_add_schedule_load' );
255
-
256
- /**
257
- * Catch the edit schedule form
258
- *
259
- * Validate and either return errors or update the schedule
260
- */
261
- function hmnkp_edit_schedule_submit() {
262
-
263
- if ( empty( $_GET['hmbkp_schedule_id'] ) )
264
- exit;
265
-
266
- $schedule = new HMBKP_Scheduled_Backup( $_GET['hmbkp_schedule_id'] );
267
-
268
- $errors = array();
269
-
270
- if ( isset( $_GET['hmbkp_schedule_type'] ) ) {
271
-
272
- if ( ! trim( $_GET['hmbkp_schedule_type'] ) )
273
- $errors['hmbkp_schedule_type'] = __( 'Backup type cannot be empty', 'hmbkp' );
274
-
275
- elseif ( ! in_array( $_GET['hmbkp_schedule_type'], array( 'complete', 'file', 'database' ) ) )
276
- $errors['hmbkp_schedule_type'] = __( 'Invalid backup type', 'hmbkp' );
277
-
278
- else
279
- $schedule->set_type( $_GET['hmbkp_schedule_type'] );
280
-
281
- }
282
-
283
- if ( isset( $_GET['hmbkp_schedule_reoccurrence'] ) ) {
284
-
285
- if ( empty( $_GET['hmbkp_schedule_reoccurrence'] ) )
286
- $errors['hmbkp_schedule_reoccurrence'] = __( 'Schedule cannot be empty', 'hmbkp' );
287
-
288
- elseif ( ! in_array( $_GET['hmbkp_schedule_reoccurrence'], array_keys( wp_get_schedules() ) ) && $_GET['hmbkp_schedule_reoccurrence'] !== 'manually' )
289
- $errors['hmbkp_schedule_reoccurrence'] = __( 'Invalid schedule', 'hmbkp' );
290
-
291
- else
292
- $schedule->set_reoccurrence( $_GET['hmbkp_schedule_reoccurrence'] );
293
-
294
- }
295
-
296
- if ( isset( $_GET['hmbkp_schedule_max_backups'] ) ) {
297
-
298
- if ( empty( $_GET['hmbkp_schedule_max_backups'] ) )
299
- $errors['hmbkp_schedule_max_backups'] = __( 'Max backups can\'t be empty', 'hmbkp' );
300
-
301
- elseif ( ! is_numeric( $_GET['hmbkp_schedule_max_backups'] ) )
302
- $errors['hmbkp_schedule_max_backups'] = __( 'Max backups must be a number', 'hmbkp' );
303
-
304
- elseif ( ! ( $_GET['hmbkp_schedule_max_backups'] >= 1 ) )
305
- $errors['hmbkp_schedule_max_backups'] = __( 'Max backups must be greater than 0', 'hmbkp' );
306
-
307
- else
308
- $schedule->set_max_backups( (int) $_GET['hmbkp_schedule_max_backups'] );
309
-
310
- $schedule->delete_old_backups();
311
-
312
- }
313
-
314
- foreach ( HMBKP_Services::get_services( $schedule ) as $service )
315
- $errors = array_merge( $errors, $service->save() );
316
-
317
- $schedule->save();
318
-
319
- if ( $errors )
320
- echo json_encode( $errors );
321
-
322
- exit;
323
-
324
- }
325
- add_action( 'wp_ajax_hmnkp_edit_schedule_submit', 'hmnkp_edit_schedule_submit' );
326
-
327
-
328
- /**
329
- * Add an exclude rule
330
- *
331
- * @access public
332
- * @return void
333
- */
334
- function hmbkp_add_exclude_rule() {
335
-
336
- if ( empty( $_POST['hmbkp_schedule_id'] ) )
337
- exit;
338
-
339
- $schedule = new HMBKP_Scheduled_Backup( $_POST['hmbkp_schedule_id'] );
340
-
341
- $schedule->set_excludes( $_POST['hmbkp_exclude_rule'], true );
342
-
343
- $schedule->save();
344
-
345
- include( HMBKP_PLUGIN_PATH . '/admin/schedule-form-excludes.php' );
346
-
347
- exit;
348
-
349
- }
350
- add_action( 'wp_ajax_hmbkp_add_exclude_rule', 'hmbkp_add_exclude_rule' );
351
-
352
-
353
- /**
354
- * Delete an exclude rule
355
- *
356
- * @access public
357
- * @return void
358
- */
359
- function hmbkp_delete_exclude_rule() {
360
-
361
- if ( empty( $_GET['hmbkp_schedule_id'] ) )
362
- exit;
363
-
364
- $schedule = new HMBKP_Scheduled_Backup( $_GET['hmbkp_schedule_id'] );
365
-
366
- $excludes = $schedule->get_excludes();
367
-
368
- $schedule->set_excludes( array_diff( $excludes, (array) stripslashes( $_GET['hmbkp_exclude_rule'] ) ) );
369
-
370
- $schedule->save();
371
-
372
- include( HMBKP_PLUGIN_PATH . '/admin/schedule-form-excludes.php' );
373
-
374
- exit;
375
-
376
- }
377
- add_action( 'wp_ajax_hmbkp_delete_exclude_rule', 'hmbkp_delete_exclude_rule' );
378
-
379
-
380
- /**
381
- * Ajax action for previewing an exclude rule.
382
- *
383
- * @access public
384
- * @return void
385
- */
386
- function hmbkp_preview_exclude_rule() {
387
-
388
- if ( empty( $_POST['hmbkp_schedule_id'] ) || empty( $_POST['hmbkp_schedule_excludes'] ) )
389
- exit;
390
-
391
- $schedule = new HMBKP_Scheduled_Backup( $_POST['hmbkp_schedule_id'] );
392
-
393
- $excludes = explode( ',', $_POST['hmbkp_schedule_excludes'] );
394
-
395
- hmbkp_file_list( $schedule, $excludes, 'get_excluded_files' );
396
-
397
- $schedule->set_excludes( $excludes );
398
-
399
- if ( $schedule->get_excluded_file_count() ) { ?>
400
-
401
- <p><?php printf( _n( '%s matches 1 file.', '%1$s matches %2$d files.', $schedule->get_excluded_file_count(), 'hmbkp' ), '<code>' . implode( '</code>, <code>', $excludes ) . '</code>', $schedule->get_excluded_file_count() ); ?></p>
402
-
403
- <?php } else { ?>
404
-
405
- <p><?php printf( __( '%s didn\'t match any files.', 'hmbkp' ), '<code>' . implode( '</code>, <code>', $excludes ) . '</code>' ); ?></p>
406
-
407
- <?php } ?>
408
-
409
- <p><button type="button" class="button-primary hmbkp_save_exclude_rule"><?php _e( 'Exclude', 'hmbkp' ); ?></button> <button type="button" class="button-secondary hmbkp_cancel_save_exclude_rule"><?php _e( 'Cancel', 'hmbkp' ); ?></button></p>
410
-
411
- <?php exit;
412
-
413
- }
414
- add_action( 'wp_ajax_hmbkp_file_list', 'hmbkp_preview_exclude_rule', 10, 0 );
415
-
416
- function hmbkp_display_error_and_offer_to_email_it() {
417
-
418
- if ( empty( $_POST['hmbkp_error'] ) )
419
- exit;
420
-
421
- $error = str_replace( HM_Backup::get_home_path(), '', $_POST['hmbkp_error'] ); ?>
422
-
423
- <h3><?php _e( 'Your BackUp Failed', 'hmbkp' ); ?></h3>
424
-
425
- <p><?php _e( "Here's the response from the server:" ); ?></p>
426
-
427
- <pre><?php echo esc_attr( $error ); ?></pre>
428
-
429
- <p class="description">You can email details of this error to <a href="http://hmn.md">Human Made Limited</a> so they can look into the issue.<br /><br /></p>
430
-
431
- <button class="button hmbkp-fancybox-close"><?php _e( 'Close', 'hmbkp' ); ?></button>
432
- <button class="button-primary hmbkp_send_error_via_email right"><?php _e( 'Email to Support', 'hmbkp' ); ?></button>
433
-
434
- <?php exit;
435
- }
436
- add_action( 'wp_ajax_hmbkp_backup_error', 'hmbkp_display_error_and_offer_to_email_it' );
437
-
438
- function hmbkp_send_error_via_email() {
439
-
440
- if ( empty( $_POST['hmbkp_error'] ) )
441
- exit;
442
-
443
- $error = $_POST['hmbkp_error'];
444
-
445
- wp_mail( 'support@humanmade.co.uk', 'BackUpWordPress Fatal error on ' . parse_url( home_url(), PHP_URL_HOST ), $error, 'From: BackUpWordPress <' . get_bloginfo( 'admin_email' ) . '>' . "\r\n" );
446
-
447
- exit;
448
-
449
- }
450
- add_action( 'wp_ajax_hmbkp_email_error', 'hmbkp_send_error_via_email' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/admin/backups.php DELETED
@@ -1,74 +0,0 @@
1
- <?php $schedules = new HMBKP_Schedules; ?>
2
-
3
- <div>
4
-
5
- <ul class="subsubsub">
6
-
7
- <?php foreach ( $schedules->get_schedules() as $schedule ) : ?>
8
-
9
- <li<?php if ( $schedule->get_status() ) { ?> class="hmbkp-running"<?php } ?>><a<?php if ( ! empty ( $_GET['hmbkp_schedule_id'] ) && $schedule->get_id() == $_GET['hmbkp_schedule_id'] ) { ?> class="current"<?php } ?> href="<?php echo esc_url( add_query_arg( 'hmbkp_schedule_id', $schedule->get_id(), HMBKP_ADMIN_URL ) ); ?> "><?php echo esc_attr( $schedule->get_name() ); ?> <span class="count">(<?php echo count( $schedule->get_backups() ); ?>)</span></a></li>
10
-
11
- <?php endforeach; ?>
12
-
13
- <li><a class="fancybox" href="<?php echo esc_url( add_query_arg( array( 'action' => 'hmbkp_add_schedule_load' ), admin_url( 'admin-ajax.php' ) ) ); ?>"> + <?php _e( 'add schedule', 'hmbkp' ); ?></a></li>
14
-
15
- </ul>
16
-
17
- <?php if ( ! empty( $_GET['hmbkp_schedule_id'] ) )
18
- $schedule = new HMBKP_Scheduled_Backup( $_GET['hmbkp_schedule_id'] );
19
-
20
- else
21
- $schedule = reset( $schedules->get_schedules() );
22
-
23
- if ( ! $schedule )
24
- return; ?>
25
-
26
- <div data-hmbkp-schedule-id="<?php echo esc_attr( $schedule->get_id() ); ?>" class="hmbkp_schedule">
27
-
28
- <?php require( HMBKP_PLUGIN_PATH . '/admin/schedule.php' ); ?>
29
-
30
- <table class="widefat">
31
-
32
- <thead>
33
-
34
- <tr>
35
-
36
- <th scope="col"><?php printf( _n( '1 backup completed', '%d backups completed', count( $schedule->get_backups() ), 'hmbkp' ), count( $schedule->get_backups() ) ); ?></th>
37
- <th scope="col"><?php _e( 'Size', 'hmbkp' ); ?></th>
38
- <th scope="col"><?php _e( 'Type', 'hmbkp' ); ?></th>
39
- <th scope="col"><?php _e( 'Actions', 'hmbkp' ); ?></th>
40
-
41
- </tr>
42
-
43
- </thead>
44
-
45
- <tbody>
46
-
47
- <?php if ( $schedule->get_backups() ) :
48
-
49
- foreach ( $schedule->get_backups() as $file ) :
50
-
51
- if ( ! file_exists( $file ) )
52
- continue;
53
-
54
- hmbkp_get_backup_row( $file, $schedule );
55
-
56
- endforeach;
57
-
58
- else : ?>
59
-
60
- <tr>
61
-
62
- <td class="hmbkp-no-backups" colspan="3"><?php _e( 'This is where your backups will appear once you have one.', 'hmbkp' ); ?></td>
63
-
64
- </tr>
65
-
66
- <?php endif; ?>
67
-
68
- </tbody>
69
-
70
- </table>
71
-
72
- </div>
73
-
74
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/admin/constants.php DELETED
@@ -1,33 +0,0 @@
1
- <div id="hmbkp-constants">
2
-
3
- <p><?php printf( __( 'You can %1$s any of the following %2$s in your %3$s to control advanced settings. %4$s. Defined %5$s will be highlighted.', 'hmbkp' ), '<code>define</code>', '<code>' . __( 'Constants', 'hmbkp' ) . '</code>', '<code>wp-config.php</code>', '<a href="http://codex.wordpress.org/Editing_wp-config.php">' . __( 'The Codex can help', 'hmbkp' ) . '</a>', '<code>' . __( 'Constants', 'hmbkp' ) . '</code>' ); ?></p>
4
-
5
- <dl>
6
-
7
- <dt<?php if ( defined( 'HMBKP_PATH' ) ) { ?> class="hmbkp_active"<?php } ?>><code>HMBKP_PATH</code></dt>
8
- <dd><p><?php printf( __( 'The path to folder you would like to store your backup files in, defaults to %s.', 'hmbkp' ), '<code>' . hmbkp_path_default() . '</code>' ); ?></p><p class="example"><?php _e( 'e.g.', 'hmbkp' ); ?> <code>define( 'HMBKP_PATH', '/home/willmot/backups' );</code></p></dd>
9
-
10
- <dt<?php if ( defined( 'HMBKP_MYSQLDUMP_PATH' ) ) { ?> class="hmbkp_active"<?php } ?>><code>HMBKP_MYSQLDUMP_PATH</code></dt>
11
- <dd><p><?php printf( __( 'The path to your %1$s executable. Will be used for the %2$s part of the back up if available.', 'hmbkp' ), '<code>mysqldump</code>', '<code>' . __( 'database', 'hmbkp' ) . '</code>' ); ?></p><p class="example"><?php _e( 'e.g.', 'hmbkp' ); ?> <code>define( 'HMBKP_MYSQLDUMP_PATH', '/opt/local/bin/mysqldump' );</code></p></dd>
12
-
13
- <dt<?php if ( defined( 'HMBKP_ZIP_PATH' ) ) { ?> class="hmbkp_active"<?php } ?>><code>HMBKP_ZIP_PATH</code></dt>
14
- <dd><p><?php printf( __( 'The path to your %1$s executable. Will be used to zip up your %2$s and %3$s if available.', 'hmbkp' ), '<code>zip</code>', '<code>' . __( 'files', 'hmbkp' ) . '</code>', '<code>' . __( 'database', 'hmbkp' ) . '</code>' ); ?><p class="example"><?php _e( 'e.g.', 'hmbkp' ); ?> <code>define( 'HMBKP_ZIP_PATH', '/opt/local/bin/zip' );</code></p></dd>
15
-
16
- <dt<?php if ( defined( 'HMBKP_EMAIL' ) ) { ?> class="hmbkp_active"<?php } ?>><code>HMBKP_EMAIL</code></dt>
17
- <dd><p><?php printf( __( 'Attempt to email a copy of your backups. Value should be email address to send backups to. Defaults to %s.', 'hmbkp' ), '<code>(bool) false</code>' ); ?><p class="example"><?php _e( 'e.g.', 'hmbkp' ); ?> <code>define( 'HMBKP_EMAIL', 'email@example.com' );</code></p></dd>
18
-
19
- <dt<?php if ( defined( 'HMBKP_EXCLUDE' ) ) { ?> class="hmbkp_active"<?php } ?>><code>HMBKP_EXCLUDE</code></dt>
20
- <dd><p><?php _e( 'Comma separated list of files or directories to exclude, the backups directory is automatically excluded.', 'hmbkp' ); ?><p class="example"><?php _e( 'e.g.', 'hmbkp' ); ?> <code>define( 'HMBKP_EXCLUDE', '/wp-content/uploads/, /stats/, .svn/, *.txt' );</code></p></dd>
21
-
22
- <dt<?php if ( defined( 'HMBKP_CAPABILITY' ) ) { ?> class="hmbkp_active"<?php } ?>><code>HMBKP_CAPABILITY</code></dt>
23
- <dd><p><?php printf( __( 'The capability to use when calling %1$s. Defaults to %2$s.', 'hmbkp' ), '<code>add_menu_page</code>', '<code>manage_options</code>' ); ?><p class="example"><?php _e( 'e.g.', 'hmbkp' ); ?> <code>define( 'HMBKP_CAPABILITY', 'edit_posts' );</code></p></dd>
24
-
25
- <dt<?php if ( defined( 'HMBKP_ROOT' ) ) { ?> class="hmbkp_active"<?php } ?>><code>HMBKP_ROOT</code></dt>
26
- <dd><p><?php printf( __( 'The root directory that is backed up. Defaults to %s.', 'hmbkp' ), '<code>' . HM_Backup::get_home_path() . '</code>' ); ?><p class="example"><?php _e( 'e.g.', 'hmbkp' ); ?> <code>define( 'HMBKP_ROOT', ABSPATH . 'wp/' );</code></p></dd>
27
-
28
- <dt<?php if ( defined( 'HMBKP_SCHEDULE_TIME' ) ) { ?> class="hmbkp_active"<?php } ?>><code>HMBKP_SCHEDULE_TIME</code></dt>
29
- <dd><p><?php printf( __( 'The time that your schedules should run. Defaults to %s.', 'hmbkp' ), '<code>23:00</code>' ); ?><p class="example"><?php _e( 'e.g.', 'hmbkp' ); ?> <code>define( 'HMBKP_SCHEDULE_TIME', '07:30' );</code></p></dd>
30
-
31
- </dl>
32
-
33
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/admin/menu.php DELETED
@@ -1,86 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Add the backups menu item
5
- * to the tools menu
6
- *
7
- * @return null
8
- */
9
- function hmbkp_admin_menu() {
10
- add_management_page( __( 'Manage Backups','hmbkp' ), __( 'Backups','hmbkp' ), ( defined( 'HMBKP_CAPABILITY' ) && HMBKP_CAPABILITY ) ? HMBKP_CAPABILITY : 'manage_options', HMBKP_PLUGIN_SLUG, 'hmbkp_manage_backups' );
11
- }
12
- add_action( 'admin_menu', 'hmbkp_admin_menu' );
13
-
14
- /**
15
- * Load the backups admin page
16
- * when the menu option is clicked
17
- *
18
- * @return null
19
- */
20
- function hmbkp_manage_backups() {
21
- require_once( HMBKP_PLUGIN_PATH . '/admin/page.php' );
22
- }
23
-
24
- /**
25
- * Add a link to the backups page to the plugin action links.
26
- *
27
- * @param array $links
28
- * @param string $file
29
- * @return array $links
30
- */
31
- function hmbkp_plugin_action_link( $links, $file ) {
32
-
33
- if ( strpos( $file, HMBKP_PLUGIN_SLUG ) !== false )
34
- array_push( $links, '<a href="tools.php?page=' . esc_attr( HMBKP_PLUGIN_SLUG ) . '">' . __( 'Backups', 'hmbkp' ) . '</a>' );
35
-
36
- return $links;
37
-
38
- }
39
- add_filter( 'plugin_action_links', 'hmbkp_plugin_action_link', 10, 2 );
40
-
41
- /**
42
- * Add Contextual Help to Backups tools page.
43
- *
44
- * Help is pulled from the readme FAQ.
45
- *
46
- * @return null
47
- */
48
- function hmbkp_contextual_help() {
49
-
50
- // Pre WordPress 3.3 compat
51
- if ( ! method_exists( get_current_screen(), 'add_help_tab' ) )
52
- return;
53
-
54
- require_once( ABSPATH . 'wp-admin/includes/plugin-install.php' );
55
-
56
- if ( ! $plugin = get_transient( 'hmbkp_plugin_data' ) ) {
57
-
58
- $plugin = plugins_api( 'plugin_information', array( 'slug' => HMBKP_PLUGIN_SLUG ) );
59
-
60
- // Cache for one day
61
- set_transient( 'hmbkp_plugin_data', $plugin, 86400 );
62
-
63
- }
64
-
65
- $warning = '';
66
-
67
- // Check if help is for the right version.
68
- if ( ! empty( $plugin->version ) && version_compare( HMBKP_VERSION, $plugin->version, '!=' ) )
69
- $warning = sprintf( '<div id="message" class="updated inline"><p><strong>' . __( 'You are not using the latest stable version of BackUpWordPress', 'hmbkp' ) . '</strong> &mdash; ' . __( 'The information below is for version %1$s. View the %2$s file for help specific to version %3$s.', 'hmbkp' ) . '</p></div>', '<code>' . esc_attr( $plugin->version ) . '</code>', '<code>readme.txt</code>', '<code>' . esc_attr( HMBKP_VERSION ) . '</code>' );
70
-
71
- ob_start();
72
- require_once( HMBKP_PLUGIN_PATH . '/admin/constants.php' );
73
- $constants = ob_get_clean();
74
-
75
- get_current_screen()->add_help_tab( array( 'title' => __( 'FAQ', 'hmbkp' ), 'id' => 'hmbkp_faq', 'content' => $warning . $plugin->sections['faq'] ) );
76
- get_current_screen()->add_help_tab( array( 'title' => __( 'Constants', 'hmbkp' ), 'id' => 'hmbkp_constants', 'content' => $constants ) );
77
-
78
- get_current_screen()->set_help_sidebar(
79
- '<p><strong>' . __( 'For more information:', 'hmbkp' ) . '</strong></p>' .
80
- '<p><a href="https://github.com/humanmade/backupwordpress" target="_blank">GitHub</a></p>' .
81
- '<p><a href="http://wordpress.org/tags/backupwordpress?forum_id=10" target="_blank">' . __( 'Support Forums', 'hmbkp' ) .'</a></p>' .
82
- '<p><a href="http://translate.hmn.md/" target="_blank">' . __( 'Help with translation', 'hmbkp' ) .'</a></p>'
83
- );
84
-
85
- }
86
- add_filter( 'load-tools_page_' . HMBKP_PLUGIN_SLUG, 'hmbkp_contextual_help' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/admin/page.php DELETED
@@ -1,21 +0,0 @@
1
- <div class="wrap">
2
-
3
- <?php screen_icon( HMBKP_PLUGIN_SLUG ); ?>
4
-
5
- <h2><?php _e( 'Manage Backups', 'hmbkp' ); ?></h2>
6
-
7
- <?php if ( hmbkp_possible() ) : ?>
8
-
9
- <?php include_once( HMBKP_PLUGIN_PATH . '/admin/backups.php' ); ?>
10
-
11
- <?php else : ?>
12
-
13
- <p><strong><?php _e( 'You need to fix the issues detailed above before BackUpWordPress can start.', 'hmbkp' ); ?></strong></p>
14
-
15
- <?php endif; ?>
16
-
17
- <p class="howto"><?php printf( __( 'If your finding BackUpWordPress useful, please %s.', 'hmbkp' ), '<a href="http://wordpress.org/support/view/plugin-reviews/backupwordpress">' . __( 'rate it on the plugin directory', 'hmbkp' ) . '</a>' ); ?></p>
18
-
19
- <p class="howto"><?php printf( __( 'If you need help getting things working then check the FAQ by clicking on help in the top right hand corner of this page.', 'hmbkp' ), '<a href="mailto:support@hmn.md">support@hmn.md</a>' ); ?></p>
20
-
21
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/admin/schedule-form-excludes.php DELETED
@@ -1,125 +0,0 @@
1
- <form method="post" class="hmbkp-form">
2
-
3
- <input type="hidden" name="hmbkp_schedule_id" value="<?php echo esc_attr( $schedule->get_id() ); ?>" />
4
-
5
- <fieldset class="hmbkp-edit-schedule-excludes-form">
6
-
7
- <legend><?php _e( 'Manage Excludes', 'hmbkp' ); ?></legend>
8
-
9
- <div class="hmbkp_add_exclude_rule">
10
-
11
- <label for="hmbkp-new-exclude-rule">
12
-
13
- <?php _e( 'New Exclude Rule[s]', 'hmbkp' ); ?>
14
-
15
- <input id="hmbkp-new-exclude-rule" type="text" class="code" placeholder="" />
16
-
17
- <span class="howto">Enter new exclude rules as a comma separated list, e.g. <code>.git/, *.mp3, wp-content/uploads/</code></span>
18
-
19
- <button type="button" class="button-secondary hmbkp_preview_exclude_rule"><?php _e( 'Preview', 'hmbkp' ); ?></button>
20
-
21
- </label>
22
-
23
- </div>
24
-
25
- <table class="widefat fixed">
26
-
27
- <thead>
28
- <tr>
29
- <th><?php _e( 'Exclude Rules', 'hmbkp' ); ?></th>
30
- </tr>
31
- </thead>
32
-
33
- <tbody>
34
-
35
- <?php foreach( $schedule->get_excludes() as $key => $exclude ) : ?>
36
-
37
- <tr>
38
- <td data-hmbkp-exclude-rule="<?php echo esc_attr( $exclude ); ?>">
39
-
40
- <span class="code"><?php echo esc_attr( str_ireplace( untrailingslashit( $schedule->get_root() ), '', $exclude ) ); ?></span>
41
-
42
- <?php if ( $schedule->get_path() === untrailingslashit( $exclude ) ) : ?>
43
-
44
- <span class="reason"><?php _e( 'default', 'hmbkp' ); ?></span>
45
-
46
- <?php elseif ( defined( 'HMBKP_EXCLUDE' ) && strpos( HMBKP_EXCLUDE, $exclude ) !== false ) : ?>
47
-
48
- <span class="reason"><?php _e( 'defined', 'hmbkp' ); ?></span>
49
-
50
- <?php else : ?>
51
-
52
- <a href="#" class="delete-action"><?php _e( 'Remove', 'hmbkp' ); ?></a>
53
-
54
- <?php endif; ?>
55
-
56
- </td>
57
- </tr>
58
-
59
- <?php endforeach; ?>
60
-
61
- </tbody>
62
-
63
- </table>
64
-
65
- <div class="hmbkp-tabs">
66
-
67
- <ul class="subsubsub">
68
-
69
- <?php if ( $schedule->get_excluded_file_count() ) : ?>
70
-
71
- <li><a href="#hmbkp_excluded_files"><?php _e( 'Excluded', 'hmbkp' ); ?></a>(<?php echo $schedule->get_excluded_file_count(); ?>)</li>
72
-
73
- <?php endif; ?>
74
-
75
- <li><a href="#hmbkp_included_files"><?php _e( 'Included', 'hmbkp' ); ?></a>(<?php echo $schedule->get_included_file_count(); ?>)</li>
76
-
77
- <?php if ( $schedule->get_unreadable_file_count() ) : ?>
78
-
79
- <li><a href="#hmbkp_unreadable_files"><?php _e( 'Unreadable', 'hmbkp' ); ?></a>(<?php echo $schedule->get_unreadable_file_count(); ?>)</li>
80
-
81
- <?php endif; ?>
82
-
83
- </ul>
84
-
85
- <?php if ( $schedule->get_excluded_file_count() ) : ?>
86
-
87
- <div id="hmbkp_excluded_files">
88
-
89
- <?php hmbkp_file_list( $schedule, null, 'get_excluded_files' ); ?>
90
-
91
- </div>
92
-
93
- <?php endif; ?>
94
-
95
- <div id="hmbkp_included_files">
96
-
97
- <?php hmbkp_file_list( $schedule, null, 'get_included_files' ); ?>
98
-
99
- </div>
100
-
101
- <?php if ( $schedule->get_unreadable_file_count() ) : ?>
102
-
103
- <div id="hmbkp_unreadable_files">
104
-
105
- <?php hmbkp_file_list( $schedule, null, 'get_unreadable_files' ); ?>
106
-
107
- <p class="description"><?php _e( 'Unreadable files can\'t be backed up', 'hmbkp' ); ?></p>
108
-
109
- </div>
110
-
111
- <?php endif; ?>
112
-
113
- <p><?php printf( __( 'Your site is %s. Backups will be compressed and so will be smaller.', 'hmbkp' ), '<code>' . $schedule->get_filesize( false ) . '</code>' ); ?></p>
114
-
115
- </div>
116
-
117
- <p class="submit">
118
-
119
- <button type="submit" class="button-primary"><?php _e( 'Close', 'hmbkp' ); ?></button>
120
-
121
- </p>
122
-
123
- </fieldset>
124
-
125
- </form>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/admin/schedule-form.php DELETED
@@ -1,60 +0,0 @@
1
- <form method="post" class="hmbkp-form" novalidate data-schedule-action="<?php if ( isset( $is_new_schedule ) ) { ?>add<?php } else { ?>edit<?php } ?>">
2
-
3
- <input type="hidden" name="hmbkp_schedule_id" value="<?php echo esc_attr( $schedule->get_id() ); ?>" />
4
-
5
- <fieldset class="hmbkp-edit-schedule-form">
6
-
7
- <legend><?php _e( 'Schedule Settings', 'hmbkp' ); ?></legend>
8
-
9
- <label>
10
-
11
- <?php _e( 'Backup', 'hmbkp' ); ?>
12
-
13
- <select name="hmbkp_schedule_type" id="hmbkp_schedule_type">
14
- <option<?php selected( $schedule->get_type(), 'complete'); ?> value="complete"><?php _e( 'Both Database &amp; files', 'hmbkp' ); ?></option>
15
- <option<?php selected( $schedule->get_type(), 'file'); ?> value="file"><?php _e( 'Files only', 'hmbkp' ); ?></option>
16
- <option<?php selected( $schedule->get_type(), 'database'); ?> value="database"><?php _e( 'Database only', 'hmbkp' ); ?></option>
17
- </select>
18
-
19
- </label>
20
-
21
- <label>
22
-
23
- <?php _e( 'Schedule', 'hmbkp' ); ?>
24
-
25
- <select name="hmbkp_schedule_reoccurrence" id="hmbkp_schedule_reoccurrence">
26
-
27
- <option value="manually"><?php _e( 'Manual Only', 'hmbkp' ); ?></option>
28
-
29
- <?php foreach( wp_get_schedules() as $cron_schedule => $cron_details ) : ?>
30
-
31
- <option<?php selected( $schedule->get_reoccurrence(), $cron_schedule ); ?> value="<?php echo esc_attr( $cron_schedule ); ?>"><?php echo esc_attr( $cron_details['display'] ); ?></option>
32
-
33
- <?php endforeach; ?>
34
-
35
- </select>
36
-
37
- </label>
38
-
39
- <label>
40
-
41
- <?php _e( 'Number of backups to store on this server', 'hmbkp' ); ?>
42
-
43
- <input type="number" name="hmbkp_schedule_max_backups" min="1" step="1" value="<?php echo esc_attr( $schedule->get_max_backups() ); ?>" />
44
-
45
- <p class="description"><?php _e( 'The number of previous backups to store on the server. past this limit older backups will be deleted automatically.', 'hmbkp' ); ?></p>
46
-
47
- </label>
48
-
49
- <?php foreach ( HMBKP_Services::get_services( $schedule ) as $service )
50
- $service->field(); ?>
51
-
52
- <p class="submit">
53
-
54
- <button type="submit" class="button-primary"><?php _e( 'Update', 'hmbkp' ); ?></button>
55
-
56
- </p>
57
-
58
- </fieldset>
59
-
60
- </form>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/admin/schedule.php DELETED
@@ -1,100 +0,0 @@
1
- <?php
2
-
3
- // Calculated filesize
4
- $filesize = $schedule->is_filesize_cached() || isset( $recalculate_filesize ) ? '<code title="' . __( 'Backups will be compressed and should be smaller than this.', 'hmbkp' ) . '">' . esc_attr( $schedule->get_filesize() ) . '</code>' : '<code class="calculating" title="' . __( 'this shouldn\'t take long&hellip;', 'hmbkp' ) . '">' . __( 'calculating the size of your site&hellip;', 'hmbkp' ) . '</code>';
5
-
6
- // Backup Type
7
- $type = strtolower( hmbkp_human_get_type( $schedule->get_type() ) );
8
-
9
- // Backup Time
10
- $day = date_i18n( 'l', $schedule->get_next_occurrence( false ) );
11
-
12
- $next_backup = 'title="' . sprintf( __( 'The next backup will be on %1$s at %2$s', 'hmbkp' ), date_i18n( get_option( 'date_format' ), $schedule->get_next_occurrence( false ) ), date_i18n( get_option( 'time_format' ), $schedule->get_next_occurrence( false ) ) ) . '"';
13
-
14
- // Backup Re-occurrence
15
- switch ( $schedule->get_reoccurrence() ) :
16
-
17
- case 'hourly' :
18
-
19
- $reoccurrence = date_i18n( 'i', $schedule->get_next_occurrence( false ) ) === '00' ? '<span ' . $next_backup . '>' . __( 'hourly on the hour', 'hmbkp' ) . '</span>' : sprintf( __( 'hourly at %s minutes past the hour', 'hmbkp' ), '<span ' . $next_backup . '>' . str_replace( '0', '', date_i18n( 'i', $schedule->get_next_occurrence( false ) ) ) ) . '</span>';
20
-
21
- break;
22
-
23
- case 'daily' :
24
-
25
- $reoccurrence = sprintf( __( 'daily at %s', 'hmbkp' ), '<span ' . $next_backup . '>' . date_i18n( get_option( 'time_format' ), $schedule->get_next_occurrence( false ) ) . '</span>' );
26
-
27
- break;
28
-
29
-
30
- case 'twicedaily' :
31
-
32
- $times[] = date_i18n( get_option( 'time_format' ), $schedule->get_next_occurrence( false ) );
33
- $times[] = date_i18n( get_option( 'time_format' ), strtotime( '+ 12 hours', $schedule->get_next_occurrence( false ) ) );
34
-
35
- sort( $times );
36
-
37
- $reoccurrence = sprintf( __( 'every 12 hours at %1$s &amp; %2$s', 'hmbkp' ), '<span ' . $next_backup . '>' . reset( $times ) . '</span>', '<span>' . end( $times ) ) . '</span>';
38
-
39
- break;
40
-
41
- case 'weekly' :
42
-
43
- $reoccurrence = sprintf( __( 'weekly on %1$s at %2$s', 'hmbkp' ), '<span ' . $next_backup . '>' . $day . '</span>', '<span>' . date_i18n( get_option( 'time_format' ), $schedule->get_next_occurrence( false ) ) . '</span>' );
44
-
45
- break;
46
-
47
- case 'fortnightly' :
48
-
49
- $reoccurrence = sprintf( __( 'fortnightly on %1$s at %2$s', 'hmbkp' ), '<span ' . $next_backup . '>' . $day . '</span>', '<span>' . date_i18n( get_option( 'time_format' ), $schedule->get_next_occurrence( false ) ) . '</span>' );
50
-
51
- break;
52
-
53
-
54
- case 'monthly' :
55
-
56
- $reoccurrence = sprintf( __( 'on the %1$s of each month at %2$s', 'hmbkp' ), '<span ' . $next_backup . '>' . date_i18n( 'jS', $schedule->get_next_occurrence( false ) ) . '</span>', '<span>' . date_i18n( get_option( 'time_format' ), $schedule->get_next_occurrence( false ) ) . '</span>' );
57
-
58
- break;
59
-
60
- case 'manually' :
61
-
62
- $reoccurrence = __( 'manually', 'hmbkp' );
63
-
64
- break;
65
-
66
- endswitch;
67
-
68
- $server = '<span title="' . esc_attr( hmbkp_path() ) . '">' . __( 'this server', 'hmbkp' ) . '</span>';
69
-
70
- // Backup to keep
71
- switch ( $schedule->get_max_backups() ) :
72
-
73
- case 1 :
74
-
75
- $backup_to_keep = sprintf( __( 'store the only the last backup on %s', 'hmbkp' ), $server );
76
-
77
- break;
78
-
79
- case 0 :
80
-
81
- $backup_to_keep = sprintf( __( 'don\'t store any backups on %s', 'hmbkp' ), $server );
82
-
83
- break;
84
-
85
- default :
86
-
87
- $backup_to_keep = sprintf( __( 'store only the last %1$s backups on %2$s', 'hmbkp' ), esc_attr( $schedule->get_max_backups() ), $server );
88
-
89
- endswitch;
90
-
91
- foreach ( HMBKP_Services::get_services( $schedule ) as $file => $service )
92
- $services[] = $service->display(); ?>
93
-
94
- <div class="hmbkp-schedule-sentence<?php if ( $schedule->get_status() ) { ?> hmbkp-running<?php } ?>">
95
-
96
- <?php printf( __( 'Backup my %1$s %2$s %3$s, %4$s. %5$s', 'hmbkp' ), $filesize, '<span>' . $type . '</span>', $reoccurrence, $backup_to_keep, implode( '. ', array_filter( $services ) ) ); ?>
97
-
98
- <?php hmbkp_schedule_actions( $schedule ); ?>
99
-
100
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/assets/fancyBox/CHANGELOG.md DELETED
@@ -1,55 +0,0 @@
1
- fancyBox - Changelog
2
- =========
3
-
4
- ### Version 2.0.5 - February 21, 2012
5
-
6
- * Fixed #155 - easing for prev/next animations
7
- * Fixed #153 - overriding "keys" options
8
- * Fixed #147 - IE7 problem with #hash links
9
- * Fixed #130 - changing dynamically data-fancybox-group
10
- * Fixed #126 - obey minWidth/minHeight
11
- * Fixed #118 - placement of loading icon and navigation arrows
12
- * Fixed #101 - "index" option not working
13
- * Fixed #94 - "orig" option not working
14
- * Fixed #80 - does not work on IE6
15
- * Fixed #72 - can't set overlay opacity to 0
16
- * Fixed #63 - properly set gallery index
17
- * New option "autoCenter" - toggles centering on window resize or scroll, disabled for mobile devices by default
18
- * New option "autoResize" - toggles responsivity, disabled for mobile devices by default
19
- * New option "preload" - number of images to preload
20
- * New feature to target mobile/desktop browsers using CSS, see #108
21
- * Changed ajax option defaults to "{ dataType: 'html', headers: { 'X-fancyBox': true } }", see #150 and #128
22
- * Updated loading icon for IE7, IE8
23
- * Calculates height of the iframe if 'autoSize' is set to 'true' and the iframe is on the same domain as the main page
24
-
25
- ### Version 2.0.4 - December 12, 2011
26
-
27
- * Fixed #47 - fix overriding properties
28
- * New option "position" to thumbnail and button helpers
29
-
30
-
31
- ### Version 2.0.3 - November 29, 2011
32
-
33
- * Fixed #29 - broken elastic transitions
34
-
35
-
36
- ### Version 2.0.2 - November 28, 2011
37
-
38
- * Fixed slidshow
39
- * Fixed scrollbar issue when displayed a very tall image
40
- * New option "nextClick" - navigate to next gallery item when user clicks the content
41
- * New option "modal" - to disable navigation and closing
42
- * Add 'metadata' plugin support
43
- * Add ability to create groups using 'data-fancybox-group' attribute
44
- * Updated manual usage to match earlier releases
45
-
46
-
47
- ### Version 2.0.1 - November 23, 2011
48
-
49
- * Fixed keyboard events inside form elements
50
- * Fixed manual usage
51
-
52
-
53
- ### Version 2.0.0 - November 21, 2011
54
-
55
- First release - completely rewritten, many new features and updated graphics.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/assets/fancyBox/README.md DELETED
@@ -1,199 +0,0 @@
1
- fancyBox
2
- ========
3
-
4
- fancyBox is a tool that offers a nice and elegant way to add zooming functionality for images, html content and multi-media on your webpages.
5
-
6
- More information and examples: http://www.fancyapps.com/fancybox/
7
-
8
- License: http://www.fancyapps.com/fancybox/#license
9
-
10
- Copyright (c) 2012 Janis Skarnelis - janis@fancyapps.com
11
-
12
-
13
- How to use
14
- ----------
15
-
16
- To get started, download the plugin, unzip it and copy files to your website/application directory.
17
- Load files in the <head> section of your HTML document. Make sure you also add the jQuery library.
18
-
19
- <head>
20
- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
21
- <link rel="stylesheet" href="/fancybox/jquery.fancybox.css" type="text/css" media="screen" />
22
- <script type="text/javascript" src="/fancybox/jquery.fancybox.pack.js"></script>
23
- </head>
24
-
25
- Create your links with a `title` if you want a title to be shown, and add a class:
26
-
27
- <a href="large_image.jpg" class="fancybox" title="Sample title"><img src="small_image.jpg" /></a>
28
-
29
- If you have a set of related items that you would like to group,
30
- additionally include a group name in the `rel` (or `data-fancybox-group`) attribute:
31
-
32
- <a href="large_1.jpg" class="fancybox" rel="gallery" title="Sample title 1"><img src="small_1.jpg" /></a>
33
- <a href="large_2.jpg" class="fancybox" rel="gallery" title="Sample title 1"><img src="small_2.jpg" /></a>
34
-
35
- Initialise the script like this:
36
-
37
- <script>
38
- $(document).ready(function() {
39
- $('.fancybox').fancybox();
40
- });
41
- </script>
42
-
43
- May also be passed an optional options object which will extend the default values. Example:
44
-
45
- <script>
46
- $(document).ready(function() {
47
- $('.fancybox').fancybox({
48
- padding : 5,
49
- loop : false
50
- });
51
- });
52
- </script>
53
-
54
- Script uses the `href` attribute of the matched elements to obtain the location of the content and to figure out content type you want to display.
55
- You can specify type directly by adding classname (fancybox.image, fancybox.iframe, etc).
56
-
57
- //Ajax:
58
- <a href="/example.html" class="fancybox fancybox.ajax">Example</a>
59
-
60
- //Iframe:
61
- <a href="example.html" class="fancybox fancybox.iframe">Example</a>
62
-
63
- //Inline:
64
- <a href="#example" class="fancybox">Example</a>
65
-
66
- //SWF:
67
- <a href="example.swf" class="fancybox">Example</a>
68
-
69
- //Image:
70
- <a href="example.jpg" class="fancybox">Example</a>
71
-
72
- Note, ajax requests are subject to the [same origin policy](http://en.wikipedia.org/wiki/Same_origin_policy).
73
- If fancyBox will not be able to get content type, error message will be displayed (this is different from previsous versions where 'ajax' was used as default type).
74
-
75
- Advanced
76
- --------
77
-
78
- ### Helpers
79
-
80
- Helpers provide a simple mechanism to extend the capabilities of fancyBox. There are two built-in helpers - 'overlay' and 'title'.
81
- You can disable them, set custom options or enable other helpers. Examples:
82
-
83
- //Disable title helper
84
- $(".fancybox").fancybox({
85
- helpers: {
86
- title: null
87
- }
88
- });
89
-
90
- //Disable overlay helper
91
- $(".fancybox").fancybox({
92
- helpers: {
93
- overlay : null
94
- }
95
- });
96
-
97
- //Change title position and overlay color
98
- $(".fancybox").fancybox({
99
- helpers: {
100
- title : {
101
- type : 'inside'
102
- },
103
- overlay : {
104
- css : {
105
- 'background-color' : '#fff'
106
- }
107
- }
108
- }
109
- });
110
-
111
- //Enable thumbnail helper and set custom options
112
- $(".fancybox").fancybox({
113
- helpers: {
114
- thumbs : {
115
- width: 50,
116
- height: 50
117
- }
118
- }
119
- });
120
-
121
-
122
- ### API
123
-
124
- Also available are event driven callback methods. The `this` keyword refers to the current or upcoming object (depends on callback method). Here is how you can change title:
125
-
126
- $(".fancybox").fancybox({
127
- beforeLoad : function() {
128
- this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : '');
129
-
130
- /*
131
- "this.element" refers to current element, so you can, for example, use the "alt" attribute of the image to store the title:
132
- this.title = $(this.element).find('img').attr('alt');
133
- */
134
- }
135
- });
136
-
137
- It`s possible to open fancyBox programmatically in various ways:
138
-
139
- //HTML content:
140
- $.fancybox( '<div><h1>Lorem Lipsum</h1><p>Lorem lipsum</p></div>', {
141
- title : 'Custom Title'
142
- });
143
-
144
- //DOM element:
145
- $.fancybox( $("#inline"), {
146
- title : 'Custom Title'
147
- });
148
-
149
- //Custom object:
150
- $.fancybox({
151
- href: 'example.jpg',
152
- title : 'Custom Title'
153
- });
154
-
155
- //Array of objects:
156
- $.fancybox([
157
- {
158
- href: 'example1.jpg',
159
- title : 'Custom Title 1'
160
- },
161
- {
162
- href: 'example2.jpg',
163
- title : 'Custom Title 2'
164
- }
165
- ], {
166
- padding: 0
167
- });
168
-
169
- There are several methods that allow you to interact with and manipulate fancyBox, example:
170
-
171
- //Close fancybox:
172
- $.fancybox.close();
173
-
174
- There is a simply way to access wrapping elements using JS:
175
-
176
- $.fancybox.wrap
177
- $.fancybox.outer
178
- $.fancybox.inner
179
-
180
- You can override CSS to customize the look. For example, make navigation arrows always visible
181
- and move them outside of area (use this snippet after including fancybox.css):
182
-
183
- .fancybox-nav span {
184
- visibility: visible;
185
- }
186
-
187
- .fancybox-prev {
188
- left: -50px;
189
- }
190
-
191
- .fancybox-next {
192
- right: 50px;
193
- }
194
-
195
-
196
- Bug tracker
197
- -----------
198
-
199
- Have a bug? Please create an issue on GitHub at https://github.com/fancyapps/fancyBox/issues
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/assets/fancyBox/demo/1_b.jpg DELETED
Binary file
backupwordpress/assets/fancyBox/demo/1_s.jpg DELETED
Binary file
backupwordpress/assets/fancyBox/demo/2_b.jpg DELETED
Binary file
backupwordpress/assets/fancyBox/demo/2_s.jpg DELETED
Binary file
backupwordpress/assets/fancyBox/demo/3_b.jpg DELETED
Binary file
backupwordpress/assets/fancyBox/demo/3_s.jpg DELETED
Binary file
backupwordpress/assets/fancyBox/demo/4_b.jpg DELETED
Binary file
backupwordpress/assets/fancyBox/demo/4_s.jpg DELETED
Binary file
backupwordpress/assets/fancyBox/demo/5_b.jpg DELETED
Binary file
backupwordpress/assets/fancyBox/demo/5_s.jpg DELETED
Binary file
backupwordpress/assets/fancyBox/demo/ajax.txt DELETED
@@ -1,15 +0,0 @@
1
- <div style="max-width:700px;">
2
- <h2>Lorem ipsum dolor sit amet3</h2>
3
- <p>
4
- <a href="javascript:jQuery.fancybox.close();">Close me</a>
5
- </p>
6
- <p>
7
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas fermentum ante et sapien dignissim in viverra magna feugiat. Donec tempus ipsum nec neque dignissim quis eleifend eros gravida. Praesent nisi massa, sodales quis tincidunt ac, semper quis risus. In suscipit nisl sed leo aliquet consequat. Integer vitae augue in risus porttitor pellentesque eu eget odio. Fusce ut sagittis quam. Morbi aliquam interdum blandit. Integer pharetra tempor velit, aliquam dictum justo tempus sed. Morbi congue fringilla justo a feugiat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent quis metus et nisl consectetur pharetra. Nam bibendum turpis eu metus luctus eu volutpat sem molestie. Nam sollicitudin porttitor lorem, ac ultricies est venenatis eu. Ut dignissim elit et orci feugiat ac placerat purus euismod. Ut mi lorem, cursus et sagittis elementum, luctus ac massa.
8
- </p>
9
- <p>
10
- Phasellus et ligula vel diam ullamcorper volutpat. Integer rhoncus rhoncus aliquam. Aliquam erat volutpat. Aenean luctus vestibulum placerat. Quisque quam neque, lacinia aliquet eleifend ac, aliquet blandit felis. Curabitur porta ultricies dui, sit amet mattis quam euismod a. Ut eleifend scelerisque neque, sit amet accumsan odio consequat ut. Proin facilisis auctor elit sed accumsan. Cras dapibus nisl in nisi rhoncus laoreet. Nullam pellentesque tortor libero, eget facilisis ipsum. Donec ultricies tellus tellus, in tincidunt purus. Nullam in est aliquam velit scelerisque blandit. In tincidunt, magna a dapibus imperdiet, quam urna elementum leo, vitae rhoncus nisl velit cursus velit. In dignissim sem ac mauris rhoncus ornare.
11
- </p>
12
- <p>
13
- Duis imperdiet velit vel quam malesuada suscipit imperdiet tellus hendrerit. Mauris vestibulum odio mauris, ut placerat leo. Mauris quis neque at tellus feugiat congue id non enim. Nam vehicula posuere nulla eget vehicula. Donec pretium purus nec ligula porta eu laoreet sapien venenatis. Nulla facilisi. Phasellus eget mi enim. Phasellus molestie tincidunt ultrices. Aenean id sem a tellus lobortis tincidunt. Nam laoreet nulla vel velit tincidunt ac rutrum libero malesuada. Nulla consequat dolor quis nisl tempor fermentum. Integer sodales pretium varius. Aenean a leo vitae odio dictum dignissim malesuada nec dolor. Phasellus adipiscing viverra est, ac sagittis libero sagittis quis. Sed interdum dapibus nunc et fringilla. Nunc vel velit et urna laoreet bibendum.
14
- </p>
15
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/assets/fancyBox/demo/iframe.html DELETED
@@ -1,22 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>fancyBox - iframe demo</title>
5
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6
- </head>
7
- <body>
8
- <h1>fancyBox - iframe demo</h1>
9
-
10
- <p>
11
- <a href="javascript:parent.jQuery.fancybox.close();">Close iframe parent</a>
12
- </p>
13
-
14
- <p>
15
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam scelerisque justo ac eros consectetur bibendum. In hac habitasse platea dictumst. Nulla aliquam turpis et tellus elementum luctus. Duis sit amet rhoncus velit. Duis nisl ligula, mattis interdum blandit laoreet, mattis id ante. Cras pulvinar lacus vitae nisi egestas non euismod neque bibendum. Vestibulum faucibus libero id ante molestie ultricies. Vestibulum quis nibh felis. Vestibulum libero nisl, vehicula vel ullamcorper sit amet, tristique sit amet augue. Etiam urna neque, porttitor sed sodales lacinia, posuere a nisl. Vestibulum blandit neque in sapien volutpat ac condimentum sapien auctor. Ut imperdiet venenatis ultricies. Phasellus accumsan, sem eu placerat commodo, felis purus commodo ipsum, sit amet vulputate orci est viverra est.
16
- </p>
17
-
18
- <p>
19
- Aenean velit est, condimentum ut iaculis ut, accumsan at mi. Maecenas velit mi, venenatis ut condimentum at, ultrices vel tortor. Curabitur pharetra ornare dapibus. Ut volutpat cursus semper. In hac habitasse platea dictumst. Donec eu iaculis ipsum. Morbi eu dolor velit, a semper nunc.
20
- </p>
21
- </body>
22
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/assets/fancyBox/demo/index.html DELETED
@@ -1,302 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>fancyBox - Fancy jQuery Lightbox Alternative | Demonstration</title>
5
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6
-
7
- <!-- Add jQuery library -->
8
- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
9
-
10
- <!-- Add mousewheel plugin (this is optional) -->
11
- <script type="text/javascript" src="../lib/jquery.mousewheel-3.0.6.pack.js"></script>
12
-
13
- <!-- Add fancyBox main JS and CSS files -->
14
- <script type="text/javascript" src="../source/jquery.fancybox.js"></script>
15
- <link rel="stylesheet" type="text/css" href="../source/jquery.fancybox.css" media="screen" />
16
-
17
- <!-- Add Button helper (this is optional) -->
18
- <link rel="stylesheet" type="text/css" href="../source/helpers/jquery.fancybox-buttons.css?v=1.0.2" />
19
- <script type="text/javascript" src="../source/helpers/jquery.fancybox-buttons.js?v=1.0.2"></script>
20
-
21
- <!-- Add Thumbnail helper (this is optional) -->
22
- <link rel="stylesheet" type="text/css" href="../source/helpers/jquery.fancybox-thumbs.css?v=1.0.2" />
23
- <script type="text/javascript" src="../source/helpers/jquery.fancybox-thumbs.js?v=1.0.2"></script>
24
-
25
- <!-- Add Media helper (this is optional) -->
26
- <script type="text/javascript" src="../source/helpers/jquery.fancybox-media.js?v=1.0.0"></script>
27
-
28
- <script type="text/javascript">
29
- $(document).ready(function() {
30
- /*
31
- * Simple image gallery. Uses default settings
32
- */
33
-
34
- $('.fancybox').fancybox();
35
-
36
- /*
37
- * Different effects
38
- */
39
-
40
- // Change title type, overlay opening speed and opacity
41
- $(".fancybox-effects-a").fancybox({
42
- helpers: {
43
- title : {
44
- type : 'outside'
45
- },
46
- overlay : {
47
- speedIn : 500,
48
- opacity : 0.95
49
- }
50
- }
51
- });
52
-
53
- // Disable opening and closing animations, change title type
54
- $(".fancybox-effects-b").fancybox({
55
- openEffect : 'none',
56
- closeEffect : 'none',
57
-
58
- helpers : {
59
- title : {
60
- type : 'over'
61
- }
62
- }
63
- });
64
-
65
- // Set custom style, close if clicked, change title type and overlay color
66
- $(".fancybox-effects-c").fancybox({
67
- wrapCSS : 'fancybox-custom',
68
- closeClick : true,
69
-
70
- helpers : {
71
- title : {
72
- type : 'inside'
73
- },
74
- overlay : {
75
- css : {
76
- 'background-color' : '#eee'
77
- }
78
- }
79
- }
80
- });
81
-
82
- // Remove padding, set opening and closing animations, close if clicked and disable overlay
83
- $(".fancybox-effects-d").fancybox({
84
- padding: 0,
85
-
86
- openEffect : 'elastic',
87
- openSpeed : 150,
88
-
89
- closeEffect : 'elastic',
90
- closeSpeed : 150,
91
-
92
- closeClick : true,
93
-
94
- helpers : {
95
- overlay : null
96
- }
97
- });
98
-
99
- /*
100
- * Button helper. Disable animations, hide close button, change title type and content
101
- */
102
-
103
- $('.fancybox-buttons').fancybox({
104
- openEffect : 'none',
105
- closeEffect : 'none',
106
-
107
- prevEffect : 'none',
108
- nextEffect : 'none',
109
-
110
- closeBtn : false,
111
-
112
- helpers : {
113
- title : {
114
- type : 'inside'
115
- },
116
- buttons : {}
117
- },
118
-
119
- afterLoad : function() {
120
- this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : '');
121
- }
122
- });
123
-
124
-
125
- /*
126
- * Thumbnail helper. Disable animations, hide close button, arrows and slide to next gallery item if clicked
127
- */
128
-
129
- $('.fancybox-thumbs').fancybox({
130
- prevEffect : 'none',
131
- nextEffect : 'none',
132
-
133
- closeBtn : false,
134
- arrows : false,
135
- nextClick : true,
136
-
137
- helpers : {
138
- thumbs : {
139
- width : 50,
140
- height : 50
141
- }
142
- }
143
- });
144
-
145
- /*
146
- * Media helper. Group items, disable animations, hide arrows, enable media and button helpers.
147
- */
148
- $('.fancybox-media')
149
- .attr('rel', 'media-gallery')
150
- .fancybox({
151
- openEffect : 'none',
152
- closeEffect : 'none',
153
- prevEffect : 'none',
154
- nextEffect : 'none',
155
-
156
- arrows : false,
157
- helpers : {
158
- media : {},
159
- buttons : {}
160
- }
161
- });
162
-
163
- /*
164
- * Open manually
165
- */
166
-
167
- $("#fancybox-manual-a").click(function() {
168
- $.fancybox.open('1_b.jpg');
169
- });
170
-
171
- $("#fancybox-manual-b").click(function() {
172
- $.fancybox.open({
173
- href : 'iframe.html',
174
- type : 'iframe',
175
- padding : 5
176
- });
177
- });
178
-
179
- $("#fancybox-manual-c").click(function() {
180
- $.fancybox.open([
181
- {
182
- href : '1_b.jpg',
183
- title : 'My title'
184
- }, {
185
- href : '2_b.jpg',
186
- title : '2nd title'
187
- }, {
188
- href : '3_b.jpg'
189
- }
190
- ], {
191
- helpers : {
192
- thumbs : {
193
- width: 75,
194
- height: 50
195
- }
196
- }
197
- });
198
- });
199
-
200
-
201
- });
202
- </script>
203
- <style type="text/css">
204
- .fancybox-custom .fancybox-outer {
205
- box-shadow: 0 0 50px #222;
206
- }
207
- </style>
208
- </head>
209
- <body>
210
- <h1>fancyBox</h1>
211
-
212
- <p>This is a demonstration. More information and examples: <a href="http://fancyapps.com/fancybox/">www.fancyapps.com/fancybox/</a></p>
213
-
214
- <h3>Simple image gallery</h3>
215
- <p>
216
- <a class="fancybox" href="1_b.jpg" data-fancybox-group="gallery" title="Lorem ipsum dolor sit amet"><img src="1_s.jpg" alt="" /></a>
217
-
218
- <a class="fancybox" href="2_b.jpg" data-fancybox-group="gallery" title="Etiam quis mi eu elit temp"><img src="2_s.jpg" alt="" /></a>
219
-
220
- <a class="fancybox" href="3_b.jpg" data-fancybox-group="gallery" title="Cras neque mi, semper leon"><img src="3_s.jpg" alt="" /></a>
221
-
222
- <a class="fancybox" href="4_b.jpg" data-fancybox-group="gallery" title="Sed vel sapien vel sem uno"><img src="4_s.jpg" alt="" /></a>
223
- </p>
224
-
225
- <h3>Different effects</h3>
226
- <p>
227
- <a class="fancybox-effects-a" href="5_b.jpg" title="Lorem ipsum dolor sit amet, consectetur adipiscing elit"><img src="5_s.jpg" alt="" /></a>
228
-
229
- <a class="fancybox-effects-b" href="5_b.jpg" title="Lorem ipsum dolor sit amet, consectetur adipiscing elit"><img src="5_s.jpg" alt="" /></a>
230
-
231
- <a class="fancybox-effects-c" href="5_b.jpg" title="Lorem ipsum dolor sit amet, consectetur adipiscing elit"><img src="5_s.jpg" alt="" /></a>
232
-
233
- <a class="fancybox-effects-d" href="5_b.jpg" title="Lorem ipsum dolor sit amet, consectetur adipiscing elit"><img src="5_s.jpg" alt="" /></a>
234
- </p>
235
-
236
- <h3>Various types</h3>
237
- <p>
238
- fancyBox will try to guess content type from href attribute but you can specify it directly by adding classname (fancybox.image, fancybox.iframe, etc).
239
- </p>
240
- <ul>
241
- <li><a class="fancybox" href="#inline1" title="Lorem ipsum dolor sit amet">Inline</a></li>
242
- <li><a class="fancybox fancybox.ajax" href="ajax.txt">Ajax</a></li>
243
- <li><a class="fancybox fancybox.iframe" href="iframe.html">Iframe</a></li>
244
- <li><a class="fancybox" href="http://www.adobe.com/jp/events/cs3_web_edition_tour/swfs/perform.swf">Swf</a></li>
245
- </ul>
246
-
247
- <div id="inline1" style="width:400px;display: none;">
248
- <h3>Etiam quis mi eu elit</h3>
249
- <p>
250
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis mi eu elit tempor facilisis id et neque. Nulla sit amet sem sapien. Vestibulum imperdiet porta ante ac ornare. Nulla et lorem eu nibh adipiscing ultricies nec at lacus. Cras laoreet ultricies sem, at blandit mi eleifend aliquam. Nunc enim ipsum, vehicula non pretium varius, cursus ac tortor. Vivamus fringilla congue laoreet. Quisque ultrices sodales orci, quis rhoncus justo auctor in. Phasellus dui eros, bibendum eu feugiat ornare, faucibus eu mi. Nunc aliquet tempus sem, id aliquam diam varius ac. Maecenas nisl nunc, molestie vitae eleifend vel, iaculis sed magna. Aenean tempus lacus vitae orci posuere porttitor eget non felis. Donec lectus elit, aliquam nec eleifend sit amet, vestibulum sed nunc.
251
- </p>
252
- </div>
253
-
254
- <p>
255
- Ajax example will not run from your local computer and requires a server to run.
256
- </p>
257
-
258
- <h3>Button helper</h3>
259
- <p>
260
- <a class="fancybox-buttons" data-fancybox-group="button" href="1_b.jpg"><img src="1_s.jpg" alt="" /></a>
261
-
262
- <a class="fancybox-buttons" data-fancybox-group="button" href="2_b.jpg"><img src="2_s.jpg" alt="" /></a>
263
-
264
- <a class="fancybox-buttons" data-fancybox-group="button" href="3_b.jpg"><img src="3_s.jpg" alt="" /></a>
265
-
266
- <a class="fancybox-buttons" data-fancybox-group="button" href="4_b.jpg"><img src="4_s.jpg" alt="" /></a>
267
- </p>
268
-
269
- <h3>Thumbnail helper</h3>
270
- <p>
271
- <a class="fancybox-thumbs" data-fancybox-group="thumb" href="4_b.jpg"><img src="4_s.jpg" alt="" /></a>
272
-
273
- <a class="fancybox-thumbs" data-fancybox-group="thumb" href="3_b.jpg"><img src="3_s.jpg" alt="" /></a>
274
-
275
- <a class="fancybox-thumbs" data-fancybox-group="thumb" href="2_b.jpg"><img src="2_s.jpg" alt="" /></a>
276
-
277
- <a class="fancybox-thumbs" data-fancybox-group="thumb" href="1_b.jpg"><img src="1_s.jpg" alt="" /></a>
278
- </p>
279
-
280
- <h3>Media helper</h3>
281
- <ul>
282
- <li><a class="fancybox-media" href="http://www.youtube.com/watch?v=opj24KnzrWo">Youtube</a></li>
283
- <li><a class="fancybox-media" href="http://vimeo.com/25634903">Vimeo</a></li>
284
- <li><a class="fancybox-media" href="http://www.metacafe.com/watch/7635964/">Metacafe</a></li>
285
- <li><a class="fancybox-media" href="http://www.dailymotion.com/video/xoeylt_electric-guest-this-head-i-hold_music">Dailymotion</a></li>
286
- <li><a class="fancybox-media" href="http://twitvid.com/QY7MD">Twitvid</a></li>
287
- <li><a class="fancybox-media" href="http://twitpic.com/7p93st">Twitpic</a></li>
288
- <li><a class="fancybox-media" href="http://instagr.am/p/IejkuUGxQn">Instagram</a></li>
289
- </ul>
290
-
291
- <h3>Open manually</h3>
292
- <ul>
293
- <li><a id="fancybox-manual-a" href="javascript:;">Open single item</a></li>
294
- <li><a id="fancybox-manual-b" href="javascript:;">Open single item, custom options</a></li>
295
- <li><a id="fancybox-manual-c" href="javascript:;">Open gallery</a></li>
296
- </ul>
297
-
298
- <p>
299
- Photo Credit: Instagrammer @whitjohns
300
- </p>
301
- </body>
302
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/assets/fancyBox/lib/jquery-1.7.2.min.js DELETED
@@ -1,4 +0,0 @@
1
- /*! jQuery v1.7.2 jquery.com | jquery.org/license */
2
- (function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"<!doctype html>":"")+"<html><body>"),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function ca(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function b_(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bD.test(a)?d(a,e):b_(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&f.type(b)==="object")for(var e in b)b_(a+"["+e+"]",b[e],c,d);else d(a,b)}function b$(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bZ(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bS,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bZ(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bZ(a,c,d,e,"*",g));return l}function bY(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bO),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bB(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?1:0,g=4;if(d>0){if(c!=="border")for(;e<g;e+=2)c||(d-=parseFloat(f.css(a,"padding"+bx[e]))||0),c==="margin"?d+=parseFloat(f.css(a,c+bx[e]))||0:d-=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0;return d+"px"}d=by(a,b);if(d<0||d==null)d=a.style[b];if(bt.test(d))return d;d=parseFloat(d)||0;if(c)for(;e<g;e+=2)d+=parseFloat(f.css(a,"padding"+bx[e]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+bx[e]))||0);return d+"px"}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;b.nodeType===1&&(b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?b.outerHTML=a.outerHTML:c!=="input"||a.type!=="checkbox"&&a.type!=="radio"?c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text):(a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value)),b.removeAttribute(f.expando),b.removeAttribute("_submit_attached"),b.removeAttribute("_change_attached"))}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c,i[c][d])}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h,i){var j,k=d==null,l=0,m=a.length;if(d&&typeof d=="object"){for(l in d)e.access(a,c,l,d[l],1,h,f);g=1}else if(f!==b){j=i===b&&e.isFunction(f),k&&(j?(j=c,c=function(a,b,c){return j.call(e(a),c)}):(c.call(a,f),c=null));if(c)for(;l<m;l++)c(a[l],d,j?f.call(a[l],l,c(a[l],d)):f,i);g=1}return g?a:k?c.call(a):m?c(a[0],d):h},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m,n=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?n(g):h==="function"&&(!a.unique||!p.has(g))&&c.push(g)},o=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,j=!0,m=k||0,k=0,l=c.length;for(;c&&m<l;m++)if(c[m].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}j=!1,c&&(a.once?e===!0?p.disable():c=[]:d&&d.length&&(e=d.shift(),p.fireWith(e[0],e[1])))},p={add:function(){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){j&&f<=l&&(l--,f<=m&&m--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&p.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(j?a.once||d.push([b,c]):(!a.once||!e)&&o(b,c));return this},fire:function(){p.fireWith(this,arguments);return this},fired:function(){return!!i}};return p};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p=c.createElement("div"),q=c.documentElement;p.setAttribute("className","t"),p.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="<div "+n+"display:block;'><div style='"+t+"0;display:block;overflow:hidden;'></div></div>"+"<table "+n+"' cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="<table><tr><td style='"+t+"0;display:none'></td><td>t</td></tr></table>",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="<div style='width:5px;'></div>",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h,i,j=this[0],k=0,m=null;if(a===b){if(this.length){m=f.data(j);if(j.nodeType===1&&!f._data(j,"parsedAttrs")){g=j.attributes;for(i=g.length;k<i;k++)h=g[k].name,h.indexOf("data-")===0&&(h=f.camelCase(h.substring(5)),l(j,h,m[h]));f._data(j,"parsedAttrs",!0)}}return m}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!";return f.access(this,function(c){if(c===b){m=this.triggerHandler("getData"+e,[d[0]]),m===b&&j&&(m=f.data(j,a),m=l(j,a,m));return m===b&&d[1]?this.data(d[0]):m}d[1]=c,this.each(function(){var b=f(this);b.triggerHandler("setData"+e,d),f.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length<d)return f.queue(this[0],a);return c===b?this:this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise(c)}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,f.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i<g;i++)e=d[i],e&&(c=f.propFix[e]||e,h=u.test(e),h||f.attr(a,e,""),a.removeAttribute(v?e:c),h&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0,coords:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(
3
- a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:g&&G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=f.event.special[c.type]||{},j=[],k,l,m,n,o,p,q,r,s,t,u;g[0]=c,c.delegateTarget=this;if(!i.preDispatch||i.preDispatch.call(this,c)!==!1){if(e&&(!c.button||c.type!=="click")){n=f(this),n.context=this.ownerDocument||this;for(m=c.target;m!=this;m=m.parentNode||this)if(m.disabled!==!0){p={},r=[],n[0]=m;for(k=0;k<e;k++)s=d[k],t=s.selector,p[t]===b&&(p[t]=s.quick?H(m,s.quick):n.is(t)),p[t]&&r.push(s);r.length&&j.push({elem:m,matches:r})}}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k<j.length&&!c.isPropagationStopped();k++){q=j[k],c.currentTarget=q.elem;for(l=0;l<q.matches.length&&!c.isImmediatePropagationStopped();l++){s=q.matches[l];if(h||!c.namespace&&!s.namespace||c.namespace_re&&c.namespace_re.test(s.namespace))c.data=s.data,c.handleObj=s,o=((f.event.special[s.origType]||{}).handle||s.handler).apply(q.elem,g),o!==b&&(c.result=o,o===!1&&(c.preventDefault(),c.stopPropagation()))}}i.postDispatch&&i.postDispatch.call(this,c);return c.result}},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),d._submit_attached=!0)})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9||d===11){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.globalPOS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")[\\s/>]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f
4
- .clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(f.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(g){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,function(a,b){b.src?f.ajax({type:"GET",global:!1,url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1></$2>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]==="<table>"&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i<u;i++)bn(l[i]);else bn(l);l.nodeType?j.push(l):j=f.merge(j,l)}if(d){g=function(a){return!a.type||be.test(a.type)};for(k=0;j[k];k++){h=j[k];if(e&&f.nodeName(h,"script")&&(!h.type||be.test(h.type)))e.push(h.parentNode?h.parentNode.removeChild(h):h);else{if(h.nodeType===1){var v=f.grep(h.getElementsByTagName("script"),g);j.splice.apply(j,[k+1,0].concat(v))}d.appendChild(h)}}}return j},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bp=/alpha\([^)]*\)/i,bq=/opacity=([^)]*)/,br=/([A-Z]|^ms)/g,bs=/^[\-+]?(?:\d*\.)?\d+$/i,bt=/^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,bu=/^([\-+])=([\-+.\de]+)/,bv=/^margin/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Top","Right","Bottom","Left"],by,bz,bA;f.fn.css=function(a,c){return f.access(this,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)},a,c,arguments.length>1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),(e===""&&f.css(d,"display")==="none"||!f.contains(d.ownerDocument.documentElement,d))&&f._data(d,"olddisplay",cu(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(ct("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(ct("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o,p,q;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]);if((k=f.cssHooks[g])&&"expand"in k){l=k.expand(a[g]),delete a[g];for(i in l)i in a||(a[i]=l[i])}}for(g in a){h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cu(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cm.test(h)?(q=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),q?(f._data(this,"toggle"+i,q==="show"?"hide":"show"),j[q]()):j[h]()):(m=cn.exec(h),n=j.cur(),m?(o=parseFloat(m[2]),p=m[3]||(f.cssNumber[i]?"":"px"),p!=="px"&&(f.style(this,i,(o||1)+p),n=(o||1)/j.cur()*n,f.style(this,i,n+p)),m[1]&&(o=(m[1]==="-="?-1:1)*o+n),j.custom(n,o,p)):j.custom(n,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:ct("show",1),slideUp:ct("hide",1),slideToggle:ct("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a){return a},swing:function(a){return-Math.cos(a*Math.PI)/2+.5}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cq||cr(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){f._data(e.elem,"fxshow"+e.prop)===b&&(e.options.hide?f._data(e.elem,"fxshow"+e.prop,e.start):e.options.show&&f._data(e.elem,"fxshow"+e.prop,e.end))},h()&&f.timers.push(h)&&!co&&(co=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cq||cr(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(co),co=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(cp.concat.apply([],cp),function(a,b){b.indexOf("margin")&&(f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)})}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cv,cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?cv=function(a,b,c,d){try{d=a.getBoundingClientRect()}catch(e){}if(!d||!f.contains(c,a))return d?{top:d.top,left:d.left}:{top:0,left:0};var g=b.body,h=cy(b),i=c.clientTop||g.clientTop||0,j=c.clientLeft||g.clientLeft||0,k=h.pageYOffset||f.support.boxModel&&c.scrollTop||g.scrollTop,l=h.pageXOffset||f.support.boxModel&&c.scrollLeft||g.scrollLeft,m=d.top+k-i,n=d.left+l-j;return{top:m,left:n}}:cv=function(a,b,c){var d,e=a.offsetParent,g=a,h=b.body,i=b.defaultView,j=i?i.getComputedStyle(a,null):a.currentStyle,k=a.offsetTop,l=a.offsetLeft;while((a=a.parentNode)&&a!==h&&a!==c){if(f.support.fixedPosition&&j.position==="fixed")break;d=i?i.getComputedStyle(a,null):a.currentStyle,k-=a.scrollTop,l-=a.scrollLeft,a===e&&(k+=a.offsetTop,l+=a.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(a.nodeName))&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),g=e,e=a.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),j=d}if(j.position==="relative"||j.position==="static")k+=h.offsetTop,l+=h.offsetLeft;f.support.fixedPosition&&j.position==="fixed"&&(k+=Math.max(c.scrollTop,h.scrollTop),l+=Math.max(c.scrollLeft,h.scrollLeft));return{top:k,left:l}},f.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){f.offset.setOffset(this,a,b)});var c=this[0],d=c&&c.ownerDocument;if(!d)return null;if(c===d.body)return f.offset.bodyOffset(c);return cv(c,d,d.documentElement)},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
 
 
 
 
backupwordpress/assets/fancyBox/lib/jquery.mousewheel-3.0.6.pack.js DELETED
@@ -1,13 +0,0 @@
1
- /*! Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net)
2
- * Licensed under the MIT License (LICENSE.txt).
3
- *
4
- * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
5
- * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
6
- * Thanks to: Seamus Leahy for adding deltaX and deltaY
7
- *
8
- * Version: 3.0.6
9
- *
10
- * Requires: 1.2.2+
11
- */
12
- (function(d){function e(a){var b=a||window.event,c=[].slice.call(arguments,1),f=0,e=0,g=0,a=d.event.fix(b);a.type="mousewheel";b.wheelDelta&&(f=b.wheelDelta/120);b.detail&&(f=-b.detail/3);g=f;b.axis!==void 0&&b.axis===b.HORIZONTAL_AXIS&&(g=0,e=-1*f);b.wheelDeltaY!==void 0&&(g=b.wheelDeltaY/120);b.wheelDeltaX!==void 0&&(e=-1*b.wheelDeltaX/120);c.unshift(a,f,e,g);return(d.event.dispatch||d.event.handle).apply(this,c)}var c=["DOMMouseScroll","mousewheel"];if(d.event.fixHooks)for(var h=c.length;h;)d.event.fixHooks[c[--h]]=
13
- d.event.mouseHooks;d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=c.length;a;)this.addEventListener(c[--a],e,false);else this.onmousewheel=e},teardown:function(){if(this.removeEventListener)for(var a=c.length;a;)this.removeEventListener(c[--a],e,false);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/assets/fancyBox/source/blank.gif DELETED
Binary file
backupwordpress/assets/fancyBox/source/fancybox_loading.gif DELETED
Binary file
backupwordpress/assets/fancyBox/source/fancybox_sprite.png DELETED
Binary file
backupwordpress/assets/fancyBox/source/helpers/fancybox_buttons.png DELETED
Binary file
backupwordpress/assets/fancyBox/source/helpers/jquery.fancybox-buttons.css DELETED
@@ -1,85 +0,0 @@
1
- #fancybox-buttons {
2
- position: fixed;
3
- left: 0;
4
- width: 100%;
5
- z-index: 1005;
6
- }
7
-
8
- #fancybox-buttons.top {
9
- top: 10px;
10
- }
11
-
12
- #fancybox-buttons.bottom {
13
- bottom: 10px;
14
- }
15
-
16
- #fancybox-buttons ul {
17
- display: block;
18
- width: 170px;
19
- height: 30px;
20
- margin: 0 auto;
21
- padding: 0;
22
- list-style: none;
23
- background: #111;
24
- -webkit-box-shadow: 0 1px 3px #000,0 0 0 1px rgba(0,0,0,.7),inset 0 0 0 1px rgba(255,255,255,.05);
25
- -moz-box-shadow: 0 1px 3px #000,0 0 0 1px rgba(0,0,0,.7),inset 0 0 0 1px rgba(255,255,255,.05);
26
- background: #111 -webkit-gradient(linear,0% 0%,0% 100%,from(rgba(255,255,255,.2)),color-stop(.5,rgba(255,255,255,.15)),color-stop(.5,rgba(255,255,255,.1)),to(rgba(255,255,255,.15)));
27
- background: #111 -moz-linear-gradient(top,rgba(255,255,255,.2) 0%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.1) 50%,rgba(255,255,255,.15) 100%);
28
- border-radius: 3px;
29
- }
30
-
31
- #fancybox-buttons ul li {
32
- float: left;
33
- margin: 0;
34
- padding: 0;
35
- }
36
-
37
- #fancybox-buttons a {
38
- display: block;
39
- width: 30px;
40
- height: 30px;
41
- text-indent: -9999px;
42
- background-image: url('fancybox_buttons.png');
43
- background-repeat: no-repeat;
44
- outline: none;
45
- }
46
-
47
- #fancybox-buttons a.btnPrev {
48
- width: 32px;
49
- background-position: 6px 0;
50
- }
51
-
52
- #fancybox-buttons a.btnNext {
53
- background-position: -33px 0;
54
- border-right: 1px solid #3e3e3e;
55
- }
56
-
57
- #fancybox-buttons a.btnPlay {
58
- background-position: 0 -30px;
59
- }
60
-
61
- #fancybox-buttons a.btnPlayOn {
62
- background-position: -30px -30px;
63
- }
64
-
65
- #fancybox-buttons a.btnToggle {
66
- background-position: 3px -60px;
67
- border-left: 1px solid #111;
68
- border-right: 1px solid #3e3e3e;
69
- width: 35px
70
- }
71
-
72
- #fancybox-buttons a.btnToggleOn {
73
- background-position: -27px -60px;
74
- }
75
-
76
- #fancybox-buttons a.btnClose {
77
- border-left: 1px solid #111;
78
- width: 38px;
79
- background-position: -57px 0px;
80
- }
81
-
82
- #fancybox-buttons a.btnDisabled {
83
- opacity : 0.5;
84
- cursor: default;
85
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/assets/fancyBox/source/helpers/jquery.fancybox-buttons.js DELETED
@@ -1,115 +0,0 @@
1
- /*!
2
- * Buttons helper for fancyBox
3
- * version: 1.0.2
4
- * @requires fancyBox v2.0 or later
5
- *
6
- * Usage:
7
- * $(".fancybox").fancybox({
8
- * buttons: {
9
- * position : 'top'
10
- * }
11
- * });
12
- *
13
- * Options:
14
- * tpl - HTML template
15
- * position - 'top' or 'bottom'
16
- *
17
- */
18
- (function ($) {
19
- //Shortcut for fancyBox object
20
- var F = $.fancybox;
21
-
22
- //Add helper object
23
- F.helpers.buttons = {
24
- tpl: '<div id="fancybox-buttons"><ul><li><a class="btnPrev" title="Previous" href="javascript:;"></a></li><li><a class="btnPlay" title="Start slideshow" href="javascript:;"></a></li><li><a class="btnNext" title="Next" href="javascript:;"></a></li><li><a class="btnToggle" title="Toggle size" href="javascript:;"></a></li><li><a class="btnClose" title="Close" href="javascript:jQuery.fancybox.close();"></a></li></ul></div>',
25
- list: null,
26
- buttons: {},
27
-
28
- update: function () {
29
- var toggle = this.buttons.toggle.removeClass('btnDisabled btnToggleOn');
30
-
31
- //Size toggle button
32
- if (F.current.canShrink) {
33
- toggle.addClass('btnToggleOn');
34
-
35
- } else if (!F.current.canExpand) {
36
- toggle.addClass('btnDisabled');
37
- }
38
- },
39
-
40
- beforeLoad: function (opts) {
41
- //Remove self if gallery do not have at least two items
42
- if (F.group.length < 2) {
43
- F.coming.helpers.buttons = false;
44
- F.coming.closeBtn = true;
45
-
46
- return;
47
- }
48
-
49
- //Increase top margin to give space for buttons
50
- F.coming.margin[ opts.position === 'bottom' ? 2 : 0 ] += 30;
51
- },
52
-
53
- onPlayStart: function () {
54
- if (this.list) {
55
- this.buttons.play.attr('title', 'Pause slideshow').addClass('btnPlayOn');
56
- }
57
- },
58
-
59
- onPlayEnd: function () {
60
- if (this.list) {
61
- this.buttons.play.attr('title', 'Start slideshow').removeClass('btnPlayOn');
62
- }
63
- },
64
-
65
- afterShow: function (opts) {
66
- var buttons;
67
-
68
- if (!this.list) {
69
- this.list = $(opts.tpl || this.tpl).addClass(opts.position || 'top').appendTo('body');
70
-
71
- this.buttons = {
72
- prev : this.list.find('.btnPrev').click( F.prev ),
73
- next : this.list.find('.btnNext').click( F.next ),
74
- play : this.list.find('.btnPlay').click( F.play ),
75
- toggle : this.list.find('.btnToggle').click( F.toggle )
76
- }
77
- }
78
-
79
- buttons = this.buttons;
80
-
81
- //Prev
82
- if (F.current.index > 0 || F.current.loop) {
83
- buttons.prev.removeClass('btnDisabled');
84
- } else {
85
- buttons.prev.addClass('btnDisabled');
86
- }
87
-
88
- //Next / Play
89
- if (F.current.loop || F.current.index < F.group.length - 1) {
90
- buttons.next.removeClass('btnDisabled');
91
- buttons.play.removeClass('btnDisabled');
92
-
93
- } else {
94
- buttons.next.addClass('btnDisabled');
95
- buttons.play.addClass('btnDisabled');
96
- }
97
-
98
- this.update();
99
- },
100
-
101
- onUpdate: function () {
102
- this.update();
103
- },
104
-
105
- beforeClose: function () {
106
- if (this.list) {
107
- this.list.remove();
108
- }
109
-
110
- this.list = null;
111
- this.buttons = {};
112
- }
113
- };
114
-
115
- }(jQuery));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/assets/fancyBox/source/helpers/jquery.fancybox-media.js DELETED
@@ -1,86 +0,0 @@
1
- /*!
2
- * Media helper for fancyBox
3
- * version: 1.0.0
4
- * @requires fancyBox v2.0 or later
5
- *
6
- * Usage:
7
- * $(".fancybox").fancybox({
8
- * media: {}
9
- * });
10
- *
11
- * Supports:
12
- * Youtube
13
- * http://www.youtube.com/watch?v=opj24KnzrWo
14
- * http://youtu.be/opj24KnzrWo
15
- * Vimeo
16
- * http://vimeo.com/25634903
17
- * Metacafe
18
- * http://www.metacafe.com/watch/7635964/dr_seuss_the_lorax_movie_trailer/
19
- * http://www.metacafe.com/watch/7635964/
20
- * Dailymotion
21
- * http://www.dailymotion.com/video/xoytqh_dr-seuss-the-lorax-premiere_people
22
- * Twitvid
23
- * http://twitvid.com/QY7MD
24
- * Twitpic
25
- * http://twitpic.com/7p93st
26
- * Instagram
27
- * http://instagr.am/p/IejkuUGxQn/
28
- * http://instagram.com/p/IejkuUGxQn/
29
- * Google maps
30
- * http://maps.google.com/maps?q=Eiffel+Tower,+Avenue+Gustave+Eiffel,+Paris,+France&t=h&z=17
31
- * http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16
32
- * http://maps.google.com/?ll=48.859463,2.292626&spn=0.000965,0.002642&t=m&z=19&layer=c&cbll=48.859524,2.292532&panoid=YJ0lq28OOy3VT2IqIuVY0g&cbp=12,151.58,,0,-15.56
33
- */
34
- (function ($) {
35
- //Shortcut for fancyBox object
36
- var F = $.fancybox;
37
-
38
- //Add helper object
39
- F.helpers.media = {
40
- beforeLoad : function(opts, obj) {
41
- var href = obj.href || '',
42
- type = false,
43
- rez;
44
-
45
- if ((rez = href.match(/(youtube\.com|youtu\.be)\/(v\/|u\/|embed\/|watch\?v=)?([^#\&\?]*).*/i))) {
46
- href = '//www.youtube.com/embed/' + rez[3] + '?autoplay=1&fs=1&rel=0&modestbranding=1&enablejsapi=1';
47
- type = 'iframe';
48
-
49
- } else if ((rez = href.match(/vimeo.com\/(\d+)\/?(.*)/))) {
50
- href = '//player.vimeo.com/video/' + rez[1] + '?hd=1&autoplay=1&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1';
51
- type = 'iframe';
52
-
53
- } else if ((rez = href.match(/metacafe.com\/watch\/(\d+)\/?(.*)/))) {
54
- href = '//www.metacafe.com/fplayer/' + rez[1] + '/.swf?playerVars=autoPlay=yes';
55
- type = 'swf';
56
-
57
- } else if ((rez = href.match(/dailymotion.com\/video\/(.*)\/?(.*)/))) {
58
- href = '//www.dailymotion.com/swf/video/' + rez[1] + '?additionalInfos=0&autoStart=1';
59
- type = 'swf';
60
-
61
- } else if ((rez = href.match(/twitvid\.com\/([a-zA-Z0-9_\-\?\=]+)/i))) {
62
- href = '//www.twitvid.com/embed.php?autoplay=0&guid=' + rez[1];
63
- type = 'iframe';
64
-
65
- } else if ((rez = href.match(/twitpic\.com\/(?!(?:place|photos|events)\/)([a-zA-Z0-9\?\=\-]+)/i))) {
66
- href = '//twitpic.com/show/full/' + rez[1];
67
- type = 'image';
68
-
69
- } else if ((rez = href.match(/(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i))) {
70
- href = '//' + rez[1] + '/p/' + rez[2] + '/media/?size=l';
71
- type = 'image';
72
-
73
- } else if ((rez = href.match(/maps\.google\.com\/(\?ll=|maps\/?\?q=)(.*)/i))) {
74
- href = '//maps.google.com/' + rez[1] + '' + rez[2] + '&output=' + (rez[2].indexOf('layer=c') ? 'svembed' : 'embed');
75
- type = 'iframe';
76
- }
77
-
78
- if (type) {
79
- obj.href = href;
80
- obj.type = type;
81
- obj.autoSize = false;
82
- }
83
- }
84
- }
85
-
86
- }(jQuery));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/assets/fancyBox/source/helpers/jquery.fancybox-thumbs.css DELETED
@@ -1,54 +0,0 @@
1
- #fancybox-thumbs {
2
- position: fixed;
3
- left: 0px;
4
- width: 100%;
5
- overflow: hidden;
6
- z-index: 1005;
7
- }
8
-
9
- #fancybox-thumbs.bottom {
10
- bottom: 2px;
11
- }
12
-
13
- #fancybox-thumbs.top {
14
- top: 2px;
15
- }
16
-
17
- #fancybox-thumbs ul {
18
- position: relative;
19
- list-style: none;
20
- margin: 0;
21
- padding: 0;
22
- }
23
-
24
- #fancybox-thumbs ul li {
25
- float: left;
26
- padding: 1px;
27
- opacity: 0.5;
28
- }
29
-
30
- #fancybox-thumbs ul li.active {
31
- opacity: 0.75;
32
- padding: 0;
33
- border: 1px solid #fff;
34
- }
35
-
36
- #fancybox-thumbs ul li:hover {
37
- opacity: 1;
38
- }
39
-
40
- #fancybox-thumbs ul li a {
41
- display: block;
42
- position: relative;
43
- overflow: hidden;
44
- border: 1px solid #222;
45
- background: #111;
46
- outline: none;
47
- }
48
-
49
- #fancybox-thumbs ul li img {
50
- display: block;
51
- position: relative;
52
- border: 0;
53
- padding: 0;
54
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/assets/fancyBox/source/helpers/jquery.fancybox-thumbs.js DELETED
@@ -1,157 +0,0 @@
1
- /*!
2
- * Thumbnail helper for fancyBox
3
- * version: 1.0.4
4
- * @requires fancyBox v2.0 or later
5
- *
6
- * Usage:
7
- * $(".fancybox").fancybox({
8
- * thumbs: {
9
- * width : 50,
10
- * height : 50
11
- * }
12
- * });
13
- *
14
- * Options:
15
- * width - thumbnail width
16
- * height - thumbnail height
17
- * source - function to obtain the URL of the thumbnail image
18
- * position - 'top' or 'bottom'
19
- *
20
- */
21
- (function ($) {
22
- //Shortcut for fancyBox object
23
- var F = $.fancybox;
24
-
25
- //Add helper object
26
- F.helpers.thumbs = {
27
- wrap: null,
28
- list: null,
29
- width: 0,
30
-
31
- //Default function to obtain the URL of the thumbnail image
32
- source: function (el) {
33
- var img;
34
-
35
- if ($.type(el) === 'string') {
36
- return el;
37
- }
38
-
39
- img = $(el).find('img');
40
-
41
- return img.length ? img.attr('src') : el.href;
42
- },
43
-
44
- init: function (opts) {
45
- var that = this,
46
- list,
47
- thumbWidth = opts.width || 50,
48
- thumbHeight = opts.height || 50,
49
- thumbSource = opts.source || this.source;
50
-
51
- //Build list structure
52
- list = '';
53
-
54
- for (var n = 0; n < F.group.length; n++) {
55
- list += '<li><a style="width:' + thumbWidth + 'px;height:' + thumbHeight + 'px;" href="javascript:jQuery.fancybox.jumpto(' + n + ');"></a></li>';
56
- }
57
-
58
- this.wrap = $('<div id="fancybox-thumbs"></div>').addClass(opts.position || 'bottom').appendTo('body');
59
- this.list = $('<ul>' + list + '</ul>').appendTo(this.wrap);
60
-
61
- //Load each thumbnail
62
- $.each(F.group, function (i) {
63
- $("<img />").load(function () {
64
- var width = this.width,
65
- height = this.height,
66
- widthRatio, heightRatio, parent;
67
-
68
- if (!that.list || !width || !height) {
69
- return;
70
- }
71
-
72
- //Calculate thumbnail width/height and center it
73
- widthRatio = width / thumbWidth;
74
- heightRatio = height / thumbHeight;
75
- parent = that.list.children().eq(i).find('a');
76
-
77
- if (widthRatio >= 1 && heightRatio >= 1) {
78
- if (widthRatio > heightRatio) {
79
- width = Math.floor(width / heightRatio);
80
- height = thumbHeight;
81
-
82
- } else {
83
- width = thumbWidth;
84
- height = Math.floor(height / widthRatio);
85
- }
86
- }
87
-
88
- $(this).css({
89
- width: width,
90
- height: height,
91
- top: Math.floor(thumbHeight / 2 - height / 2),
92
- left: Math.floor(thumbWidth / 2 - width / 2)
93
- });
94
-
95
- parent.width(thumbWidth).height(thumbHeight);
96
-
97
- $(this).hide().appendTo(parent).fadeIn(300);
98
-
99
- }).attr('src', thumbSource( F.group[ i ] ));
100
- });
101
-
102
- //Set initial width
103
- this.width = this.list.children().eq(0).outerWidth(true);
104
-
105
- this.list.width(this.width * (F.group.length + 1)).css('left', Math.floor($(window).width() * 0.5 - (F.current.index * this.width + this.width * 0.5)));
106
- },
107
-
108
- //Center list
109
- update: function (opts) {
110
- if (this.list) {
111
- this.list.stop(true).animate({
112
- 'left': Math.floor($(window).width() * 0.5 - (F.current.index * this.width + this.width * 0.5))
113
- }, 150);
114
- }
115
- },
116
-
117
- beforeLoad: function (opts) {
118
- //Remove self if gallery do not have at least two items
119
- if (F.group.length < 2) {
120
- F.coming.helpers.thumbs = false;
121
-
122
- return;
123
- }
124
-
125
- //Increase bottom margin to give space for thumbs
126
- F.coming.margin[ opts.position === 'top' ? 0 : 2 ] = opts.height + 30;
127
- },
128
-
129
- afterShow: function (opts) {
130
- //Check if exists and create or update list
131
- if (this.list) {
132
- this.update(opts);
133
-
134
- } else {
135
- this.init(opts);
136
- }
137
-
138
- //Set active element
139
- this.list.children().removeClass('active').eq(F.current.index).addClass('active');
140
- },
141
-
142
- onUpdate: function () {
143
- this.update();
144
- },
145
-
146
- beforeClose: function () {
147
- if (this.wrap) {
148
- this.wrap.remove();
149
- }
150
-
151
- this.wrap = null;
152
- this.list = null;
153
- this.width = 0;
154
- }
155
- }
156
-
157
- }(jQuery));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/assets/fancyBox/source/jquery.fancybox.css DELETED
@@ -1,226 +0,0 @@
1
- /*! fancyBox v2.0.5 fancyapps.com | fancyapps.com/fancybox/#license */
2
- .fancybox-tmp iframe, .fancybox-tmp object {
3
- vertical-align: top;
4
- padding: 0;
5
- margin: 0;
6
- }
7
-
8
- .fancybox-wrap {
9
- position: absolute;
10
- top: 0;
11
- left: 0;
12
- z-index: 1002;
13
- }
14
-
15
- .fancybox-outer {
16
- position: relative;
17
- padding: 0;
18
- margin: 0;
19
- background: #f9f9f9;
20
- color: #444;
21
- text-shadow: none;
22
- -webkit-border-radius: 4px;
23
- -moz-border-radius: 4px;
24
- border-radius: 4px;
25
- }
26
-
27
- .fancybox-opened {
28
- z-index: 1003;
29
- }
30
-
31
- .fancybox-opened .fancybox-outer {
32
- -webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
33
- -moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
34
- box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
35
- }
36
-
37
- .fancybox-inner {
38
- width: 100%;
39
- height: 100%;
40
- padding: 0;
41
- margin: 0;
42
- position: relative;
43
- outline: none;
44
- overflow: hidden;
45
- }
46
-
47
- .fancybox-type-iframe .fancybox-inner {
48
- -webkit-overflow-scrolling: touch
49
- }
50
-
51
- .fancybox-error {
52
- color: #444;
53
- font: 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
54
- margin: 0;
55
- padding: 10px;
56
- }
57
-
58
- .fancybox-image, .fancybox-iframe {
59
- display: block;
60
- width: 100%;
61
- height: 100%;
62
- border: 0;
63
- padding: 0;
64
- margin: 0;
65
- vertical-align: top;
66
- }
67
-
68
- .fancybox-image {
69
- max-width: 100%;
70
- max-height: 100%;
71
- }
72
-
73
- #fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
74
- background-image: url('fancybox_sprite.png');
75
- }
76
-
77
- #fancybox-loading {
78
- position: fixed;
79
- top: 50%;
80
- left: 50%;
81
- margin-top: -22px;
82
- margin-left: -22px;
83
- background-position: 0 -108px;
84
- opacity: 0.8;
85
- cursor: pointer;
86
- z-index: 1010;
87
- }
88
-
89
- #fancybox-loading div {
90
- width: 44px;
91
- height: 44px;
92
- background: url('fancybox_loading.gif') center center no-repeat;
93
- }
94
-
95
- .fancybox-close {
96
- position: absolute;
97
- top: -18px;
98
- right: -18px;
99
- width: 36px;
100
- height: 36px;
101
- cursor: pointer;
102
- z-index: 1004;
103
- }
104
-
105
- .fancybox-nav {
106
- position: absolute;
107
- top: 0;
108
- width: 40%;
109
- height: 100%;
110
- cursor: pointer;
111
- background: transparent url('blank.gif'); /* helps IE */
112
- z-index: 1003;
113
- }
114
-
115
- .fancybox-prev {
116
- left: 0;
117
- }
118
-
119
- .fancybox-next {
120
- right: 0;
121
- }
122
-
123
- .fancybox-nav span {
124
- position: absolute;
125
- top: 50%;
126
- width: 36px;
127
- height: 36px;
128
- margin-top: -18px;
129
- cursor: pointer;
130
- z-index: 1003;
131
- visibility: hidden;
132
- }
133
-
134
- .fancybox-prev span {
135
- left: 20px;
136
- background-position: 0 -36px;
137
- }
138
-
139
- .fancybox-next span {
140
- right: 20px;
141
- background-position: 0 -72px;
142
- }
143
-
144
- .fancybox-nav:hover span {
145
- visibility: visible;
146
- }
147
-
148
- .fancybox-tmp {
149
- position: absolute;
150
- top: -9999px;
151
- left: -9999px;
152
- padding: 0;
153
- overflow: visible;
154
- visibility: hidden;
155
- }
156
-
157
- /* Overlay helper */
158
-
159
- #fancybox-overlay {
160
- position: absolute;
161
- top: 0;
162
- left: 0;
163
- overflow: hidden;
164
- display: none;
165
- z-index: 1001;
166
- background: #000;
167
- }
168
-
169
- /* Title helper */
170
-
171
- .fancybox-title {
172
- visibility: hidden;
173
- font: normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
174
- position: relative;
175
- text-shadow: none;
176
- z-index: 1005;
177
- }
178
-
179
- .fancybox-opened .fancybox-title {
180
- visibility: visible;
181
- }
182
-
183
- .fancybox-title-float-wrap {
184
- position: absolute;
185
- bottom: 0;
186
- right: 50%;
187
- margin-bottom: -35px;
188
- z-index: 1003;
189
- text-align: center;
190
- }
191
-
192
- .fancybox-title-float-wrap .child {
193
- display: inline-block;
194
- margin-right: -100%;
195
- padding: 2px 20px;
196
- background: transparent; /* Fallback for web browsers that doesn't support RGBa */
197
- background: rgba(0, 0, 0, 0.8);
198
- -webkit-border-radius: 15px;
199
- -moz-border-radius: 15px;
200
- border-radius: 15px;
201
- text-shadow: 0 1px 2px #222;
202
- color: #FFF;
203
- font-weight: bold;
204
- line-height: 24px;
205
- white-space: nowrap;
206
- }
207
-
208
- .fancybox-title-outside-wrap {
209
- position: relative;
210
- margin-top: 10px;
211
- color: #fff;
212
- }
213
-
214
- .fancybox-title-inside-wrap {
215
- margin-top: 10px;
216
- }
217
-
218
- .fancybox-title-over-wrap {
219
- position: absolute;
220
- bottom: 0;
221
- left: 0;
222
- color: #fff;
223
- padding: 10px;
224
- background: #000;
225
- background: rgba(0, 0, 0, .8);
226
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/assets/fancyBox/source/jquery.fancybox.js DELETED
@@ -1,1449 +0,0 @@
1
- /*!
2
- * fancyBox - jQuery Plugin
3
- * version: 2.0.5 (27/03/2012)
4
- * @requires jQuery v1.6 or later
5
- *
6
- * Examples at http://fancyapps.com/fancybox/
7
- * License: www.fancyapps.com/fancybox/#license
8
- *
9
- * Copyright 2012 Janis Skarnelis - janis@fancyapps.com
10
- *
11
- */
12
- (function (window, document, undefined) {
13
- "use strict";
14
-
15
- var $ = window.jQuery,
16
- W = $(window),
17
- D = $(document),
18
- F = $.fancybox = function () {
19
- F.open.apply( this, arguments );
20
- },
21
- didResize = false,
22
- resizeTimer = null,
23
- isMobile = document.createTouch !== undefined,
24
- isString = function(str) {
25
- return $.type(str) === "string";
26
- },
27
- isPercentage = function(str) {
28
- return isString(str) && str.indexOf('%') > -1;
29
- };
30
-
31
- $.extend(F, {
32
- // The current version of fancyBox
33
- version: '2.0.5',
34
-
35
- defaults: {
36
- padding: 15,
37
- margin: 20,
38
-
39
- width: 800,
40
- height: 600,
41
- minWidth: 100,
42
- minHeight: 100,
43
- maxWidth: 9999,
44
- maxHeight: 9999,
45
-
46
- autoSize: true,
47
- autoResize: !isMobile,
48
- autoCenter : !isMobile,
49
- fitToView: true,
50
- aspectRatio: false,
51
- topRatio: 0.5,
52
-
53
- fixed: !($.browser.msie && $.browser.version <= 6) && !isMobile,
54
- scrolling: 'auto', // 'auto', 'yes' or 'no'
55
- wrapCSS: 'fancybox-default',
56
-
57
- arrows: true,
58
- closeBtn: true,
59
- closeClick: false,
60
- nextClick : false,
61
- mouseWheel: true,
62
- autoPlay: false,
63
- playSpeed: 3000,
64
- preload : 3,
65
-
66
- modal: false,
67
- loop: true,
68
- ajax: { dataType: 'html', headers: { 'X-fancyBox': true } },
69
- keys: {
70
- next: [13, 32, 34, 39, 40], // enter, space, page down, right arrow, down arrow
71
- prev: [8, 33, 37, 38], // backspace, page up, left arrow, up arrow
72
- close: [27] // escape key
73
- },
74
-
75
- // Override some properties
76
- index: 0,
77
- type: null,
78
- href: null,
79
- content: null,
80
- title: null,
81
-
82
- // HTML templates
83
- tpl: {
84
- wrap: '<div class="fancybox-wrap"><div class="fancybox-outer"><div class="fancybox-inner"></div></div></div>',
85
- image: '<img class="fancybox-image" src="{href}" alt="" />',
86
- iframe: '<iframe class="fancybox-iframe" name="fancybox-frame{rnd}" frameborder="0" hspace="0"' + ($.browser.msie ? ' allowtransparency="true"' : '') + '></iframe>',
87
- swf: '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%"><param name="wmode" value="transparent" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="{href}" /><embed src="{href}" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="100%" height="100%" wmode="transparent"></embed></object>',
88
- error: '<p class="fancybox-error">The requested content cannot be loaded.<br/>Please try again later.</p>',
89
- closeBtn: '<div title="Close" class="fancybox-item fancybox-close"></div>',
90
- next: '<a title="Next" class="fancybox-nav fancybox-next"><span></span></a>',
91
- prev: '<a title="Previous" class="fancybox-nav fancybox-prev"><span></span></a>'
92
- },
93
-
94
- // Properties for each animation type
95
- // Opening fancyBox
96
- openEffect: 'fade', // 'elastic', 'fade' or 'none'
97
- openSpeed: 250,
98
- openEasing: 'swing',
99
- openOpacity: true,
100
- openMethod: 'zoomIn',
101
-
102
- // Closing fancyBox
103
- closeEffect: 'fade', // 'elastic', 'fade' or 'none'
104
- closeSpeed: 250,
105
- closeEasing: 'swing',
106
- closeOpacity: true,
107
- closeMethod: 'zoomOut',
108
-
109
- // Changing next gallery item
110
- nextEffect: 'elastic', // 'elastic', 'fade' or 'none'
111
- nextSpeed: 300,
112
- nextEasing: 'swing',
113
- nextMethod: 'changeIn',
114
-
115
- // Changing previous gallery item
116
- prevEffect: 'elastic', // 'elastic', 'fade' or 'none'
117
- prevSpeed: 300,
118
- prevEasing: 'swing',
119
- prevMethod: 'changeOut',
120
-
121
- // Enabled helpers
122
- helpers: {
123
- overlay: {
124
- speedIn: 0,
125
- speedOut: 300,
126
- opacity: 0.8,
127
- css: {
128
- cursor: 'pointer'
129
- },
130
- closeClick: true
131
- },
132
- title: {
133
- type: 'float' // 'float', 'inside', 'outside' or 'over'
134
- }
135
- },
136
-
137
- // Callbacks
138
- onCancel: $.noop, // If canceling
139
- beforeLoad: $.noop, // Before loading
140
- afterLoad: $.noop, // After loading
141
- beforeShow: $.noop, // Before changing in current item
142
- afterShow: $.noop, // After opening
143
- beforeClose: $.noop, // Before closing
144
- afterClose: $.noop // After closing
145
- },
146
-
147
- //Current state
148
- group: {}, // Selected group
149
- opts: {}, // Group options
150
- coming: null, // Element being loaded
151
- current: null, // Currently loaded element
152
- isOpen: false, // Is currently open
153
- isOpened: false, // Have been fully opened at least once
154
- wrap: null,
155
- outer: null,
156
- inner: null,
157
-
158
- player: {
159
- timer: null,
160
- isActive: false
161
- },
162
-
163
- // Loaders
164
- ajaxLoad: null,
165
- imgPreload: null,
166
-
167
- // Some collections
168
- transitions: {},
169
- helpers: {},
170
-
171
- /*
172
- * Static methods
173
- */
174
-
175
- open: function (group, opts) {
176
- //Kill existing instances
177
- F.close(true);
178
-
179
- //Normalize group
180
- if (group && !$.isArray(group)) {
181
- group = group instanceof $ ? $(group).get() : [group];
182
- }
183
-
184
- F.isActive = true;
185
-
186
- //Extend the defaults
187
- F.opts = $.extend(true, {}, F.defaults, opts);
188
-
189
- //All options are merged recursive except keys
190
- if ($.isPlainObject(opts) && opts.keys !== undefined) {
191
- F.opts.keys = opts.keys ? $.extend({}, F.defaults.keys, opts.keys) : false;
192
- }
193
-
194
- F.group = group;
195
-
196
- F._start(F.opts.index || 0);
197
- },
198
-
199
- cancel: function () {
200
- if (F.coming && false === F.trigger('onCancel')) {
201
- return;
202
- }
203
-
204
- F.coming = null;
205
-
206
- F.hideLoading();
207
-
208
- if (F.ajaxLoad) {
209
- F.ajaxLoad.abort();
210
- }
211
-
212
- F.ajaxLoad = null;
213
-
214
- if (F.imgPreload) {
215
- F.imgPreload.onload = F.imgPreload.onabort = F.imgPreload.onerror = null;
216
- }
217
- },
218
-
219
- close: function (a) {
220
- F.cancel();
221
-
222
- if (!F.current || false === F.trigger('beforeClose')) {
223
- return;
224
- }
225
-
226
- F.unbindEvents();
227
-
228
- //If forced or is still opening then remove immediately
229
- if (!F.isOpen || (a && a[0] === true)) {
230
- $(".fancybox-wrap").stop().trigger('onReset').remove();
231
-
232
- F._afterZoomOut();
233
-
234
- } else {
235
- F.isOpen = F.isOpened = false;
236
-
237
- $(".fancybox-item, .fancybox-nav").remove();
238
-
239
- F.wrap.stop(true).removeClass('fancybox-opened');
240
- F.inner.css('overflow', 'hidden');
241
-
242
- F.transitions[F.current.closeMethod]();
243
- }
244
- },
245
-
246
- // Start/stop slideshow
247
- play: function (a) {
248
- var clear = function () {
249
- clearTimeout(F.player.timer);
250
- },
251
- set = function () {
252
- clear();
253
-
254
- if (F.current && F.player.isActive) {
255
- F.player.timer = setTimeout(F.next, F.current.playSpeed);
256
- }
257
- },
258
- stop = function () {
259
- clear();
260
-
261
- $('body').unbind('.player');
262
-
263
- F.player.isActive = false;
264
-
265
- F.trigger('onPlayEnd');
266
- },
267
- start = function () {
268
- if (F.current && (F.current.loop || F.current.index < F.group.length - 1)) {
269
- F.player.isActive = true;
270
-
271
- $('body').bind({
272
- 'afterShow.player onUpdate.player': set,
273
- 'onCancel.player beforeClose.player': stop,
274
- 'beforeLoad.player': clear
275
- });
276
-
277
- set();
278
-
279
- F.trigger('onPlayStart');
280
- }
281
- };
282
-
283
- if (F.player.isActive || (a && a[0] === false)) {
284
- stop();
285
- } else {
286
- start();
287
- }
288
- },
289
-
290
- next: function () {
291
- if (F.current) {
292
- F.jumpto(F.current.index + 1);
293
- }
294
- },
295
-
296
- prev: function () {
297
- if (F.current) {
298
- F.jumpto(F.current.index - 1);
299
- }
300
- },
301
-
302
- jumpto: function (index) {
303
- if (!F.current) {
304
- return;
305
- }
306
-
307
- index = parseInt(index, 10);
308
-
309
- if (F.group.length > 1 && F.current.loop) {
310
- if (index >= F.group.length) {
311
- index = 0;
312
-
313
- } else if (index < 0) {
314
- index = F.group.length - 1;
315
- }
316
- }
317
-
318
- if (F.group[index] !== undefined) {
319
- F.cancel();
320
-
321
- F._start(index);
322
- }
323
- },
324
-
325
- reposition: function (absolute, e) {
326
- if (F.isOpen) {
327
- if (e && e.type === 'scroll') {
328
- F.wrap.stop().animate(F._getPosition(absolute), 200);
329
- } else {
330
- F.wrap.css(F._getPosition(absolute));
331
- }
332
- }
333
- },
334
-
335
- update: function (e) {
336
- if (F.isOpen) {
337
- // It's a very bad idea to attach handlers to the window scroll event, run this code after a delay
338
- if (!didResize) {
339
- resizeTimer = setTimeout(function () {
340
- var current = F.current;
341
-
342
- if (didResize) {
343
- didResize = false;
344
-
345
- if (current) {
346
- if (!e || (e && (e.type === 'orientationchange' || (current.autoResize && e.type === 'resize')))) {
347
- if (current.autoSize && current.type !== 'iframe') {
348
- F.inner.height('auto');
349
- current.height = F.inner.height();
350
- }
351
-
352
- F._setDimension();
353
-
354
- if (current.canGrow && current.type !== 'iframe') {
355
- F.inner.height('auto');
356
- }
357
- }
358
-
359
- if (current.autoCenter) {
360
- F.reposition(null, e);
361
- }
362
-
363
- F.trigger('onUpdate');
364
- }
365
- }
366
- }, 100);
367
- }
368
-
369
- didResize = true;
370
- }
371
- },
372
-
373
- toggle: function () {
374
- if (F.isOpen) {
375
- F.current.fitToView = !F.current.fitToView;
376
-
377
- F.update();
378
- }
379
- },
380
-
381
- hideLoading: function () {
382
- D.unbind('keypress.fb');
383
-
384
- $("#fancybox-loading").remove();
385
- },
386
-
387
- showLoading: function () {
388
- F.hideLoading();
389
-
390
- //If user will press the escape-button, the request will be canceled
391
- D.bind('keypress.fb', function(e) {
392
- if (e.keyCode === 27) {
393
- e.preventDefault();
394
- F.cancel();
395
- }
396
- });
397
-
398
- $('<div id="fancybox-loading"><div></div></div>').click(F.cancel).appendTo('body');
399
- },
400
-
401
- getViewport: function () {
402
- return {
403
- x: W.scrollLeft(),
404
- y: W.scrollTop(),
405
- w: window.innerWidth ? window.innerWidth : W.width(),
406
- h: window.innerHeight ? window.innerHeight : W.height()
407
- };
408
- },
409
-
410
- // Unbind the keyboard / clicking actions
411
- unbindEvents: function () {
412
- if (F.wrap) {
413
- F.wrap.unbind('.fb');
414
- }
415
-
416
- D.unbind('.fb');
417
- W.unbind('.fb');
418
- },
419
-
420
- bindEvents: function () {
421
- var current = F.current,
422
- keys = current.keys;
423
-
424
- if (!current) {
425
- return;
426
- }
427
-
428
- W.bind('resize.fb, orientationchange.fb', F.update);
429
-
430
- if (!current.fixed && current.autoCenter) {
431
- W.bind("scroll.fb", F.update);
432
- }
433
-
434
- if (keys) {
435
- D.bind('keydown.fb', function (e) {
436
- var code;
437
-
438
- // Ignore key combinations and key events within form elements
439
- if (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && $.inArray(e.target.tagName.toLowerCase(), ['input', 'textarea', 'select', 'button']) < 0 && !$(e.target).is('[contenteditable]')) {
440
- code = e.keyCode;
441
-
442
- if ($.inArray(code, keys.close) > -1) {
443
- F.close();
444
- e.preventDefault();
445
-
446
- } else if ($.inArray(code, keys.next) > -1) {
447
- F.next();
448
- e.preventDefault();
449
-
450
- } else if ($.inArray(code, keys.prev) > -1) {
451
- F.prev();
452
- e.preventDefault();
453
- }
454
- }
455
- });
456
- }
457
-
458
- if ($.fn.mousewheel && current.mouseWheel && F.group.length > 1) {
459
- F.wrap.bind('mousewheel.fb', function (e, delta) {
460
- var target = e.target || null;
461
-
462
- if (delta !== 0 && (!target || target.clientHeight === 0 || (target.scrollHeight === target.clientHeight && target.scrollWidth === target.clientWidth))) {
463
- e.preventDefault();
464
-
465
- F[delta > 0 ? 'prev' : 'next']();
466
- }
467
- });
468
- }
469
- },
470
-
471
- trigger: function (event) {
472
- var ret, obj = F[ $.inArray(event, ['onCancel', 'beforeLoad', 'afterLoad']) > -1 ? 'coming' : 'current' ];
473
-
474
- if (!obj) {
475
- return;
476
- }
477
-
478
- if ($.isFunction( obj[event] )) {
479
- ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1));
480
- }
481
-
482
- if (ret === false) {
483
- return false;
484
- }
485
-
486
- if (obj.helpers) {
487
- $.each(obj.helpers, function (helper, opts) {
488
- if (opts && $.isPlainObject(F.helpers[helper]) && $.isFunction(F.helpers[helper][event])) {
489
- F.helpers[helper][event](opts, obj);
490
- }
491
- });
492
- }
493
-
494
- $.event.trigger(event + '.fb');
495
- },
496
-
497
- isImage: function (str) {
498
- return isString(str) && str.match(/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i);
499
- },
500
-
501
- isSWF: function (str) {
502
- return isString(str) && str.match(/\.(swf)(.*)?$/i);
503
- },
504
-
505
- _start: function (index) {
506
- var coming = {},
507
- element = F.group[index] || null,
508
- isDom,
509
- href,
510
- type,
511
- rez,
512
- hrefParts;
513
-
514
- if (element && (element.nodeType || element instanceof $)) {
515
- isDom = true;
516
-
517
- if ($.metadata) {
518
- coming = $(element).metadata();
519
- }
520
- }
521
-
522
- coming = $.extend(true, {}, F.opts, {index : index, element : element}, ($.isPlainObject(element) ? element : coming));
523
-
524
- // Re-check overridable options
525
- $.each(['href', 'title', 'content', 'type'], function(i,v) {
526
- coming[v] = F.opts[ v ] || (isDom && $(element).attr( v )) || coming[ v ] || null;
527
- });
528
-
529
- // Convert margin property to array - top, right, bottom, left
530
- if (typeof coming.margin === 'number') {
531
- coming.margin = [coming.margin, coming.margin, coming.margin, coming.margin];
532
- }
533
-
534
- // 'modal' propery is just a shortcut
535
- if (coming.modal) {
536
- $.extend(true, coming, {
537
- closeBtn : false,
538
- closeClick: false,
539
- nextClick : false,
540
- arrows : false,
541
- mouseWheel : false,
542
- keys : null,
543
- helpers: {
544
- overlay : {
545
- css: {
546
- cursor : 'auto'
547
- },
548
- closeClick : false
549
- }
550
- }
551
- });
552
- }
553
-
554
- //Give a chance for callback or helpers to update coming item (type, title, etc)
555
- F.coming = coming;
556
-
557
- if (false === F.trigger('beforeLoad')) {
558
- F.coming = null;
559
- return;
560
- }
561
-
562
- type = coming.type;
563
- href = coming.href || element;
564
-
565
- ///Check if content type is set, if not, try to get
566
- if (!type) {
567
- if (isDom) {
568
- rez = $(element).data('fancybox-type');
569
-
570
- if (!rez && element.className) {
571
- rez = element.className.match(/fancybox\.(\w+)/);
572
- type = rez ? rez[1] : null;
573
- }
574
- }
575
-
576
- if (!type && isString(href)) {
577
- if (F.isImage(href)) {
578
- type = 'image';
579
-
580
- } else if (F.isSWF(href)) {
581
- type = 'swf';
582
-
583
- } else if (href.match(/^#/)) {
584
- type = 'inline';
585
- }
586
- }
587
-
588
- // ...if not - display element itself
589
- if (!type) {
590
- type = isDom ? 'inline' : 'html';
591
- }
592
-
593
- coming.type = type;
594
- }
595
-
596
- // Check before try to load; 'inline' and 'html' types need content, others - href
597
- if (type === 'inline' || type === 'html') {
598
- if (!coming.content) {
599
- if (type === 'inline') {
600
- coming.content = $( isString(href) ? href.replace(/.*(?=#[^\s]+$)/, '') : href ); //strip for ie7
601
-
602
- } else {
603
- coming.content = element;
604
- }
605
- }
606
-
607
- if (!coming.content || !coming.content.length) {
608
- type = null;
609
- }
610
-
611
- } else if (!href) {
612
- type = null;
613
- }
614
-
615
- /*
616
- * Add reference to the group, so it`s possible to access from callbacks, example:
617
- * afterLoad : function() {
618
- * this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : '');
619
- * }
620
- */
621
-
622
- if (type === 'ajax' && isString(href)) {
623
- hrefParts = href.split(/\s+/, 2);
624
-
625
- href = hrefParts.shift();
626
- coming.selector = hrefParts.shift();
627
- }
628
-
629
- coming.href = href;
630
- coming.group = F.group;
631
- coming.isDom = isDom;
632
-
633
- if (type === 'image') {
634
- F._loadImage();
635
-
636
- } else if (type === 'ajax') {
637
- F._loadAjax();
638
-
639
- } else if (type) {
640
- F._afterLoad();
641
-
642
- } else {
643
- F._error( 'type' );
644
- }
645
- },
646
-
647
- _error: function ( type ) {
648
- F.hideLoading();
649
-
650
- $.extend(F.coming, {
651
- type : 'html',
652
- autoSize : true,
653
- minHeight : 0,
654
- hasError : type,
655
- content : F.coming.tpl.error
656
- });
657
-
658
- F._afterLoad();
659
- },
660
-
661
- _loadImage: function () {
662
- // Reset preload image so it is later possible to check "complete" property
663
- var img = F.imgPreload = new Image();
664
-
665
- img.onload = function () {
666
- this.onload = this.onerror = null;
667
-
668
- F.coming.width = this.width;
669
- F.coming.height = this.height;
670
-
671
- F._afterLoad();
672
- };
673
-
674
- img.onerror = function () {
675
- this.onload = this.onerror = null;
676
-
677
- F._error( 'image' );
678
- };
679
-
680
- img.src = F.coming.href;
681
-
682
- if (!img.width) {
683
- F.showLoading();
684
- }
685
- },
686
-
687
- _loadAjax: function () {
688
- F.showLoading();
689
-
690
- F.ajaxLoad = $.ajax($.extend({}, F.coming.ajax, {
691
- url: F.coming.href,
692
- error: function (jqXHR, textStatus) {
693
- if (F.coming && textStatus !== 'abort') {
694
- F._error( 'ajax', jqXHR );
695
-
696
- } else {
697
- F.hideLoading();
698
- }
699
- },
700
- success: function (data, textStatus) {
701
- if (textStatus === 'success') {
702
- F.coming.content = data;
703
-
704
- F._afterLoad();
705
- }
706
- }
707
- }));
708
- },
709
-
710
- _preloadImages: function() {
711
- var group = F.group,
712
- current = F.current,
713
- len = group.length,
714
- item,
715
- href,
716
- i,
717
- cnt = Math.min(current.preload, len - 1);
718
-
719
- if (!current.preload || group.length < 2) {
720
- return;
721
- }
722
-
723
- for (i = 1; i <= cnt; i += 1) {
724
- item = group[ (current.index + i ) % len ];
725
- href = $( item ).attr('href') || item;
726
-
727
- if (item.type === 'image' || F.isImage(href)) {
728
- new Image().src = href;
729
- }
730
- }
731
- },
732
-
733
- _afterLoad: function () {
734
- F.hideLoading();
735
-
736
- if (!F.coming || false === F.trigger('afterLoad', F.current)) {
737
- F.coming = false;
738
-
739
- return;
740
- }
741
-
742
- if (F.isOpened) {
743
- $(".fancybox-item").remove();
744
-
745
- F.wrap.stop(true).removeClass('fancybox-opened');
746
- F.inner.css('overflow', 'hidden');
747
-
748
- F.transitions[F.current.prevMethod]();
749
-
750
- } else {
751
- $(".fancybox-wrap").stop().trigger('onReset').remove();
752
-
753
- F.trigger('afterClose');
754
- }
755
-
756
- F.unbindEvents();
757
-
758
- F.isOpen = false;
759
- F.current = F.coming;
760
-
761
- //Build the neccessary markup
762
- F.wrap = $(F.current.tpl.wrap).addClass('fancybox-' + (isMobile ? 'mobile' : 'desktop') + ' fancybox-type-' + F.current.type + ' fancybox-tmp ' + F.current.wrapCSS).appendTo('body');
763
- F.outer = $('.fancybox-outer', F.wrap).css('padding', F.current.padding + 'px');
764
- F.inner = $('.fancybox-inner', F.wrap);
765
-
766
- F._setContent();
767
- },
768
-
769
- _setContent: function () {
770
- var current = F.current,
771
- content = current.content,
772
- type = current.type,
773
- loadingBay,
774
- minWidth = current.minWidth,
775
- minHeight = current.minHeight,
776
- maxWidth = current.maxWidth,
777
- maxHeight = current.maxHeight;
778
-
779
- switch (type) {
780
- case 'inline':
781
- case 'ajax':
782
- case 'html':
783
- if (current.selector) {
784
- content = $('<div>').html(content).find(current.selector);
785
-
786
- } else if (content instanceof $) {
787
- if (content.parent().hasClass('fancybox-inner')) {
788
- content.parents('.fancybox-wrap').unbind('onReset');
789
- }
790
-
791
- content = content.show().detach();
792
-
793
- $(F.wrap).bind('onReset', function () {
794
- content.appendTo('body').hide();
795
- });
796
- }
797
-
798
- if (current.autoSize) {
799
- loadingBay = $('<div class="fancybox-wrap ' + F.current.wrapCSS + ' fancybox-tmp"></div>')
800
- .appendTo('body')
801
- .css({
802
- minWidth : isPercentage(minWidth) ? minWidth : minWidth + 'px',
803
- minHeight : isPercentage(minHeight) ? minHeight : minHeight + 'px',
804
- maxWidth : isPercentage(maxWidth) ? maxWidth : maxWidth + 'px',
805
- maxHeight : isPercentage(maxHeight) ? maxHeight : maxHeight + 'px'
806
- })
807
- .append(content);
808
-
809
- current.width = loadingBay.width();
810
- current.height = loadingBay.height();
811
-
812
- // Re-check to fix 1px bug in some browsers
813
- loadingBay.width( F.current.width );
814
-
815
- if (loadingBay.height() > current.height) {
816
- loadingBay.width(current.width + 1);
817
-
818
- current.width = loadingBay.width();
819
- current.height = loadingBay.height();
820
- }
821
-
822
- content = loadingBay.contents().detach();
823
-
824
- loadingBay.remove();
825
- }
826
-
827
- break;
828
-
829
- case 'image':
830
- content = current.tpl.image.replace('{href}', current.href);
831
-
832
- current.aspectRatio = true;
833
- break;
834
-
835
- case 'swf':
836
- content = current.tpl.swf.replace(/\{width\}/g, current.width).replace(/\{height\}/g, current.height).replace(/\{href\}/g, current.href);
837
- break;
838
-
839
- case 'iframe':
840
- content = $(current.tpl.iframe.replace('{rnd}', new Date().getTime()) )
841
- .attr('scrolling', current.scrolling)
842
- .attr('src', current.href);
843
-
844
- current.scrolling = isMobile ? 'scroll' : 'auto';
845
-
846
- break;
847
- }
848
-
849
- if (type === 'image' || type === 'swf') {
850
- current.autoSize = false;
851
- current.scrolling = 'visible';
852
- }
853
-
854
- if (type === 'iframe' && current.autoSize) {
855
- F.showLoading();
856
-
857
- F.inner
858
- .width(current.width)
859
- .height(current.height)
860
- .css('overflow', current.scrolling);
861
-
862
- content.bind({
863
- onCancel : function() {
864
- $(this).unbind();
865
-
866
- F._afterZoomOut();
867
- },
868
- load : function() {
869
- F.hideLoading();
870
-
871
- try {
872
- if (this.contentWindow.document.location) {
873
- F.current.height = $(this).contents().find('body').height();
874
- }
875
- } catch (e) {
876
- F.current.autoSize = false;
877
- }
878
-
879
- if (F.isOpened) {
880
- F.update();
881
-
882
- } else {
883
- F._beforeShow();
884
- }
885
- }
886
- }).appendTo(F.inner);
887
-
888
- } else {
889
- F.inner.append(content);
890
-
891
- F._beforeShow();
892
- }
893
- },
894
-
895
- _beforeShow : function() {
896
- F.coming = null;
897
-
898
- //Give a chance for helpers or callbacks to update elements
899
- F.trigger('beforeShow');
900
-
901
- //Set initial dimensions and hide
902
- F._setDimension();
903
- F.wrap.hide().removeClass('fancybox-tmp');
904
-
905
- F.bindEvents();
906
-
907
- F._preloadImages();
908
-
909
- F.transitions[ F.isOpened ? F.current.nextMethod : F.current.openMethod ]();
910
- },
911
-
912
- _setDimension: function () {
913
- var wrap = F.wrap,
914
- outer = F.outer,
915
- inner = F.inner,
916
- current = F.current,
917
- viewport = F.getViewport(),
918
- margin = current.margin,
919
- padding2 = current.padding * 2,
920
- width = current.width,
921
- height = current.height,
922
- maxWidth = current.maxWidth + padding2,
923
- maxHeight = current.maxHeight + padding2,
924
- minWidth = current.minWidth + padding2,
925
- minHeight = current.minHeight + padding2,
926
- ratio,
927
- height_,
928
- space;
929
-
930
- viewport.w -= (margin[1] + margin[3]);
931
- viewport.h -= (margin[0] + margin[2]);
932
-
933
- if (isPercentage(width)) {
934
- width = (((viewport.w - padding2) * parseFloat(width)) / 100);
935
- }
936
-
937
- if (isPercentage(height)) {
938
- height = (((viewport.h - padding2) * parseFloat(height)) / 100);
939
- }
940
-
941
- ratio = width / height;
942
- width += padding2;
943
- height += padding2;
944
-
945
- if (current.fitToView) {
946
- maxWidth = Math.min(viewport.w, maxWidth);
947
- maxHeight = Math.min(viewport.h, maxHeight);
948
- }
949
-
950
- if (current.aspectRatio) {
951
- if (width > maxWidth) {
952
- width = maxWidth;
953
- height = ((width - padding2) / ratio) + padding2;
954
- }
955
-
956
- if (height > maxHeight) {
957
- height = maxHeight;
958
- width = ((height - padding2) * ratio) + padding2;
959
- }
960
-
961
- if (width < minWidth) {
962
- width = minWidth;
963
- height = ((width - padding2) / ratio) + padding2;
964
- }
965
-
966
- if (height < minHeight) {
967
- height = minHeight;
968
- width = ((height - padding2) * ratio) + padding2;
969
- }
970
-
971
- } else {
972
- width = Math.max(minWidth, Math.min(width, maxWidth));
973
- height = Math.max(minHeight, Math.min(height, maxHeight));
974
- }
975
-
976
- width = Math.round(width);
977
- height = Math.round(height);
978
-
979
- //Reset dimensions
980
- $(wrap.add(outer).add(inner)).width('auto').height('auto');
981
-
982
- inner.width(width - padding2).height(height - padding2);
983
- wrap.width(width);
984
-
985
- height_ = wrap.height(); // Real wrap height
986
-
987
- //Fit wrapper inside
988
- if (width > maxWidth || height_ > maxHeight) {
989
- while ((width > maxWidth || height_ > maxHeight) && width > minWidth && height_ > minHeight) {
990
- height = height - 10;
991
-
992
- if (current.aspectRatio) {
993
- width = Math.round(((height - padding2) * ratio) + padding2);
994
-
995
- if (width < minWidth) {
996
- width = minWidth;
997
- height = ((width - padding2) / ratio) + padding2;
998
- }
999
-
1000
- } else {
1001
- width = width - 10;
1002
- }
1003
-
1004
- inner.width(width - padding2).height(height - padding2);
1005
- wrap.width(width);
1006
-
1007
- height_ = wrap.height();
1008
- }
1009
- }
1010
-
1011
- current.dim = {
1012
- width: width,
1013
- height: height_
1014
- };
1015
-
1016
- current.canGrow = current.autoSize && height > minHeight && height < maxHeight;
1017
- current.canShrink = false;
1018
- current.canExpand = false;
1019
-
1020
- if ((width - padding2) < current.width || (height - padding2) < current.height) {
1021
- current.canExpand = true;
1022
-
1023
- } else if ((width > viewport.w || height_ > viewport.h) && width > minWidth && height > minHeight) {
1024
- current.canShrink = true;
1025
- }
1026
-
1027
- space = height_ - padding2;
1028
-
1029
- F.innerSpace = space - inner.height();
1030
- F.outerSpace = space - outer.height();
1031
- },
1032
-
1033
- _getPosition: function (a) {
1034
- var current = F.current,
1035
- viewport = F.getViewport(),
1036
- margin = current.margin,
1037
- width = F.wrap.width() + margin[1] + margin[3],
1038
- height = F.wrap.height() + margin[0] + margin[2],
1039
- rez = {
1040
- position: 'absolute',
1041
- top: margin[0] + viewport.y,
1042
- left: margin[3] + viewport.x
1043
- };
1044
-
1045
- if (current.autoCenter && current.fixed && (!a || a[0] === false) && height <= viewport.h && width <= viewport.w) {
1046
- rez = {
1047
- position: 'fixed',
1048
- top: margin[0],
1049
- left: margin[3]
1050
- };
1051
- }
1052
-
1053
- rez.top = Math.ceil(Math.max(rez.top, rez.top + ((viewport.h - height) * current.topRatio))) + 'px';
1054
- rez.left = Math.ceil(Math.max(rez.left, rez.left + ((viewport.w - width) * 0.5))) + 'px';
1055
-
1056
- return rez;
1057
- },
1058
-
1059
- _afterZoomIn: function () {
1060
- var current = F.current, scrolling = current ? current.scrolling : 'no';
1061
-
1062
- if (!current) {
1063
- return;
1064
- }
1065
-
1066
- F.isOpen = F.isOpened = true;
1067
-
1068
- F.wrap.addClass('fancybox-opened').css('overflow', 'visible');
1069
-
1070
- F.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling));
1071
-
1072
- //Assign a click event
1073
- if (current.closeClick || current.nextClick) {
1074
- //This is not the perfect solution but arrows have to be next to content so their height will match
1075
- // and I do not want another wrapper around content
1076
- F.inner.css('cursor', 'pointer').bind('click.fb', function(e) {
1077
- if (!$(e.target).is('a') && !$(e.target).parent().is('a')) {
1078
- F[ current.closeClick ? 'close' : 'next' ]();
1079
- }
1080
- });
1081
- }
1082
-
1083
- //Create a close button
1084
- if (current.closeBtn) {
1085
- $(current.tpl.closeBtn).appendTo(F.outer).bind('click.fb', F.close);
1086
- }
1087
-
1088
- //Create navigation arrows
1089
- if (current.arrows && F.group.length > 1) {
1090
- if (current.loop || current.index > 0) {
1091
- $(current.tpl.prev).appendTo(F.inner).bind('click.fb', F.prev);
1092
- }
1093
-
1094
- if (current.loop || current.index < F.group.length - 1) {
1095
- $(current.tpl.next).appendTo(F.inner).bind('click.fb', F.next);
1096
- }
1097
- }
1098
-
1099
- F.trigger('afterShow');
1100
-
1101
- F.update();
1102
-
1103
- if (F.opts.autoPlay && !F.player.isActive) {
1104
- F.opts.autoPlay = false;
1105
-
1106
- F.play();
1107
- }
1108
- },
1109
-
1110
- _afterZoomOut: function () {
1111
- F.trigger('afterClose');
1112
-
1113
- F.wrap.trigger('onReset').remove();
1114
-
1115
- $.extend(F, {
1116
- group: {},
1117
- opts: {},
1118
- current: null,
1119
- isActive: false,
1120
- isOpened: false,
1121
- isOpen: false,
1122
- wrap: null,
1123
- outer: null,
1124
- inner: null
1125
- });
1126
- }
1127
- });
1128
-
1129
- /*
1130
- * Default transitions
1131
- */
1132
-
1133
- F.transitions = {
1134
- getOrigPosition: function () {
1135
- var current = F.current,
1136
- element = current.element,
1137
- padding = current.padding,
1138
- orig = $(current.orig),
1139
- pos = {},
1140
- width = 50,
1141
- height = 50,
1142
- viewport;
1143
-
1144
- if (!orig.length && current.isDom && $(element).is(':visible')) {
1145
- orig = $(element).find('img:first');
1146
-
1147
- if (!orig.length) {
1148
- orig = $(element);
1149
- }
1150
- }
1151
-
1152
- if (orig.length) {
1153
- pos = orig.offset();
1154
-
1155
- if (orig.is('img')) {
1156
- width = orig.outerWidth();
1157
- height = orig.outerHeight();
1158
- }
1159
-
1160
- } else {
1161
- viewport = F.getViewport();
1162
-
1163
- pos.top = viewport.y + (viewport.h - height) * 0.5;
1164
- pos.left = viewport.x + (viewport.w - width) * 0.5;
1165
- }
1166
-
1167
- pos = {
1168
- top: Math.ceil(pos.top - padding) + 'px',
1169
- left: Math.ceil(pos.left - padding) + 'px',
1170
- width: Math.ceil(width + padding * 2) + 'px',
1171
- height: Math.ceil(height + padding * 2) + 'px'
1172
- };
1173
-
1174
- return pos;
1175
- },
1176
-
1177
- step: function (now, fx) {
1178
- var ratio, innerValue, outerValue;
1179
-
1180
- if (fx.prop === 'width' || fx.prop === 'height') {
1181
- innerValue = outerValue = Math.ceil(now - (F.current.padding * 2));
1182
-
1183
- if (fx.prop === 'height') {
1184
- ratio = (now - fx.start) / (fx.end - fx.start);
1185
-
1186
- if (fx.start > fx.end) {
1187
- ratio = 1 - ratio;
1188
- }
1189
-
1190
- innerValue -= F.innerSpace * ratio;
1191
- outerValue -= F.outerSpace * ratio;
1192
- }
1193
-
1194
- F.inner[fx.prop](innerValue);
1195
- F.outer[fx.prop](outerValue);
1196
- }
1197
- },
1198
-
1199
- zoomIn: function () {
1200
- var wrap = F.wrap,
1201
- current = F.current,
1202
- effect = current.openEffect,
1203
- elastic = effect === 'elastic',
1204
- dim = current.dim,
1205
- startPos = $.extend({}, dim, F._getPosition( elastic )),
1206
- endPos = $.extend({opacity : 1}, startPos);
1207
-
1208
- //Remove "position" property that breaks older IE
1209
- delete endPos.position;
1210
-
1211
- if (elastic) {
1212
- startPos = this.getOrigPosition();
1213
-
1214
- if (current.openOpacity) {
1215
- startPos.opacity = 0;
1216
- }
1217
-
1218
- F.outer.add(F.inner).width('auto').height('auto');
1219
- } else if (effect === 'fade') {
1220
- startPos.opacity = 0;
1221
- }
1222
-
1223
- wrap.css(startPos)
1224
- .show()
1225
- .animate(endPos, {
1226
- duration : effect === 'none' ? 0 : current.openSpeed,
1227
- easing : current.openEasing,
1228
- step: elastic ? this.step : null,
1229
- complete: F._afterZoomIn
1230
- });
1231
- },
1232
-
1233
- zoomOut: function () {
1234
- var wrap = F.wrap,
1235
- current = F.current,
1236
- effect = current.openEffect,
1237
- elastic = effect === 'elastic',
1238
- endPos = {opacity : 0};
1239
-
1240
- if (elastic) {
1241
- if (wrap.css('position') === 'fixed') {
1242
- wrap.css(F._getPosition(true));
1243
- }
1244
-
1245
- endPos = this.getOrigPosition();
1246
-
1247
- if (current.closeOpacity) {
1248
- endPos.opacity = 0;
1249
- }
1250
- }
1251
-
1252
- wrap.animate(endPos, {
1253
- duration: effect === 'none' ? 0 : current.closeSpeed,
1254
- easing: current.closeEasing,
1255
- step: elastic ? this.step : null,
1256
- complete: F._afterZoomOut
1257
- });
1258
- },
1259
-
1260
- changeIn: function () {
1261
- var wrap = F.wrap,
1262
- current = F.current,
1263
- effect = current.nextEffect,
1264
- startPos = F._getPosition( effect === 'elastic' ),
1265
- endPos = { opacity : 1 };
1266
-
1267
- if (effect === 'elastic') {
1268
- startPos.top = (parseInt(startPos.top, 10) - 200) + 'px';
1269
- endPos.top = '+=200px';
1270
- startPos.opacity = 0;
1271
- }
1272
-
1273
- wrap.css(startPos)
1274
- .show()
1275
- .animate(endPos, {
1276
- duration : effect === 'none' ? 0 : current.nextSpeed,
1277
- easing : current.nextEasing,
1278
- complete: function() {
1279
- //Somehow this helps to restore overflow
1280
- setTimeout( F._afterZoomIn, 1);
1281
- }
1282
- });
1283
- },
1284
-
1285
- changeOut: function () {
1286
- var wrap = F.wrap,
1287
- current = F.current,
1288
- effect = current.nextEffect,
1289
- endPos = { opacity : 0 },
1290
- cleanUp = function () {
1291
- $(this).trigger('onReset').remove();
1292
- };
1293
-
1294
- wrap.removeClass('fancybox-opened');
1295
-
1296
- if (effect === 'elastic') {
1297
- endPos.top = '+=200px';
1298
- }
1299
-
1300
- wrap.animate(endPos, {
1301
- duration: effect === 'none' ? 0 : current.prevSpeed,
1302
- easing: current.prevEasing,
1303
- complete: cleanUp
1304
- });
1305
- }
1306
- };
1307
-
1308
- /*
1309
- * Overlay helper
1310
- */
1311
-
1312
- F.helpers.overlay = {
1313
- overlay: null,
1314
-
1315
- update: function () {
1316
- var width, scrollWidth, offsetWidth;
1317
-
1318
- if (!isMobile) {
1319
- //Reset width/height so it will not mess
1320
- this.overlay.width(0).height(0);
1321
- }
1322
-
1323
- if ($.browser.msie) {
1324
- scrollWidth = Math.max(document.documentElement.scrollWidth, document.body.scrollWidth);
1325
- offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth);
1326
-
1327
- width = scrollWidth < offsetWidth ? W.width() : scrollWidth;
1328
-
1329
- } else {
1330
- width = D.width();
1331
- }
1332
-
1333
- this.overlay.width(width).height(D.height());
1334
- },
1335
-
1336
- beforeShow: function (opts) {
1337
- if (this.overlay) {
1338
- return;
1339
- }
1340
-
1341
- opts = $.extend(true, {
1342
- speedIn : 'fast',
1343
- closeClick : true,
1344
- opacity : 1,
1345
- css : {
1346
- background: 'black'
1347
- }
1348
- }, opts);
1349
-
1350
- this.overlay = $('<div id="fancybox-overlay"></div>').css(opts.css).appendTo('body');
1351
-
1352
- this.update();
1353
-
1354
- if (opts.closeClick) {
1355
- this.overlay.bind('click.fb', F.close);
1356
- }
1357
-
1358
- W.bind("resize.fb", $.proxy(this.update, this));
1359
-
1360
- this.overlay.fadeTo(opts.speedIn, opts.opacity);
1361
- },
1362
-
1363
- onUpdate: function () {
1364
- //Update as content may change document dimensions
1365
- this.update();
1366
- },
1367
-
1368
- afterClose: function (opts) {
1369
- if (this.overlay) {
1370
- this.overlay.fadeOut(opts.speedOut || 0, function () {
1371
- $(this).remove();
1372
- });
1373
- }
1374
-
1375
- this.overlay = null;
1376
- }
1377
- };
1378
-
1379
- /*
1380
- * Title helper
1381
- */
1382
-
1383
- F.helpers.title = {
1384
- beforeShow: function (opts) {
1385
- var title, text = F.current.title;
1386
-
1387
- if (text) {
1388
- title = $('<div class="fancybox-title fancybox-title-' + opts.type + '-wrap">' + text + '</div>').appendTo('body');
1389
-
1390
- if (opts.type === 'float') {
1391
- //This helps for some browsers
1392
- title.width(title.width());
1393
-
1394
- title.wrapInner('<span class="child"></span>');
1395
-
1396
- //Increase bottom margin so this title will also fit into viewport
1397
- F.current.margin[2] += Math.abs(parseInt(title.css('margin-bottom'), 10));
1398
- }
1399
-
1400
- title.appendTo(opts.type === 'over' ? F.inner : (opts.type === 'outside' ? F.wrap : F.outer));
1401
- }
1402
- }
1403
- };
1404
-
1405
- // jQuery plugin initialization
1406
- $.fn.fancybox = function (options) {
1407
- var that = $(this),
1408
- selector = this.selector || '',
1409
- index,
1410
- run = function(e) {
1411
- var what = this, idx = index, relType, relVal;
1412
-
1413
- if (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {
1414
- e.preventDefault();
1415
-
1416
- relType = options.groupAttr || 'data-fancybox-group';
1417
- relVal = $(what).attr(relType);
1418
-
1419
- if (!relVal) {
1420
- relType = 'rel';
1421
- relVal = what[ relType ];
1422
- }
1423
-
1424
- if (relVal && relVal !== '' && relVal !== 'nofollow') {
1425
- what = selector.length ? $(selector) : that;
1426
- what = what.filter('[' + relType + '="' + relVal + '"]');
1427
- idx = what.index(this);
1428
- }
1429
-
1430
- options.index = idx;
1431
-
1432
- F.open(what, options);
1433
- }
1434
- };
1435
-
1436
- options = options || {};
1437
- index = options.index || 0;
1438
-
1439
- if (selector) {
1440
- D.undelegate(selector, 'click.fb-start').delegate(selector, 'click.fb-start', run);
1441
-
1442
- } else {
1443
- that.unbind('click.fb-start').bind('click.fb-start', run);
1444
- }
1445
-
1446
- return this;
1447
- };
1448
-
1449
- }(window, document));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/assets/fancyBox/source/jquery.fancybox.pack.js DELETED
@@ -1,35 +0,0 @@
1
- /*! fancyBox v2.0.5 fancyapps.com | fancyapps.com/fancybox/#license */
2
- (function(n,q,v){var d=n.jQuery,l=d(n),m=d(q),a=d.fancybox=function(){a.open.apply(this,arguments)},u=!1,r=q.createTouch!==v,s=function(a){return"string"===d.type(a)},t=function(a){return s(a)&&-1<a.indexOf("%")};d.extend(a,{version:"2.0.5",defaults:{padding:15,margin:20,width:800,height:600,minWidth:100,minHeight:100,maxWidth:9999,maxHeight:9999,autoSize:!0,autoResize:!r,autoCenter:!r,fitToView:!0,aspectRatio:!1,topRatio:0.5,fixed:!(d.browser.msie&&6>=d.browser.version)&&!r,scrolling:"auto",wrapCSS:"fancybox-default",
3
- arrows:!0,closeBtn:!0,closeClick:!1,nextClick:!1,mouseWheel:!0,autoPlay:!1,playSpeed:3E3,preload:3,modal:!1,loop:!0,ajax:{dataType:"html",headers:{"X-fancyBox":!0}},keys:{next:[13,32,34,39,40],prev:[8,33,37,38],close:[27]},tpl:{wrap:'<div class="fancybox-wrap"><div class="fancybox-outer"><div class="fancybox-inner"></div></div></div>',image:'<img class="fancybox-image" src="{href}" alt="" />',iframe:'<iframe class="fancybox-iframe" name="fancybox-frame{rnd}" frameborder="0" hspace="0"'+(d.browser.msie?
4
- ' allowtransparency="true"':"")+"></iframe>",swf:'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%"><param name="wmode" value="transparent" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="{href}" /><embed src="{href}" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="100%" height="100%" wmode="transparent"></embed></object>',error:'<p class="fancybox-error">The requested content cannot be loaded.<br/>Please try again later.</p>',
5
- closeBtn:'<div title="Close" class="fancybox-item fancybox-close"></div>',next:'<a title="Next" class="fancybox-nav fancybox-next"><span></span></a>',prev:'<a title="Previous" class="fancybox-nav fancybox-prev"><span></span></a>'},openEffect:"fade",openSpeed:250,openEasing:"swing",openOpacity:!0,openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:300,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",
6
- prevSpeed:300,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:{speedIn:0,speedOut:300,opacity:0.8,css:{cursor:"pointer"},closeClick:!0},title:{type:"float"}}},group:{},opts:{},coming:null,current:null,isOpen:!1,isOpened:!1,wrap:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(b,c){a.close(!0);b&&!d.isArray(b)&&(b=b instanceof d?d(b).get():[b]);a.isActive=!0;a.opts=d.extend(!0,{},a.defaults,c);d.isPlainObject(c)&&
7
- c.keys!==v&&(a.opts.keys=c.keys?d.extend({},a.defaults.keys,c.keys):!1);a.group=b;a._start(a.opts.index||0)},cancel:function(){a.coming&&!1===a.trigger("onCancel")||(a.coming=null,a.hideLoading(),a.ajaxLoad&&a.ajaxLoad.abort(),a.ajaxLoad=null,a.imgPreload&&(a.imgPreload.onload=a.imgPreload.onabort=a.imgPreload.onerror=null))},close:function(b){a.cancel();a.current&&!1!==a.trigger("beforeClose")&&(a.unbindEvents(),!a.isOpen||b&&!0===b[0]?(d(".fancybox-wrap").stop().trigger("onReset").remove(),a._afterZoomOut()):
8
- (a.isOpen=a.isOpened=!1,d(".fancybox-item, .fancybox-nav").remove(),a.wrap.stop(!0).removeClass("fancybox-opened"),a.inner.css("overflow","hidden"),a.transitions[a.current.closeMethod]()))},play:function(b){var c=function(){clearTimeout(a.player.timer)},g=function(){c();a.current&&a.player.isActive&&(a.player.timer=setTimeout(a.next,a.current.playSpeed))},e=function(){c();d("body").unbind(".player");a.player.isActive=!1;a.trigger("onPlayEnd")};if(a.player.isActive||b&&!1===b[0])e();else if(a.current&&
9
- (a.current.loop||a.current.index<a.group.length-1))a.player.isActive=!0,d("body").bind({"afterShow.player onUpdate.player":g,"onCancel.player beforeClose.player":e,"beforeLoad.player":c}),g(),a.trigger("onPlayStart")},next:function(){a.current&&a.jumpto(a.current.index+1)},prev:function(){a.current&&a.jumpto(a.current.index-1)},jumpto:function(b){a.current&&(b=parseInt(b,10),1<a.group.length&&a.current.loop&&(b>=a.group.length?b=0:0>b&&(b=a.group.length-1)),a.group[b]!==v&&(a.cancel(),a._start(b)))},
10
- reposition:function(b,c){a.isOpen&&(c&&"scroll"===c.type?a.wrap.stop().animate(a._getPosition(b),200):a.wrap.css(a._getPosition(b)))},update:function(b){a.isOpen&&(u||setTimeout(function(){var c=a.current;if(u&&(u=!1,c)){if(!b||b&&("orientationchange"===b.type||c.autoResize&&"resize"===b.type))c.autoSize&&"iframe"!==c.type&&(a.inner.height("auto"),c.height=a.inner.height()),a._setDimension(),c.canGrow&&"iframe"!==c.type&&a.inner.height("auto");c.autoCenter&&a.reposition(null,b);a.trigger("onUpdate")}},
11
- 100),u=!0)},toggle:function(){a.isOpen&&(a.current.fitToView=!a.current.fitToView,a.update())},hideLoading:function(){m.unbind("keypress.fb");d("#fancybox-loading").remove()},showLoading:function(){a.hideLoading();m.bind("keypress.fb",function(b){27===b.keyCode&&(b.preventDefault(),a.cancel())});d('<div id="fancybox-loading"><div></div></div>').click(a.cancel).appendTo("body")},getViewport:function(){return{x:l.scrollLeft(),y:l.scrollTop(),w:n.innerWidth?n.innerWidth:l.width(),h:n.innerHeight?n.innerHeight:
12
- l.height()}},unbindEvents:function(){a.wrap&&a.wrap.unbind(".fb");m.unbind(".fb");l.unbind(".fb")},bindEvents:function(){var b=a.current,c=b.keys;b&&(l.bind("resize.fb, orientationchange.fb",a.update),!b.fixed&&b.autoCenter&&l.bind("scroll.fb",a.update),c&&m.bind("keydown.fb",function(b){var e;!b.ctrlKey&&!b.altKey&&!b.shiftKey&&!b.metaKey&&0>d.inArray(b.target.tagName.toLowerCase(),["input","textarea","select","button"])&&!d(b.target).is("[contenteditable]")&&(e=b.keyCode,-1<d.inArray(e,c.close)?
13
- (a.close(),b.preventDefault()):-1<d.inArray(e,c.next)?(a.next(),b.preventDefault()):-1<d.inArray(e,c.prev)&&(a.prev(),b.preventDefault()))}),d.fn.mousewheel&&b.mouseWheel&&1<a.group.length&&a.wrap.bind("mousewheel.fb",function(b,c){var d=b.target||null;if(0!==c&&(!d||0===d.clientHeight||d.scrollHeight===d.clientHeight&&d.scrollWidth===d.clientWidth))b.preventDefault(),a[0<c?"prev":"next"]()}))},trigger:function(b){var c,g=a[-1<d.inArray(b,["onCancel","beforeLoad","afterLoad"])?"coming":"current"];
14
- if(g){d.isFunction(g[b])&&(c=g[b].apply(g,Array.prototype.slice.call(arguments,1)));if(!1===c)return!1;g.helpers&&d.each(g.helpers,function(c,f){if(f&&d.isPlainObject(a.helpers[c])&&d.isFunction(a.helpers[c][b]))a.helpers[c][b](f,g)});d.event.trigger(b+".fb")}},isImage:function(a){return s(a)&&a.match(/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i)},isSWF:function(a){return s(a)&&a.match(/\.(swf)(.*)?$/i)},_start:function(b){var c={},g=a.group[b]||null,e,f,i;if(g&&(g.nodeType||g instanceof d))e=!0,d.metadata&&
15
- (c=d(g).metadata());c=d.extend(!0,{},a.opts,{index:b,element:g},d.isPlainObject(g)?g:c);d.each(["href","title","content","type"],function(b,f){c[f]=a.opts[f]||e&&d(g).attr(f)||c[f]||null});"number"===typeof c.margin&&(c.margin=[c.margin,c.margin,c.margin,c.margin]);c.modal&&d.extend(!0,c,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1,mouseWheel:!1,keys:null,helpers:{overlay:{css:{cursor:"auto"},closeClick:!1}}});a.coming=c;if(!1===a.trigger("beforeLoad"))a.coming=null;else{f=c.type;b=c.href||g;
16
- f||(e&&(i=d(g).data("fancybox-type"),!i&&g.className&&(f=(i=g.className.match(/fancybox\.(\w+)/))?i[1]:null)),!f&&s(b)&&(a.isImage(b)?f="image":a.isSWF(b)?f="swf":b.match(/^#/)&&(f="inline")),f||(f=e?"inline":"html"),c.type=f);if("inline"===f||"html"===f){if(c.content||(c.content="inline"===f?d(s(b)?b.replace(/.*(?=#[^\s]+$)/,""):b):g),!c.content||!c.content.length)f=null}else b||(f=null);"ajax"===f&&s(b)&&(i=b.split(/\s+/,2),b=i.shift(),c.selector=i.shift());c.href=b;c.group=a.group;c.isDom=e;"image"===
17
- f?a._loadImage():"ajax"===f?a._loadAjax():f?a._afterLoad():a._error("type")}},_error:function(b){a.hideLoading();d.extend(a.coming,{type:"html",autoSize:!0,minHeight:0,hasError:b,content:a.coming.tpl.error});a._afterLoad()},_loadImage:function(){var b=a.imgPreload=new Image;b.onload=function(){this.onload=this.onerror=null;a.coming.width=this.width;a.coming.height=this.height;a._afterLoad()};b.onerror=function(){this.onload=this.onerror=null;a._error("image")};b.src=a.coming.href;b.width||a.showLoading()},
18
- _loadAjax:function(){a.showLoading();a.ajaxLoad=d.ajax(d.extend({},a.coming.ajax,{url:a.coming.href,error:function(b,c){a.coming&&"abort"!==c?a._error("ajax",b):a.hideLoading()},success:function(b,c){"success"===c&&(a.coming.content=b,a._afterLoad())}}))},_preloadImages:function(){var b=a.group,c=a.current,g=b.length,e,f,i,h=Math.min(c.preload,g-1);if(c.preload&&!(2>b.length))for(i=1;i<=h;i+=1)if(e=b[(c.index+i)%g],f=d(e).attr("href")||e,"image"===e.type||a.isImage(f))(new Image).src=f},_afterLoad:function(){a.hideLoading();
19
- !a.coming||!1===a.trigger("afterLoad",a.current)?a.coming=!1:(a.isOpened?(d(".fancybox-item").remove(),a.wrap.stop(!0).removeClass("fancybox-opened"),a.inner.css("overflow","hidden"),a.transitions[a.current.prevMethod]()):(d(".fancybox-wrap").stop().trigger("onReset").remove(),a.trigger("afterClose")),a.unbindEvents(),a.isOpen=!1,a.current=a.coming,a.wrap=d(a.current.tpl.wrap).addClass("fancybox-"+(r?"mobile":"desktop")+" fancybox-type-"+a.current.type+" fancybox-tmp "+a.current.wrapCSS).appendTo("body"),
20
- a.outer=d(".fancybox-outer",a.wrap).css("padding",a.current.padding+"px"),a.inner=d(".fancybox-inner",a.wrap),a._setContent())},_setContent:function(){var b=a.current,c=b.content,g=b.type,e;e=b.minWidth;var f=b.minHeight,i=b.maxWidth,h=b.maxHeight;switch(g){case "inline":case "ajax":case "html":b.selector?c=d("<div>").html(c).find(b.selector):c instanceof d&&(c.parent().hasClass("fancybox-inner")&&c.parents(".fancybox-wrap").unbind("onReset"),c=c.show().detach(),d(a.wrap).bind("onReset",function(){c.appendTo("body").hide()}));
21
- b.autoSize&&(e=d('<div class="fancybox-wrap '+a.current.wrapCSS+' fancybox-tmp"></div>').appendTo("body").css({minWidth:t(e)?e:e+"px",minHeight:t(f)?f:f+"px",maxWidth:t(i)?i:i+"px",maxHeight:t(h)?h:h+"px"}).append(c),b.width=e.width(),b.height=e.height(),e.width(a.current.width),e.height()>b.height&&(e.width(b.width+1),b.width=e.width(),b.height=e.height()),c=e.contents().detach(),e.remove());break;case "image":c=b.tpl.image.replace("{href}",b.href);b.aspectRatio=!0;break;case "swf":c=b.tpl.swf.replace(/\{width\}/g,
22
- b.width).replace(/\{height\}/g,b.height).replace(/\{href\}/g,b.href);break;case "iframe":c=d(b.tpl.iframe.replace("{rnd}",(new Date).getTime())).attr("scrolling",b.scrolling).attr("src",b.href),b.scrolling=r?"scroll":"auto"}if("image"===g||"swf"===g)b.autoSize=!1,b.scrolling="visible";"iframe"===g&&b.autoSize?(a.showLoading(),a.inner.width(b.width).height(b.height).css("overflow",b.scrolling),c.bind({onCancel:function(){d(this).unbind();a._afterZoomOut()},load:function(){a.hideLoading();try{this.contentWindow.document.location&&
23
- (a.current.height=d(this).contents().find("body").height())}catch(b){a.current.autoSize=!1}a.isOpened?a.update():a._beforeShow()}}).appendTo(a.inner)):(a.inner.append(c),a._beforeShow())},_beforeShow:function(){a.coming=null;a.trigger("beforeShow");a._setDimension();a.wrap.hide().removeClass("fancybox-tmp");a.bindEvents();a._preloadImages();a.transitions[a.isOpened?a.current.nextMethod:a.current.openMethod]()},_setDimension:function(){var b=a.wrap,c=a.outer,g=a.inner,e=a.current,f=a.getViewport(),
24
- i=e.margin,h=2*e.padding,j=e.width,k=e.height,l=e.maxWidth+h,o=e.maxHeight+h,m=e.minWidth+h,n=e.minHeight+h,p;f.w-=i[1]+i[3];f.h-=i[0]+i[2];t(j)&&(j=(f.w-h)*parseFloat(j)/100);t(k)&&(k=(f.h-h)*parseFloat(k)/100);i=j/k;j+=h;k+=h;e.fitToView&&(l=Math.min(f.w,l),o=Math.min(f.h,o));if(e.aspectRatio){if(j>l&&(j=l,k=(j-h)/i+h),k>o&&(k=o,j=(k-h)*i+h),j<m&&(j=m,k=(j-h)/i+h),k<n)k=n,j=(k-h)*i+h}else j=Math.max(m,Math.min(j,l)),k=Math.max(n,Math.min(k,o));j=Math.round(j);k=Math.round(k);d(b.add(c).add(g)).width("auto").height("auto");
25
- g.width(j-h).height(k-h);b.width(j);p=b.height();if(j>l||p>o)for(;(j>l||p>o)&&j>m&&p>n;)k-=10,e.aspectRatio?(j=Math.round((k-h)*i+h),j<m&&(j=m,k=(j-h)/i+h)):j-=10,g.width(j-h).height(k-h),b.width(j),p=b.height();e.dim={width:j,height:p};e.canGrow=e.autoSize&&k>n&&k<o;e.canShrink=!1;e.canExpand=!1;if(j-h<e.width||k-h<e.height)e.canExpand=!0;else if((j>f.w||p>f.h)&&j>m&&k>n)e.canShrink=!0;b=p-h;a.innerSpace=b-g.height();a.outerSpace=b-c.height()},_getPosition:function(b){var c=a.current,d=a.getViewport(),
26
- e=c.margin,f=a.wrap.width()+e[1]+e[3],i=a.wrap.height()+e[0]+e[2],h={position:"absolute",top:e[0]+d.y,left:e[3]+d.x};if(c.autoCenter&&c.fixed&&(!b||!1===b[0])&&i<=d.h&&f<=d.w)h={position:"fixed",top:e[0],left:e[3]};h.top=Math.ceil(Math.max(h.top,h.top+(d.h-i)*c.topRatio))+"px";h.left=Math.ceil(Math.max(h.left,h.left+0.5*(d.w-f)))+"px";return h},_afterZoomIn:function(){var b=a.current,c=b?b.scrolling:"no";if(b&&(a.isOpen=a.isOpened=!0,a.wrap.addClass("fancybox-opened").css("overflow","visible"),a.inner.css("overflow",
27
- "yes"===c?"scroll":"no"===c?"hidden":c),(b.closeClick||b.nextClick)&&a.inner.css("cursor","pointer").bind("click.fb",function(c){if(!d(c.target).is("a")&&!d(c.target).parent().is("a"))a[b.closeClick?"close":"next"]()}),b.closeBtn&&d(b.tpl.closeBtn).appendTo(a.outer).bind("click.fb",a.close),b.arrows&&1<a.group.length&&((b.loop||0<b.index)&&d(b.tpl.prev).appendTo(a.inner).bind("click.fb",a.prev),(b.loop||b.index<a.group.length-1)&&d(b.tpl.next).appendTo(a.inner).bind("click.fb",a.next)),a.trigger("afterShow"),
28
- a.update(),a.opts.autoPlay&&!a.player.isActive))a.opts.autoPlay=!1,a.play()},_afterZoomOut:function(){a.trigger("afterClose");a.wrap.trigger("onReset").remove();d.extend(a,{group:{},opts:{},current:null,isActive:!1,isOpened:!1,isOpen:!1,wrap:null,outer:null,inner:null})}});a.transitions={getOrigPosition:function(){var b=a.current,c=b.element,g=b.padding,e=d(b.orig),f={},i=50,h=50;!e.length&&b.isDom&&d(c).is(":visible")&&(e=d(c).find("img:first"),e.length||(e=d(c)));e.length?(f=e.offset(),e.is("img")&&
29
- (i=e.outerWidth(),h=e.outerHeight())):(b=a.getViewport(),f.top=b.y+0.5*(b.h-h),f.left=b.x+0.5*(b.w-i));return f={top:Math.ceil(f.top-g)+"px",left:Math.ceil(f.left-g)+"px",width:Math.ceil(i+2*g)+"px",height:Math.ceil(h+2*g)+"px"}},step:function(b,c){var d,e,f;if("width"===c.prop||"height"===c.prop)e=f=Math.ceil(b-2*a.current.padding),"height"===c.prop&&(d=(b-c.start)/(c.end-c.start),c.start>c.end&&(d=1-d),e-=a.innerSpace*d,f-=a.outerSpace*d),a.inner[c.prop](e),a.outer[c.prop](f)},zoomIn:function(){var b=
30
- a.wrap,c=a.current,g=c.openEffect,e="elastic"===g,f=d.extend({},c.dim,a._getPosition(e)),i=d.extend({opacity:1},f);delete i.position;e?(f=this.getOrigPosition(),c.openOpacity&&(f.opacity=0),a.outer.add(a.inner).width("auto").height("auto")):"fade"===g&&(f.opacity=0);b.css(f).show().animate(i,{duration:"none"===g?0:c.openSpeed,easing:c.openEasing,step:e?this.step:null,complete:a._afterZoomIn})},zoomOut:function(){var b=a.wrap,c=a.current,d=c.openEffect,e="elastic"===d,f={opacity:0};e&&("fixed"===b.css("position")&&
31
- b.css(a._getPosition(!0)),f=this.getOrigPosition(),c.closeOpacity&&(f.opacity=0));b.animate(f,{duration:"none"===d?0:c.closeSpeed,easing:c.closeEasing,step:e?this.step:null,complete:a._afterZoomOut})},changeIn:function(){var b=a.wrap,c=a.current,d=c.nextEffect,e=a._getPosition("elastic"===d),f={opacity:1};"elastic"===d&&(e.top=parseInt(e.top,10)-200+"px",f.top="+=200px",e.opacity=0);b.css(e).show().animate(f,{duration:"none"===d?0:c.nextSpeed,easing:c.nextEasing,complete:function(){setTimeout(a._afterZoomIn,
32
- 1)}})},changeOut:function(){var b=a.wrap,c=a.current,g=c.nextEffect,e={opacity:0};b.removeClass("fancybox-opened");"elastic"===g&&(e.top="+=200px");b.animate(e,{duration:"none"===g?0:c.prevSpeed,easing:c.prevEasing,complete:function(){d(this).trigger("onReset").remove()}})}};a.helpers.overlay={overlay:null,update:function(){var a,c;r||this.overlay.width(0).height(0);d.browser.msie?(a=Math.max(q.documentElement.scrollWidth,q.body.scrollWidth),c=Math.max(q.documentElement.offsetWidth,q.body.offsetWidth),
33
- a=a<c?l.width():a):a=m.width();this.overlay.width(a).height(m.height())},beforeShow:function(b){this.overlay||(b=d.extend(!0,{speedIn:"fast",closeClick:!0,opacity:1,css:{background:"black"}},b),this.overlay=d('<div id="fancybox-overlay"></div>').css(b.css).appendTo("body"),this.update(),b.closeClick&&this.overlay.bind("click.fb",a.close),l.bind("resize.fb",d.proxy(this.update,this)),this.overlay.fadeTo(b.speedIn,b.opacity))},onUpdate:function(){this.update()},afterClose:function(a){this.overlay&&
34
- this.overlay.fadeOut(a.speedOut||0,function(){d(this).remove()});this.overlay=null}};a.helpers.title={beforeShow:function(b){var c;if(c=a.current.title)c=d('<div class="fancybox-title fancybox-title-'+b.type+'-wrap">'+c+"</div>").appendTo("body"),"float"===b.type&&(c.width(c.width()),c.wrapInner('<span class="child"></span>'),a.current.margin[2]+=Math.abs(parseInt(c.css("margin-bottom"),10))),c.appendTo("over"===b.type?a.inner:"outside"===b.type?a.wrap:a.outer)}};d.fn.fancybox=function(b){var c=d(this),
35
- g=this.selector||"",e,f=function(f){var h=this,j=e,k;!f.ctrlKey&&!f.altKey&&!f.shiftKey&&!f.metaKey&&(f.preventDefault(),f=b.groupAttr||"data-fancybox-group",k=d(h).attr(f),k||(f="rel",k=h[f]),k&&""!==k&&"nofollow"!==k&&(h=g.length?d(g):c,h=h.filter("["+f+'="'+k+'"]'),j=h.index(this)),b.index=j,a.open(h,b))},b=b||{};e=b.index||0;g?m.undelegate(g,"click.fb-start").delegate(g,"click.fb-start",f):c.unbind("click.fb-start").bind("click.fb-start",f);return this}})(window,document);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/assets/hmbkp.css DELETED
@@ -1,89 +0,0 @@
1
- #icon-backupwordpress.icon32 { background: url(icon_backupwordpress_32x32.png); }
2
-
3
- tfoot p { margin: 0; font-weight: normal; }
4
- #hmbkp-constants dl { overflow: hidden; margin: 20px 0; }
5
- #hmbkp-constants dt { float: left; min-width: 250px; clear: both; padding: 6px; margin: 1px 0; cursor: pointer; }
6
- #hmbkp-constants dd { color: #666; padding: 7px 0 7px 250px; border-top: 1px solid #DFDFDF; margin: 0; cursor: pointer; min-height: 40px; }
7
- #hmbkp-constants dd:last-child { border-bottom: 1px solid #DFDFDF; }
8
- #hmbkp-constants dt:not(.hmbkp_active) + dd { background: #F9F9F9; }
9
- #hmbkp-constants dd .example { white-space: nowrap; display: none; }
10
- #hmbkp-constants dd p { margin: 0; }
11
- #hmbkp-constants dt:not(.hmbkp_active):hover + dd, #hmbkp-constants dt:not(.hmbkp_active) + dd:hover { background-color: #FFF; }
12
- #hmbkp-constants dd:hover p, #hmbkp-constants dt:hover + dd p { display: none; }
13
- #hmbkp-constants dd:hover .example, #hmbkp-constants dt:hover + dd .example { display: inline; }
14
-
15
- .completed th, .completed td { background-color: #FFFFE0; }
16
- .hmbkp_active:before { content: "\00a0 \2713 "; font-size: 11px; }
17
- .hmbkp_active, .hmbkp_active code, #hmbkp-constants .hmbkp_active + dd { background: #E5F7E8; }
18
- .contextual-help-tabs-wrap .updated { margin: 15px 0 0; }
19
-
20
- .subsubsub { width: 100%; margin: 20px 0px 0px 0px; border-bottom: 1px solid #EEE; }
21
- .subsubsub li + li::before { content: "| "; }
22
- .subsubsub .add-new-h2 { top: 0; }
23
-
24
- .ui-tabs-nav .ui-tabs-selected a, .ui-tabs-nav .ui-state-active a { font-weight: bold; color: #000; }
25
- .hmbkp_schedule { clear: both; overflow: hidden; }
26
-
27
- .fancybox-inner { overflow-x: hidden !important; }
28
- .fancybox-inner fieldset { max-width: 100%; }
29
- .hmbkp-form fieldset { float: left; }
30
- .js .hmbkp-form fieldset + fieldset { display: none; margin-right: -100%; }
31
-
32
- .hmbkp-form label { display: block; line-height: 25px; padding-bottom: 20px; border-bottom: 1px dotted #CCC; margin-bottom: 20px; width: 320px; position: relative; }
33
-
34
- .hmbkp-form legend { padding: 0 0 20px; font-size: 1.17em; font-weight: bold; }
35
- .hmbkp-form label > * { float: right; }
36
- .hmbkp-form label.hidden { display: none; }
37
- .hmbkp-form label > input, .hmbkp-form label > select { min-width: 200px; }
38
- .hmbkp-form label .description { line-height: 16px; margin-top: 10px; float: none; }
39
- .hmbkp-form p.submit { margin: 20px 0 0; padding: 0; }
40
- .hmbkp-form .button-primary { float: right; }
41
- .hmbkp-form [type="number"] { min-width: 40px; width: 40px; }
42
- .hmbkp-error span { position: absolute; top: -18px; left: 0; color: red; }
43
- .hmbkp-error input[type], .hmbkp-error select { border-color: red; }
44
-
45
- .hmbkp-form ul { width: 320px; overflow: hidden; }
46
- .hmbkp-form ul.hmbkp_file_list { background-color: #FFF; max-height: 200px; overflow-y: scroll; display: block; border-radius: 4px; box-sizing: border-box; clear: both; box-shadow: inset 0px 0px 2px #CCC; font-size: 11px; }
47
- .hmbkp_file_list li { margin: 0; padding: 5px; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; line-height: 16px; }
48
- .hmbkp_file_list li + li { border-top: 1px dotted #CCC; }
49
-
50
- .hmbkp-schedule-sentence { margin: 0; font-size: 16px; font-weight: lighter; margin: 30px 0 10px; clear: both; margin-left: 10px; }
51
- .hmbkp-schedule-sentence::before { content: "\2714"; margin-right: 10px; width: 16px; height: 47px; display: block; float: left; }
52
- .hmbkp-schedule-sentence.hmbkp-error::before { content: "\2718"; }
53
- .hmbkp-schedule-sentence.hmbkp-running::before { background-image: url('wpspin_light.gif'); background-repeat: no-repeat; margin-right: 10px; content: " "; }
54
- .hmbkp-schedule-sentence .hmbkp-status { display: none; font-size: 12px; color: #666; margin: 2px 0 0 26px; }
55
- .hmbkp-schedule-sentence.hmbkp-running .hmbkp-status { display: block; }
56
- .hmbkp-schedule-sentence.hmbkp-running .hmbkp-schedule-actions { display: none; }
57
- .hmbkp-schedule-sentence [title] { border-bottom: 1px dotted #CCC; cursor: help; }
58
-
59
- .subsubsub li.hmbkp-running a { background-image: url('wpspin_light.gif'); background-repeat: no-repeat; padding-left: 20px; vertical-align: middle; }
60
- .subsubsub li.hmbkp-running a.current { padding: 0; background-image: none; }
61
-
62
- .hmbkp-schedule-sentence .hmbkp-schedule-actions { visibility: visible; }
63
- .hmbkp-schedule-actions { font-size: 12px; font-weight: normal; margin: 0 0 0 26px; }
64
-
65
- .hmbkp-ajax-loading, button.hmbkp-ajax-loading { padding-left: 20px; }
66
- .hmbkp-ajax-loading::before { background-image: url('wpspin_light.gif'); background-repeat: no-repeat; background-position: 1px -1px; margin-left: -20px; display: inline-block; width: 16px; height: 16px; content: " "; vertical-align: middle; padding-right: 3px; }
67
-
68
- button { height: 14px; }
69
-
70
- .delete-action { color: #BC0B0B; }
71
- .delete-action:hover .delete-action:focus { color: red; }
72
-
73
- label[for="hmbkp-new-exclude-rule"] { overflow: hidden; }
74
- .hmbkp_preview_exclude_rule { float: right; margin-top: 1px; }
75
- .hmbkp_preview_exclude_rule.hmbkp-ajax-loading { width: 44px; }
76
- div.hmbkp_add_exclude_rule { display: block; line-height: 25px; width: 320px; overflow: hidden; }
77
- div.hmbkp_add_exclude_rule input { min-width: 240px; float: left; }
78
- .hmbkp_preview_exclude_rule { float: right; width: 56px; }
79
- .hmbkp_save_exclude_rule, .hmbkp_cancel_save_exclude_rule { float: right; }
80
-
81
- .hmbkp-exclude-preview-open table, .hmbkp-exclude-preview-open .hmbkp-tabs, .hmbkp-exclude-preview-open p.submit { display: none; }
82
- .hmbkp-exclude-preview-open .hmbkp_add_exclude_rule { margin: 0; }
83
-
84
- table.widefat tbody td { padding: 8px 7px; }
85
- .hmbkp-edit-schedule-excludes-form td a, .hmbkp-edit-schedule-excludes-form td span.reason { float: right; }
86
- .hmbkp-edit-schedule-excludes-form td span.reason { color: #CCC; }
87
- input[type="datetime-local"] { border-radius: 3px; border-width: 1px; border-style: solid; box-sizing: border-box; border-color: #DFDFDF; background-color: white; }
88
-
89
- pre { background-color: #eee; padding: 10px; white-space: normal; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/assets/hmbkp.js DELETED
@@ -1,400 +0,0 @@
1
- jQuery( document ).ready( function( $ ) {
2
-
3
- // Don't ever cache ajax requests
4
- $.ajaxSetup( { 'cache' : false } );
5
-
6
- // Remove the loading class when ajax requests complete
7
- $( document ).ajaxComplete( function() {
8
- $( '.hmbkp-ajax-loading' ).removeClass( 'hmbkp-ajax-loading' );
9
- } );
10
-
11
- $( document ).on( 'click', '.hmbkp-fancybox-close', function() {
12
- $.fancybox.close();
13
- } );
14
-
15
- // Setup the tabs
16
- $( '.hmbkp-tabs' ).tabs();
17
-
18
- // Set the first tab to be active
19
- if ( ! $( '.subsubsub a.current' ).size() )
20
- $( '.subsubsub li:first a').addClass( 'current' );
21
-
22
- // Initialize fancybox
23
- $( '.fancybox' ).fancybox( {
24
-
25
- 'modal' : true,
26
- 'type' : 'ajax',
27
- 'maxWidth' : 320,
28
- 'afterShow' : function() {
29
-
30
- $( '.hmbkp-tabs' ).tabs();
31
-
32
- if ( $( ".hmbkp-form p.submit:contains('" + objectL10n.update + "')" ).size() )
33
- $( '<button type="button" class="button-secondary hmbkp-fancybox-close">' + objectL10n.cancel + '</button></p>' ).appendTo( '.hmbkp-form p.submit' );
34
-
35
- }
36
-
37
- } );
38
-
39
- // Show delete confirm message for delete schedule
40
- $( document ).on( 'click', '.hmbkp-schedule-actions .delete-action', function( e ) {
41
-
42
- if ( ! confirm( objectL10n.delete_schedule ) )
43
- e.preventDefault();
44
-
45
- } );
46
-
47
- // Show delete confirm message for delete backup
48
- $( document ).on( 'click', '.hmbkp_manage_backups_row .delete-action', function( e ) {
49
-
50
- if ( ! confirm( objectL10n.delete_backup ) )
51
- e.preventDefault();
52
-
53
- } );
54
-
55
- // Show delete confirm message for remove exclude rule
56
- $( document ).on( 'click', '.hmbkp-edit-schedule-excludes-form .delete-action', function( e ) {
57
-
58
- if ( ! confirm( objectL10n.remove_exclude_rule ) )
59
- e.preventDefault();
60
-
61
- } );
62
-
63
- // Preview exclude rule
64
- $( document ).on( 'click', '.hmbkp_preview_exclude_rule', function() {
65
-
66
- if ( ! $( '.hmbkp_add_exclude_rule input' ).val() ) {
67
- $( '.hmbkp_add_exclude_rule ul' ).remove();
68
- $( '.hmbkp_add_exclude_rule p' ).remove();
69
- return;
70
- }
71
-
72
- $( this ).addClass( 'hmbkp-ajax-loading' );
73
-
74
- $.post(
75
- ajaxurl,
76
- { 'action' : 'hmbkp_file_list', 'hmbkp_schedule_excludes' : $( '.hmbkp_add_exclude_rule input' ).val(), 'hmbkp_schedule_id' : $( '[name="hmbkp_schedule_id"]' ).val() },
77
- function( data ) {
78
-
79
- $( '.hmbkp_add_exclude_rule ul' ).remove();
80
- $( '.hmbkp_add_exclude_rule p' ).remove();
81
-
82
- if ( data.indexOf( 'hmbkp_file_list' ) != -1 )
83
- $( '.hmbkp_add_exclude_rule' ).append( data );
84
-
85
- else
86
- $( '.hmbkp_add_exclude_rule' ).append( '<p>There was an error previewing the exclude rule.</p>' );
87
-
88
- $( '.hmbkp-edit-schedule-excludes-form' ).addClass( 'hmbkp-exclude-preview-open' );
89
-
90
- }
91
- )
92
-
93
- } );
94
-
95
- // Fire the preview button when the enter key is pressed in the preview input
96
- $( document ).on( 'keypress', '.hmbkp_add_exclude_rule input', function( e ) {
97
-
98
- if ( ! $( '.hmbkp_add_exclude_rule input' ).val() )
99
- return true;
100
-
101
- var code = ( e.keyCode ? e.keyCode : e.which );
102
-
103
- if ( code != 13 )
104
- return true;
105
-
106
- $( '.hmbkp_preview_exclude_rule' ).click();
107
-
108
- e.preventDefault();
109
-
110
- } );
111
-
112
- // Cancel add exclude rule
113
- $( document ).on( 'click', '.hmbkp_cancel_save_exclude_rule, .hmbkp-edit-schedule-excludes-form .submit button', function() {
114
-
115
- $( '.hmbkp_add_exclude_rule ul' ).remove();
116
- $( '.hmbkp_add_exclude_rule p' ).remove();
117
-
118
- $( '.hmbkp-edit-schedule-excludes-form' ).removeClass( 'hmbkp-exclude-preview-open' );
119
-
120
- } );
121
-
122
- // Toggle additional fieldsets on
123
- $( document ).on( 'click', '.hmbkp-toggle-fieldset', function() {
124
-
125
- // Get the current fieldset
126
- var fromFieldset = 'fieldset.' + $( this ).closest( 'fieldset' ).attr( 'class' );
127
- var toFieldset = 'fieldset.' + $( this ).attr( 'data-hmbkp-fieldset' );
128
-
129
- // Show the one we are moving too
130
- $( toFieldset ).show().find( 'p.submit button' ).data( 'hmbkp-previous-fieldset', fromFieldset );
131
-
132
- // Animate
133
- $( fromFieldset ).animate( {
134
- marginLeft : '-100%'
135
- }, 'fast', function() {
136
- $( this ).hide();
137
- } );
138
-
139
- } );
140
-
141
- // Toggle additional fieldsets off
142
- $( document ).on( 'click', '.hmbkp-form fieldset + fieldset p.submit button', function() {
143
-
144
- // Get the current fieldset
145
- var fromFieldset = 'fieldset.' + $( this ).closest( 'fieldset' ).attr( 'class' );
146
- var toFieldset = $( this ).data( 'hmbkp-previous-fieldset' );
147
-
148
- // Show the one we are moving too
149
- $( toFieldset ).show();
150
-
151
- $( toFieldset ).animate( {
152
- marginLeft : '0'
153
- }, 'fast', function() {
154
- $( fromFieldset ).hide();
155
- }
156
- );
157
-
158
- } );
159
-
160
- // Add exclude rule
161
- $( document ).on( 'click', '.hmbkp_save_exclude_rule', function() {
162
-
163
- $( this ).addClass( 'hmbkp-ajax-loading' );
164
-
165
- $.post(
166
- ajaxurl,
167
- { 'action' : 'hmbkp_add_exclude_rule', 'hmbkp_exclude_rule' : $( '.hmbkp_add_exclude_rule input' ).val(), 'hmbkp_schedule_id' : $( '[name="hmbkp_schedule_id"]' ).val() },
168
- function( data ) {
169
- $( '.hmbkp-edit-schedule-excludes-form' ).replaceWith( data );
170
- $( '.hmbkp-edit-schedule-excludes-form' ).show();
171
- $( '.hmbkp-tabs' ).tabs();
172
- }
173
- );
174
-
175
- } );
176
-
177
- // Remove exclude rule
178
- $( document ).on( 'click', '.hmbkp-edit-schedule-excludes-form td a', function( e ) {
179
-
180
- $( this ).addClass( 'hmbkp-ajax-loading' ).text( '' );
181
-
182
- e.preventDefault();
183
-
184
- $.get(
185
- ajaxurl,
186
- { 'action' : 'hmbkp_delete_exclude_rule', 'hmbkp_exclude_rule' : $( this ).closest( 'td' ).attr( 'data-hmbkp-exclude-rule' ), 'hmbkp_schedule_id' : $( '[name="hmbkp_schedule_id"]' ).val() },
187
- function( data ) {
188
- $( '.hmbkp-edit-schedule-excludes-form' ).replaceWith( data );
189
- $( '.hmbkp-edit-schedule-excludes-form' ).show();
190
- $( '.hmbkp-tabs' ).tabs();
191
- }
192
- );
193
-
194
- } );
195
-
196
- // Edit schedule form submit
197
- $( document ).on( 'submit', 'form.hmbkp-form', function( e ) {
198
-
199
- isNewSchedule = $( this ).closest( 'form' ).attr( 'data-schedule-action' ) == 'add' ? true : false;
200
- scheduleId = $( this ).closest( 'form' ).find( '[name="hmbkp_schedule_id"]' ).val();
201
-
202
- // Warn that backups will be deleted if max backups has been set to less than the number of backups currently stored
203
- if ( ! isNewSchedule && Number( $( 'input[name="hmbkp_schedule_max_backups"]' ).val() ) < Number( $( '.hmbkp_manage_backups_row' ).size() ) && ! confirm( objectL10n.remove_old_backups ) )
204
- return false;
205
-
206
- $( this ).find( 'button[type="submit"]' ).addClass( 'hmbkp-ajax-loading' );
207
-
208
- $( '.hmbkp-error span' ).remove();
209
- $( '.hmbkp-error' ).removeClass( 'hmbkp-error' );
210
-
211
- e.preventDefault();
212
-
213
- $.get(
214
- ajaxurl + '?' + $( this ).serialize(),
215
- { 'action' : 'hmnkp_edit_schedule_submit' },
216
- function( data ) {
217
-
218
- // Assume success if no data passed back
219
- if ( ! data || data == 0 ) {
220
-
221
- $.fancybox.close();
222
-
223
- // Reload the page so we see changes
224
- if ( isNewSchedule )
225
- location.replace( '//' + location.host + location.pathname + '?page=backupwordpress&hmbkp_schedule_id=' + scheduleId );
226
-
227
- else
228
- location.reload( true );
229
-
230
- } else {
231
-
232
- // Get the errors json string
233
- errors = JSON.parse( data );
234
-
235
- // Loop through the errors
236
- $.each( errors, function( key, value ) {
237
-
238
- // Focus the first field that errored
239
- if ( typeof( hmbkp_focused ) == 'undefined' ) {
240
-
241
- $( '[name="' + key + '"]' ).focus();
242
-
243
- hmbkp_focused = true;
244
-
245
- }
246
-
247
- // Add an error class to all fields with errors
248
- $( '[name="' + key + '"]' ).closest( 'label' ).addClass( 'hmbkp-error' );
249
-
250
- // Add the error message
251
- $( '[name="' + key + '"]' ).after( '<span>' + value + '</span>' );
252
-
253
- } );
254
-
255
- }
256
-
257
- }
258
- );
259
-
260
- } );
261
-
262
- // Test the cron response using ajax
263
- $.post( ajaxurl, { 'action' : 'hmbkp_cron_test' },
264
- function( data ) {
265
- if ( data != 1 ) {
266
- $( '.wrap > h2' ).after( data );
267
- }
268
- }
269
- );
270
-
271
- // Calculate the estimated backup size
272
- if ( $( '.hmbkp-schedule-sentence .calculating' ).size() ) {
273
- $.post( ajaxurl, { 'action' : 'hmbkp_calculate', 'hmbkp_schedule_id' : $( '[data-hmbkp-schedule-id]' ).attr( 'data-hmbkp-schedule-id' ) },
274
- function( data ) {
275
-
276
- if ( data.indexOf( 'title' ) != -1 )
277
- $( '.hmbkp-schedule-sentence' ).replaceWith( data );
278
-
279
- // Fail silently for now
280
- else
281
- $( '.calculating' ).remove();
282
-
283
- }
284
- ).error( function() {
285
-
286
- // Fail silently for now
287
- $( '.calculating' ).remove();
288
-
289
- } );
290
- }
291
-
292
- if ( $( '.hmbkp-schedule-sentence.hmbkp-running' ).size() )
293
- hmbkpRedirectOnBackupComplete( $( '[data-hmbkp-schedule-id]' ).attr( 'data-hmbkp-schedule-id' ), true );
294
-
295
- $( document ).on( 'click', '.hmbkp-run', function( e ) {
296
-
297
- $( this ).closest( '.hmbkp-schedule-sentence' ).addClass( 'hmbkp-running' );
298
-
299
- $( '.hmbkp-error' ).removeClass( 'hmbkp-error' );
300
-
301
- scheduleId = $( '[data-hmbkp-schedule-id]' ).attr( 'data-hmbkp-schedule-id' );
302
-
303
- ajaxRequest = $.post(
304
- ajaxurl,
305
- { 'action' : 'hmbkp_run_schedule', 'hmbkp_schedule_id' : scheduleId },
306
- function( data ) {
307
-
308
- // Backup Succeeded
309
- if ( ! data || data == 0 ) {
310
- location.reload( true );
311
- }
312
-
313
- // The backup failed, show the error and offer to have it emailed back
314
- else {
315
-
316
- $( '.hmbkp-schedule-sentence.hmbkp-running' ).removeClass( 'hmbkp-running' ).addClass( 'hmbkp-error' );
317
-
318
- $.post(
319
- ajaxurl,
320
- { 'action' : 'hmbkp_backup_error', 'hmbkp_error' : data },
321
- function( data ) {
322
-
323
- if ( ! data || data == 0 )
324
- return;
325
-
326
- $.fancybox( {
327
- 'maxWidth' : 500,
328
- 'content' : data,
329
- 'modal' : true
330
- } );
331
-
332
- }
333
- );
334
-
335
- }
336
-
337
- $( document ).one( 'click', '.hmbkp_send_error_via_email', function( e ) {
338
-
339
- e.preventDefault();
340
-
341
- $( this ).addClass( 'hmbkp-ajax-loading' );
342
-
343
- $.post(
344
- ajaxurl,
345
- { 'action' : 'hmbkp_email_error', 'hmbkp_error' : data },
346
- function( data ) {
347
- $.fancybox.close();
348
- }
349
-
350
- )
351
-
352
- } );
353
-
354
- }
355
-
356
- // Redirect back on error
357
- ).error( function( data ) {
358
- location.replace( '//' + location.host + location.pathname + '?page=backupwordpress&action=hmbkp_cancel&reason=broken&hmbkp_schedule_id=' + scheduleId );
359
- } );
360
-
361
- setTimeout( function() {
362
- hmbkpRedirectOnBackupComplete( scheduleId, false )
363
- }, 1000 );
364
-
365
- e.preventDefault();
366
-
367
- } );
368
-
369
- } );
370
-
371
- function hmbkpRedirectOnBackupComplete( schedule_id, redirect ) {
372
-
373
- jQuery.post(
374
- ajaxurl,
375
- { 'action' : 'hmbkp_is_in_progress', 'hmbkp_schedule_id' : jQuery( '[data-hmbkp-schedule-id]' ).attr( 'data-hmbkp-schedule-id' ) },
376
- function( data ) {
377
-
378
- if ( data == 0 && redirect === true ) {
379
- location.reload( true );
380
-
381
- } else {
382
-
383
- if ( data != 0 ) {
384
-
385
- redirect = true;
386
-
387
- jQuery( '.hmbkp-status' ).remove();
388
- jQuery( '.hmbkp-schedule-actions' ).replaceWith( data );
389
-
390
- }
391
-
392
- setTimeout( function() {
393
- hmbkpRedirectOnBackupComplete( schedule_id, redirect );
394
- }, 5000 );
395
-
396
- }
397
- }
398
- );
399
-
400
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/assets/icon_backupwordpress_16x16.png DELETED
Binary file
backupwordpress/assets/icon_backupwordpress_16x16_hover.png DELETED
Binary file
backupwordpress/assets/icon_backupwordpress_32x32.png DELETED
Binary file
backupwordpress/assets/wpspin_light.gif DELETED
Binary file
backupwordpress/backupwordpress.mo DELETED
Binary file
backupwordpress/backupwordpress.po DELETED
@@ -1,703 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: BackUpWordPress\n"
4
- "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2012-11-22 15:37-0000\n"
6
- "PO-Revision-Date: 2012-11-22 15:37-0000\n"
7
- "Last-Translator: Tom Willmot <tom@humanmade.co.uk>\n"
8
- "Language-Team: Human Made Limited <support@humanmade.co.uk>\n"
9
- "Language: en_GB\n"
10
- "MIME-Version: 1.0\n"
11
- "Content-Type: text/plain; charset=UTF-8\n"
12
- "Content-Transfer-Encoding: 8bit\n"
13
- "X-Poedit-KeywordsList: __;_e\n"
14
- "X-Poedit-Basepath: .\n"
15
- "X-Generator: Poedit 1.5.4\n"
16
- "X-Poedit-SearchPath-0: .\n"
17
-
18
- #: plugin.php:60
19
- msgid "BackUpWordPress requires PHP version 5.2.4 or greater."
20
- msgstr ""
21
-
22
- #: plugin.php:71
23
- #, php-format
24
- msgid "BackUpWordPress requires WordPress version %s or greater."
25
- msgstr ""
26
-
27
- #: plugin.php:140 admin/schedule-form.php:54
28
- msgid "Update"
29
- msgstr ""
30
-
31
- #: plugin.php:141 admin/actions.php:396
32
- msgid "Cancel"
33
- msgstr ""
34
-
35
- #: plugin.php:142
36
- msgid ""
37
- "Are you sure you want to delete this schedule? All of it's backups will also "
38
- "be deleted."
39
- msgstr ""
40
-
41
- #: plugin.php:142 plugin.php:143 plugin.php:144 plugin.php:145
42
- msgid "'Cancel' to go back, 'OK' to delete."
43
- msgstr ""
44
-
45
- #: plugin.php:143
46
- msgid "Are you sure you want to delete this backup?"
47
- msgstr ""
48
-
49
- #: plugin.php:144
50
- msgid "Are you sure you want to remove this exclude rule?"
51
- msgstr ""
52
-
53
- #: plugin.php:145
54
- msgid ""
55
- "Reducing the number of backups that are stored on this server will cause "
56
- "some of your existing backups to be deleted, are you sure that's what you "
57
- "want?"
58
- msgstr ""
59
-
60
- #: admin/actions.php:192 admin/actions.php:195 functions/interface.php:72
61
- #: functions/interface.php:82 functions/interface.php:92
62
- msgid "BackUpWordPress has detected a problem."
63
- msgstr ""
64
-
65
- #: admin/actions.php:192 admin/actions.php:195
66
- #, php-format
67
- msgid ""
68
- "%1$s is returning a %2$s response which could mean cron jobs aren't getting "
69
- "fired properly. BackUpWordPress relies on wp-cron to run scheduled back ups. "
70
- "See the %3$s for more details."
71
- msgstr ""
72
-
73
- #: admin/actions.php:265
74
- msgid "Backup type cannot be empty"
75
- msgstr ""
76
-
77
- #: admin/actions.php:268
78
- msgid "Invalid backup type"
79
- msgstr ""
80
-
81
- #: admin/actions.php:278
82
- msgid "Schedule cannot be empty"
83
- msgstr ""
84
-
85
- #: admin/actions.php:281
86
- msgid "Invalid schedule"
87
- msgstr ""
88
-
89
- #: admin/actions.php:291
90
- msgid "Max backups can't be empty"
91
- msgstr ""
92
-
93
- #: admin/actions.php:294
94
- msgid "Max backups must be a number"
95
- msgstr ""
96
-
97
- #: admin/actions.php:297
98
- msgid "Max backups must be greater than 0"
99
- msgstr ""
100
-
101
- #: admin/actions.php:392
102
- #, php-format
103
- msgid "%s didn't match any files."
104
- msgstr ""
105
-
106
- #: admin/actions.php:396
107
- msgid "Exclude"
108
- msgstr ""
109
-
110
- #: admin/actions.php:410
111
- msgid "Your BackUp Failed"
112
- msgstr ""
113
-
114
- #: admin/actions.php:412
115
- msgid "Here's the response from the server:"
116
- msgstr ""
117
-
118
- #: admin/actions.php:418 admin/schedule-form-excludes.php:119
119
- msgid "Close"
120
- msgstr ""
121
-
122
- #: admin/actions.php:419
123
- msgid "Email to Support"
124
- msgstr ""
125
-
126
- #: admin/backups.php:13
127
- msgid "add schedule"
128
- msgstr ""
129
-
130
- #: admin/backups.php:37
131
- msgid "Size"
132
- msgstr ""
133
-
134
- #: admin/backups.php:38
135
- msgid "Type"
136
- msgstr ""
137
-
138
- #: admin/backups.php:39
139
- msgid "Actions"
140
- msgstr ""
141
-
142
- #: admin/backups.php:62
143
- msgid "This is where your backups will appear once you have one."
144
- msgstr ""
145
-
146
- #: admin/constants.php:3
147
- #, php-format
148
- msgid ""
149
- "You can %1$s any of the following %2$s in your %3$s to control advanced "
150
- "settings. %4$s. Defined %5$s will be highlighted."
151
- msgstr ""
152
-
153
- #: admin/constants.php:3 admin/menu.php:76
154
- msgid "Constants"
155
- msgstr ""
156
-
157
- #: admin/constants.php:3
158
- msgid "The Codex can help"
159
- msgstr ""
160
-
161
- #: admin/constants.php:8
162
- #, php-format
163
- msgid ""
164
- "The path to folder you would like to store your backup files in, defaults to "
165
- "%s."
166
- msgstr ""
167
-
168
- #: admin/constants.php:8 admin/constants.php:11 admin/constants.php:14
169
- #: admin/constants.php:17 admin/constants.php:20 admin/constants.php:23
170
- #: admin/constants.php:26 admin/constants.php:29
171
- msgid "e.g."
172
- msgstr ""
173
-
174
- #: admin/constants.php:11
175
- #, php-format
176
- msgid ""
177
- "The path to your %1$s executable. Will be used for the %2$s part of the back "
178
- "up if available."
179
- msgstr ""
180
-
181
- #: admin/constants.php:11 admin/constants.php:14
182
- msgid "database"
183
- msgstr ""
184
-
185
- #: admin/constants.php:14
186
- #, php-format
187
- msgid ""
188
- "The path to your %1$s executable. Will be used to zip up your %2$s and %3$s "
189
- "if available."
190
- msgstr ""
191
-
192
- #: admin/constants.php:14
193
- msgid "files"
194
- msgstr ""
195
-
196
- #: admin/constants.php:17
197
- #, php-format
198
- msgid ""
199
- "Attempt to email a copy of your backups. Value should be email address to "
200
- "send backups to. Defaults to %s."
201
- msgstr ""
202
-
203
- #: admin/constants.php:20
204
- msgid ""
205
- "Comma separated list of files or directories to exclude, the backups "
206
- "directory is automatically excluded."
207
- msgstr ""
208
-
209
- #: admin/constants.php:23
210
- #, php-format
211
- msgid "The capability to use when calling %1$s. Defaults to %2$s."
212
- msgstr ""
213
-
214
- #: admin/constants.php:26
215
- #, php-format
216
- msgid "The root directory that is backed up. Defaults to %s."
217
- msgstr ""
218
-
219
- #: admin/constants.php:29
220
- #, php-format
221
- msgid "The time that your schedules should run. Defaults to %s."
222
- msgstr ""
223
-
224
- #: admin/menu.php:10 admin/page.php:5
225
- msgid "Manage Backups"
226
- msgstr ""
227
-
228
- #: admin/menu.php:10 admin/menu.php:34
229
- msgid "Backups"
230
- msgstr ""
231
-
232
- #: admin/menu.php:69
233
- msgid "You are not using the latest stable version of BackUpWordPress"
234
- msgstr ""
235
-
236
- #: admin/menu.php:69
237
- #, php-format
238
- msgid ""
239
- "The information below is for version %1$s. View the %2$s file for help "
240
- "specific to version %3$s."
241
- msgstr ""
242
-
243
- #: admin/menu.php:75
244
- msgid "FAQ"
245
- msgstr ""
246
-
247
- #: admin/menu.php:79
248
- msgid "For more information:"
249
- msgstr ""
250
-
251
- #: admin/menu.php:81
252
- msgid "Support Forums"
253
- msgstr ""
254
-
255
- #: admin/menu.php:82
256
- msgid "Help with translation"
257
- msgstr ""
258
-
259
- #: admin/page.php:13
260
- msgid ""
261
- "You need to fix the issues detailed above before BackUpWordPress can start."
262
- msgstr ""
263
-
264
- #: admin/page.php:17
265
- #, php-format
266
- msgid "If your finding BackUpWordPress useful, please %s."
267
- msgstr ""
268
-
269
- #: admin/page.php:17
270
- msgid "rate it on the plugin directory"
271
- msgstr ""
272
-
273
- #: admin/page.php:19
274
- msgid ""
275
- "If you need help getting things working then check the FAQ by clicking on "
276
- "help in the top right hand corner of this page."
277
- msgstr ""
278
-
279
- #: admin/schedule-form-excludes.php:7
280
- msgid "Manage Excludes"
281
- msgstr ""
282
-
283
- #: admin/schedule-form-excludes.php:13
284
- msgid "New Exclude Rule[s]"
285
- msgstr ""
286
-
287
- #: admin/schedule-form-excludes.php:19
288
- msgid "Preview"
289
- msgstr ""
290
-
291
- #: admin/schedule-form-excludes.php:29
292
- msgid "Exclude Rules"
293
- msgstr ""
294
-
295
- #: admin/schedule-form-excludes.php:44
296
- msgid "default"
297
- msgstr ""
298
-
299
- #: admin/schedule-form-excludes.php:48
300
- msgid "defined"
301
- msgstr ""
302
-
303
- #: admin/schedule-form-excludes.php:52
304
- msgid "Remove"
305
- msgstr ""
306
-
307
- #: admin/schedule-form-excludes.php:71
308
- msgid "Excluded"
309
- msgstr ""
310
-
311
- #: admin/schedule-form-excludes.php:75
312
- msgid "Included"
313
- msgstr ""
314
-
315
- #: admin/schedule-form-excludes.php:79
316
- msgid "Unreadable"
317
- msgstr ""
318
-
319
- #: admin/schedule-form-excludes.php:107
320
- msgid "Unreadable files can't be backed up"
321
- msgstr ""
322
-
323
- #: admin/schedule-form-excludes.php:113
324
- #, php-format
325
- msgid "Your site is %s. Backups will be compressed and so will be smaller."
326
- msgstr ""
327
-
328
- #: admin/schedule-form.php:7
329
- msgid "Schedule Settings"
330
- msgstr ""
331
-
332
- #: admin/schedule-form.php:11
333
- msgid "Backup"
334
- msgstr ""
335
-
336
- #: admin/schedule-form.php:14
337
- msgid "Both Database &amp; files"
338
- msgstr ""
339
-
340
- #: admin/schedule-form.php:15
341
- msgid "Files only"
342
- msgstr ""
343
-
344
- #: admin/schedule-form.php:16
345
- msgid "Database only"
346
- msgstr ""
347
-
348
- #: admin/schedule-form.php:23
349
- msgid "Schedule"
350
- msgstr ""
351
-
352
- #: admin/schedule-form.php:27
353
- msgid "Manual Only"
354
- msgstr ""
355
-
356
- #: admin/schedule-form.php:41
357
- msgid "Number of backups to store on this server"
358
- msgstr ""
359
-
360
- #: admin/schedule-form.php:45
361
- msgid ""
362
- "The number of previous backups to store on the server. past this limit older "
363
- "backups will be deleted automatically."
364
- msgstr ""
365
-
366
- #: admin/schedule.php:4
367
- msgid "Backups will be compressed and should be smaller than this."
368
- msgstr ""
369
-
370
- #: admin/schedule.php:4
371
- msgid "this shouldn't take long&hellip;"
372
- msgstr ""
373
-
374
- #: admin/schedule.php:4
375
- msgid "calculating the size of your site&hellip;"
376
- msgstr ""
377
-
378
- #: admin/schedule.php:12
379
- #, php-format
380
- msgid "The next backup will be on %1$s at %2$s"
381
- msgstr ""
382
-
383
- #: admin/schedule.php:19
384
- msgid "hourly on the hour"
385
- msgstr ""
386
-
387
- #: admin/schedule.php:19
388
- #, php-format
389
- msgid "hourly at %s minutes past the hour"
390
- msgstr ""
391
-
392
- #: admin/schedule.php:25
393
- #, php-format
394
- msgid "daily at %s"
395
- msgstr ""
396
-
397
- #: admin/schedule.php:37
398
- #, php-format
399
- msgid "every 12 hours at %1$s &amp; %2$s"
400
- msgstr ""
401
-
402
- #: admin/schedule.php:43
403
- #, php-format
404
- msgid "weekly on %1$s at %2$s"
405
- msgstr ""
406
-
407
- #: admin/schedule.php:49
408
- #, php-format
409
- msgid "fortnightly on %1$s at %2$s"
410
- msgstr ""
411
-
412
- #: admin/schedule.php:56
413
- #, php-format
414
- msgid "on the %1$s of each month at %2$s"
415
- msgstr ""
416
-
417
- #: admin/schedule.php:62
418
- msgid "manually"
419
- msgstr ""
420
-
421
- #: admin/schedule.php:68
422
- msgid "this server"
423
- msgstr ""
424
-
425
- #: admin/schedule.php:75
426
- #, php-format
427
- msgid "store the only the last backup on %s"
428
- msgstr ""
429
-
430
- #: admin/schedule.php:81
431
- #, php-format
432
- msgid "don't store any backups on %s"
433
- msgstr ""
434
-
435
- #: admin/schedule.php:87
436
- #, php-format
437
- msgid "store only the last %1$s backups on %2$s"
438
- msgstr ""
439
-
440
- #: admin/schedule.php:96
441
- #, php-format
442
- msgid "Backup my %1$s %2$s %3$s, %4$s. %5$s"
443
- msgstr ""
444
-
445
- #: classes/email.php:19
446
- msgid "Email notification"
447
- msgstr ""
448
-
449
- #: classes/email.php:23
450
- msgid ""
451
- "Receive a notification email when a backup completes, if the backup is small "
452
- "enough (&lt; 10mb) then it will be attached to the email. Separate multiple "
453
- "email address's with a comma."
454
- msgstr ""
455
-
456
- #: classes/email.php:50
457
- #, php-format
458
- msgid "Send an email notification to %s"
459
- msgstr ""
460
-
461
- #: classes/email.php:72
462
- #, php-format
463
- msgid "%s isn't a valid email"
464
- msgstr ""
465
-
466
- #: classes/email.php:127
467
- #, php-format
468
- msgid "Backup of %s Failed"
469
- msgstr ""
470
-
471
- #: classes/email.php:129
472
- #, php-format
473
- msgid "BackUpWordPress was unable to backup your site %1$s."
474
- msgstr ""
475
-
476
- #: classes/email.php:129
477
- msgid "Here are the errors that we're encountered:"
478
- msgstr ""
479
-
480
- #: classes/email.php:129
481
- #, php-format
482
- msgid ""
483
- "If the errors above look like Martian, forward this email to %3$s and we'll "
484
- "take a look"
485
- msgstr ""
486
-
487
- #: classes/email.php:129
488
- msgid ""
489
- "Kind Regards,\n"
490
- "The Apologetic BackUpWordPress Backup Emailing Robot"
491
- msgstr ""
492
-
493
- #: classes/email.php:137
494
- #, php-format
495
- msgid "Backup of %s"
496
- msgstr ""
497
-
498
- #: classes/email.php:142 classes/email.php:151
499
- #, php-format
500
- msgid "BackUpWordPress has completed a backup of your site %1$s."
501
- msgstr ""
502
-
503
- #: classes/email.php:142
504
- msgid "The backup file should be attached to this email."
505
- msgstr ""
506
-
507
- #: classes/email.php:142 classes/email.php:151
508
- msgid "You can download the backup file by clicking the link below:"
509
- msgstr ""
510
-
511
- #: classes/email.php:142 classes/email.php:151
512
- msgid ""
513
- "Kind Regards,\n"
514
- "The Happy BackUpWordPress Backup Emailing Robot"
515
- msgstr ""
516
-
517
- #: classes/email.php:151
518
- msgid "Unfortunately the backup file was too large to attach to this email."
519
- msgstr ""
520
-
521
- #: classes/schedule.php:512 functions/interface.php:252
522
- msgid "Starting Backup"
523
- msgstr ""
524
-
525
- #: classes/schedule.php:582
526
- #, php-format
527
- msgid "Dumping Database %s"
528
- msgstr ""
529
-
530
- #: classes/schedule.php:588
531
- #, php-format
532
- msgid "Verifying Database Dump %s"
533
- msgstr ""
534
-
535
- #: classes/schedule.php:594
536
- #, php-format
537
- msgid "Creating zip archive %s"
538
- msgstr ""
539
-
540
- #: classes/schedule.php:600
541
- #, php-format
542
- msgid "Verifying Zip Archive %s"
543
- msgstr ""
544
-
545
- #: classes/schedule.php:606
546
- msgid "Finishing Backup"
547
- msgstr ""
548
-
549
- #: classes/wp-cli.php:16
550
- #, php-format
551
- msgid "BackUpWordPress may not work when php is running with %s on"
552
- msgstr ""
553
-
554
- #: classes/wp-cli.php:19
555
- msgid "Backup: Dumping database..."
556
- msgstr ""
557
-
558
- #: classes/wp-cli.php:23
559
- msgid "Backup: Zipping everything up..."
560
- msgstr ""
561
-
562
- #: classes/wp-cli.php:38
563
- msgid "Invalid backup path"
564
- msgstr ""
565
-
566
- #: classes/wp-cli.php:43
567
- msgid "Invalid root path"
568
- msgstr ""
569
-
570
- #: classes/wp-cli.php:68
571
- msgid "Backup Complete: "
572
- msgstr ""
573
-
574
- #: classes/wp-cli.php:71
575
- msgid "Backup Failed"
576
- msgstr ""
577
-
578
- #: functions/core.php:202
579
- msgid "BackUpWordPress has setup your default schedules."
580
- msgstr ""
581
-
582
- #: functions/core.php:202
583
- msgid ""
584
- "By default BackUpWordPress performs a daily backup of your database and a "
585
- "weekly backup of your database &amp; files. You can modify these schedules."
586
- msgstr ""
587
-
588
- #: functions/core.php:293
589
- #, php-format
590
- msgid ""
591
- "This %s file ensures that other people cannot download your backup files."
592
- msgstr ""
593
-
594
- #: functions/interface.php:27
595
- msgid "Download"
596
- msgstr ""
597
-
598
- #: functions/interface.php:28 functions/interface.php:264
599
- msgid "Delete"
600
- msgstr ""
601
-
602
- #: functions/interface.php:50 functions/interface.php:62
603
- msgid "BackUpWordPress is almost ready."
604
- msgstr ""
605
-
606
- #: functions/interface.php:50
607
- #, php-format
608
- msgid ""
609
- "The backups directory can't be created because your %1$s directory isn't "
610
- "writable, run %2$s or %3$s or create the folder yourself."
611
- msgstr ""
612
-
613
- #: functions/interface.php:62
614
- #, php-format
615
- msgid ""
616
- "Your backups directory isn't writable, run %1$s or %2$s or set the "
617
- "permissions yourself."
618
- msgstr ""
619
-
620
- #: functions/interface.php:72
621
- #, php-format
622
- msgid ""
623
- "%1$s is running in %2$s, please contact your host and ask them to disable "
624
- "it. BackUpWordPress may not work correctly whilst %3$s is on."
625
- msgstr ""
626
-
627
- #: functions/interface.php:72
628
- msgid "http://php.net/manual/en/features.safe-mode.php"
629
- msgstr ""
630
-
631
- #: functions/interface.php:72
632
- msgid "Safe Mode"
633
- msgstr ""
634
-
635
- #: functions/interface.php:82
636
- #, php-format
637
- msgid ""
638
- "Your custom backups directory %1$s doesn't exist and can't be created, your "
639
- "backups will be saved to %2$s instead."
640
- msgstr ""
641
-
642
- #: functions/interface.php:92
643
- #, php-format
644
- msgid ""
645
- "Your custom backups directory %1$s isn't writable, new backups will be saved "
646
- "to %2$s instead."
647
- msgstr ""
648
-
649
- #: functions/interface.php:102
650
- msgid "BackUpWordPress detected issues with your last backup."
651
- msgstr ""
652
-
653
- #: functions/interface.php:111
654
- msgid "BackUpWordPress failed to perform the backup."
655
- msgstr ""
656
-
657
- #: functions/interface.php:111
658
- msgid "You have likely hit a memory limit."
659
- msgstr ""
660
-
661
- #: functions/interface.php:227
662
- msgid "Database and Files"
663
- msgstr ""
664
-
665
- #: functions/interface.php:230
666
- msgid "Files"
667
- msgstr ""
668
-
669
- #: functions/interface.php:233
670
- msgid "Database"
671
- msgstr ""
672
-
673
- #: functions/interface.php:238
674
- msgid "Legacy"
675
- msgstr ""
676
-
677
- #: functions/interface.php:252
678
- msgid "cancel"
679
- msgstr ""
680
-
681
- #: functions/interface.php:256
682
- msgid "Settings"
683
- msgstr ""
684
-
685
- #: functions/interface.php:259
686
- msgid "Excludes"
687
- msgstr ""
688
-
689
- #: functions/interface.php:262
690
- msgid "Run now"
691
- msgstr ""
692
-
693
- #: hm-backup/hm-backup.php:906
694
- msgid "The mysqldump file was not created"
695
- msgstr ""
696
-
697
- #: hm-backup/hm-backup.php:931
698
- msgid "The backup file was not created"
699
- msgstr ""
700
-
701
- #: hm-backup/hm-backup.php:951
702
- msgid "The following files are unreadable and couldn't be backed up: "
703
- msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/classes/email.php DELETED
@@ -1,164 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Email notifications for backups
5
- *
6
- * @extends HMBKP_Service
7
- */
8
- class HMBKP_Email_Service extends HMBKP_Service {
9
-
10
- /**
11
- * Output the email form field
12
- *
13
- * @access public
14
- */
15
- public function field() { ?>
16
-
17
- <label>
18
-
19
- <?php _e( 'Email notification', 'hmbkp' ); ?>
20
-
21
- <input type="email" name="<?php echo $this->get_field_name( 'email' ); ?>" value="<?php echo $this->get_field_value( 'email' ); ?>" />
22
-
23
- <p class="description"><?php _e( 'Receive a notification email when a backup completes, if the backup is small enough (&lt; 10mb) then it will be attached to the email. Separate multiple email address\'s with a comma.', 'hmbkp' ); ?></p>
24
-
25
- </label>
26
-
27
- <?php }
28
-
29
- /**
30
- * Not used as we only need a field
31
- *
32
- * @see field
33
- * @return string Empty string
34
- */
35
- public function form() {
36
- return '';
37
- }
38
-
39
- /**
40
- * The sentence fragment that is output as part of the schedule sentence
41
- *
42
- * @return string The sentence fragment
43
- */
44
- public function display() {
45
-
46
- if ( $emails = $this->get_email_address_array() ) {
47
-
48
- $email = '<code>' . implode( '</code>, <code>', $emails ) . '</code>';
49
-
50
- return sprintf( __( 'Send an email notification to %s', 'hmbkp' ), $email );
51
-
52
- }
53
-
54
- }
55
-
56
- /**
57
- * Validate the email and return an error if validation fails
58
- *
59
- * @param array &$new_data Array of new data, passed by reference
60
- * @param array $old_data The data we are replacing
61
- * @return null|array Null on success, array of errors if validation failed
62
- */
63
- public function update( &$new_data, $old_data ) {
64
-
65
- $errors = array();
66
-
67
- if ( isset( $new_data['email'] ) ) {
68
-
69
- if ( ! empty( $new_data['email'] ) )
70
- foreach( explode( ',', $new_data['email'] ) as $email )
71
- if ( ! is_email( trim( $email ) ) )
72
- $errors['email'] = sprintf( __( '%s isn\'t a valid email', 'hmbkp' ), esc_attr( $email ) );
73
-
74
-
75
- if ( ! empty( $errors['email'] ) )
76
- $new_data['email'] = '';
77
-
78
- }
79
-
80
- return $errors;
81
-
82
- }
83
-
84
- /**
85
- * Get an array or validated email address's
86
- * @return array An array of validated email address's
87
- */
88
- private function get_email_address_array() {
89
-
90
- $emails = array_map( 'trim', explode( ',', $this->get_field_value( 'email' ) ) );
91
-
92
- return array_filter( array_unique( $emails ), 'is_email' );
93
-
94
- }
95
-
96
- /**
97
- * Fire the email notification on the hmbkp_backup_complete
98
- *
99
- * @see HM_Backup::do_action
100
- * @param string $action The action received from the backup
101
- * @return void
102
- */
103
- public function action( $action ) {
104
-
105
- if ( $action == 'hmbkp_backup_complete' && $this->get_email_address_array() ) {
106
-
107
- $file = $this->schedule->get_archive_filepath();
108
-
109
- $sent = false;
110
-
111
- $download = add_query_arg( 'hmbkp_download', base64_encode( $file ), HMBKP_ADMIN_URL );
112
- $domain = parse_url( home_url(), PHP_URL_HOST ) . parse_url( home_url(), PHP_URL_PATH );
113
-
114
- $headers = 'From: BackUpWordPress <' . get_bloginfo( 'admin_email' ) . '>' . "\r\n";
115
-
116
- // The backup failed, send a message saying as much
117
- if ( ! file_exists( $file ) && ( $errors = array_merge( $this->schedule->get_errors(), $this->schedule->get_warnings() ) ) ) {
118
-
119
- $error_message = '';
120
-
121
- foreach ( $errors as $error_set )
122
- $error_message .= implode( "\n - ", $error_set );
123
-
124
- if ( $error_message )
125
- $error_message = ' - ' . $error_message;
126
-
127
- $subject = sprintf( __( 'Backup of %s Failed', 'hmbkp' ), $domain );
128
-
129
- $message = sprintf( __( 'BackUpWordPress was unable to backup your site %1$s.', 'hmbkp' ) . "\n\n" . __( 'Here are the errors that we\'re encountered:', 'hmbkp' ) . "\n\n" . '%2$s' . "\n\n" . __( 'If the errors above look like Martian, forward this email to %3$s and we\'ll take a look', 'hmbkp' ) . "\n\n" . __( "Kind Regards,\nThe Apologetic BackUpWordPress Backup Emailing Robot", 'hmbkp' ), home_url(), $error_message, 'support@hmn.md' );
130
-
131
- $sent = wp_mail( $this->get_email_address_array(), $subject, $message, $headers );
132
-
133
- return;
134
-
135
- }
136
-
137
- $subject = sprintf( __( 'Backup of %s', 'hmbkp' ), $domain );
138
-
139
- // If it's larger than 10MB assume it's not going to be able to send the backup
140
- if ( filesize( $file ) < 1000 * 1000 * 10 ) {
141
-
142
- $message = sprintf( __( 'BackUpWordPress has completed a backup of your site %1$s.', 'hmbkp' ) . "\n\n" . __( 'The backup file should be attached to this email.', 'hmbkp' ) . "\n\n" . __( 'You can download the backup file by clicking the link below:', 'hmbkp' ) . "\n\n" . '%2$s' . "\n\n" . __( "Kind Regards,\nThe Happy BackUpWordPress Backup Emailing Robot", 'hmbkp' ), home_url(), $download );
143
-
144
- $sent = wp_mail( $this->get_email_address_array(), $subject, $message, $headers, $file );
145
-
146
- }
147
-
148
- // If we didn't send the email above then send just the notification
149
- if ( ! $sent ) {
150
-
151
- $message = sprintf( __( 'BackUpWordPress has completed a backup of your site %1$s.', 'hmbkp' ) . "\n\n" . __( 'Unfortunately the backup file was too large to attach to this email.', 'hmbkp' ) . "\n\n" . __( 'You can download the backup file by clicking the link below:', 'hmbkp' ) . "\n\n" . '%2$s' . "\n\n" . __( "Kind Regards,\nThe Happy BackUpWordPress Backup Emailing Robot", 'hmbkp' ), home_url(), $download );
152
-
153
- $sent = wp_mail( $this->get_email_address_array(), $subject, $message, $headers );
154
-
155
- }
156
-
157
- }
158
-
159
- }
160
-
161
- }
162
-
163
- // Register the service
164
- HMBKP_Services::register( __FILE__, 'HMBKP_Email_Service' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/classes/schedule.php DELETED
@@ -1,771 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Extend HM Backup with scheduling and backup file management
5
- *
6
- * @extends HM_Backup
7
- */
8
- class HMBKP_Scheduled_Backup extends HM_Backup {
9
-
10
- /**
11
- * The unique schedule id
12
- *
13
- * @var string
14
- * @access private
15
- */
16
- private $id = '';
17
-
18
- /**
19
- * The slugified version of the schedule name
20
- *
21
- * @var string
22
- * @access private
23
- */
24
- private $slug = '';
25
-
26
- /**
27
- * The raw schedule options from the database
28
- *
29
- * @var array
30
- * @access private
31
- */
32
- private $options = array();
33
-
34
- /**
35
- * The filepath for the .running file which
36
- * is used to track whether a backup is currently in
37
- * progress
38
- */
39
- private $schedule_running_filepath = '';
40
-
41
- /**
42
- * The schedule start time
43
- *
44
- * (default value: current_time( 'timestamp' ))
45
- *
46
- * @var mixed
47
- * @access private
48
- */
49
- private $schedule_start_time = 0;
50
-
51
- /**
52
- * Setup the schedule object
53
- *
54
- * Loads the options from the database and populates properties
55
- *
56
- * @access public
57
- * @param string $id
58
- */
59
- public function __construct( $id ) {
60
-
61
- // Verify the schedule id
62
- if ( ! is_string( $id ) || ! trim( $id ) || ! is_string( $id ) )
63
- throw new Exception( 'Argument 1 for ' . __METHOD__ . ' must be a non empty string' );
64
-
65
- // Setup HM Backup
66
- parent::__construct();
67
-
68
- // Store id for later
69
- $this->id = $id;
70
-
71
- // Load the options
72
- $this->options = array_filter( (array) get_option( 'hmbkp_schedule_' . $this->get_id() ) );
73
-
74
- // Some properties can be overridden with defines
75
- if ( defined( 'HMBKP_ROOT' ) && HMBKP_ROOT )
76
- $this->set_root( HMBKP_ROOT );
77
-
78
- if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH )
79
- $this->set_path( HMBKP_PATH );
80
-
81
- if ( defined( 'HMBKP_EXCLUDE' ) && HMBKP_EXCLUDE )
82
- parent::set_excludes( HMBKP_EXCLUDE, true );
83
-
84
- if ( defined( 'HMBKP_MYSQLDUMP_PATH' ) )
85
- $this->set_mysqldump_command_path( HMBKP_MYSQLDUMP_PATH );
86
-
87
- if ( defined( 'HMBKP_ZIP_PATH' ) )
88
- $this->set_zip_command_path( HMBKP_ZIP_PATH );
89
-
90
- if ( defined( 'HMBKP_ZIP_PATH' ) && HMBKP_ZIP_PATH === 'PclZip' && $this->skip_zip_archive = true )
91
- $this->set_zip_command_path( false );
92
-
93
- // Set the path - TODO remove external function dependancy
94
- $this->set_path( hmbkp_path() );
95
-
96
- // Set the archive filename to site name + schedule slug + date
97
- $this->set_archive_filename( implode( '-', array( sanitize_title( str_ireplace( array( 'http://', 'https://', 'www' ), '', home_url() ) ), $this->get_id(), $this->get_type(), date( 'Y-m-d-H-i-s', current_time( 'timestamp' ) ) ) ) . '.zip' );
98
-
99
- // Setup the schedule if it isn't set or TODO if it's changed
100
- if ( ( ! $this->get_next_occurrence() && in_array( $this->get_reoccurrence(), array_keys( wp_get_schedules() ) ) ) || ( date( get_option( 'time_format' ), strtotime( HMBKP_SCHEDULE_TIME ) - ( get_option( 'gmt_offset' ) * 3600 ) ) !== date( get_option( 'time_format' ), $this->get_next_occurrence() ) ) )
101
- $this->schedule();
102
-
103
- }
104
-
105
- /**
106
- * Get the id for this schedule
107
- *
108
- * @access public
109
- */
110
- public function get_id() {
111
- return esc_attr( $this->id );
112
- }
113
-
114
- /**
115
- * Get a slugified version of name
116
- *
117
- * @access public
118
- */
119
- public function get_slug() {
120
-
121
- // We cache slug in $this to save expensive calls to sanitize_title
122
- if ( isset( $this->slug ) )
123
- return $this->slug;
124
-
125
- return $this->slug = sanitize_title( $this->get_name() );
126
-
127
- }
128
-
129
- /**
130
- * Get the name of this backup schedule
131
- *
132
- * @access public
133
- * @return string
134
- */
135
- public function get_name() {
136
-
137
- return ucwords( $this->get_type() ) . ' ' . $this->get_reoccurrence();
138
-
139
- }
140
-
141
- /**
142
- * Get the type of backup
143
- *
144
- * @access public
145
- * @return string
146
- */
147
- public function get_type() {
148
-
149
- if ( empty( $this->options['type'] ) )
150
- $this->set_type( 'complete' );
151
-
152
- return $this->options['type'];
153
-
154
- }
155
-
156
- /**
157
- * Set the type of backup
158
- *
159
- * @access public
160
- * @param string $type
161
- */
162
- public function set_type( $type ) {
163
-
164
- parent::set_type( $type );
165
-
166
- $this->options['type'] = $type;
167
-
168
- $this->clear_filesize_cache();
169
-
170
- }
171
-
172
- /**
173
- * Get the exclude rules
174
- *
175
- * @access public
176
- * @return array
177
- */
178
- public function get_excludes() {
179
-
180
- if ( ! empty( $this->options['excludes'] ) )
181
- parent::set_excludes( $this->options['excludes'] );
182
-
183
- return parent::get_excludes();
184
-
185
- }
186
-
187
- /**
188
- * Set the exclude rules
189
- *
190
- * @access public
191
- * @param mixed $excludes A comma separated list or array of exclude rules
192
- * @param bool $append Whether to replace or append to existing rules
193
- * @return string
194
- */
195
- public function set_excludes( $excludes, $append = false ) {
196
-
197
- // Use the validation from HM_Backup::set_excludes
198
- parent::set_excludes( $excludes, $append );
199
-
200
- // If these are valid excludes and they are different save them
201
- if ( parent::get_excludes() && ( empty( $this->options['excludes'] ) || $this->options['excludes'] !== parent::get_excludes() ) ) {
202
-
203
- $this->options['excludes'] = $append && ! empty( $this->options['excludes'] ) ? array_merge( (array) $this->options['excludes'], parent::get_excludes() ) : parent::get_excludes();;
204
-
205
- parent::set_excludes( $this->options['excludes'] );
206
-
207
- $this->clear_filesize_cache();
208
-
209
- }
210
-
211
- }
212
-
213
- /**
214
- * Get the maximum number of backups to keep
215
- *
216
- * @access public
217
- */
218
- public function get_max_backups() {
219
-
220
- if ( empty( $this->options['max_backups'] ) )
221
- $this->set_max_backups( 10 );
222
-
223
- return (int) esc_attr( $this->options['max_backups'] );
224
-
225
- }
226
-
227
- /**
228
- * Set the maximum number of backups to keep
229
- *
230
- * @access public
231
- * @param int $max
232
- */
233
- public function set_max_backups( $max ) {
234
-
235
- if ( empty( $max ) || ! is_int( $max ) )
236
- throw new Exception( 'Argument 1 for ' . __METHOD__ . ' must be a valid integer' );
237
-
238
- $this->options['max_backups'] = $max;
239
-
240
- }
241
-
242
- /**
243
- * Get the array of services options for this schedule
244
- *
245
- * @access public
246
- * @return array
247
- */
248
- public function get_service_options( $service, $option = null ) {
249
-
250
- if ( ! is_null( $option ) && isset( $this->options[$service][$option] ) )
251
- return $this->options[$service][$option];
252
-
253
- if ( isset( $this->options[$service] ) )
254
- return $this->options[$service];
255
-
256
- return array();
257
-
258
- }
259
-
260
- /**
261
- * Set the service options for this schedule
262
- *
263
- * @access public
264
- */
265
- public function set_service_options( $service, Array $options ) {
266
-
267
- $this->options[$service] = $options;
268
-
269
- }
270
-
271
- /**
272
- * Calculate the size of the backup
273
- *
274
- * Doesn't account for
275
- * compression
276
- *
277
- * @access public
278
- * @param bool $cached Whether to return from cache
279
- * @return string
280
- */
281
- public function get_filesize( $cached = true ) {
282
-
283
- if ( ! $cached || ! $filesize = get_transient( 'hmbkp_schedule_' . $this->get_id() . '_filesize' ) ) {
284
-
285
- $filesize = 0;
286
-
287
- // Don't include database if file only
288
- if ( $this->get_type() != 'file' ) {
289
-
290
- global $wpdb;
291
-
292
- $res = $wpdb->get_results( 'SHOW TABLE STATUS FROM `' . DB_NAME . '`', ARRAY_A );
293
-
294
- foreach ( $res as $r )
295
- $filesize += (float) $r['Data_length'];
296
-
297
- }
298
-
299
- // Don't include files if database only
300
- if ( $this->get_type() != 'database' ) {
301
-
302
- // Get rid of any cached filesizes
303
- clearstatcache();
304
-
305
- $excludes = $this->exclude_string( 'regex' );
306
-
307
- foreach ( $this->get_files() as $file ) {
308
-
309
- // Skip dot files, they should only exist on versions of PHP between 5.2.11 -> 5.3
310
- if ( method_exists( $file, 'isDot' ) && $file->isDot() )
311
- continue;
312
-
313
- if ( ! $file->isReadable() )
314
- continue;
315
-
316
- // Excludes
317
- if ( $excludes && preg_match( '(' . $excludes . ')', str_ireplace( trailingslashit( $this->get_root() ), '', HM_Backup::conform_dir( $file->getPathname() ) ) ) )
318
- continue;
319
-
320
- $filesize += (float) $file->getSize();
321
-
322
- }
323
-
324
- }
325
-
326
- // Cache for a day
327
- set_transient( 'hmbkp_schedule_' . $this->get_id() . '_filesize', $filesize, time() + 60 * 60 * 24 );
328
-
329
- }
330
-
331
- return size_format( $filesize );
332
-
333
- }
334
-
335
- /**
336
- * Check whether the filesize has already been calculated and cached.
337
- *
338
- * @access public
339
- * @return void
340
- */
341
- public function is_filesize_cached() {
342
- return (bool) get_transient( 'hmbkp_schedule_' . $this->get_id() . '_filesize' );
343
- }
344
-
345
- /**
346
- * Clear the cached filesize, forces the filesize to be re-calculated the next
347
- * time get_filesize is called
348
- *
349
- * @access public
350
- * @return void
351
- */
352
- public function clear_filesize_cache() {
353
- delete_transient( 'hmbkp_schedule_' . $this->get_id() . '_filesize' );
354
- }
355
-
356
- /**
357
- * Get the start time for the schedule
358
- *
359
- * @access public
360
- * @return int timestamp || 0 for manual only schedules
361
- */
362
- public function get_schedule_start_time() {
363
-
364
- if ( $this->get_reoccurrence() === 'manually' )
365
- return 0;
366
-
367
- if ( ! $this->schedule_start_time ) {
368
-
369
- $date = strtotime( HMBKP_SCHEDULE_TIME );
370
-
371
- // Convert to UTC
372
- $date -= get_option( 'gmt_offset' ) * 3600;
373
-
374
- // if the scheduled time already passed today then start at the next interval instead
375
- if ( $date <= strtotime( 'now' ) )
376
- $date += $this->get_interval();
377
-
378
- $this->set_schedule_start_time( $date );
379
- }
380
-
381
- return $this->schedule_start_time;
382
-
383
- }
384
-
385
- /**
386
- * Set the schedule start time.
387
- *
388
- * @access public
389
- * @param int $timestamp in UTC
390
- * @return void
391
- */
392
- public function set_schedule_start_time( $timestamp ) {
393
- $this->schedule_start_time = $timestamp;
394
- }
395
-
396
- /**
397
- * Get the schedule reoccurrence
398
- *
399
- * @access public
400
- */
401
- public function get_reoccurrence() {
402
-
403
- // Default to no reoccurrence
404
- if ( empty( $this->options['reoccurrence'] ) )
405
- $this->set_reoccurrence( 'manually' );
406
-
407
- return esc_attr( $this->options['reoccurrence'] );
408
-
409
- }
410
-
411
- /**
412
- * Set the schedule reoccurrence
413
- *
414
- * @access public
415
- * @param string $reoccurrence
416
- */
417
- public function set_reoccurrence( $reoccurrence ) {
418
-
419
- // Check it's valid
420
- if ( ! is_string( $reoccurrence ) || ! trim( $reoccurrence ) || ( ! in_array( $reoccurrence, array_keys( wp_get_schedules() ) ) ) && $reoccurrence !== 'manually' )
421
- throw new Exception( 'Argument 1 for ' . __METHOD__ . ' must be a valid cron reoccurrence or "manually"' );
422
-
423
- if ( isset( $this->options['reoccurrence'] ) && $this->options['reoccurrence'] === $reoccurrence )
424
- return;
425
-
426
- $this->options['reoccurrence'] = $reoccurrence;
427
-
428
- if ( $reoccurrence === 'manually' )
429
- $this->unschedule();
430
-
431
- else
432
- $this->schedule();
433
-
434
- }
435
-
436
- /**
437
- * Get the interval between backups
438
- *
439
- * @access public
440
- * @return int
441
- */
442
- public function get_interval() {
443
-
444
- $schedules = wp_get_schedules();
445
-
446
- if ( $this->get_reoccurrence() === 'manually' )
447
- return 0;
448
-
449
- return $schedules[$this->get_reoccurrence()]['interval'];
450
-
451
- }
452
-
453
- /**
454
- * Get the next occurrence of this scheduled backup
455
- *
456
- * @access public
457
- */
458
- public function get_next_occurrence( $gmt = true ) {
459
-
460
- $time = wp_next_scheduled( 'hmbkp_schedule_hook', array( 'id' => $this->get_id() ) );
461
-
462
- if ( ! $time )
463
- $time = 0;
464
-
465
- if ( ! $gmt )
466
- $time += get_option( 'gmt_offset' ) * 3600;
467
-
468
- return $time;
469
-
470
- }
471
-
472
-
473
- /**
474
- * Get the path to the backup running file that stores the running backup status
475
- *
476
- * @access private
477
- * @return string
478
- */
479
- private function get_schedule_running_path() {
480
- return $this->get_path() . '/.schedule-' . $this->get_id() . '-running';
481
- }
482
-
483
- /**
484
- * Schedule the backup cron
485
- *
486
- * @access public
487
- */
488
- public function schedule() {
489
-
490
- // Clear any existing hooks
491
- $this->unschedule();
492
-
493
- wp_schedule_event( $this->get_schedule_start_time(), $this->get_reoccurrence(), 'hmbkp_schedule_hook', array( 'id' => $this->get_id() ) );
494
-
495
- }
496
-
497
-
498
- /**
499
- * Unschedule the backup cron.
500
- *
501
- * @access public
502
- * @return void
503
- */
504
- public function unschedule() {
505
- wp_clear_scheduled_hook( 'hmbkp_schedule_hook', array( 'id' => $this->get_id() ) );
506
- }
507
-
508
- /**
509
- * Run the backup
510
- *
511
- * @access public
512
- */
513
- public function run() {
514
-
515
- // Mark the backup as started
516
- $this->set_status( __( 'Starting Backup', 'hmbkp' ) );
517
-
518
- $this->backup();
519
-
520
- // Delete the backup running file
521
- if ( file_exists( $this->get_schedule_running_path() ) )
522
- unlink( $this->get_schedule_running_path() );
523
-
524
- $this->delete_old_backups();
525
-
526
- }
527
-
528
- /**
529
- * Get the status of the running backup.
530
- *
531
- * @access public
532
- * @return string
533
- */
534
- public function get_status() {
535
-
536
- if ( ! file_exists( $this->get_schedule_running_path() ) )
537
- return '';
538
-
539
- return end( explode( '::', file_get_contents( $this->get_schedule_running_path() ) ) );
540
-
541
- }
542
-
543
- /**
544
- * Get the filename that the running status is stored in.
545
- *
546
- * @access public
547
- * @return string
548
- */
549
- public function get_running_backup_filename() {
550
-
551
- if ( ! file_exists( $this->get_schedule_running_path() ) )
552
- return '';
553
-
554
- return reset( explode( '::', file_get_contents( $this->get_schedule_running_path() ) ) );
555
- }
556
-
557
- /**
558
- * Set the status of the running backup
559
- *
560
- * @access public
561
- * @param string $message
562
- * @return void
563
- */
564
- protected function set_status( $message ) {
565
-
566
- if ( ! $handle = fopen( $this->get_schedule_running_path(), 'w' ) )
567
- return;
568
-
569
- fwrite( $handle, $this->get_archive_filename() . '::' . $message );
570
-
571
- fclose( $handle );
572
-
573
- }
574
-
575
- /**
576
- * Hook into the actions fired in HM Backup and set the status
577
- *
578
- * @return null
579
- */
580
- protected function do_action( $action ) {
581
-
582
- switch ( $action ) :
583
-
584
- case 'hmbkp_mysqldump_started' :
585
-
586
- $this->set_status( sprintf( __( 'Dumping Database %s', 'hmbkp' ), '(<code>' . $this->get_mysqldump_method() . '</code>)' ) );
587
-
588
- break;
589
-
590
- case 'hmbkp_mysqldump_verify_started' :
591
-
592
- $this->set_status( sprintf( __( 'Verifying Database Dump %s', 'hmbkp' ), '(<code>' . $this->get_mysqldump_method() . '</code>)' ) );
593
-
594
- break;
595
-
596
- case 'hmbkp_archive_started' :
597
-
598
- $this->set_status( sprintf( __( 'Creating zip archive %s', 'hmbkp' ), '(<code>' . $this->get_archive_method() . '</code>)' ) );
599
-
600
- break;
601
-
602
- case 'hmbkp_archive_verify_started' :
603
-
604
- $this->set_status( sprintf( __( 'Verifying Zip Archive %s', 'hmbkp' ), '(<code>' . $this->get_archive_method() . '</code>)' ) );
605
-
606
- break;
607
-
608
- case 'hmbkp_backup_complete' :
609
-
610
- $this->set_status( __( 'Finishing Backup', 'hmbkp' ) );
611
-
612
- if ( $this->get_errors() ) {
613
-
614
- $file = $this->get_path() . '/.backup_errors';
615
-
616
- if ( file_exists( $file ) )
617
- unlink( $file );
618
-
619
- if ( ! $handle = @fopen( $file, 'w' ) )
620
- return;
621
-
622
- fwrite( $handle, json_encode( $this->get_errors() ) );
623
-
624
- fclose( $handle );
625
-
626
- }
627
-
628
- if ( $this->get_warnings() ) {
629
-
630
- $file = $this->get_path() . '/.backup_warnings';
631
-
632
- if ( file_exists( $file ) )
633
- unlink( $file );
634
-
635
- if ( ! $handle = @fopen( $file, 'w' ) )
636
- return;
637
-
638
- fwrite( $handle, json_encode( $this->get_warnings() ) );
639
-
640
- fclose( $handle );
641
-
642
- }
643
-
644
- break;
645
-
646
- endswitch;
647
-
648
- // Pass the actions to all the services
649
- foreach ( HMBKP_Services::get_services( $this ) as $service )
650
- $service->action( $action );
651
-
652
- // Fire the parent function as well
653
- parent::do_action( $action );
654
-
655
- }
656
-
657
- /**
658
- * Get the backups created by this schedule
659
- *
660
- * @todo look into using recursiveDirectoryIterator and recursiveRegexIterator
661
- * @access public
662
- * @return string[] - file paths of the backups
663
- */
664
- public function get_backups() {
665
-
666
- $files = array();
667
-
668
- if ( $handle = @opendir( $this->get_path() ) ) {
669
-
670
- while ( false !== ( $file = readdir( $handle ) ) )
671
- if ( pathinfo( $file, PATHINFO_EXTENSION ) === 'zip' && strpos( $file, $this->get_id() ) !== false && $this->get_running_backup_filename() != $file )
672
- $files[@filemtime( trailingslashit( $this->get_path() ) . $file )] = trailingslashit( $this->get_path() ) . $file;
673
-
674
- closedir( $handle );
675
-
676
- }
677
-
678
- krsort( $files );
679
-
680
- return $files;
681
-
682
- }
683
-
684
- /**
685
- * Delete old backups
686
- *
687
- * @access private
688
- */
689
- public function delete_old_backups() {
690
-
691
- if ( count( $this->get_backups() ) <= $this->get_max_backups() )
692
- return;
693
-
694
- array_map( array( $this, 'delete_backup' ), array_slice( $this->get_backups(), $this->get_max_backups() ) );
695
-
696
- }
697
-
698
- /**
699
- * Delete a specific back up file created by this schedule
700
- *
701
- * @access public
702
- * @param string $filepath
703
- */
704
- public function delete_backup( $filepath ) {
705
-
706
- // Check that it's a valid filepath
707
- if ( empty( $filepath ) || ! is_string( $filepath ) )
708
- throw new Exception( 'Argument 1 for ' . __METHOD__ . ' must be a non empty string' );
709
-
710
- // Make sure it exists
711
- if ( ! file_exists( $filepath ) )
712
- throw new Exception( $filepath . ' doesn\'t exist' );
713
-
714
- // Make sure it was created by this schedule
715
- if ( strpos( $filepath, $this->get_id() ) === false )
716
- throw new Exception( 'That backup wasn\'t created by this schedule' );
717
-
718
- unlink( $filepath );
719
-
720
- }
721
-
722
- /**
723
- * Delete all back up files created by this schedule
724
- *
725
- * @access public
726
- */
727
- public function delete_backups() {
728
-
729
- array_map( array( $this, 'delete_backup' ), $this->get_backups() );
730
-
731
- }
732
-
733
- /**
734
- * Save the schedules options.
735
- *
736
- * @access public
737
- */
738
- public function save() {
739
-
740
- // Only save them if they have changed
741
- if ( $this->options !== get_option( 'hmbkp_schedule_' . $this->get_id() ) )
742
- update_option( 'hmbkp_schedule_' . $this->get_id(), $this->options );
743
-
744
- }
745
-
746
- /**
747
- * Cancel this schedule
748
- *
749
- * Cancels the cron job, removes the schedules options
750
- * and optionally deletes all backups crated by
751
- * this schedule.
752
- *
753
- * @access public
754
- */
755
- public function cancel() {
756
-
757
- // Delete the schedule options
758
- delete_option( 'hmbkp_schedule_' . $this->get_id() );
759
-
760
- // Clear any existing schedules
761
- $this->unschedule();
762
-
763
- // Clear the filesize transient
764
- $this->clear_filesize_cache();
765
-
766
- // Delete it's backups
767
- $this->delete_backups();
768
-
769
- }
770
-
771
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/classes/schedules.php DELETED
@@ -1,70 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * A simple class for loading schedules
5
- */
6
- class HMBKP_Schedules {
7
-
8
- /**
9
- * An array of schedules
10
- *
11
- * @var mixed
12
- * @access private
13
- */
14
- private $schedules;
15
-
16
- /**
17
- * Load the schedules from wp_options and store in $this->schedules
18
- *
19
- * @access public
20
- */
21
- public function __construct() {
22
-
23
- global $wpdb;
24
-
25
- // Load all schedule options from the database
26
- $schedules = $wpdb->get_col( "SELECT option_name from $wpdb->options WHERE option_name LIKE 'hmbkp\_schedule\_%'" );
27
-
28
- // Instantiate each one as a HMBKP_Scheduled_Backup
29
- $this->schedules = array_map( array( $this, 'instantiate' ), array_filter( (array) $schedules ) );
30
-
31
- }
32
-
33
- /**
34
- * Get an array of schedules
35
- *
36
- * @access public
37
- * @return array
38
- */
39
- public function get_schedules() {
40
- return $this->schedules;
41
- }
42
-
43
- /**
44
- * Get a schedule by ID
45
- *
46
- * @return HMBKP_Scheduled_Backup
47
- */
48
- public function get_schedule( $id ) {
49
-
50
- foreach ( $this->schedules as $schedule )
51
- if ( $schedule->get_id() == $id )
52
- return $schedule;
53
-
54
- return null;
55
- }
56
-
57
- /**
58
- * Instantiate the individual scheduled backup objects
59
- *
60
- * @access private
61
- * @param string $id
62
- * @return array An array of HMBKP_Scheduled_Backup objects
63
- */
64
- private function instantiate( $id ) {
65
-
66
- return new HMBKP_Scheduled_Backup( str_replace( 'hmbkp_schedule_', '', $id ) );
67
-
68
- }
69
-
70
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/classes/services.php DELETED
@@ -1,233 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * An abstract service class, individual services should
5
- * extend this class
6
- */
7
- abstract class HMBKP_Service {
8
-
9
- /**
10
- * The instance HMBKP_Backup_Schedule that this service is
11
- * is currently working with
12
- */
13
- protected $schedule;
14
-
15
- /**
16
- * The form to output as part of the schedule settings
17
- *
18
- * If you don't want a whole form return ''; here and use @field instead
19
- */
20
- abstract protected function form();
21
-
22
- /**
23
- * The field to output as part of the schedule settings
24
- *
25
- * If you don't want a field return ''; here and use @field instead
26
- */
27
- abstract protected function field();
28
-
29
- /**
30
- * Validate and sanitize data before it's saved.
31
- *
32
- * @param array &$new_data An array or data from $_GET, passed by reference so it can be modified,
33
- * @param array $old_data The old data thats going to be overwritten
34
- * @return array $error Array of validation errors e.g. return array( 'email' => 'not valid' );
35
- */
36
- abstract protected function update( &$new_data, $old_data );
37
-
38
- /**
39
- * The string to be output as part of the schedule sentence
40
- *
41
- * @return string
42
- */
43
- abstract protected function display();
44
-
45
- /**
46
- * Receives actions from the backup
47
- *
48
- * This is where the service should do it's thing
49
- *
50
- * @see HM_Backup::do_action for a list of the actions
51
- */
52
- abstract protected function action( $action );
53
-
54
- /**
55
- * Utility for getting a formated html input name attribute
56
- *
57
- * @param string $name The name of the field
58
- * @return string The formated name
59
- */
60
- protected function get_field_name( $name ) {
61
- return esc_attr( get_class( $this ) . '[' . $name . ']' );
62
- }
63
-
64
- /**
65
- * Get the value of a field
66
- * @param string $name The name of the field
67
- * @return string The field value
68
- */
69
- protected function get_field_value( $name, $esc = 'esc_attr' ) {
70
-
71
- if ( $this->schedule->get_service_options( get_class( $this ), $name ) )
72
- return $esc( $this->schedule->get_service_options( get_class( $this ), $name ) );
73
-
74
- return '';
75
-
76
- }
77
-
78
- /**
79
- * Save the settings for this service
80
- *
81
- * @return null|array returns null on success, array of errors on failure
82
- */
83
- public function save() {
84
-
85
- $classname = get_class( $this );
86
-
87
- $old_data = $this->schedule->get_service_options( $classname );
88
-
89
- $new_data = isset( $_GET[$classname] ) ? $_GET[$classname] : $old_data;
90
-
91
- $errors = $this->update( $new_data, $old_data );
92
-
93
- if ( $errors && $errors = array_flip( $errors ) ) {
94
-
95
- foreach( $errors as $error => &$field )
96
- $field = get_class( $this ) . '[' . $field . ']';
97
-
98
- return array_flip( $errors );
99
-
100
- }
101
-
102
- $this->schedule->set_service_options( $classname, $new_data );
103
-
104
- return array();
105
-
106
- }
107
-
108
- /**
109
- * Set the current schedule object
110
- *
111
- * @param HMBKP_Scheduled_Backup $schedule An instantiated schedule object
112
- */
113
- public function set_schedule( HMBKP_Scheduled_Backup $schedule ) {
114
- $this->schedule = $schedule;
115
- }
116
-
117
- }
118
-
119
- /**
120
- * A singleton to handle the registering, unregistering
121
- * and storage of services
122
- */
123
- class HMBKP_Services {
124
-
125
- /**
126
- * Store the current instance
127
- *
128
- * @access private
129
- * @var object HMBKP_Services
130
- * @static
131
- */
132
- private static $instance;
133
-
134
- /**
135
- * The array of services
136
- *
137
- * Should be of the format array( __FILE__ => __CLASS__ );
138
- *
139
- * @access private
140
- * @var array
141
- * @static
142
- */
143
- private $services = array();
144
-
145
- /**
146
- * The current schedule object
147
- *
148
- * @access private
149
- * @var object HMBKP_Scheduled_Backup
150
- */
151
- private $schedule;
152
-
153
- /**
154
- * Get the current instance
155
- *
156
- * @access public
157
- * @static
158
- */
159
- public static function instance() {
160
-
161
- if ( ! isset( self::$instance ) )
162
- self::$instance = new HMBKP_Services;
163
-
164
- return self::$instance;
165
-
166
- }
167
-
168
- /**
169
- * Get the array of registered services
170
- *
171
- * @access public
172
- */
173
- public function get_services( HMBKP_Scheduled_Backup $schedule = null ) {
174
-
175
- if ( is_null( $schedule ) )
176
- return self::instance()->services;
177
-
178
- self::instance()->schedule = $schedule;
179
-
180
- return array_map( array( self::instance(), 'instantiate' ), self::instance()->services );
181
-
182
- }
183
-
184
- /**
185
- * Register a new service
186
- *
187
- * @access public
188
- */
189
- public function register( $filepath, $classname ) {
190
-
191
- if ( ! file_exists( $filepath ) )
192
- throw new Exception( 'Argument 1 for ' . __METHOD__ . ' must be a valid filepath' );
193
-
194
- self::instance()->services[$filepath] = $classname;
195
-
196
- }
197
-
198
- /**
199
- * Unregister an existing service
200
- *
201
- * @access public
202
- */
203
- public function unregister( $filepath ) {
204
-
205
- if ( ! isset( self::instance()->services[$filepath] ) )
206
- throw new Exception( 'Argument 1 for ' . __METHOD__ . ' must be a registered service' );
207
-
208
- unset( self::instance()->services[$filepath] );
209
-
210
- }
211
-
212
- /**
213
- * Instantiate the individual service classes
214
- *
215
- * @access private
216
- * @param string $class
217
- * @return array An array of instantiated classes
218
- */
219
- private function instantiate( $class ) {
220
-
221
- if ( ! class_exists( $class ) )
222
- throw new Exception( 'Argument 1 for ' . __METHOD__ . ' must be a valid class' );
223
-
224
- $$class = new $class;
225
-
226
- if ( self::instance()->schedule )
227
- $$class->set_schedule( self::instance()->schedule );
228
-
229
- return $$class;
230
-
231
- }
232
-
233
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/classes/wp-cli.php DELETED
@@ -1,93 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Implement backup command
5
- *
6
- * @todo fix
7
- * @package wp-cli
8
- * @subpackage commands/third-party
9
- */
10
- class BackUpCommand extends WP_CLI_Command {
11
-
12
- public function __construct( $args, $assoc_args ) {
13
-
14
- // Make sure it's possible to do a backup
15
- if ( HM_Backup::is_safe_mode_active() )
16
- WP_CLI::error( sprintf( __( 'BackUpWordPress may not work when php is running with %s on', 'hmbkp' ), 'safe_mode' ) );
17
-
18
- add_action( 'hmbkp_mysqldump_started', function() {
19
- WP_CLI::line( __( 'Backup: Dumping database...', 'hmbkp' ) );
20
- } );
21
-
22
- add_action( 'hmbkp_archive_started', function() {
23
- WP_CLI::line( __( 'Backup: Zipping everything up...', 'hmbkp' ) );
24
- } );
25
-
26
- // Clean up any mess left by a previous backup
27
- hmbkp_cleanup();
28
-
29
- $hm_backup = new HM_Backup();
30
-
31
- if ( ! empty( $assoc_args['path'] ) )
32
- $hm_backup->set_path( $assoc_args['path'] );
33
-
34
- if ( ! empty( $assoc_args['root'] ) )
35
- $hm_backup->set_root( $assoc_args['root'] );
36
-
37
- if ( ( ! is_dir( $hm_backup->get_path() ) && ( ! is_writable( dirname( $hm_backup->get_path() ) ) || ! mkdir( $hm_backup->get_path() ) ) ) || ! is_writable( $hm_backup->get_path() ) ) {
38
- WP_CLI::error( __( 'Invalid backup path', 'hmbkp' ) );
39
- return false;
40
- }
41
-
42
- if ( ! is_dir( $hm_backup->get_root() ) || ! is_readable( $hm_backup->get_root() ) ) {
43
- WP_CLI::error( __( 'Invalid root path', 'hmbkp' ) );
44
- return false;
45
- }
46
-
47
- if ( ! empty( $assoc_args['files_only'] ) )
48
- $hm_backup->set_type( 'file' );
49
-
50
- if ( ! empty( $assoc_args['database_only'] ) )
51
- $hm_backup->set_type( 'database' );
52
-
53
- if ( isset( $assoc_args['mysqldump_command_path'] ) )
54
- $hm_backup->set_mysqldump_command_path( $assoc_args['mysqldump_command_path'] );
55
-
56
- if ( isset( $assoc_args['zip_command_path'] ) )
57
- $hm_backup->set_zip_command_path( $assoc_args['zip_command_path'] );
58
-
59
- if ( ! empty( $assoc_args['excludes'] ) )
60
- $hm_backup->set_excludes( $assoc_args['excludes'] );
61
-
62
- $hm_backup->backup();
63
-
64
- // Delete any old backup files
65
- //hmbkp_delete_old_backups();
66
-
67
- if ( file_exists( $hm_backup->get_archive_filepath() ) )
68
- WP_CLI::success( __( 'Backup Complete: ', 'hmbkp' ) . $hm_backup->get_archive_filepath() );
69
-
70
- else
71
- WP_CLI::error( __( 'Backup Failed', 'hmbkp' ) );
72
-
73
- }
74
-
75
- static function help() {
76
-
77
- WP_CLI::line( <<<EOB
78
- usage: wp backup [--files_only] [--database_only] [--path<dir>] [--root<dir>] [--zip_command_path=<path>] [--mysqldump_command_path=<path>]
79
-
80
- --files_only Backup files only, default to off
81
- --database_only Backup database only, defaults to off
82
- --path dir that the backup should be save in, defaults to wp-content/backups/
83
- --root dir that should be backed up, defaults to site root.
84
- --zip_command_path path to your zip binary, standard locations are automatically used
85
- --mysqldump_command_path path to your mysqldump binary, standard locations are automatically used
86
-
87
- EOB
88
- );
89
-
90
- }
91
-
92
- }
93
- WP_CLI::addCommand( 'backup', 'BackUpCommand' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/functions/core.php DELETED
@@ -1,442 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Setup the plugin defaults on activation
5
- */
6
- function hmbkp_activate() {
7
-
8
- hmbkp_deactivate();
9
-
10
- }
11
-
12
- /**
13
- * Cleanup on plugin deactivation
14
- *
15
- * Removes options and clears all cron schedules
16
- */
17
- function hmbkp_deactivate() {
18
-
19
- // Options to delete
20
- $options = array(
21
- 'hmbkp_zip_path',
22
- 'hmbkp_mysqldump_path',
23
- 'hmbkp_path',
24
- 'hmbkp_running',
25
- 'hmbkp_status',
26
- 'hmbkp_complete',
27
- 'hmbkp_email_error'
28
- );
29
-
30
- foreach ( $options as $option )
31
- delete_option( $option );
32
-
33
- delete_transient( 'hmbkp_running' );
34
- delete_transient( 'hmbkp_estimated_filesize' );
35
-
36
- // Clear hmbkp crons
37
- foreach( get_option( 'cron' ) as $cron )
38
- foreach( (array) $cron as $key => $value )
39
- if ( strpos( $key, 'hmbkp' ) !== false )
40
- wp_clear_scheduled_hook( $key );
41
-
42
- hmbkp_cleanup();
43
-
44
- }
45
-
46
- /**
47
- * Handles anything that needs to be
48
- * done when the plugin is updated
49
- */
50
- function hmbkp_update() {
51
-
52
- // Update from backUpWordPress 0.4.5
53
- if ( get_option( 'bkpwp_max_backups' ) ) {
54
-
55
- // Carry over the custom path
56
- if ( $legacy_path = get_option( 'bkpwppath' ) )
57
- update_option( 'hmbkp_path', $legacy_path );
58
-
59
- // Options to remove
60
- $legacy_options = array(
61
- 'bkpwp_archive_types',
62
- 'bkpwp_automail_from',
63
- 'bkpwp_domain',
64
- 'bkpwp_domain_path',
65
- 'bkpwp_easy_mode',
66
- 'bkpwp_excludelists',
67
- 'bkpwp_install_user',
68
- 'bkpwp_listmax_backups',
69
- 'bkpwp_max_backups',
70
- 'bkpwp_presets',
71
- 'bkpwp_reccurrences',
72
- 'bkpwp_schedules',
73
- 'bkpwp_calculation',
74
- 'bkpwppath',
75
- 'bkpwp_status_config',
76
- 'bkpwp_status'
77
- );
78
-
79
- foreach ( $legacy_options as $option )
80
- delete_option( $option );
81
-
82
- global $wp_roles;
83
-
84
- $wp_roles->remove_cap( 'administrator','manage_backups' );
85
- $wp_roles->remove_cap( 'administrator','download_backups' );
86
-
87
- wp_clear_scheduled_hook( 'bkpwp_schedule_bkpwp_hook' );
88
-
89
- }
90
-
91
- // Version 1 to 2
92
- if ( get_option( 'hmbkp_plugin_version' ) && version_compare( '2.0' , get_option( 'hmbkp_plugin_version' ), '>' ) ) {
93
-
94
- /**
95
- * Setup a backwards compatible schedule
96
- */
97
- $legacy_schedule = new HMBKP_Scheduled_Backup( 'backup' );
98
-
99
- // Backup type
100
- if ( ( defined( 'HMBKP_FILES_ONLY' ) && HMBKP_FILES_ONLY ) || get_option( 'hmbkp_files_only' ) )
101
- $legacy_schedule->set_type( 'file' );
102
-
103
- elseif ( ( defined( 'HMBKP_DATABASE_ONLY' ) && HMBKP_DATABASE_ONLY ) || get_option( 'hmbkp_database_only' ) )
104
- $legacy_schedule->set_type( 'database' );
105
-
106
- else
107
- $legacy_schedule->set_type( 'complete' );
108
-
109
- // Daily schedule time
110
- if ( defined( 'HMBKP_DAILY_SCHEDULE_TIME' ) && HMBKP_DAILY_SCHEDULE_TIME )
111
- $legacy_schedule->set_schedule_start_time( strtotime( HMBKP_DAILY_SCHEDULE_TIME ) );
112
-
113
- // Backup schedule
114
- $legacy_schedule->set_reoccurrence( str_replace( 'hmbkp_', '', get_option( 'hmbkp_schedule_frequency', 'daily' ) ) );
115
-
116
- // Automatic backups disabled?
117
- if ( ( defined( 'HMBKP_DISABLE_AUTOMATIC_BACKUP' ) && HMBKP_DISABLE_AUTOMATIC_BACKUP ) || get_option( 'hmbkp_disable_automatic_backup' ) )
118
- $legacy_schedule->set_reoccurrence( 'manually' );
119
-
120
- // Max backups
121
- if ( defined( 'HMBKP_MAX_BACKUPS' ) && is_numeric( HMBKP_MAX_BACKUPS ) )
122
- $legacy_schedule->set_max_backups( (int) HMBKP_MAX_BACKUPS );
123
-
124
- else
125
- $legacy_schedule->set_max_backups( (int) get_option( 'hmbkp_max_backups', 10 ) );
126
-
127
- // Excludes
128
- if ( get_option( 'hmbkp_excludes' ) )
129
- $legacy_schedule->set_excludes( get_option( 'hmbkp_excludes' ) );
130
-
131
- // Backup email
132
- if ( defined( 'HMBKP_EMAIL' ) && is_email( HMBKP_EMAIL ) )
133
- $legacy_schedule->set_service_options( 'HMBKP_Email_Service', array( 'email' => HMBKP_EMAIL ) );
134
-
135
- elseif ( is_email( get_option( 'hmbkp_email_address' ) ) )
136
- $legacy_schedule->set_service_options( 'HMBKP_Email_Service', array( 'email' => get_option( 'hmbkp_email_address' ) ) );
137
-
138
- // Set the archive filename to what it used to be
139
- $legacy_schedule->set_archive_filename( implode( '-', array( get_bloginfo( 'name' ), 'backup', date( 'Y-m-d-H-i-s', current_time( 'timestamp' ) ) ) ) . '.zip' );
140
-
141
- $legacy_schedule->save();
142
-
143
- // Remove the legacy options
144
- foreach ( array( 'hmbkp_database_only', 'hmbkp_files_only', 'hmbkp_max_backups', 'hmbkp_email_address', 'hmbkp_email', 'hmbkp_schedule_frequency', 'hmbkp_disable_automatic_backup' ) as $option_name )
145
- delete_option( $option_name );
146
-
147
-
148
- }
149
-
150
- // Every update
151
- if ( get_option( 'hmbkp_plugin_version' ) && version_compare( HMBKP_VERSION, get_option( 'hmbkp_plugin_version' ), '>' ) ) {
152
-
153
- hmbkp_deactivate();
154
-
155
- // Force .htaccess to be re-written
156
- if ( file_exists( hmbkp_path() . '/.htaccess' ) )
157
- unlink( hmbkp_path() . '/.htaccess' );
158
-
159
- // Force index.html to be re-written
160
- if ( file_exists( hmbkp_path() . '/index.html' ) )
161
- unlink( hmbkp_path() . '/index.html' );
162
-
163
- }
164
-
165
- // Update the stored version
166
- if ( get_option( 'hmbkp_plugin_version' ) !== HMBKP_VERSION )
167
- update_option( 'hmbkp_plugin_version', HMBKP_VERSION );
168
-
169
- }
170
-
171
- /**
172
- * Setup the default backup schedules
173
- */
174
- function hmbkp_setup_default_schedules() {
175
-
176
- $schedules = new HMBKP_Schedules;
177
-
178
- if ( $schedules->get_schedules() )
179
- return;
180
-
181
- /**
182
- * Schedule a database backup daily and store backups
183
- * for the last 2 weeks
184
- */
185
- $database_daily = new HMBKP_Scheduled_Backup( 'default-1' );
186
- $database_daily->set_type( 'database' );
187
- $database_daily->set_reoccurrence( 'daily' );
188
- $database_daily->set_max_backups( 14 );
189
- $database_daily->save();
190
-
191
- /**
192
- * Schedule a complete backup to run weekly and store backups for
193
- * the last 3 months
194
- */
195
- $complete_weekly = new HMBKP_Scheduled_Backup( 'default-2' );
196
- $complete_weekly->set_type( 'complete' );
197
- $complete_weekly->set_reoccurrence( 'weekly' );
198
- $complete_weekly->set_max_backups( 12 );
199
- $complete_weekly->save();
200
-
201
- function hmbkp_default_schedules_setup_warning() {
202
- echo '<div id="hmbkp-warning" class="updated fade"><p><strong>' . __( 'BackUpWordPress has setup your default schedules.', 'hmbkp' ) . '</strong> ' . __( 'By default BackUpWordPress performs a daily backup of your database and a weekly backup of your database &amp; files. You can modify these schedules.', 'hmbkp' ) . '</p></div>';
203
- }
204
- add_action( 'admin_notices', 'hmbkp_default_schedules_setup_warning' );
205
-
206
- }
207
- add_action( 'admin_init', 'hmbkp_setup_default_schedules' );
208
-
209
- /**
210
- * Add weekly, fortnightly and monthly as a cron schedule choices
211
- *
212
- * @param array $reccurrences
213
- * @return array $reccurrences
214
- */
215
- function hmbkp_more_reccurences( $reccurrences ) {
216
-
217
- return array_merge( $reccurrences, array(
218
- 'weekly' => array( 'interval' => 604800, 'display' => 'Once Weekly' ),
219
- 'fortnightly' => array( 'interval' => 1209600, 'display' => 'Once Fortnightly' ),
220
- 'monthly' => array( 'interval' => 2629743.83 , 'display' => 'Once Monthly' )
221
- ) );
222
- }
223
- add_filter( 'cron_schedules', 'hmbkp_more_reccurences' );
224
-
225
- /**
226
- * Recursively delete a directory including
227
- * all the files and sub-directories.
228
- *
229
- * @param string $dir
230
- */
231
- function hmbkp_rmdirtree( $dir ) {
232
-
233
- if ( is_file( $dir ) )
234
- @unlink( $dir );
235
-
236
- if ( ! is_dir( $dir ) )
237
- return false;
238
-
239
- $files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $dir ), RecursiveIteratorIterator::CHILD_FIRST, RecursiveIteratorIterator::CATCH_GET_CHILD );
240
-
241
- foreach ( $files as $file ) {
242
-
243
- if ( $file->isDir() )
244
- @rmdir( $file->getPathname() );
245
-
246
- else
247
- @unlink( $file->getPathname() );
248
-
249
- }
250
-
251
- @rmdir( $dir );
252
-
253
- }
254
-
255
- /**
256
- * Get the path to the backups directory
257
- *
258
- * Will try to create it if it doesn't exist
259
- * and will fallback to default if a custom dir
260
- * isn't writable.
261
- */
262
- function hmbkp_path() {
263
-
264
- global $is_apache;
265
-
266
- $path = get_option( 'hmbkp_path' );
267
-
268
- // Allow the backups path to be defined
269
- if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH )
270
- $path = HMBKP_PATH;
271
-
272
- // If the dir doesn't exist or isn't writable then use the default path instead instead
273
- if ( ( ! $path || ( is_dir( $path ) && ! is_writable( $path ) ) || ( ! is_dir( $path ) && ! is_writable( dirname( $path ) ) ) ) && get_option( 'hmbkp_path' ) !== get_option( 'hmbkp_default_path' ) )
274
- $path = hmbkp_path_default();
275
-
276
- // Create the backups directory if it doesn't exist
277
- if ( ! is_dir( $path ) && is_writable( dirname( $path ) ) )
278
- mkdir( $path, 0755 );
279
-
280
- // If the path has changed then cache it
281
- if ( get_option( 'hmbkp_path' ) !== $path )
282
- update_option( 'hmbkp_path', $path );
283
-
284
- // Protect against directory browsing by including a index.html file
285
- $index = $path . '/index.html';
286
-
287
- if ( ! file_exists( $index ) && is_writable( $path ) )
288
- file_put_contents( $index, '' );
289
-
290
- $htaccess = $path . '/.htaccess';
291
-
292
- // Protect the directory with a .htaccess file on Apache servers
293
- if ( $is_apache && function_exists( 'insert_with_markers' ) && ! file_exists( $htaccess ) && is_writable( $path ) ) {
294
-
295
- $contents[] = '# ' . sprintf( __( 'This %s file ensures that other people cannot download your backup files.', 'hmbkp' ), '.htaccess' );
296
- $contents[] = '';
297
- $contents[] = '<IfModule mod_rewrite.c>';
298
- $contents[] = 'RewriteEngine On';
299
- $contents[] = 'RewriteCond %{QUERY_STRING} !key=' . HMBKP_SECURE_KEY;
300
- $contents[] = 'RewriteRule (.*) - [F]';
301
- $contents[] = '</IfModule>';
302
- $contents[] = '';
303
-
304
- insert_with_markers( $htaccess, 'BackUpWordPress', $contents );
305
-
306
- }
307
-
308
- return HM_Backup::conform_dir( $path );
309
-
310
- }
311
-
312
- /**
313
- * Return the default backup path
314
- *
315
- * @return string path
316
- */
317
- function hmbkp_path_default() {
318
-
319
- $path = get_option( 'hmbkp_default_path' );
320
-
321
- if ( empty( $path ) ) {
322
-
323
- $path = HM_Backup::conform_dir( trailingslashit( WP_CONTENT_DIR ) . substr( md5( time() ), 0, 10 ) . '-backups' );
324
-
325
- update_option( 'hmbkp_default_path', $path );
326
-
327
- }
328
-
329
- $upload_dir = wp_upload_dir();
330
-
331
- // If the backups dir can't be created in WP_CONTENT_DIR then fallback to uploads
332
- if ( ( ( ! is_dir( $path ) && ! is_writable( dirname( $path ) ) ) || ( is_dir( $path ) && ! is_writable( $path ) ) ) && strpos( $path, $upload_dir['basedir'] ) === false ) {
333
-
334
- hmbkp_path_move( $path, $path = HM_Backup::conform_dir( trailingslashit( $upload_dir['basedir'] ) . substr( md5( time() ), 0, 10 ) . '-backups' ) );
335
-
336
- update_option( 'hmbkp_default_path', $path );
337
-
338
- }
339
-
340
- return $path;
341
- }
342
-
343
- /**
344
- * Move the backup directory and all existing backup files to a new
345
- * location
346
- *
347
- * @param string $from path to move the backups dir from
348
- * @param string $to path to move the backups dir to
349
- * @return void
350
- */
351
- function hmbkp_path_move( $from, $to ) {
352
-
353
- if ( ! untrailingslashit( $from ) || ! untrailingslashit( $to ) )
354
- return;
355
-
356
- // Create the custom backups directory if it doesn't exist
357
- if ( is_writable( dirname( $to ) ) && ! is_dir( $to ) )
358
- mkdir( $to, 0755 );
359
-
360
- if ( ! is_dir( $to ) || ! is_writable( $to ) )
361
- return false;
362
-
363
- update_option( 'hmbkp_path', $to );
364
-
365
- hmbkp_cleanup();
366
-
367
- if ( ! is_dir( $from ) )
368
- return false;
369
-
370
- if ( $handle = opendir( $from ) ) :
371
-
372
- while ( false !== ( $file = readdir( $handle ) ) )
373
- if ( $file !== '.' && $file !== '..' )
374
- if ( ! @rename( trailingslashit( $from ) . $file, trailingslashit( $to ) . $file ) )
375
- copy( trailingslashit( $from ) . $file, trailingslashit( $to ) . $file );
376
-
377
- closedir( $handle );
378
-
379
- endif;
380
-
381
- hmbkp_rmdirtree( $from );
382
-
383
- }
384
-
385
- /**
386
- * Check if a backup is possible with regards to file
387
- * permissions etc.
388
- *
389
- * @return bool
390
- */
391
- function hmbkp_possible() {
392
-
393
- if ( ! is_writable( hmbkp_path() ) || ! is_dir( hmbkp_path() ) )
394
- return false;
395
-
396
- return true;
397
- }
398
-
399
- /**
400
- * Remove any non backup.zip files from the backups dir.
401
- *
402
- * @return void
403
- */
404
- function hmbkp_cleanup() {
405
-
406
- $hmbkp_path = hmbkp_path();
407
-
408
- if ( ! is_dir( $hmbkp_path ) )
409
- return;
410
-
411
- if ( $handle = opendir( $hmbkp_path ) ) :
412
-
413
- while ( false !== ( $file = readdir( $handle ) ) )
414
- if ( ! in_array( $file, array( '.', '..', 'index.html' ) ) && pathinfo( $file, PATHINFO_EXTENSION ) !== 'zip' )
415
- hmbkp_rmdirtree( trailingslashit( $hmbkp_path ) . $file );
416
-
417
- closedir( $handle );
418
-
419
- endif;
420
-
421
- }
422
-
423
- /**
424
- * Handles changes in the defined Constants
425
- * that users can define to control advanced
426
- * settings
427
- */
428
- function hmbkp_constant_changes() {
429
-
430
- // If a custom backup path has been set or changed
431
- if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH && HM_Backup::conform_dir( HMBKP_PATH ) !== ( $from = HM_Backup::conform_dir( get_option( 'hmbkp_path' ) ) ) )
432
- hmbkp_path_move( $from, HMBKP_PATH );
433
-
434
- // If a custom backup path has been removed
435
- if ( ( ( defined( 'HMBKP_PATH' ) && ! HMBKP_PATH ) || ! defined( 'HMBKP_PATH' ) && hmbkp_path_default() !== ( $from = HM_Backup::conform_dir( get_option( 'hmbkp_path' ) ) ) ) )
436
- hmbkp_path_move( $from, hmbkp_path_default() );
437
-
438
- // If the custom path has changed and the new directory isn't writable
439
- if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH && ! is_writable( HMBKP_PATH ) && get_option( 'hmbkp_path' ) === HMBKP_PATH && is_dir( HMBKP_PATH ) )
440
- hmbkp_path_move( HMBKP_PATH, hmbkp_path_default() );
441
-
442
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/functions/interface.php DELETED
@@ -1,296 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Displays a row in the manage backups table
5
- *
6
- * @param string $file
7
- */
8
- function hmbkp_get_backup_row( $file, HMBKP_Scheduled_Backup $schedule ) {
9
-
10
- $encoded_file = urlencode( base64_encode( $file ) );
11
- $offset = get_option( 'gmt_offset' ) * 3600; ?>
12
-
13
- <tr class="hmbkp_manage_backups_row<?php if ( file_exists( hmbkp_path() . '/.backup_complete' ) ) : ?> completed<?php unlink( hmbkp_path() . '/.backup_complete' ); endif; ?>">
14
-
15
- <th scope="row">
16
- <?php echo esc_attr( date_i18n( get_option( 'date_format' ) . ' - ' . get_option( 'time_format' ), @filemtime( $file ) + $offset ) ); ?>
17
- </th>
18
-
19
- <td class="code">
20
- <?php echo esc_attr( size_format( @filesize( $file ) ) ); ?>
21
- </td>
22
-
23
- <td><?php echo esc_attr( hmbkp_human_get_type( $file, $schedule ) ); ?></td>
24
-
25
- <td>
26
-
27
- <a href="<?php echo wp_nonce_url( admin_url( 'tools.php?page=' . HMBKP_PLUGIN_SLUG . '&amp;hmbkp_download_backup=' . $encoded_file . '&amp;hmbkp_schedule_id=' . $schedule->get_id() ), 'hmbkp-download_backup' ); ?>"><?php _e( 'Download', 'hmbkp' ); ?></a> |
28
- <a href="<?php echo wp_nonce_url( admin_url( 'tools.php?page=' . HMBKP_PLUGIN_SLUG . '&amp;hmbkp_delete_backup=' . $encoded_file . '&amp;hmbkp_schedule_id=' . $schedule->get_id() ), 'hmbkp-delete_backup' ); ?>" class="delete-action"><?php _e( 'Delete', 'hmbkp' ); ?></a>
29
-
30
- </td>
31
-
32
- </tr>
33
-
34
- <?php }
35
-
36
- /**
37
- * Displays admin notices for various error / warning
38
- * conditions
39
- *
40
- * @return void
41
- */
42
- function hmbkp_admin_notices() {
43
-
44
- // If the backups directory doesn't exist and can't be automatically created
45
- if ( ! is_dir( hmbkp_path() ) ) :
46
-
47
- function hmbkp_path_exists_warning() {
48
- $php_user = exec( 'whoami' );
49
- $php_group = reset( explode( ' ', exec( 'groups' ) ) );
50
- echo '<div id="hmbkp-warning" class="updated fade"><p><strong>' . __( 'BackUpWordPress is almost ready.', 'hmbkp' ) . '</strong> ' . 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.', 'hmbkp' ), '<code>wp-content</code>', '<code>chown ' . $php_user . ':' . $php_group . ' ' . dirname( hmbkp_path() ) . '</code>', '<code>chmod 777 ' . dirname( hmbkp_path() ) . '</code>' ) . '</p></div>';
51
- }
52
- add_action( 'admin_notices', 'hmbkp_path_exists_warning' );
53
-
54
- endif;
55
-
56
- // If the backups directory exists but isn't writable
57
- if ( is_dir( hmbkp_path() ) && ! is_writable( hmbkp_path() ) ) :
58
-
59
- function hmbkp_writable_path_warning() {
60
- $php_user = exec( 'whoami' );
61
- $php_group = reset( explode( ' ', exec( 'groups' ) ) );
62
- echo '<div id="hmbkp-warning" class="updated fade"><p><strong>' . __( 'BackUpWordPress is almost ready.', 'hmbkp' ) . '</strong> ' . sprintf( __( 'Your backups directory isn\'t writable, run %1$s or %2$s or set the permissions yourself.', 'hmbkp' ), '<code>chown -R ' . esc_attr( $php_user ) . ':' . esc_attr( $php_group ) . ' ' . esc_attr( hmbkp_path() ) . '</code>', '<code>chmod -R 777 ' . esc_attr( hmbkp_path() ) . '</code>' ) . '</p></div>';
63
- }
64
- add_action( 'admin_notices', 'hmbkp_writable_path_warning' );
65
-
66
- endif;
67
-
68
- // If safe mode is active
69
- if ( HM_Backup::is_safe_mode_active() ) :
70
-
71
- function hmbkp_safe_mode_warning() {
72
- echo '<div id="hmbkp-warning" class="updated fade"><p><strong>' . __( 'BackUpWordPress has detected a problem.', 'hmbkp' ) . '</strong> ' . 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.', 'hmbkp' ), '<code>PHP</code>', sprintf( '<a href="%1$s">%2$s</a>', __( 'http://php.net/manual/en/features.safe-mode.php', 'hmbkp' ), __( 'Safe Mode', 'hmbkp' ) ), '<code>' . __( 'Safe Mode', 'hmbkp' ) . '</code>' ) . '</p></div>';
73
- }
74
- add_action( 'admin_notices', 'hmbkp_safe_mode_warning' );
75
-
76
- endif;
77
-
78
- // If a custom backups directory is defined and it doesn't exist and can't be created
79
- if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH && ! is_dir( HMBKP_PATH ) ) :
80
-
81
- function hmbkp_custom_path_exists_warning() {
82
- echo '<div id="hmbkp-warning" class="updated fade"><p><strong>' . __( 'BackUpWordPress has detected a problem.', 'hmbkp' ) . '</strong> ' . sprintf( __( 'Your custom backups directory %1$s doesn\'t exist and can\'t be created, your backups will be saved to %2$s instead.', 'hmbkp' ), '<code>' . esc_attr( HMBKP_PATH ) . '</code>', '<code>' . esc_attr( hmbkp_path() ) . '</code>' ) . '</p></div>';
83
- }
84
- add_action( 'admin_notices', 'hmbkp_custom_path_exists_warning' );
85
-
86
- endif;
87
-
88
- // If a custom backups directory is defined and exists but isn't writable
89
- if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH && is_dir( HMBKP_PATH ) && ! is_writable( HMBKP_PATH ) ) :
90
-
91
- function hmbkp_custom_path_writable_notice() {
92
- echo '<div id="hmbkp-warning" class="updated fade"><p><strong>' . __( 'BackUpWordPress has detected a problem.', 'hmbkp' ) . '</strong> ' . sprintf( __( 'Your custom backups directory %1$s isn\'t writable, new backups will be saved to %2$s instead.', 'hmbkp' ), '<code>' . esc_attr( HMBKP_PATH ) . '</code>', '<code>' . esc_attr( hmbkp_path() ) . '</code>' ) . '</p></div>';
93
- }
94
- add_action( 'admin_notices', 'hmbkp_custom_path_writable_notice' );
95
-
96
- endif;
97
-
98
- // If there are any errors reported in the backup
99
- if ( hmbkp_backup_errors_message() ) :
100
-
101
- function hmbkp_backup_errors_notice() {
102
- echo '<div id="hmbkp-warning" class="updated fade"><p><strong>' . __( 'BackUpWordPress detected issues with your last backup.', 'hmbkp' ) . '</strong><a href="' . add_query_arg( 'action', 'hmbkp_dismiss_error' ) . '" style="float: right;" class="button">Dismiss</a></p>' . hmbkp_backup_errors_message() . '</div>';
103
- }
104
- add_action( 'admin_notices', 'hmbkp_backup_errors_notice' );
105
-
106
- endif;
107
-
108
- if ( ! empty( $_GET['reason'] ) ) :
109
-
110
- function hmbkp_backup_failed_notice() {
111
- echo '<div id="hmbkp-warning" class="updated fade"><p><strong>' . __( 'BackUpWordPress failed to perform the backup.', 'hmbkp' ) . '</strong> ' . __( 'You have likely hit a memory limit.', 'hmbkp' ) . '<a href="' . add_query_arg( 'action', 'hmbkp_dismiss_error' ) . '" style="float: right;" class="button">Dismiss</a></p></div>';
112
- }
113
- //add_action( 'admin_notices', 'hmbkp_backup_failed_notice' );
114
-
115
- endif;
116
-
117
- }
118
- add_action( 'admin_head', 'hmbkp_admin_notices' );
119
-
120
- /**
121
- * Hook in an change the plugin description when BackUpWordPress is activated
122
- *
123
- * @param array $plugins
124
- * @return $plugins
125
- */
126
- function hmbkp_plugin_row( $plugins ) {
127
-
128
- if ( isset( $plugins[HMBKP_PLUGIN_SLUG . '/plugin.php'] ) )
129
- $plugins[HMBKP_PLUGIN_SLUG . '/plugin.php']['Description'] = str_replace( 'Once activated you\'ll find me under <strong>Tools &rarr; Backups</strong>', 'Find me under <strong><a href="' . admin_url( 'tools.php?page=' . HMBKP_PLUGIN_SLUG ) . '">Tools &rarr; Backups</a></strong>', $plugins[HMBKP_PLUGIN_SLUG . '/plugin.php']['Description'] );
130
-
131
- return $plugins;
132
-
133
- }
134
- add_filter( 'all_plugins', 'hmbkp_plugin_row', 10 );
135
-
136
- /**
137
- * Parse the json string of errors and
138
- * output as a human readable message
139
- *
140
- * @access public
141
- * @return null
142
- */
143
- function hmbkp_backup_errors_message() {
144
-
145
- $message = '';
146
-
147
- foreach ( (array) json_decode( hmbkp_backup_errors() ) as $key => $errors )
148
- foreach ( $errors as $error )
149
- $message .= '<p><strong>' . $key . '</strong>: <code>' . implode( ':', (array) $error ) . '</code></p>';
150
-
151
- return $message;
152
-
153
- }
154
-
155
- /**
156
- * Display a html list of files
157
- *
158
- * @param HMBKP_Scheduled_Backup $schedule
159
- * @param mixed $excludes (default: null)
160
- * @param string $file_method (default: 'get_included_files')
161
- * @return void
162
- */
163
- function hmbkp_file_list( HMBKP_Scheduled_Backup $schedule, $excludes = null, $file_method = 'get_included_files' ) {
164
-
165
- if ( ! is_null( $excludes ) )
166
- $schedule->set_excludes( $excludes );
167
-
168
- $exclude_string = $schedule->exclude_string( 'regex' ); ?>
169
-
170
- <ul class="hmbkp_file_list code">
171
-
172
- <?php foreach( $schedule->get_files() as $file ) :
173
-
174
- if ( ! is_null( $excludes ) && strpos( $file, str_ireplace( $schedule->get_root(), '', $schedule->get_path() ) ) !== false )
175
- continue;
176
-
177
- // Skip dot files, they should only exist on versions of PHP between 5.2.11 -> 5.3
178
- if ( method_exists( $file, 'isDot' ) && $file->isDot() )
179
- continue;
180
-
181
- // Show only unreadable files
182
- if ( $file_method === 'get_unreadable_files' && $file->isReadable() )
183
- continue;
184
-
185
- // Skip unreadable files
186
- elseif ( $file_method !== 'get_unreadable_files' && ! $file->isReadable() )
187
- continue;
188
-
189
- // Show only included files
190
- if ( $file_method === 'get_included_files' )
191
- if ( $exclude_string && preg_match( '(' . $exclude_string . ')', str_ireplace( trailingslashit( $schedule->get_root() ), '', HM_Backup::conform_dir( $file->getPathname() ) ) ) )
192
- continue;
193
-
194
- // Show only excluded files
195
- if ( $file_method === 'get_excluded_files' )
196
- if ( ! $exclude_string || ! preg_match( '(' . $exclude_string . ')', str_ireplace( trailingslashit( $schedule->get_root() ), '', HM_Backup::conform_dir( $file->getPathname() ) ) ) )
197
- continue;
198
-
199
- if ( $file->isDir() ) { ?>
200
-
201
- <li title="<?php echo esc_attr( HM_Backup::conform_dir( trailingslashit( $file->getPathName() ) ) ); ?>"><?php echo esc_html( ltrim( trailingslashit( str_ireplace( HM_Backup::conform_dir( trailingslashit( $schedule->get_root() ) ), '', HM_Backup::conform_dir( $file->getPathName() ) ) ), '/' ) ); ?></li>
202
-
203
- <?php } else { ?>
204
-
205
- <li title="<?php echo esc_attr( HM_Backup::conform_dir( $file->getPathName() ) ); ?>"><?php echo esc_html( ltrim( str_ireplace( HM_Backup::conform_dir( trailingslashit( $schedule->get_root() ) ), '', HM_Backup::conform_dir( $file->getPathName() ) ), '/' ) ); ?></li>
206
-
207
- <?php }
208
-
209
- endforeach; ?>
210
-
211
- </ul>
212
-
213
- <?php }
214
-
215
-
216
- /**
217
- * Get the human readable backup type in.
218
- *
219
- * @access public
220
- * @param string $type
221
- * @param HMBKP_Scheduled_Backup $schedule (default: null)
222
- * @return string
223
- */
224
- function hmbkp_human_get_type( $type, HMBKP_Scheduled_Backup $schedule = null ) {
225
-
226
- if ( strpos( $type, 'complete' ) !== false )
227
- return __( 'Database and Files', 'hmbkp' );
228
-
229
- if ( strpos( $type, 'file' ) !== false )
230
- return __( 'Files', 'hmbkp' );
231
-
232
- if ( strpos( $type, 'database' ) !== false )
233
- return __( 'Database', 'hmbkp' );
234
-
235
- if ( ! is_null( $schedule ) )
236
- return hmbkp_human_get_type( $schedule->get_type() );
237
-
238
- return __( 'Legacy', 'hmbkp' );
239
-
240
- }
241
-
242
-
243
- /**
244
- * Display the row of actions for a schedule
245
- *
246
- * @access public
247
- * @param HMBKP_Scheduled_Backup $schedule
248
- * @return void
249
- */
250
- function hmbkp_schedule_actions( HMBKP_Scheduled_Backup $schedule ) { ?>
251
-
252
- <span class="hmbkp-status"><?php echo $schedule->get_status() ? $schedule->get_status() : __( 'Starting Backup', 'hmbkp' ); ?> <a href="<?php echo add_query_arg( array( 'action' => 'hmbkp_cancel', 'hmbkp_schedule_id' => $schedule->get_id() ), HMBKP_ADMIN_URL ); ?>"><?php _e( 'cancel', 'hmbkp' ); ?></a></span>
253
-
254
- <div class="hmbkp-schedule-actions row-actions">
255
-
256
- <a class="fancybox" href="<?php echo add_query_arg( array( 'action' => 'hmbkp_edit_schedule_load', 'hmbkp_schedule_id' => $schedule->get_id() ), admin_url( 'admin-ajax.php' ) ); ?>"><?php _e( 'Settings', 'hmbkp' ); ?></a> |
257
-
258
- <?php if ( $schedule->get_type() !== 'database' ) { ?>
259
- <a class="fancybox" href="<?php echo add_query_arg( array( 'action' => 'hmbkp_edit_schedule_excludes_load', 'hmbkp_schedule_id' => $schedule->get_id() ), admin_url( 'admin-ajax.php' ) ); ?>"><?php _e( 'Excludes', 'hmbkp' ); ?></a> |
260
- <?php } ?>
261
-
262
- <a class="hmbkp-run" href="<?php echo add_query_arg( array( 'action' => 'hmbkp_run_schedule', 'hmbkp_schedule_id' => $schedule->get_id() ), admin_url( 'admin-ajax.php' ) ); ?>"><?php _e( 'Run now', 'hmbkp' ); ?></a> |
263
-
264
- <a class="delete-action" href="<?php echo wp_nonce_url( add_query_arg( array( 'action' => 'hmbkp_delete_schedule', 'hmbkp_schedule_id' => $schedule->get_id() ), HMBKP_ADMIN_URL ), 'hmbkp-delete_schedule' ); ?>"><?php _e( 'Delete', 'hmbkp' ); ?></a>
265
-
266
- </div>
267
-
268
- <?php }
269
-
270
- /**
271
- * Load the backup errors file
272
- *
273
- * @return string
274
- */
275
- function hmbkp_backup_errors() {
276
-
277
- if ( ! file_exists( hmbkp_path() . '/.backup_errors' ) )
278
- return '';
279
-
280
- return file_get_contents( hmbkp_path() . '/.backup_errors' );
281
-
282
- }
283
-
284
- /**
285
- * Load the backup warnings file
286
- *
287
- * @return string
288
- */
289
- function hmbkp_backup_warnings() {
290
-
291
- if ( ! file_exists( hmbkp_path() . '/.backup_warnings' ) )
292
- return '';
293
-
294
- return file_get_contents( hmbkp_path() . '/.backup_warnings' );
295
-
296
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/icon.png DELETED
Binary file
backupwordpress/languages/hmbkp-de_DE.mo DELETED
Binary file
backupwordpress/languages/hmbkp-de_DE.po DELETED
@@ -1,614 +0,0 @@
1
- # Translation of 2.x in German
2
- # This file is distributed under the same license as the 2.x package.
3
- msgid ""
4
- msgstr ""
5
- "PO-Revision-Date: 2012-11-22 15:38:29+0000\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: GlotPress/0.1\n"
11
- "Project-Id-Version: 2.x\n"
12
-
13
- #: admin/actions.php:419
14
- msgid "Email to Support"
15
- msgstr ""
16
-
17
- #: admin/page.php:17
18
- msgid "If your finding BackUpWordPress useful, please %s."
19
- msgstr ""
20
-
21
- #: admin/schedule-form-excludes.php:13
22
- msgid "New Exclude Rule[s]"
23
- msgstr ""
24
-
25
- #: admin/actions.php:410
26
- msgid "Your BackUp Failed"
27
- msgstr ""
28
-
29
- #: admin/actions.php:412
30
- msgid "Here's the response from the server:"
31
- msgstr ""
32
-
33
- #: admin/page.php:19
34
- msgid "If you need help getting things working then check the FAQ by clicking on help in the top right hand corner of this page."
35
- msgstr ""
36
-
37
- #: admin/page.php:17
38
- msgid "rate it on the plugin directory"
39
- msgstr ""
40
-
41
- #: classes/schedule.php:512 functions/interface.php:252
42
- msgid "Starting Backup"
43
- msgstr ""
44
-
45
- #: classes/schedule.php:582
46
- msgid "Dumping Database %s"
47
- msgstr ""
48
-
49
- #: classes/schedule.php:588
50
- msgid "Verifying Database Dump %s"
51
- msgstr ""
52
-
53
- #: classes/schedule.php:594
54
- msgid "Creating zip archive %s"
55
- msgstr ""
56
-
57
- #: classes/schedule.php:600
58
- msgid "Verifying Zip Archive %s"
59
- msgstr ""
60
-
61
- #: classes/schedule.php:606
62
- msgid "Finishing Backup"
63
- msgstr ""
64
-
65
- #: classes/wp-cli.php:16
66
- msgid "BackUpWordPress may not work when php is running with %s on"
67
- msgstr ""
68
-
69
- #: functions/interface.php:72
70
- msgid "%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."
71
- msgstr ""
72
-
73
- #: admin/constants.php:29
74
- msgid "The time that your schedules should run. Defaults to %s."
75
- msgstr "Die Dauer, über die deine geplanten Aufgaben laufen sollen. Standard: %s."
76
-
77
- #: plugin.php:142
78
- msgid "Are you sure you want to delete this schedule? All of it's backups will also be deleted."
79
- msgstr "Bist du sicher, dass dieser Plan gelöscht werden soll? Alle zugehörigen Backups werden mit diesem Schritt auch gelöscht."
80
-
81
- #: plugin.php:142 plugin.php:143 plugin.php:144 plugin.php:145
82
- msgid "'Cancel' to go back, 'OK' to delete."
83
- msgstr "'Abbrechen' zum Zurückkehren, 'OK' zum Löschen."
84
-
85
- #: plugin.php:143
86
- msgid "Are you sure you want to delete this backup?"
87
- msgstr "Bist du sicher, dass du dieses Backup löschen möchtest?"
88
-
89
- #: plugin.php:144
90
- msgid "Are you sure you want to remove this exclude rule?"
91
- msgstr "Bist du sicher, dass du diese Ausschlussregel entfernen möchtest?"
92
-
93
- #: plugin.php:145
94
- msgid "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?"
95
- msgstr "Das Verringern der Anzahl der Backups, die auf diesem Server vorgehalten werden, bewirkt, dass einige existierende Backups gelöscht werden. Bist du sicher, dass du dies möchtest?"
96
-
97
- #: admin/actions.php:291
98
- msgid "Max backups can't be empty"
99
- msgstr "Die maximale Anzahl Backups kann nicht leer sein."
100
-
101
- #: admin/actions.php:297
102
- msgid "Max backups must be greater than 0"
103
- msgstr "Die maximale Anzahl Backups muss größer als 0 sein."
104
-
105
- #: admin/actions.php:396
106
- msgid "Exclude"
107
- msgstr "Ausschließen"
108
-
109
- #: admin/schedule-form-excludes.php:44
110
- msgid "default"
111
- msgstr "standard"
112
-
113
- #: admin/schedule-form-excludes.php:48
114
- msgid "defined"
115
- msgstr "festgelegt"
116
-
117
- #: admin/schedule-form.php:27
118
- msgid "Manual Only"
119
- msgstr "Nur manuell"
120
-
121
- #: admin/schedule-form.php:45
122
- msgid "The number of previous backups to store on the server. past this limit older backups will be deleted automatically."
123
- msgstr "Die Anzahl der Backups, die auf diesem Server vorgehalten werden. Bei Überschreitung des Limits werden ältere Backups automatisch gelöscht."
124
-
125
- #: admin/schedule.php:4
126
- msgid "this shouldn't take long&hellip;"
127
- msgstr "das sollte nicht lange dauern&hellip;"
128
-
129
- #: admin/schedule.php:4
130
- msgid "calculating the size of your site&hellip;"
131
- msgstr "Wir berechnen die Größe deiner Seite&hellip;"
132
-
133
- #: admin/schedule.php:12
134
- msgid "The next backup will be on %1$s at %2$s"
135
- msgstr "Das nächste Backup wird ausgeführt am %1$s um %2$s."
136
-
137
- #: admin/schedule.php:37
138
- msgid "every 12 hours at %1$s &amp; %2$s"
139
- msgstr "alle 12 Stunden um %1$s &amp; %2$s"
140
-
141
- #: admin/schedule.php:43
142
- msgid "weekly on %1$s at %2$s"
143
- msgstr "wöchentlich am %1$s um %2$s"
144
-
145
- #: admin/schedule.php:49
146
- msgid "fortnightly on %1$s at %2$s"
147
- msgstr "zweiwöchentlich am %1$s um %2$s"
148
-
149
- #: admin/schedule.php:56
150
- msgid "on the %1$s of each month at %2$s"
151
- msgstr "am %1$s. jedes Monats um %2$s"
152
-
153
- #: admin/schedule.php:62
154
- msgid "manually"
155
- msgstr "manuell"
156
-
157
- #: admin/schedule.php:68
158
- msgid "this server"
159
- msgstr "dieser Server"
160
-
161
- #: admin/schedule.php:75
162
- msgid "store the only the last backup on %s"
163
- msgstr "Halte nur das letzte Backup auf %s vor."
164
-
165
- #: admin/schedule.php:81
166
- msgid "don't store any backups on %s"
167
- msgstr "Speichere keine Backups auf %s"
168
-
169
- #: admin/schedule.php:87
170
- msgid "store only the last %1$s backups on %2$s"
171
- msgstr "Halte nur die letzten %1$s Backups auf %2$s vor."
172
-
173
- #: admin/schedule.php:96
174
- msgid "Backup my %1$s %2$s %3$s, %4$s. %5$s"
175
- msgstr "Erstelle ein Backup meiner %1$s %2$s %3$s, %4$s. %5$s"
176
-
177
- #: classes/email.php:23
178
- msgid "Receive a notification email when a backup completes, if the backup is small enough (&lt; 10mb) then it will be attached to the email. Separate multiple email address's with a comma."
179
- msgstr "Erhalte eine E-Mail, wenn ein Backup fertiggestellt wurde. Ist das Backup nicht zu groß (&lt; 10 MB), wird es an die E-Mail angehängt. Einzelne E-Mail-Adressen können durch Kommata getrennt angegeben werden."
180
-
181
- #: classes/email.php:129
182
- msgid "BackUpWordPress was unable to backup your site %1$s."
183
- msgstr "BackUpWordPress konnte deine Seite %1$s nicht sichern."
184
-
185
- #: classes/email.php:129
186
- msgid "Here are the errors that we're encountered:"
187
- msgstr "Hier sind die Fehler, auf die wir gestoßen sind:"
188
-
189
- #: classes/email.php:129
190
- msgid "If the errors above look like Martian, forward this email to %3$s and we'll take a look"
191
- msgstr "Wenn dir die Fehlermeldung oben wie ein Marsmensch vorkommt, dann leite diese E-Mail weiter an %3$s und wir schauen und das an."
192
-
193
- #: classes/email.php:129
194
- msgid ""
195
- "Kind Regards,\n"
196
- "The Apologetic BackUpWordPress Backup Emailing Robot"
197
- msgstr ""
198
- "Mit freundlichen Grüßen\n"
199
- "Der Untröstliche BackUpWordpress Backup-E-Mail-Roboter "
200
-
201
- #: classes/email.php:142 classes/email.php:151
202
- msgid "BackUpWordPress has completed a backup of your site %1$s."
203
- msgstr "BackUpWordPress hat ein Backup deiner Seite %1$s fertiggestellt."
204
-
205
- #: classes/email.php:142
206
- msgid "The backup file should be attached to this email."
207
- msgstr "Die Backup-Datei sollte dieser E-Mail angehängt sein."
208
-
209
- #: classes/email.php:142 classes/email.php:151
210
- msgid "You can download the backup file by clicking the link below:"
211
- msgstr "Du kannst die Backup-Datei herunterladen, indem du auf den folgenden Link klickst:"
212
-
213
- #: classes/email.php:142 classes/email.php:151
214
- msgid ""
215
- "Kind Regards,\n"
216
- "The Happy BackUpWordPress Backup Emailing Robot"
217
- msgstr ""
218
- "Mit freundlichen Grüßen\n"
219
- "Der Glückliche BackUpWordPress Backup-E-Mail-Roboter"
220
-
221
- #: classes/email.php:151
222
- msgid "Unfortunately the backup file was too large to attach to this email."
223
- msgstr "Unglücklicherweise war die Backup-Datei zu groß, um sie dieser E-Mail anzuhängen."
224
-
225
- #: classes/wp-cli.php:19
226
- msgid "Backup: Dumping database..."
227
- msgstr "Fertige Backup an: Sichere Datenbank..."
228
-
229
- #: classes/wp-cli.php:23
230
- msgid "Backup: Zipping everything up..."
231
- msgstr "Fertige Backup an: Packe alles zusammen..."
232
-
233
- #: classes/wp-cli.php:38
234
- msgid "Invalid backup path"
235
- msgstr "Ungültiges Backupverzeichnis"
236
-
237
- #: classes/wp-cli.php:43
238
- msgid "Invalid root path"
239
- msgstr "Ungültiges Rootverzeichnis"
240
-
241
- #: classes/wp-cli.php:68
242
- msgid "Backup Complete: "
243
- msgstr "Backup fertiggestellt:"
244
-
245
- #: classes/wp-cli.php:71
246
- msgid "Backup Failed"
247
- msgstr "Backup fehlgeschlagen."
248
-
249
- #: functions/core.php:202
250
- msgid "By default BackUpWordPress performs a daily backup of your database and a weekly backup of your database &amp; files. You can modify these schedules."
251
- msgstr "Standardmäßig führt BackUpWordPress ein tägliches Backup deiner Datenbank und ein wöchentliches Backup deiner Datenbank &amp; Dateien durch. Du kannst diesen Aufgabenplan selbstverständlich anpassen."
252
-
253
- #: functions/interface.php:111
254
- msgid "BackUpWordPress failed to perform the backup."
255
- msgstr "BackUpWordPress ist am Ausführen des Backups gescheitert."
256
-
257
- #: functions/interface.php:111
258
- msgid "You have likely hit a memory limit."
259
- msgstr "Du hast wahrscheinlich ein Speicherlimit überschritten."
260
-
261
- #: functions/interface.php:238
262
- msgid "Legacy"
263
- msgstr ""
264
-
265
- #: hm-backup/hm-backup.php:906
266
- msgid "The mysqldump file was not created"
267
- msgstr "Die MySQL-Abbilddatei konnte nicht erstellt werden."
268
-
269
- #: functions/interface.php:62
270
- msgid "Your backups directory isn't writable, run %1$s or %2$s or set the permissions yourself."
271
- msgstr "Dein Backup-Verzeichnis ist nicht schreibbar. Führe %1$s oder %2$s aus oder setze die Berechtigungen selbst."
272
-
273
- #: functions/interface.php:50
274
- msgid "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."
275
- msgstr "Das Backup-Verzeichnis kann nicht erstellt werden, weil dein %1$s-Verzeichnis nicht schreibbar ist. Führe %2$s oder %3$s aus oder erstelle das Verzeichnis selbst."
276
-
277
- #: functions/core.php:202
278
- msgid "BackUpWordPress has setup your default schedules."
279
- msgstr "BackUpWordPress hat deine Standard-Pläne eingerichtet."
280
-
281
- #: classes/email.php:127
282
- msgid "Backup of %s Failed"
283
- msgstr "Backup von %s fehlgeschlagen"
284
-
285
- #: classes/email.php:50
286
- msgid "Send an email notification to %s"
287
- msgstr "Sende E-Mail-Benachrichtigungen an %s"
288
-
289
- #: classes/email.php:72
290
- msgid "%s isn't a valid email"
291
- msgstr "%s ist keine gültige E-Mail-Adresse"
292
-
293
- #: admin/schedule.php:4
294
- msgid "Backups will be compressed and should be smaller than this."
295
- msgstr "Die Backups werden komprimiert und sollten kleiner sein."
296
-
297
- #: classes/email.php:19
298
- msgid "Email notification"
299
- msgstr "E-Mail-Benachrichtigung"
300
-
301
- #: admin/schedule.php:19
302
- msgid "hourly on the hour"
303
- msgstr "stündlich zur vollen Stunde"
304
-
305
- #: admin/schedule.php:25
306
- msgid "daily at %s"
307
- msgstr "täglich um %s"
308
-
309
- #: admin/schedule-form.php:41
310
- msgid "Number of backups to store on this server"
311
- msgstr "Anzahl der Backups, die auf dem Server gespeichert bleiben"
312
-
313
- #: admin/schedule-form.php:7
314
- msgid "Schedule Settings"
315
- msgstr "Plan-Einstellungen"
316
-
317
- #: admin/actions.php:418 admin/schedule-form-excludes.php:119
318
- msgid "Close"
319
- msgstr "Schließen"
320
-
321
- #: admin/menu.php:69
322
- msgid "The information below is for version %1$s. View the %2$s file for help specific to version %3$s."
323
- msgstr "Diese Informationen sind für Version %1$s. Sieh dir die %2$s-Datei für Hilfe speziell für Version %3$s an."
324
-
325
- #: admin/constants.php:26
326
- msgid "The root directory that is backed up. Defaults to %s."
327
- msgstr "Das Wurzelverzeichnis, das gesichert wird. Standard: %s"
328
-
329
- #: admin/constants.php:23
330
- msgid "The capability to use when calling %1$s. Defaults to %2$s."
331
- msgstr "Die Rolle, die beim Aufrufen von %1$s benutzt wird. Standard: %2$s"
332
-
333
- #: admin/constants.php:14
334
- msgid "The path to your %1$s executable. Will be used to zip up your %2$s and %3$s if available."
335
- msgstr "Der Pfad zur ausführbaren %1$s-Datei. Wird genutzt, um deine %2$s und %3$s als ZIP-Archiv zu komprimieren, wenn verfügbar."
336
-
337
- #: plugin.php:71
338
- msgid "BackUpWordPress requires WordPress version %s or greater."
339
- msgstr "BackUpWordPress benötigt WordPress Version %s oder größer."
340
-
341
- #: plugin.php:141 admin/actions.php:396
342
- msgid "Cancel"
343
- msgstr "Abbrechen"
344
-
345
- #: admin/constants.php:11
346
- msgid "The path to your %1$s executable. Will be used for the %2$s part of the back up if available."
347
- msgstr "Der Pfad zur ausführbaren %1$s-Datei. Wird für den %2$s-Teil des Backups genutzt, wenn verfügbar."
348
-
349
- #: admin/constants.php:8 admin/constants.php:11 admin/constants.php:14
350
- #: admin/constants.php:17 admin/constants.php:20 admin/constants.php:23
351
- #: admin/constants.php:26 admin/constants.php:29
352
- msgid "e.g."
353
- msgstr "z.B."
354
-
355
- #: admin/constants.php:3
356
- msgid "You can %1$s any of the following %2$s in your %3$s to control advanced settings. %4$s. Defined %5$s will be highlighted."
357
- msgstr "Du kannst jede der folgenden %2$s in deinem %3$s %1$sn, um erweiterte Einstellungen vorzunehmen. %4$s. Definierte %5$s werden hervorgehoben."
358
-
359
- #: admin/actions.php:192 admin/actions.php:195
360
- msgid "%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 back ups. See the %3$s for more details."
361
- msgstr "%1$s gibt eine %2$s-Antwort zurück. Das könnte bedeuten, dass deine Cron-Jobs nicht richtig aufgerufen werden. BackUpWordPress benutzt wp-cron, um geplante Backups auszuführen. Sieh dir das %3$s an für mehr Details."
362
-
363
- #: functions/interface.php:72
364
- msgid "http://php.net/manual/en/features.safe-mode.php"
365
- msgstr "http://php.net/manual/de/features.safe-mode.php"
366
-
367
- #: functions/interface.php:72
368
- msgid "Safe Mode"
369
- msgstr "Safe Mode"
370
-
371
- #: functions/interface.php:82
372
- msgid "Your custom backups directory %1$s doesn't exist and can't be created, your backups will be saved to %2$s instead."
373
- msgstr "Dein angepasstes Backup-Verzeichnis %1$s existiert nicht und kann nicht erstellt werden, neue Backups werden stattdessen nach %2$s gespeichert."
374
-
375
- #: functions/interface.php:92
376
- msgid "Your custom backups directory %1$s isn't writable, new backups will be saved to %2$s instead."
377
- msgstr "Dein angepasstes Backup-Verzeichnis %1$s ist nicht schreibbar, neue Backups werden stattdessen nach %2$s gespeichert."
378
-
379
- #: functions/interface.php:252
380
- msgid "cancel"
381
- msgstr "abbrechen"
382
-
383
- #: functions/interface.php:256
384
- msgid "Settings"
385
- msgstr "Einstellungen"
386
-
387
- #: functions/interface.php:259
388
- msgid "Excludes"
389
- msgstr "Ausnahmen"
390
-
391
- #: functions/interface.php:27
392
- msgid "Download"
393
- msgstr "Download"
394
-
395
- #: functions/interface.php:50 functions/interface.php:62
396
- msgid "BackUpWordPress is almost ready."
397
- msgstr "BackUpWordPress ist fast fertig."
398
-
399
- #: functions/interface.php:102
400
- msgid "BackUpWordPress detected issues with your last backup."
401
- msgstr "BackUpWordPress hat Probleme bei deinem letzten Backup bemerkt."
402
-
403
- #: functions/interface.php:227
404
- msgid "Database and Files"
405
- msgstr "Datenbank und Dateien"
406
-
407
- #: functions/interface.php:233
408
- msgid "Database"
409
- msgstr "Datenbank"
410
-
411
- #: hm-backup/hm-backup.php:931
412
- msgid "The backup file was not created"
413
- msgstr "Die Backup-Datei wurde nicht angelegt"
414
-
415
- #: hm-backup/hm-backup.php:951
416
- msgid "The following files are unreadable and couldn't be backed up: "
417
- msgstr "Die folgenden Dateien sind nicht lesbar und konnten nicht gesichert werden:"
418
-
419
- #: admin/actions.php:192 admin/actions.php:195 functions/interface.php:72
420
- #: functions/interface.php:82 functions/interface.php:92
421
- msgid "BackUpWordPress has detected a problem."
422
- msgstr "BackUpWordPress hat ein Problem entdeckt."
423
-
424
- #: admin/actions.php:265
425
- msgid "Backup type cannot be empty"
426
- msgstr "Backup-Typ kann nicht leer sein"
427
-
428
- #: admin/actions.php:268
429
- msgid "Invalid backup type"
430
- msgstr "Ungültiger Backup-Typ"
431
-
432
- #: admin/actions.php:278
433
- msgid "Schedule cannot be empty"
434
- msgstr "Aufgaben können nicht leer sein"
435
-
436
- #: admin/actions.php:281
437
- msgid "Invalid schedule"
438
- msgstr "Ungültige Aufgaben"
439
-
440
- #: admin/actions.php:294
441
- msgid "Max backups must be a number"
442
- msgstr "Maximale Anzahl der Backups muss eine Zahl sein"
443
-
444
- #: admin/actions.php:392
445
- msgid "%s didn't match any files."
446
- msgstr "%s passt auf keine Dateien."
447
-
448
- #: admin/backups.php:13
449
- msgid "add schedule"
450
- msgstr "Aufgabe hinzufügen"
451
-
452
- #: admin/backups.php:37
453
- msgid "Size"
454
- msgstr "Größe"
455
-
456
- #: admin/backups.php:38
457
- msgid "Type"
458
- msgstr "Typ"
459
-
460
- #: admin/backups.php:39
461
- msgid "Actions"
462
- msgstr "Aktionen"
463
-
464
- #: admin/backups.php:62
465
- msgid "This is where your backups will appear once you have one."
466
- msgstr "Hier erscheinen deine Backups, sobald du welche hast."
467
-
468
- #: admin/constants.php:3
469
- msgid "The Codex can help"
470
- msgstr "Der Codex kann helfen"
471
-
472
- #: admin/constants.php:8
473
- msgid "The path to folder you would like to store your backup files in, defaults to %s."
474
- msgstr "Der Pfad zum Verzeichnis, in dem du die Backups speichern möchtest. Standard: %s"
475
-
476
- #: admin/constants.php:11 admin/constants.php:14
477
- msgid "database"
478
- msgstr "Datenbank"
479
-
480
- #: admin/constants.php:14
481
- msgid "files"
482
- msgstr "Dateien"
483
-
484
- #: admin/constants.php:17
485
- msgid "Attempt to email a copy of your backups. Value should be email address to send backups to. Defaults to %s."
486
- msgstr "Versuche, eine Kopie des Backups per E-Mail zu senden. Der Wert sollte eine E-Mail-Adresse sein. Standard: %s"
487
-
488
- #: admin/constants.php:20
489
- msgid "Comma separated list of files or directories to exclude, the backups directory is automatically excluded."
490
- msgstr "Kommagetrennte Liste von Dateien oder Verzeichnissen, die ausgeschlossen werden sollen (das Backup-Verzeichnis ist automatisch ausgeschlossen)."
491
-
492
- #: admin/menu.php:10 admin/page.php:5
493
- msgid "Manage Backups"
494
- msgstr "Backups verwalten"
495
-
496
- #: admin/menu.php:10 admin/menu.php:34
497
- msgid "Backups"
498
- msgstr "Backups"
499
-
500
- #: admin/menu.php:69
501
- msgid "You are not using the latest stable version of BackUpWordPress"
502
- msgstr "Du benutzt nicht die neueste stabile BackUpWordPress-Version"
503
-
504
- #: admin/menu.php:75
505
- msgid "FAQ"
506
- msgstr "FAQ"
507
-
508
- #: admin/constants.php:3 admin/menu.php:76
509
- msgid "Constants"
510
- msgstr "Konstanten"
511
-
512
- #: admin/menu.php:79
513
- msgid "For more information:"
514
- msgstr "Für mehr Informationen:"
515
-
516
- #: admin/menu.php:81
517
- msgid "Support Forums"
518
- msgstr "Support-Foren"
519
-
520
- #: admin/menu.php:82
521
- msgid "Help with translation"
522
- msgstr "Beim Übersetzen helfen"
523
-
524
- #: admin/page.php:13
525
- msgid "You need to fix the issues detailed above before BackUpWordPress can start."
526
- msgstr "Du musst die Probleme, die oben beschrieben werden, beheben, bevor BackUpWordPress starten kann."
527
-
528
- #: admin/schedule-form-excludes.php:19
529
- msgid "Preview"
530
- msgstr "Vorschau"
531
-
532
- #: admin/schedule-form-excludes.php:29
533
- msgid "Exclude Rules"
534
- msgstr "Ausnahmeregeln"
535
-
536
- #: admin/schedule-form-excludes.php:52
537
- msgid "Remove"
538
- msgstr "Entfernen"
539
-
540
- #: admin/schedule-form-excludes.php:71
541
- msgid "Excluded"
542
- msgstr "Ausnehmen"
543
-
544
- #: admin/schedule-form-excludes.php:75
545
- msgid "Included"
546
- msgstr "Einschließen"
547
-
548
- #: admin/schedule-form-excludes.php:79
549
- msgid "Unreadable"
550
- msgstr "Nicht lesbar"
551
-
552
- #: admin/schedule-form-excludes.php:107
553
- msgid "Unreadable files can't be backed up"
554
- msgstr "Nicht lesbare Dateien können nicht gesichert werden"
555
-
556
- #: admin/schedule-form-excludes.php:113
557
- msgid "Your site is %s. Backups will be compressed and so will be smaller."
558
- msgstr "Deine Seite ist %s groß. Die Backups werden komprimiert und sollten kleiner sein."
559
-
560
- #: admin/schedule-form.php:11
561
- msgid "Backup"
562
- msgstr "Backup"
563
-
564
- #: admin/schedule-form.php:14
565
- msgid "Both Database &amp; files"
566
- msgstr "Datenbank &amp; Dateien"
567
-
568
- #: admin/schedule-form.php:15
569
- msgid "Files only"
570
- msgstr "Dateien"
571
-
572
- #: admin/schedule-form.php:16
573
- msgid "Database only"
574
- msgstr "Datenbank"
575
-
576
- #: functions/interface.php:230
577
- msgid "Files"
578
- msgstr "Dateien"
579
-
580
- #: admin/schedule-form-excludes.php:7
581
- msgid "Manage Excludes"
582
- msgstr "Ausnahmen verwalten"
583
-
584
- #: admin/schedule-form.php:23
585
- msgid "Schedule"
586
- msgstr "Plan"
587
-
588
- #: plugin.php:140 admin/schedule-form.php:54
589
- msgid "Update"
590
- msgstr "Update"
591
-
592
- #: admin/schedule.php:19
593
- msgid "hourly at %s minutes past the hour"
594
- msgstr "stündlich, %s Minuten nach der vollen Stunde"
595
-
596
- #: functions/interface.php:262
597
- msgid "Run now"
598
- msgstr "Jetzt ausführen"
599
-
600
- #: functions/interface.php:28 functions/interface.php:264
601
- msgid "Delete"
602
- msgstr "Löschen"
603
-
604
- #: plugin.php:60
605
- msgid "BackUpWordPress requires PHP version 5.2.4 or greater."
606
- msgstr "BackUpWordPress benötigt PHP Version 5.2.4 oder höher."
607
-
608
- #: classes/email.php:137
609
- msgid "Backup of %s"
610
- msgstr "Backup von %s"
611
-
612
- #: functions/core.php:293
613
- msgid "This %s file ensures that other people cannot download your backup files."
614
- msgstr "Diese %s-Datei garantiert, dass andere Leute nicht deine Backup-Dateien herunterladen können."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/languages/hmbkp-he_IL.mo DELETED
Binary file
backupwordpress/languages/hmbkp-he_IL.po DELETED
@@ -1,610 +0,0 @@
1
- # Translation of 2.x in Hebrew
2
- # This file is distributed under the same license as the 2.x package.
3
- msgid ""
4
- msgstr ""
5
- "PO-Revision-Date: 2012-11-22 15:38:51+0000\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: GlotPress/0.1\n"
11
- "Project-Id-Version: 2.x\n"
12
-
13
- #: admin/actions.php:419
14
- msgid "Email to Support"
15
- msgstr ""
16
-
17
- #: admin/page.php:17
18
- msgid "If your finding BackUpWordPress useful, please %s."
19
- msgstr ""
20
-
21
- #: admin/schedule-form-excludes.php:13
22
- msgid "New Exclude Rule[s]"
23
- msgstr ""
24
-
25
- #: admin/actions.php:410
26
- msgid "Your BackUp Failed"
27
- msgstr ""
28
-
29
- #: admin/actions.php:412
30
- msgid "Here's the response from the server:"
31
- msgstr ""
32
-
33
- #: admin/page.php:19
34
- msgid "If you need help getting things working then check the FAQ by clicking on help in the top right hand corner of this page."
35
- msgstr ""
36
-
37
- #: admin/page.php:17
38
- msgid "rate it on the plugin directory"
39
- msgstr ""
40
-
41
- #: classes/schedule.php:512 functions/interface.php:252
42
- msgid "Starting Backup"
43
- msgstr ""
44
-
45
- #: classes/schedule.php:582
46
- msgid "Dumping Database %s"
47
- msgstr ""
48
-
49
- #: classes/schedule.php:588
50
- msgid "Verifying Database Dump %s"
51
- msgstr ""
52
-
53
- #: classes/schedule.php:594
54
- msgid "Creating zip archive %s"
55
- msgstr ""
56
-
57
- #: classes/schedule.php:600
58
- msgid "Verifying Zip Archive %s"
59
- msgstr ""
60
-
61
- #: classes/schedule.php:606
62
- msgid "Finishing Backup"
63
- msgstr ""
64
-
65
- #: classes/wp-cli.php:16
66
- msgid "BackUpWordPress may not work when php is running with %s on"
67
- msgstr ""
68
-
69
- #: functions/interface.php:72
70
- msgid "%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."
71
- msgstr ""
72
-
73
- #: admin/constants.php:29
74
- msgid "The time that your schedules should run. Defaults to %s."
75
- msgstr ""
76
-
77
- #: plugin.php:142
78
- msgid "Are you sure you want to delete this schedule? All of it's backups will also be deleted."
79
- msgstr ""
80
-
81
- #: plugin.php:142 plugin.php:143 plugin.php:144 plugin.php:145
82
- msgid "'Cancel' to go back, 'OK' to delete."
83
- msgstr ""
84
-
85
- #: plugin.php:143
86
- msgid "Are you sure you want to delete this backup?"
87
- msgstr ""
88
-
89
- #: plugin.php:144
90
- msgid "Are you sure you want to remove this exclude rule?"
91
- msgstr ""
92
-
93
- #: plugin.php:145
94
- msgid "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?"
95
- msgstr ""
96
-
97
- #: admin/actions.php:291
98
- msgid "Max backups can't be empty"
99
- msgstr ""
100
-
101
- #: admin/actions.php:297
102
- msgid "Max backups must be greater than 0"
103
- msgstr ""
104
-
105
- #: admin/actions.php:396
106
- msgid "Exclude"
107
- msgstr ""
108
-
109
- #: admin/schedule-form-excludes.php:44
110
- msgid "default"
111
- msgstr ""
112
-
113
- #: admin/schedule-form-excludes.php:48
114
- msgid "defined"
115
- msgstr ""
116
-
117
- #: admin/schedule-form.php:27
118
- msgid "Manual Only"
119
- msgstr ""
120
-
121
- #: admin/schedule-form.php:45
122
- msgid "The number of previous backups to store on the server. past this limit older backups will be deleted automatically."
123
- msgstr ""
124
-
125
- #: admin/schedule.php:4
126
- msgid "this shouldn't take long&hellip;"
127
- msgstr ""
128
-
129
- #: admin/schedule.php:4
130
- msgid "calculating the size of your site&hellip;"
131
- msgstr ""
132
-
133
- #: admin/schedule.php:12
134
- msgid "The next backup will be on %1$s at %2$s"
135
- msgstr ""
136
-
137
- #: admin/schedule.php:37
138
- msgid "every 12 hours at %1$s &amp; %2$s"
139
- msgstr ""
140
-
141
- #: admin/schedule.php:43
142
- msgid "weekly on %1$s at %2$s"
143
- msgstr ""
144
-
145
- #: admin/schedule.php:49
146
- msgid "fortnightly on %1$s at %2$s"
147
- msgstr ""
148
-
149
- #: admin/schedule.php:56
150
- msgid "on the %1$s of each month at %2$s"
151
- msgstr ""
152
-
153
- #: admin/schedule.php:62
154
- msgid "manually"
155
- msgstr ""
156
-
157
- #: admin/schedule.php:68
158
- msgid "this server"
159
- msgstr ""
160
-
161
- #: admin/schedule.php:75
162
- msgid "store the only the last backup on %s"
163
- msgstr ""
164
-
165
- #: admin/schedule.php:81
166
- msgid "don't store any backups on %s"
167
- msgstr ""
168
-
169
- #: admin/schedule.php:87
170
- msgid "store only the last %1$s backups on %2$s"
171
- msgstr ""
172
-
173
- #: admin/schedule.php:96
174
- msgid "Backup my %1$s %2$s %3$s, %4$s. %5$s"
175
- msgstr ""
176
-
177
- #: classes/email.php:23
178
- msgid "Receive a notification email when a backup completes, if the backup is small enough (&lt; 10mb) then it will be attached to the email. Separate multiple email address's with a comma."
179
- msgstr ""
180
-
181
- #: classes/email.php:129
182
- msgid "BackUpWordPress was unable to backup your site %1$s."
183
- msgstr ""
184
-
185
- #: classes/email.php:129
186
- msgid "Here are the errors that we're encountered:"
187
- msgstr ""
188
-
189
- #: classes/email.php:129
190
- msgid "If the errors above look like Martian, forward this email to %3$s and we'll take a look"
191
- msgstr ""
192
-
193
- #: classes/email.php:129
194
- msgid ""
195
- "Kind Regards,\n"
196
- "The Apologetic BackUpWordPress Backup Emailing Robot"
197
- msgstr ""
198
-
199
- #: classes/email.php:142 classes/email.php:151
200
- msgid "BackUpWordPress has completed a backup of your site %1$s."
201
- msgstr ""
202
-
203
- #: classes/email.php:142
204
- msgid "The backup file should be attached to this email."
205
- msgstr ""
206
-
207
- #: classes/email.php:142 classes/email.php:151
208
- msgid "You can download the backup file by clicking the link below:"
209
- msgstr ""
210
-
211
- #: classes/email.php:142 classes/email.php:151
212
- msgid ""
213
- "Kind Regards,\n"
214
- "The Happy BackUpWordPress Backup Emailing Robot"
215
- msgstr ""
216
-
217
- #: classes/email.php:151
218
- msgid "Unfortunately the backup file was too large to attach to this email."
219
- msgstr ""
220
-
221
- #: classes/wp-cli.php:19
222
- msgid "Backup: Dumping database..."
223
- msgstr ""
224
-
225
- #: classes/wp-cli.php:23
226
- msgid "Backup: Zipping everything up..."
227
- msgstr ""
228
-
229
- #: classes/wp-cli.php:38
230
- msgid "Invalid backup path"
231
- msgstr ""
232
-
233
- #: classes/wp-cli.php:43
234
- msgid "Invalid root path"
235
- msgstr ""
236
-
237
- #: classes/wp-cli.php:68
238
- msgid "Backup Complete: "
239
- msgstr ""
240
-
241
- #: classes/wp-cli.php:71
242
- msgid "Backup Failed"
243
- msgstr ""
244
-
245
- #: functions/core.php:202
246
- msgid "By default BackUpWordPress performs a daily backup of your database and a weekly backup of your database &amp; files. You can modify these schedules."
247
- msgstr ""
248
-
249
- #: functions/interface.php:111
250
- msgid "BackUpWordPress failed to perform the backup."
251
- msgstr ""
252
-
253
- #: functions/interface.php:111
254
- msgid "You have likely hit a memory limit."
255
- msgstr ""
256
-
257
- #: functions/interface.php:238
258
- msgid "Legacy"
259
- msgstr ""
260
-
261
- #: hm-backup/hm-backup.php:906
262
- msgid "The mysqldump file was not created"
263
- msgstr ""
264
-
265
- #: functions/interface.php:62
266
- msgid "Your backups directory isn't writable, run %1$s or %2$s or set the permissions yourself."
267
- msgstr ""
268
-
269
- #: functions/interface.php:50
270
- msgid "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."
271
- msgstr ""
272
-
273
- #: functions/core.php:202
274
- msgid "BackUpWordPress has setup your default schedules."
275
- msgstr "BackUpWordPress הגדיר את תזמוני ברירת-המחדל שלך."
276
-
277
- #: classes/email.php:127
278
- msgid "Backup of %s Failed"
279
- msgstr "גיבוי של %s נכשל"
280
-
281
- #: classes/email.php:50
282
- msgid "Send an email notification to %s"
283
- msgstr "שלח התראה בדוא\"ל אל %s"
284
-
285
- #: classes/email.php:72
286
- msgid "%s isn't a valid email"
287
- msgstr "%s אינו דוא\"ל חוקי"
288
-
289
- #: admin/schedule.php:4
290
- msgid "Backups will be compressed and should be smaller than this."
291
- msgstr "גיבויים ידחסו וצריכים להיות קטנים יותר מזה."
292
-
293
- #: classes/email.php:19
294
- msgid "Email notification"
295
- msgstr "התראה בדוא\"ל"
296
-
297
- #: admin/schedule.php:19
298
- msgid "hourly on the hour"
299
- msgstr "פעם בשעה על השעה"
300
-
301
- #: admin/schedule.php:25
302
- msgid "daily at %s"
303
- msgstr "פעם ביום ב-%s"
304
-
305
- #: admin/schedule-form.php:41
306
- msgid "Number of backups to store on this server"
307
- msgstr "מספר גיבויים לאחסון על שרת זה"
308
-
309
- #: admin/schedule-form.php:7
310
- msgid "Schedule Settings"
311
- msgstr "הגדרות תזמון"
312
-
313
- #: admin/actions.php:418 admin/schedule-form-excludes.php:119
314
- msgid "Close"
315
- msgstr "סגור"
316
-
317
- #: admin/menu.php:69
318
- msgid "The information below is for version %1$s. View the %2$s file for help specific to version %3$s."
319
- msgstr "המידע שלהלן הוא לגרסה %1$s. צפה בקובץ %2$s לעזרה ספציפית לגרסה %3$s."
320
-
321
- #: admin/constants.php:26
322
- msgid "The root directory that is backed up. Defaults to %s."
323
- msgstr "הספריה הראשית שמגובית. ברירת-מחדל היא %s."
324
-
325
- #: admin/constants.php:23
326
- msgid "The capability to use when calling %1$s. Defaults to %2$s."
327
- msgstr ""
328
-
329
- #: admin/constants.php:14
330
- msgid "The path to your %1$s executable. Will be used to zip up your %2$s and %3$s if available."
331
- msgstr ""
332
-
333
- #: plugin.php:71
334
- msgid "BackUpWordPress requires WordPress version %s or greater."
335
- msgstr "BackUpWordPress דורש וורדפרס גרסה %s או יותר."
336
-
337
- #: plugin.php:141 admin/actions.php:396
338
- msgid "Cancel"
339
- msgstr "ביטול"
340
-
341
- #: admin/constants.php:11
342
- msgid "The path to your %1$s executable. Will be used for the %2$s part of the back up if available."
343
- msgstr ""
344
-
345
- #: admin/constants.php:8 admin/constants.php:11 admin/constants.php:14
346
- #: admin/constants.php:17 admin/constants.php:20 admin/constants.php:23
347
- #: admin/constants.php:26 admin/constants.php:29
348
- msgid "e.g."
349
- msgstr "למשל"
350
-
351
- #: admin/constants.php:3
352
- msgid "You can %1$s any of the following %2$s in your %3$s to control advanced settings. %4$s. Defined %5$s will be highlighted."
353
- msgstr ""
354
-
355
- #: admin/actions.php:192 admin/actions.php:195
356
- msgid "%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 back ups. See the %3$s for more details."
357
- msgstr ""
358
-
359
- #: functions/interface.php:72
360
- msgid "http://php.net/manual/en/features.safe-mode.php"
361
- msgstr ""
362
-
363
- #: functions/interface.php:72
364
- msgid "Safe Mode"
365
- msgstr "מצב בטוח"
366
-
367
- #: functions/interface.php:82
368
- msgid "Your custom backups directory %1$s doesn't exist and can't be created, your backups will be saved to %2$s instead."
369
- msgstr "ספריית הגיבויים המותאמת אישית שלך %1$s לא קיימת ולא יכולה להיוצר, הגיבויים שלך ישמרו ב-%2$s במקום."
370
-
371
- #: functions/interface.php:92
372
- msgid "Your custom backups directory %1$s isn't writable, new backups will be saved to %2$s instead."
373
- msgstr "ספריית הגיבויים המותאמת אישית שלך %1$s לא ניתנת לכתיבה, גיבויים חדשים ישמרו ב-%2$s במקום."
374
-
375
- #: functions/interface.php:252
376
- msgid "cancel"
377
- msgstr "ביטול"
378
-
379
- #: functions/interface.php:256
380
- msgid "Settings"
381
- msgstr "הגדרות"
382
-
383
- #: functions/interface.php:259
384
- msgid "Excludes"
385
- msgstr "לא כלולים"
386
-
387
- #: functions/interface.php:27
388
- msgid "Download"
389
- msgstr "הורד"
390
-
391
- #: functions/interface.php:50 functions/interface.php:62
392
- msgid "BackUpWordPress is almost ready."
393
- msgstr "BackUpWordPress כמעט מוכן."
394
-
395
- #: functions/interface.php:102
396
- msgid "BackUpWordPress detected issues with your last backup."
397
- msgstr "BackUpWordPress זיהה בעיות עם הגיבוי האחרון שלך."
398
-
399
- #: functions/interface.php:227
400
- msgid "Database and Files"
401
- msgstr "מסד נתונים וקבצים"
402
-
403
- #: functions/interface.php:233
404
- msgid "Database"
405
- msgstr "מסד נתונים"
406
-
407
- #: hm-backup/hm-backup.php:931
408
- msgid "The backup file was not created"
409
- msgstr "קובץ הגיבוי לא נוצר"
410
-
411
- #: hm-backup/hm-backup.php:951
412
- msgid "The following files are unreadable and couldn't be backed up: "
413
- msgstr "הקבצים הבאים אינם קריאים ולא היה ניתן לגבות אותם:"
414
-
415
- #: admin/actions.php:192 admin/actions.php:195 functions/interface.php:72
416
- #: functions/interface.php:82 functions/interface.php:92
417
- msgid "BackUpWordPress has detected a problem."
418
- msgstr "BackUpWordPress זיהה בעיה."
419
-
420
- #: admin/actions.php:265
421
- msgid "Backup type cannot be empty"
422
- msgstr "סוג הגיבוי אינו יכול להיות ריק"
423
-
424
- #: admin/actions.php:268
425
- msgid "Invalid backup type"
426
- msgstr "סוג גיבוי לא חוקי"
427
-
428
- #: admin/actions.php:278
429
- msgid "Schedule cannot be empty"
430
- msgstr "תזמון אינו יכול להיות ריק"
431
-
432
- #: admin/actions.php:281
433
- msgid "Invalid schedule"
434
- msgstr "תזמון לא חוקי"
435
-
436
- #: admin/actions.php:294
437
- msgid "Max backups must be a number"
438
- msgstr "מספר גיבויים מקסימלי חייב להיות מספר"
439
-
440
- #: admin/actions.php:392
441
- msgid "%s didn't match any files."
442
- msgstr "%s לא תאם אף קובץ."
443
-
444
- #: admin/backups.php:13
445
- msgid "add schedule"
446
- msgstr "הוסף תזמון"
447
-
448
- #: admin/backups.php:37
449
- msgid "Size"
450
- msgstr "גודל"
451
-
452
- #: admin/backups.php:38
453
- msgid "Type"
454
- msgstr "סוג"
455
-
456
- #: admin/backups.php:39
457
- msgid "Actions"
458
- msgstr "פעולות"
459
-
460
- #: admin/backups.php:62
461
- msgid "This is where your backups will appear once you have one."
462
- msgstr "זהו המקום בו הגיבויים שלך יופיעו ברגע שיהיה לך אחד."
463
-
464
- #: admin/constants.php:3
465
- msgid "The Codex can help"
466
- msgstr "הקודקס יכול לעזור"
467
-
468
- #: admin/constants.php:8
469
- msgid "The path to folder you would like to store your backup files in, defaults to %s."
470
- msgstr "הנתיב לתיקיה שבה תרצה לאחסן את קבצי הגיבוי שלך, ברירת-מחדל היא %s."
471
-
472
- #: admin/constants.php:11 admin/constants.php:14
473
- msgid "database"
474
- msgstr "מסד נתונים"
475
-
476
- #: admin/constants.php:14
477
- msgid "files"
478
- msgstr "קבצים"
479
-
480
- #: admin/constants.php:17
481
- msgid "Attempt to email a copy of your backups. Value should be email address to send backups to. Defaults to %s."
482
- msgstr "נסה לשלוח העתק של הגיבויים שלך בדוא\"ל. ערך צריך להיות כתובת דוא\"ל אליה ישלחו גיבויים. ברירת-מחדל היא %s."
483
-
484
- #: admin/constants.php:20
485
- msgid "Comma separated list of files or directories to exclude, the backups directory is automatically excluded."
486
- msgstr ""
487
-
488
- #: admin/menu.php:10 admin/page.php:5
489
- msgid "Manage Backups"
490
- msgstr "ניהול גיבויים"
491
-
492
- #: admin/menu.php:10 admin/menu.php:34
493
- msgid "Backups"
494
- msgstr "גיבויים"
495
-
496
- #: admin/menu.php:69
497
- msgid "You are not using the latest stable version of BackUpWordPress"
498
- msgstr "אינך משתמש בגרסה האחרונה היציבה של BackUpWordPress"
499
-
500
- #: admin/menu.php:75
501
- msgid "FAQ"
502
- msgstr "שאלות נפוצות"
503
-
504
- #: admin/constants.php:3 admin/menu.php:76
505
- msgid "Constants"
506
- msgstr ""
507
-
508
- #: admin/menu.php:79
509
- msgid "For more information:"
510
- msgstr "למידע נוסף:"
511
-
512
- #: admin/menu.php:81
513
- msgid "Support Forums"
514
- msgstr "פורומי תמיכה"
515
-
516
- #: admin/menu.php:82
517
- msgid "Help with translation"
518
- msgstr "עזרה עם תרגום"
519
-
520
- #: admin/page.php:13
521
- msgid "You need to fix the issues detailed above before BackUpWordPress can start."
522
- msgstr "עליך לתקן את הבעיות המפורטות לעיל לפני ש-BackUpWordPress יוכל להתחיל."
523
-
524
- #: admin/schedule-form-excludes.php:19
525
- msgid "Preview"
526
- msgstr "הצג"
527
-
528
- #: admin/schedule-form-excludes.php:29
529
- msgid "Exclude Rules"
530
- msgstr ""
531
-
532
- #: admin/schedule-form-excludes.php:52
533
- msgid "Remove"
534
- msgstr "הסר"
535
-
536
- #: admin/schedule-form-excludes.php:71
537
- msgid "Excluded"
538
- msgstr "לא כלול"
539
-
540
- #: admin/schedule-form-excludes.php:75
541
- msgid "Included"
542
- msgstr "כלול"
543
-
544
- #: admin/schedule-form-excludes.php:79
545
- msgid "Unreadable"
546
- msgstr "לא קריא"
547
-
548
- #: admin/schedule-form-excludes.php:107
549
- msgid "Unreadable files can't be backed up"
550
- msgstr "קבצים לא קריאים אינם יכולים להיות מגובים"
551
-
552
- #: admin/schedule-form-excludes.php:113
553
- msgid "Your site is %s. Backups will be compressed and so will be smaller."
554
- msgstr "האתר שלך הוא %s. גיבויים ידחסו ולכן יהיו קטנים יותר."
555
-
556
- #: admin/schedule-form.php:11
557
- msgid "Backup"
558
- msgstr "גיבוי"
559
-
560
- #: admin/schedule-form.php:14
561
- msgid "Both Database &amp; files"
562
- msgstr "גם מסד נתונים וגם קבצים"
563
-
564
- #: admin/schedule-form.php:15
565
- msgid "Files only"
566
- msgstr "קבצים בלבד"
567
-
568
- #: admin/schedule-form.php:16
569
- msgid "Database only"
570
- msgstr "מסד נתונים בלבד"
571
-
572
- #: functions/interface.php:230
573
- msgid "Files"
574
- msgstr "קבצים"
575
-
576
- #: admin/schedule-form-excludes.php:7
577
- msgid "Manage Excludes"
578
- msgstr ""
579
-
580
- #: admin/schedule-form.php:23
581
- msgid "Schedule"
582
- msgstr "תזמון"
583
-
584
- #: plugin.php:140 admin/schedule-form.php:54
585
- msgid "Update"
586
- msgstr "עדכן"
587
-
588
- #: admin/schedule.php:19
589
- msgid "hourly at %s minutes past the hour"
590
- msgstr "פעם בשעה %s דקות לאחר תחילת השעה"
591
-
592
- #: functions/interface.php:262
593
- msgid "Run now"
594
- msgstr "גבה עכשיו"
595
-
596
- #: functions/interface.php:28 functions/interface.php:264
597
- msgid "Delete"
598
- msgstr "מחק"
599
-
600
- #: plugin.php:60
601
- msgid "BackUpWordPress requires PHP version 5.2.4 or greater."
602
- msgstr "BackUpWordPress דורש PHP גרסה 5.2.4 או יותר."
603
-
604
- #: classes/email.php:137
605
- msgid "Backup of %s"
606
- msgstr "גיבוי של %s"
607
-
608
- #: functions/core.php:293
609
- msgid "This %s file ensures that other people cannot download your backup files."
610
- msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/languages/hmbkp-it_IT.mo DELETED
Binary file
backupwordpress/languages/hmbkp-it_IT.po DELETED
@@ -1,612 +0,0 @@
1
- # Translation of 2.x in Italian
2
- # This file is distributed under the same license as the 2.x package.
3
- msgid ""
4
- msgstr ""
5
- "PO-Revision-Date: 2012-11-22 15:38:46+0000\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: GlotPress/0.1\n"
11
- "Project-Id-Version: 2.x\n"
12
-
13
- #: admin/actions.php:419
14
- msgid "Email to Support"
15
- msgstr ""
16
-
17
- #: admin/page.php:17
18
- msgid "If your finding BackUpWordPress useful, please %s."
19
- msgstr ""
20
-
21
- #: admin/schedule-form-excludes.php:13
22
- msgid "New Exclude Rule[s]"
23
- msgstr ""
24
-
25
- #: admin/actions.php:410
26
- msgid "Your BackUp Failed"
27
- msgstr ""
28
-
29
- #: admin/actions.php:412
30
- msgid "Here's the response from the server:"
31
- msgstr ""
32
-
33
- #: admin/page.php:19
34
- msgid "If you need help getting things working then check the FAQ by clicking on help in the top right hand corner of this page."
35
- msgstr ""
36
-
37
- #: admin/page.php:17
38
- msgid "rate it on the plugin directory"
39
- msgstr ""
40
-
41
- #: classes/schedule.php:512 functions/interface.php:252
42
- msgid "Starting Backup"
43
- msgstr ""
44
-
45
- #: classes/schedule.php:582
46
- msgid "Dumping Database %s"
47
- msgstr ""
48
-
49
- #: classes/schedule.php:588
50
- msgid "Verifying Database Dump %s"
51
- msgstr ""
52
-
53
- #: classes/schedule.php:594
54
- msgid "Creating zip archive %s"
55
- msgstr ""
56
-
57
- #: classes/schedule.php:600
58
- msgid "Verifying Zip Archive %s"
59
- msgstr ""
60
-
61
- #: classes/schedule.php:606
62
- msgid "Finishing Backup"
63
- msgstr ""
64
-
65
- #: classes/wp-cli.php:16
66
- msgid "BackUpWordPress may not work when php is running with %s on"
67
- msgstr ""
68
-
69
- #: functions/interface.php:72
70
- msgid "%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."
71
- msgstr ""
72
-
73
- #: admin/constants.php:29
74
- msgid "The time that your schedules should run. Defaults to %s."
75
- msgstr "Quando si deve avviare la tua pianificazione. Il valore predefinito è %s."
76
-
77
- #: plugin.php:142
78
- msgid "Are you sure you want to delete this schedule? All of it's backups will also be deleted."
79
- msgstr "Sei sicuro di voler cancellare questa pianificazione? Tutti i backup verranno eliminati."
80
-
81
- #: plugin.php:142 plugin.php:143 plugin.php:144 plugin.php:145
82
- msgid "'Cancel' to go back, 'OK' to delete."
83
- msgstr "\"Annulla\" per tornare indietro, \"OK\" per cancellare."
84
-
85
- #: plugin.php:143
86
- msgid "Are you sure you want to delete this backup?"
87
- msgstr "Sei sicuro di voler cancellare questo backup?"
88
-
89
- #: plugin.php:144
90
- msgid "Are you sure you want to remove this exclude rule?"
91
- msgstr "Sei sicuro di voler rimuovere questa regola di esclusione?"
92
-
93
- #: plugin.php:145
94
- msgid "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?"
95
- msgstr "La riduzione del numero di backup che sono memorizzati sul server causerà la cancellazione di alcuni dei vostri backup esistenti, sei sicuro?"
96
-
97
- #: admin/actions.php:291
98
- msgid "Max backups can't be empty"
99
- msgstr "I backup massimi non devono essere vuoti"
100
-
101
- #: admin/actions.php:297
102
- msgid "Max backups must be greater than 0"
103
- msgstr "I backup massimi devono essere maggiori di 0"
104
-
105
- #: admin/actions.php:396
106
- msgid "Exclude"
107
- msgstr "Escludere"
108
-
109
- #: admin/schedule-form-excludes.php:44
110
- msgid "default"
111
- msgstr "default"
112
-
113
- #: admin/schedule-form-excludes.php:48
114
- msgid "defined"
115
- msgstr "definito"
116
-
117
- #: admin/schedule-form.php:27
118
- msgid "Manual Only"
119
- msgstr "Solo manuale"
120
-
121
- #: admin/schedule-form.php:45
122
- msgid "The number of previous backups to store on the server. past this limit older backups will be deleted automatically."
123
- msgstr "Il numero di backup precedenti da memorizzare sul server. Oltre questo limite i backup precedenti verranno automaticamente eliminati."
124
-
125
- #: admin/schedule.php:4
126
- msgid "this shouldn't take long&hellip;"
127
- msgstr "questo non dovrebbe impiegare troppo tempo"
128
-
129
- #: admin/schedule.php:4
130
- msgid "calculating the size of your site&hellip;"
131
- msgstr "calcolando le dimensioni del sito"
132
-
133
- #: admin/schedule.php:12
134
- msgid "The next backup will be on %1$s at %2$s"
135
- msgstr "Il prossimo backup sarà da %1$s a %2$s"
136
-
137
- #: admin/schedule.php:37
138
- msgid "every 12 hours at %1$s &amp; %2$s"
139
- msgstr "ogni 12 ore dalle %1$s &amp; %2$s"
140
-
141
- #: admin/schedule.php:43
142
- msgid "weekly on %1$s at %2$s"
143
- msgstr "ogni settimana da %1$s a %2$s"
144
-
145
- #: admin/schedule.php:49
146
- msgid "fortnightly on %1$s at %2$s"
147
- msgstr "ogni 15 giorni da %1$s a %2$s"
148
-
149
- #: admin/schedule.php:56
150
- msgid "on the %1$s of each month at %2$s"
151
- msgstr "da %1$s di ogni mese a %2$s"
152
-
153
- #: admin/schedule.php:62
154
- msgid "manually"
155
- msgstr "manualmente"
156
-
157
- #: admin/schedule.php:68
158
- msgid "this server"
159
- msgstr "questo server"
160
-
161
- #: admin/schedule.php:75
162
- msgid "store the only the last backup on %s"
163
- msgstr "memorizzare solamente l'ultimo backup su %s"
164
-
165
- #: admin/schedule.php:81
166
- msgid "don't store any backups on %s"
167
- msgstr "non memorizzare alcun backup su %s"
168
-
169
- #: admin/schedule.php:87
170
- msgid "store only the last %1$s backups on %2$s"
171
- msgstr "memorizza solo gli ultimi %1$s backup su %2$s"
172
-
173
- #: admin/schedule.php:96
174
- msgid "Backup my %1$s %2$s %3$s, %4$s. %5$s"
175
- msgstr "Memorizza %1$s %2$s %3$s, %4$s. %5$s"
176
-
177
- #: classes/email.php:23
178
- msgid "Receive a notification email when a backup completes, if the backup is small enough (&lt; 10mb) then it will be attached to the email. Separate multiple email address's with a comma."
179
- msgstr "Ricevi una email di notifica quando un backup è pronto, se il backup è abbastanza piccolo (&lt; 10mb) sarà allegato alla email. Separa più indirizzi e-mail con una virgola."
180
-
181
- #: classes/email.php:129
182
- msgid "BackUpWordPress was unable to backup your site %1$s."
183
- msgstr "BackUpWordPress non è riuscito a memorizzare il tuo sito %1$s."
184
-
185
- #: classes/email.php:129
186
- msgid "Here are the errors that we're encountered:"
187
- msgstr "Qui ci sono gli errori riscontrati:"
188
-
189
- #: classes/email.php:129
190
- msgid "If the errors above look like Martian, forward this email to %3$s and we'll take a look"
191
- msgstr "Se gli errori di cui sopra hanno un aspetto marziano, inoltra questa email a %3$s e gli daremo un'occhiata."
192
-
193
- #: classes/email.php:129
194
- msgid ""
195
- "Kind Regards,\n"
196
- "The Apologetic BackUpWordPress Backup Emailing Robot"
197
- msgstr ""
198
- "Cordiali saluti, \n"
199
- "L'apologetico BackUpWordPress Backup Robot Emailing"
200
-
201
- #: classes/email.php:142 classes/email.php:151
202
- msgid "BackUpWordPress has completed a backup of your site %1$s."
203
- msgstr "BackUpWordPress ha completato un backup del tuo sito %1$s."
204
-
205
- #: classes/email.php:142
206
- msgid "The backup file should be attached to this email."
207
- msgstr "Il file di backup deve essere allegato a questa email."
208
-
209
- #: classes/email.php:142 classes/email.php:151
210
- msgid "You can download the backup file by clicking the link below:"
211
- msgstr "È possibile scaricare il file di backup cliccando sul link sottostante:"
212
-
213
- #: classes/email.php:142 classes/email.php:151
214
- msgid ""
215
- "Kind Regards,\n"
216
- "The Happy BackUpWordPress Backup Emailing Robot"
217
- msgstr "Cordiali saluti, Il felice BackUpWordPress Backup Robot Emailing"
218
-
219
- #: classes/email.php:151
220
- msgid "Unfortunately the backup file was too large to attach to this email."
221
- msgstr "Purtroppo il file di backup è troppo grande da allegare a questa email."
222
-
223
- #: classes/wp-cli.php:19
224
- msgid "Backup: Dumping database..."
225
- msgstr "Backup: Dumping database..."
226
-
227
- #: classes/wp-cli.php:23
228
- msgid "Backup: Zipping everything up..."
229
- msgstr "Backup: zippando..."
230
-
231
- #: classes/wp-cli.php:38
232
- msgid "Invalid backup path"
233
- msgstr "Cartella backup non valida"
234
-
235
- #: classes/wp-cli.php:43
236
- msgid "Invalid root path"
237
- msgstr "Percorso non valido"
238
-
239
- #: classes/wp-cli.php:68
240
- msgid "Backup Complete: "
241
- msgstr "Backup completo:"
242
-
243
- #: classes/wp-cli.php:71
244
- msgid "Backup Failed"
245
- msgstr "Backup fallito"
246
-
247
- #: functions/core.php:202
248
- msgid "By default BackUpWordPress performs a daily backup of your database and a weekly backup of your database &amp; files. You can modify these schedules."
249
- msgstr "Per impostazione predefinita BackUpWordPress esegue un backup giornaliero del database e un backup settimanale del database e dei file. È possibile modificare queste pianificazioni."
250
-
251
- #: functions/interface.php:111
252
- msgid "BackUpWordPress failed to perform the backup."
253
- msgstr "BackUpWordPress non è riuscito ad eseguire il backup."
254
-
255
- #: functions/interface.php:111
256
- msgid "You have likely hit a memory limit."
257
- msgstr "Probabilmente è stato raggiunto il limite di memoria."
258
-
259
- #: functions/interface.php:238
260
- msgid "Legacy"
261
- msgstr "Legacy"
262
-
263
- #: hm-backup/hm-backup.php:906
264
- msgid "The mysqldump file was not created"
265
- msgstr "Il file mysqldump non è stato creato"
266
-
267
- #: functions/interface.php:62
268
- msgid "Your backups directory isn't writable, run %1$s or %2$s or set the permissions yourself."
269
- msgstr "La tua directory di backup non è scrivibile, esegui %1$s o %2$s o imposta le autorizzazioni."
270
-
271
- #: functions/interface.php:50
272
- msgid "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."
273
- msgstr "La directory di backup non può essere creato perché la directory %1$s non èscrivibile, esegui %2$s o %3$s o crea la cartella."
274
-
275
- #: functions/core.php:202
276
- msgid "BackUpWordPress has setup your default schedules."
277
- msgstr "BackUpWordPress ha impostato le pianificazioni predefinite."
278
-
279
- #: classes/email.php:127
280
- msgid "Backup of %s Failed"
281
- msgstr "Backup di %s fallito"
282
-
283
- #: classes/email.php:50
284
- msgid "Send an email notification to %s"
285
- msgstr "Invia una notifica email a %s "
286
-
287
- #: classes/email.php:72
288
- msgid "%s isn't a valid email"
289
- msgstr "%s non è un'email valida"
290
-
291
- #: admin/schedule.php:4
292
- msgid "Backups will be compressed and should be smaller than this."
293
- msgstr "Il backup sarà compresso e dovrebbe essere più piccolo di questo."
294
-
295
- #: classes/email.php:19
296
- msgid "Email notification"
297
- msgstr "Notificazione email"
298
-
299
- #: admin/schedule.php:19
300
- msgid "hourly on the hour"
301
- msgstr "ogni ora"
302
-
303
- #: admin/schedule.php:25
304
- msgid "daily at %s"
305
- msgstr "ogni giorno alle %s"
306
-
307
- #: admin/schedule-form.php:41
308
- msgid "Number of backups to store on this server"
309
- msgstr "Numero di backup da memorizzare su questo server"
310
-
311
- #: admin/schedule-form.php:7
312
- msgid "Schedule Settings"
313
- msgstr "Impostazioni di pianificazione"
314
-
315
- #: admin/actions.php:418 admin/schedule-form-excludes.php:119
316
- msgid "Close"
317
- msgstr "Chiudi"
318
-
319
- #: admin/menu.php:69
320
- msgid "The information below is for version %1$s. View the %2$s file for help specific to version %3$s."
321
- msgstr "Le seguenti informazioni sono per la versione %1$s. Visualizza il file %2$s per aiuto specifico della versione %3$s."
322
-
323
- #: admin/constants.php:26
324
- msgid "The root directory that is backed up. Defaults to %s."
325
- msgstr "La directory principale che è stata memorizzata. Default %s."
326
-
327
- #: admin/constants.php:23
328
- msgid "The capability to use when calling %1$s. Defaults to %2$s."
329
- msgstr "La capacità di utilizzare quando si chiama %1$s. Default %2$s."
330
-
331
- #: admin/constants.php:14
332
- msgid "The path to your %1$s executable. Will be used to zip up your %2$s and %3$s if available."
333
- msgstr "Il percorso del tuo %1$s eseguibile. Sarà utilizzato per comprimere i tuoi %2$s e %3$s se disponibile."
334
-
335
- #: plugin.php:71
336
- msgid "BackUpWordPress requires WordPress version %s or greater."
337
- msgstr "BackUpWordPress richiede WordPress versione %s o superiore."
338
-
339
- #: plugin.php:141 admin/actions.php:396
340
- msgid "Cancel"
341
- msgstr "Cancella"
342
-
343
- #: admin/constants.php:11
344
- msgid "The path to your %1$s executable. Will be used for the %2$s part of the back up if available."
345
- msgstr "Il percorso del tuo %1$s eseguibile. Sarà utilizzato per la %2$s parte del backup, se disponibile."
346
-
347
- #: admin/constants.php:8 admin/constants.php:11 admin/constants.php:14
348
- #: admin/constants.php:17 admin/constants.php:20 admin/constants.php:23
349
- #: admin/constants.php:26 admin/constants.php:29
350
- msgid "e.g."
351
- msgstr "ad esempio"
352
-
353
- #: admin/constants.php:3
354
- msgid "You can %1$s any of the following %2$s in your %3$s to control advanced settings. %4$s. Defined %5$s will be highlighted."
355
- msgstr "Tu puoi %1$s uno dei seguenti %2$s nel tuo %3$s per controllare le impostazioni avanzate. %4$s. Definito %5$s sarà evidenziata."
356
-
357
- #: admin/actions.php:192 admin/actions.php:195
358
- msgid "%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 back ups. See the %3$s for more details."
359
- msgstr "%1$s restituisce una %2$s risposta che potrebbe significare che cron jobs non si è avviato in modo corretto. BackUpWordPress si basa su wp-cron per eseguire i backup pianificati. Vedere il %3$s per maggiori dettagli."
360
-
361
- #: functions/interface.php:72
362
- msgid "http://php.net/manual/en/features.safe-mode.php"
363
- msgstr "http://php.net/manual/en/features.safe-mode.php"
364
-
365
- #: functions/interface.php:72
366
- msgid "Safe Mode"
367
- msgstr "Modalità provvisoria"
368
-
369
- #: functions/interface.php:82
370
- msgid "Your custom backups directory %1$s doesn't exist and can't be created, your backups will be saved to %2$s instead."
371
- msgstr "La tua directory personalizzata di backup %1$s non esiste e non può essere creata, i tuoi backup verranno salvati in % 2$s"
372
-
373
- #: functions/interface.php:92
374
- msgid "Your custom backups directory %1$s isn't writable, new backups will be saved to %2$s instead."
375
- msgstr "La tua directory personalizzata di backup %1$s non è scrivibile, i nuovi backup verranno salvati in % 2$s"
376
-
377
- #: functions/interface.php:252
378
- msgid "cancel"
379
- msgstr "cancella"
380
-
381
- #: functions/interface.php:256
382
- msgid "Settings"
383
- msgstr "Impostazioni"
384
-
385
- #: functions/interface.php:259
386
- msgid "Excludes"
387
- msgstr "Esclusioni"
388
-
389
- #: functions/interface.php:27
390
- msgid "Download"
391
- msgstr "Scarica"
392
-
393
- #: functions/interface.php:50 functions/interface.php:62
394
- msgid "BackUpWordPress is almost ready."
395
- msgstr "BackUpWordPress è quasi pronto"
396
-
397
- #: functions/interface.php:102
398
- msgid "BackUpWordPress detected issues with your last backup."
399
- msgstr "BackUpWordPress ha rilevato problemi con l'ultimo backup."
400
-
401
- #: functions/interface.php:227
402
- msgid "Database and Files"
403
- msgstr "Database e files"
404
-
405
- #: functions/interface.php:233
406
- msgid "Database"
407
- msgstr "Database"
408
-
409
- #: hm-backup/hm-backup.php:931
410
- msgid "The backup file was not created"
411
- msgstr "Il backup non è stato creato"
412
-
413
- #: hm-backup/hm-backup.php:951
414
- msgid "The following files are unreadable and couldn't be backed up: "
415
- msgstr "I seguenti file sono illeggibili e non possono essere memorizzati::"
416
-
417
- #: admin/actions.php:192 admin/actions.php:195 functions/interface.php:72
418
- #: functions/interface.php:82 functions/interface.php:92
419
- msgid "BackUpWordPress has detected a problem."
420
- msgstr "BackUpWordPress ha rilevato un problema."
421
-
422
- #: admin/actions.php:265
423
- msgid "Backup type cannot be empty"
424
- msgstr "Il tipo di backup non può essere vuoto"
425
-
426
- #: admin/actions.php:268
427
- msgid "Invalid backup type"
428
- msgstr "Tipo di backup non valido"
429
-
430
- #: admin/actions.php:278
431
- msgid "Schedule cannot be empty"
432
- msgstr "La pianificazione non può essere vuota"
433
-
434
- #: admin/actions.php:281
435
- msgid "Invalid schedule"
436
- msgstr "Pianificazione non valida"
437
-
438
- #: admin/actions.php:294
439
- msgid "Max backups must be a number"
440
- msgstr "Max backup deve essere un numero"
441
-
442
- #: admin/actions.php:392
443
- msgid "%s didn't match any files."
444
- msgstr "%s non corrisponde ad alcun file."
445
-
446
- #: admin/backups.php:13
447
- msgid "add schedule"
448
- msgstr "aggiungi pianificazione"
449
-
450
- #: admin/backups.php:37
451
- msgid "Size"
452
- msgstr "Dimensione"
453
-
454
- #: admin/backups.php:38
455
- msgid "Type"
456
- msgstr "Tipo"
457
-
458
- #: admin/backups.php:39
459
- msgid "Actions"
460
- msgstr "Azioni"
461
-
462
- #: admin/backups.php:62
463
- msgid "This is where your backups will appear once you have one."
464
- msgstr "Questo è dove il backup apparirà una volta che ne hai uno."
465
-
466
- #: admin/constants.php:3
467
- msgid "The Codex can help"
468
- msgstr "Il Codex può aìiutare"
469
-
470
- #: admin/constants.php:8
471
- msgid "The path to folder you would like to store your backup files in, defaults to %s."
472
- msgstr "Il percorso alla cartella dove vuoi memorizzare i file di backup, il valore predefinito è %s."
473
-
474
- #: admin/constants.php:11 admin/constants.php:14
475
- msgid "database"
476
- msgstr ""
477
-
478
- #: admin/constants.php:14
479
- msgid "files"
480
- msgstr ""
481
-
482
- #: admin/constants.php:17
483
- msgid "Attempt to email a copy of your backups. Value should be email address to send backups to. Defaults to %s."
484
- msgstr ""
485
-
486
- #: admin/constants.php:20
487
- msgid "Comma separated list of files or directories to exclude, the backups directory is automatically excluded."
488
- msgstr ""
489
-
490
- #: admin/menu.php:10 admin/page.php:5
491
- msgid "Manage Backups"
492
- msgstr ""
493
-
494
- #: admin/menu.php:10 admin/menu.php:34
495
- msgid "Backups"
496
- msgstr ""
497
-
498
- #: admin/menu.php:69
499
- msgid "You are not using the latest stable version of BackUpWordPress"
500
- msgstr ""
501
-
502
- #: admin/menu.php:75
503
- msgid "FAQ"
504
- msgstr ""
505
-
506
- #: admin/constants.php:3 admin/menu.php:76
507
- msgid "Constants"
508
- msgstr ""
509
-
510
- #: admin/menu.php:79
511
- msgid "For more information:"
512
- msgstr ""
513
-
514
- #: admin/menu.php:81
515
- msgid "Support Forums"
516
- msgstr ""
517
-
518
- #: admin/menu.php:82
519
- msgid "Help with translation"
520
- msgstr ""
521
-
522
- #: admin/page.php:13
523
- msgid "You need to fix the issues detailed above before BackUpWordPress can start."
524
- msgstr ""
525
-
526
- #: admin/schedule-form-excludes.php:19
527
- msgid "Preview"
528
- msgstr ""
529
-
530
- #: admin/schedule-form-excludes.php:29
531
- msgid "Exclude Rules"
532
- msgstr ""
533
-
534
- #: admin/schedule-form-excludes.php:52
535
- msgid "Remove"
536
- msgstr ""
537
-
538
- #: admin/schedule-form-excludes.php:71
539
- msgid "Excluded"
540
- msgstr ""
541
-
542
- #: admin/schedule-form-excludes.php:75
543
- msgid "Included"
544
- msgstr ""
545
-
546
- #: admin/schedule-form-excludes.php:79
547
- msgid "Unreadable"
548
- msgstr ""
549
-
550
- #: admin/schedule-form-excludes.php:107
551
- msgid "Unreadable files can't be backed up"
552
- msgstr ""
553
-
554
- #: admin/schedule-form-excludes.php:113
555
- msgid "Your site is %s. Backups will be compressed and so will be smaller."
556
- msgstr ""
557
-
558
- #: admin/schedule-form.php:11
559
- msgid "Backup"
560
- msgstr ""
561
-
562
- #: admin/schedule-form.php:14
563
- msgid "Both Database &amp; files"
564
- msgstr ""
565
-
566
- #: admin/schedule-form.php:15
567
- msgid "Files only"
568
- msgstr ""
569
-
570
- #: admin/schedule-form.php:16
571
- msgid "Database only"
572
- msgstr ""
573
-
574
- #: functions/interface.php:230
575
- msgid "Files"
576
- msgstr ""
577
-
578
- #: admin/schedule-form-excludes.php:7
579
- msgid "Manage Excludes"
580
- msgstr ""
581
-
582
- #: admin/schedule-form.php:23
583
- msgid "Schedule"
584
- msgstr ""
585
-
586
- #: plugin.php:140 admin/schedule-form.php:54
587
- msgid "Update"
588
- msgstr ""
589
-
590
- #: admin/schedule.php:19
591
- msgid "hourly at %s minutes past the hour"
592
- msgstr ""
593
-
594
- #: functions/interface.php:262
595
- msgid "Run now"
596
- msgstr ""
597
-
598
- #: functions/interface.php:28 functions/interface.php:264
599
- msgid "Delete"
600
- msgstr ""
601
-
602
- #: plugin.php:60
603
- msgid "BackUpWordPress requires PHP version 5.2.4 or greater."
604
- msgstr ""
605
-
606
- #: classes/email.php:137
607
- msgid "Backup of %s"
608
- msgstr ""
609
-
610
- #: functions/core.php:293
611
- msgid "This %s file ensures that other people cannot download your backup files."
612
- msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/languages/hmbkp-nl_NL.mo DELETED
Binary file
backupwordpress/languages/hmbkp-nl_NL.po DELETED
@@ -1,610 +0,0 @@
1
- # Translation of 2.x in Dutch
2
- # This file is distributed under the same license as the 2.x package.
3
- msgid ""
4
- msgstr ""
5
- "PO-Revision-Date: 2012-11-22 15:38:55+0000\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: GlotPress/0.1\n"
11
- "Project-Id-Version: 2.x\n"
12
-
13
- #: admin/actions.php:419
14
- msgid "Email to Support"
15
- msgstr ""
16
-
17
- #: admin/page.php:17
18
- msgid "If your finding BackUpWordPress useful, please %s."
19
- msgstr ""
20
-
21
- #: admin/schedule-form-excludes.php:13
22
- msgid "New Exclude Rule[s]"
23
- msgstr ""
24
-
25
- #: admin/actions.php:410
26
- msgid "Your BackUp Failed"
27
- msgstr ""
28
-
29
- #: admin/actions.php:412
30
- msgid "Here's the response from the server:"
31
- msgstr ""
32
-
33
- #: admin/page.php:19
34
- msgid "If you need help getting things working then check the FAQ by clicking on help in the top right hand corner of this page."
35
- msgstr ""
36
-
37
- #: admin/page.php:17
38
- msgid "rate it on the plugin directory"
39
- msgstr ""
40
-
41
- #: classes/schedule.php:512 functions/interface.php:252
42
- msgid "Starting Backup"
43
- msgstr ""
44
-
45
- #: classes/schedule.php:582
46
- msgid "Dumping Database %s"
47
- msgstr ""
48
-
49
- #: classes/schedule.php:588
50
- msgid "Verifying Database Dump %s"
51
- msgstr ""
52
-
53
- #: classes/schedule.php:594
54
- msgid "Creating zip archive %s"
55
- msgstr ""
56
-
57
- #: classes/schedule.php:600
58
- msgid "Verifying Zip Archive %s"
59
- msgstr ""
60
-
61
- #: classes/schedule.php:606
62
- msgid "Finishing Backup"
63
- msgstr ""
64
-
65
- #: classes/wp-cli.php:16
66
- msgid "BackUpWordPress may not work when php is running with %s on"
67
- msgstr ""
68
-
69
- #: functions/interface.php:72
70
- msgid "%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."
71
- msgstr ""
72
-
73
- #: admin/constants.php:29
74
- msgid "The time that your schedules should run. Defaults to %s."
75
- msgstr "De tijd waarop je schema zou moeten draaien, Standaard is dat %s"
76
-
77
- #: plugin.php:142
78
- msgid "Are you sure you want to delete this schedule? All of it's backups will also be deleted."
79
- msgstr "Weet je zeker dat je dit schema wilt verwijderen? Alle backups van dit schema zullen ook worden verwijderd."
80
-
81
- #: plugin.php:142 plugin.php:143 plugin.php:144 plugin.php:145
82
- msgid "'Cancel' to go back, 'OK' to delete."
83
- msgstr "'Cancel\"om terug te gaan, 'OK' om te verwijderen."
84
-
85
- #: plugin.php:143
86
- msgid "Are you sure you want to delete this backup?"
87
- msgstr "Weet je zeker dat je deze backup wilt verwijderen?"
88
-
89
- #: plugin.php:144
90
- msgid "Are you sure you want to remove this exclude rule?"
91
- msgstr "Weet je zeker dat je deze uitzonderingsregel wilt verwijderen?"
92
-
93
- #: plugin.php:145
94
- msgid "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?"
95
- msgstr ""
96
-
97
- #: admin/actions.php:291
98
- msgid "Max backups can't be empty"
99
- msgstr ""
100
-
101
- #: admin/actions.php:297
102
- msgid "Max backups must be greater than 0"
103
- msgstr ""
104
-
105
- #: admin/actions.php:396
106
- msgid "Exclude"
107
- msgstr ""
108
-
109
- #: admin/schedule-form-excludes.php:44
110
- msgid "default"
111
- msgstr ""
112
-
113
- #: admin/schedule-form-excludes.php:48
114
- msgid "defined"
115
- msgstr ""
116
-
117
- #: admin/schedule-form.php:27
118
- msgid "Manual Only"
119
- msgstr ""
120
-
121
- #: admin/schedule-form.php:45
122
- msgid "The number of previous backups to store on the server. past this limit older backups will be deleted automatically."
123
- msgstr ""
124
-
125
- #: admin/schedule.php:4
126
- msgid "this shouldn't take long&hellip;"
127
- msgstr ""
128
-
129
- #: admin/schedule.php:4
130
- msgid "calculating the size of your site&hellip;"
131
- msgstr ""
132
-
133
- #: admin/schedule.php:12
134
- msgid "The next backup will be on %1$s at %2$s"
135
- msgstr ""
136
-
137
- #: admin/schedule.php:37
138
- msgid "every 12 hours at %1$s &amp; %2$s"
139
- msgstr ""
140
-
141
- #: admin/schedule.php:43
142
- msgid "weekly on %1$s at %2$s"
143
- msgstr ""
144
-
145
- #: admin/schedule.php:49
146
- msgid "fortnightly on %1$s at %2$s"
147
- msgstr ""
148
-
149
- #: admin/schedule.php:56
150
- msgid "on the %1$s of each month at %2$s"
151
- msgstr ""
152
-
153
- #: admin/schedule.php:62
154
- msgid "manually"
155
- msgstr ""
156
-
157
- #: admin/schedule.php:68
158
- msgid "this server"
159
- msgstr ""
160
-
161
- #: admin/schedule.php:75
162
- msgid "store the only the last backup on %s"
163
- msgstr ""
164
-
165
- #: admin/schedule.php:81
166
- msgid "don't store any backups on %s"
167
- msgstr ""
168
-
169
- #: admin/schedule.php:87
170
- msgid "store only the last %1$s backups on %2$s"
171
- msgstr ""
172
-
173
- #: admin/schedule.php:96
174
- msgid "Backup my %1$s %2$s %3$s, %4$s. %5$s"
175
- msgstr ""
176
-
177
- #: classes/email.php:23
178
- msgid "Receive a notification email when a backup completes, if the backup is small enough (&lt; 10mb) then it will be attached to the email. Separate multiple email address's with a comma."
179
- msgstr ""
180
-
181
- #: classes/email.php:129
182
- msgid "BackUpWordPress was unable to backup your site %1$s."
183
- msgstr ""
184
-
185
- #: classes/email.php:129
186
- msgid "Here are the errors that we're encountered:"
187
- msgstr ""
188
-
189
- #: classes/email.php:129
190
- msgid "If the errors above look like Martian, forward this email to %3$s and we'll take a look"
191
- msgstr ""
192
-
193
- #: classes/email.php:129
194
- msgid ""
195
- "Kind Regards,\n"
196
- "The Apologetic BackUpWordPress Backup Emailing Robot"
197
- msgstr ""
198
-
199
- #: classes/email.php:142 classes/email.php:151
200
- msgid "BackUpWordPress has completed a backup of your site %1$s."
201
- msgstr ""
202
-
203
- #: classes/email.php:142
204
- msgid "The backup file should be attached to this email."
205
- msgstr ""
206
-
207
- #: classes/email.php:142 classes/email.php:151
208
- msgid "You can download the backup file by clicking the link below:"
209
- msgstr ""
210
-
211
- #: classes/email.php:142 classes/email.php:151
212
- msgid ""
213
- "Kind Regards,\n"
214
- "The Happy BackUpWordPress Backup Emailing Robot"
215
- msgstr ""
216
-
217
- #: classes/email.php:151
218
- msgid "Unfortunately the backup file was too large to attach to this email."
219
- msgstr ""
220
-
221
- #: classes/wp-cli.php:19
222
- msgid "Backup: Dumping database..."
223
- msgstr ""
224
-
225
- #: classes/wp-cli.php:23
226
- msgid "Backup: Zipping everything up..."
227
- msgstr ""
228
-
229
- #: classes/wp-cli.php:38
230
- msgid "Invalid backup path"
231
- msgstr ""
232
-
233
- #: classes/wp-cli.php:43
234
- msgid "Invalid root path"
235
- msgstr ""
236
-
237
- #: classes/wp-cli.php:68
238
- msgid "Backup Complete: "
239
- msgstr ""
240
-
241
- #: classes/wp-cli.php:71
242
- msgid "Backup Failed"
243
- msgstr ""
244
-
245
- #: functions/core.php:202
246
- msgid "By default BackUpWordPress performs a daily backup of your database and a weekly backup of your database &amp; files. You can modify these schedules."
247
- msgstr ""
248
-
249
- #: functions/interface.php:111
250
- msgid "BackUpWordPress failed to perform the backup."
251
- msgstr ""
252
-
253
- #: functions/interface.php:111
254
- msgid "You have likely hit a memory limit."
255
- msgstr ""
256
-
257
- #: functions/interface.php:238
258
- msgid "Legacy"
259
- msgstr ""
260
-
261
- #: hm-backup/hm-backup.php:906
262
- msgid "The mysqldump file was not created"
263
- msgstr ""
264
-
265
- #: functions/interface.php:62
266
- msgid "Your backups directory isn't writable, run %1$s or %2$s or set the permissions yourself."
267
- msgstr ""
268
-
269
- #: functions/interface.php:50
270
- msgid "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."
271
- msgstr ""
272
-
273
- #: functions/core.php:202
274
- msgid "BackUpWordPress has setup your default schedules."
275
- msgstr ""
276
-
277
- #: classes/email.php:127
278
- msgid "Backup of %s Failed"
279
- msgstr ""
280
-
281
- #: classes/email.php:50
282
- msgid "Send an email notification to %s"
283
- msgstr ""
284
-
285
- #: classes/email.php:72
286
- msgid "%s isn't a valid email"
287
- msgstr ""
288
-
289
- #: admin/schedule.php:4
290
- msgid "Backups will be compressed and should be smaller than this."
291
- msgstr ""
292
-
293
- #: classes/email.php:19
294
- msgid "Email notification"
295
- msgstr ""
296
-
297
- #: admin/schedule.php:19
298
- msgid "hourly on the hour"
299
- msgstr ""
300
-
301
- #: admin/schedule.php:25
302
- msgid "daily at %s"
303
- msgstr ""
304
-
305
- #: admin/schedule-form.php:41
306
- msgid "Number of backups to store on this server"
307
- msgstr ""
308
-
309
- #: admin/schedule-form.php:7
310
- msgid "Schedule Settings"
311
- msgstr ""
312
-
313
- #: admin/actions.php:418 admin/schedule-form-excludes.php:119
314
- msgid "Close"
315
- msgstr ""
316
-
317
- #: admin/menu.php:69
318
- msgid "The information below is for version %1$s. View the %2$s file for help specific to version %3$s."
319
- msgstr ""
320
-
321
- #: admin/constants.php:26
322
- msgid "The root directory that is backed up. Defaults to %s."
323
- msgstr ""
324
-
325
- #: admin/constants.php:23
326
- msgid "The capability to use when calling %1$s. Defaults to %2$s."
327
- msgstr ""
328
-
329
- #: admin/constants.php:14
330
- msgid "The path to your %1$s executable. Will be used to zip up your %2$s and %3$s if available."
331
- msgstr ""
332
-
333
- #: plugin.php:71
334
- msgid "BackUpWordPress requires WordPress version %s or greater."
335
- msgstr ""
336
-
337
- #: plugin.php:141 admin/actions.php:396
338
- msgid "Cancel"
339
- msgstr ""
340
-
341
- #: admin/constants.php:11
342
- msgid "The path to your %1$s executable. Will be used for the %2$s part of the back up if available."
343
- msgstr ""
344
-
345
- #: admin/constants.php:8 admin/constants.php:11 admin/constants.php:14
346
- #: admin/constants.php:17 admin/constants.php:20 admin/constants.php:23
347
- #: admin/constants.php:26 admin/constants.php:29
348
- msgid "e.g."
349
- msgstr "bijv."
350
-
351
- #: admin/constants.php:3
352
- msgid "You can %1$s any of the following %2$s in your %3$s to control advanced settings. %4$s. Defined %5$s will be highlighted."
353
- msgstr ""
354
-
355
- #: admin/actions.php:192 admin/actions.php:195
356
- msgid "%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 back ups. See the %3$s for more details."
357
- msgstr ""
358
-
359
- #: functions/interface.php:72
360
- msgid "http://php.net/manual/en/features.safe-mode.php"
361
- msgstr ""
362
-
363
- #: functions/interface.php:72
364
- msgid "Safe Mode"
365
- msgstr ""
366
-
367
- #: functions/interface.php:82
368
- msgid "Your custom backups directory %1$s doesn't exist and can't be created, your backups will be saved to %2$s instead."
369
- msgstr ""
370
-
371
- #: functions/interface.php:92
372
- msgid "Your custom backups directory %1$s isn't writable, new backups will be saved to %2$s instead."
373
- msgstr ""
374
-
375
- #: functions/interface.php:252
376
- msgid "cancel"
377
- msgstr "Annuleren"
378
-
379
- #: functions/interface.php:256
380
- msgid "Settings"
381
- msgstr "Instellingen"
382
-
383
- #: functions/interface.php:259
384
- msgid "Excludes"
385
- msgstr "Exclusief"
386
-
387
- #: functions/interface.php:27
388
- msgid "Download"
389
- msgstr "Download"
390
-
391
- #: functions/interface.php:50 functions/interface.php:62
392
- msgid "BackUpWordPress is almost ready."
393
- msgstr "BackUpWordPress is bijna klaar."
394
-
395
- #: functions/interface.php:102
396
- msgid "BackUpWordPress detected issues with your last backup."
397
- msgstr "BackUpWordPress heeft problemen ondervonden met je laatste back-up."
398
-
399
- #: functions/interface.php:227
400
- msgid "Database and Files"
401
- msgstr ""
402
-
403
- #: functions/interface.php:233
404
- msgid "Database"
405
- msgstr ""
406
-
407
- #: hm-backup/hm-backup.php:931
408
- msgid "The backup file was not created"
409
- msgstr "Het back-up bestand is niet gemaakt"
410
-
411
- #: hm-backup/hm-backup.php:951
412
- msgid "The following files are unreadable and couldn't be backed up: "
413
- msgstr "De volgende bestanden zijn onleesbaar en konden niet in een back-up worden opgenomen:"
414
-
415
- #: admin/actions.php:192 admin/actions.php:195 functions/interface.php:72
416
- #: functions/interface.php:82 functions/interface.php:92
417
- msgid "BackUpWordPress has detected a problem."
418
- msgstr "BackUpWordPress heeft een probleem ondervonden."
419
-
420
- #: admin/actions.php:265
421
- msgid "Backup type cannot be empty"
422
- msgstr ""
423
-
424
- #: admin/actions.php:268
425
- msgid "Invalid backup type"
426
- msgstr ""
427
-
428
- #: admin/actions.php:278
429
- msgid "Schedule cannot be empty"
430
- msgstr ""
431
-
432
- #: admin/actions.php:281
433
- msgid "Invalid schedule"
434
- msgstr ""
435
-
436
- #: admin/actions.php:294
437
- msgid "Max backups must be a number"
438
- msgstr ""
439
-
440
- #: admin/actions.php:392
441
- msgid "%s didn't match any files."
442
- msgstr ""
443
-
444
- #: admin/backups.php:13
445
- msgid "add schedule"
446
- msgstr ""
447
-
448
- #: admin/backups.php:37
449
- msgid "Size"
450
- msgstr "Grootte"
451
-
452
- #: admin/backups.php:38
453
- msgid "Type"
454
- msgstr ""
455
-
456
- #: admin/backups.php:39
457
- msgid "Actions"
458
- msgstr "Acties"
459
-
460
- #: admin/backups.php:62
461
- msgid "This is where your backups will appear once you have one."
462
- msgstr ""
463
-
464
- #: admin/constants.php:3
465
- msgid "The Codex can help"
466
- msgstr "De Codex kan hulp bieden."
467
-
468
- #: admin/constants.php:8
469
- msgid "The path to folder you would like to store your backup files in, defaults to %s."
470
- msgstr "Het pad naar de map waar je de back up bestanden wilt bewaren, standaard naar %s."
471
-
472
- #: admin/constants.php:11 admin/constants.php:14
473
- msgid "database"
474
- msgstr "database"
475
-
476
- #: admin/constants.php:14
477
- msgid "files"
478
- msgstr "bestanden"
479
-
480
- #: admin/constants.php:17
481
- msgid "Attempt to email a copy of your backups. Value should be email address to send backups to. Defaults to %s."
482
- msgstr "Poging om een kopie van uw back-ups e-mailen. Waarde moet het e-mailadres om back-ups naar toe te sturen zijn. Standaard naar %s."
483
-
484
- #: admin/constants.php:20
485
- msgid "Comma separated list of files or directories to exclude, the backups directory is automatically excluded."
486
- msgstr "Een door komma's gescheiden lijst van bestanden of mappen die uitgesloten worden, de backup(s) map is automatisch uitgesloten."
487
-
488
- #: admin/menu.php:10 admin/page.php:5
489
- msgid "Manage Backups"
490
- msgstr "Beheer back ups"
491
-
492
- #: admin/menu.php:10 admin/menu.php:34
493
- msgid "Backups"
494
- msgstr "Back ups"
495
-
496
- #: admin/menu.php:69
497
- msgid "You are not using the latest stable version of BackUpWordPress"
498
- msgstr "Je gebruikt niet de laatste stabiele versie van BackUpWordPress"
499
-
500
- #: admin/menu.php:75
501
- msgid "FAQ"
502
- msgstr "Veel gestelde vragen"
503
-
504
- #: admin/constants.php:3 admin/menu.php:76
505
- msgid "Constants"
506
- msgstr "Constanten"
507
-
508
- #: admin/menu.php:79
509
- msgid "For more information:"
510
- msgstr "Voor meer informatie:"
511
-
512
- #: admin/menu.php:81
513
- msgid "Support Forums"
514
- msgstr "Ondersteunings forums"
515
-
516
- #: admin/menu.php:82
517
- msgid "Help with translation"
518
- msgstr "Vertaal hulp"
519
-
520
- #: admin/page.php:13
521
- msgid "You need to fix the issues detailed above before BackUpWordPress can start."
522
- msgstr "Je moet de hierboven beschreven problemen oplossen voordat BackUpWordPress kan beginnen."
523
-
524
- #: admin/schedule-form-excludes.php:19
525
- msgid "Preview"
526
- msgstr ""
527
-
528
- #: admin/schedule-form-excludes.php:29
529
- msgid "Exclude Rules"
530
- msgstr ""
531
-
532
- #: admin/schedule-form-excludes.php:52
533
- msgid "Remove"
534
- msgstr ""
535
-
536
- #: admin/schedule-form-excludes.php:71
537
- msgid "Excluded"
538
- msgstr ""
539
-
540
- #: admin/schedule-form-excludes.php:75
541
- msgid "Included"
542
- msgstr ""
543
-
544
- #: admin/schedule-form-excludes.php:79
545
- msgid "Unreadable"
546
- msgstr ""
547
-
548
- #: admin/schedule-form-excludes.php:107
549
- msgid "Unreadable files can't be backed up"
550
- msgstr ""
551
-
552
- #: admin/schedule-form-excludes.php:113
553
- msgid "Your site is %s. Backups will be compressed and so will be smaller."
554
- msgstr ""
555
-
556
- #: admin/schedule-form.php:11
557
- msgid "Backup"
558
- msgstr ""
559
-
560
- #: admin/schedule-form.php:14
561
- msgid "Both Database &amp; files"
562
- msgstr ""
563
-
564
- #: admin/schedule-form.php:15
565
- msgid "Files only"
566
- msgstr ""
567
-
568
- #: admin/schedule-form.php:16
569
- msgid "Database only"
570
- msgstr ""
571
-
572
- #: functions/interface.php:230
573
- msgid "Files"
574
- msgstr ""
575
-
576
- #: admin/schedule-form-excludes.php:7
577
- msgid "Manage Excludes"
578
- msgstr ""
579
-
580
- #: admin/schedule-form.php:23
581
- msgid "Schedule"
582
- msgstr ""
583
-
584
- #: plugin.php:140 admin/schedule-form.php:54
585
- msgid "Update"
586
- msgstr ""
587
-
588
- #: admin/schedule.php:19
589
- msgid "hourly at %s minutes past the hour"
590
- msgstr ""
591
-
592
- #: functions/interface.php:262
593
- msgid "Run now"
594
- msgstr ""
595
-
596
- #: functions/interface.php:28 functions/interface.php:264
597
- msgid "Delete"
598
- msgstr "Verwijderen"
599
-
600
- #: plugin.php:60
601
- msgid "BackUpWordPress requires PHP version 5.2.4 or greater."
602
- msgstr "BackUpWordPress vereist PHP versie 5.2.4 of hoger."
603
-
604
- #: classes/email.php:137
605
- msgid "Backup of %s"
606
- msgstr "Back up van %s"
607
-
608
- #: functions/core.php:293
609
- msgid "This %s file ensures that other people cannot download your backup files."
610
- msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/languages/hmbkp-pt_BR.mo DELETED
Binary file
backupwordpress/languages/hmbkp-pt_BR.po DELETED
@@ -1,614 +0,0 @@
1
- # Translation of 2.x in Portuguese (Brazil)
2
- # This file is distributed under the same license as the 2.x package.
3
- msgid ""
4
- msgstr ""
5
- "PO-Revision-Date: 2012-11-22 15:38:44+0000\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: GlotPress/0.1\n"
11
- "Project-Id-Version: 2.x\n"
12
-
13
- #: admin/actions.php:419
14
- msgid "Email to Support"
15
- msgstr ""
16
-
17
- #: admin/page.php:17
18
- msgid "If your finding BackUpWordPress useful, please %s."
19
- msgstr ""
20
-
21
- #: admin/schedule-form-excludes.php:13
22
- msgid "New Exclude Rule[s]"
23
- msgstr ""
24
-
25
- #: admin/actions.php:410
26
- msgid "Your BackUp Failed"
27
- msgstr ""
28
-
29
- #: admin/actions.php:412
30
- msgid "Here's the response from the server:"
31
- msgstr ""
32
-
33
- #: admin/page.php:19
34
- msgid "If you need help getting things working then check the FAQ by clicking on help in the top right hand corner of this page."
35
- msgstr ""
36
-
37
- #: admin/page.php:17
38
- msgid "rate it on the plugin directory"
39
- msgstr ""
40
-
41
- #: classes/schedule.php:512 functions/interface.php:252
42
- msgid "Starting Backup"
43
- msgstr ""
44
-
45
- #: classes/schedule.php:582
46
- msgid "Dumping Database %s"
47
- msgstr ""
48
-
49
- #: classes/schedule.php:588
50
- msgid "Verifying Database Dump %s"
51
- msgstr ""
52
-
53
- #: classes/schedule.php:594
54
- msgid "Creating zip archive %s"
55
- msgstr ""
56
-
57
- #: classes/schedule.php:600
58
- msgid "Verifying Zip Archive %s"
59
- msgstr ""
60
-
61
- #: classes/schedule.php:606
62
- msgid "Finishing Backup"
63
- msgstr ""
64
-
65
- #: classes/wp-cli.php:16
66
- msgid "BackUpWordPress may not work when php is running with %s on"
67
- msgstr ""
68
-
69
- #: functions/interface.php:72
70
- msgid "%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."
71
- msgstr ""
72
-
73
- #: admin/constants.php:29
74
- msgid "The time that your schedules should run. Defaults to %s."
75
- msgstr "O horário em que seus agendamentos devem ser executados. O padrão é %s."
76
-
77
- #: plugin.php:142
78
- msgid "Are you sure you want to delete this schedule? All of it's backups will also be deleted."
79
- msgstr "Você tem certeza de que quer apagar este agendamento? Todos os backups já realizados nesta programação também serão excluídos."
80
-
81
- #: plugin.php:142 plugin.php:143 plugin.php:144 plugin.php:145
82
- msgid "'Cancel' to go back, 'OK' to delete."
83
- msgstr "'Cancelar' para voltar, 'OK' para apagar."
84
-
85
- #: plugin.php:143
86
- msgid "Are you sure you want to delete this backup?"
87
- msgstr "Você tem certeza que quer apagar este backup?"
88
-
89
- #: plugin.php:144
90
- msgid "Are you sure you want to remove this exclude rule?"
91
- msgstr "Você tem certeza de que deseja remover esta regra de exclusão?"
92
-
93
- #: plugin.php:145
94
- msgid "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?"
95
- msgstr "Reduzindo o número de backups que serão armazenados neste servidor causará a eliminação de alguns backups já existentes. Você tem certeza que é isso que você quer?"
96
-
97
- #: admin/actions.php:291
98
- msgid "Max backups can't be empty"
99
- msgstr "A quant. de backups não pode ficar vazia"
100
-
101
- #: admin/actions.php:297
102
- msgid "Max backups must be greater than 0"
103
- msgstr "A quant. de backups precisa ser maior que 0"
104
-
105
- #: admin/actions.php:396
106
- msgid "Exclude"
107
- msgstr "Excluir"
108
-
109
- #: admin/schedule-form-excludes.php:44
110
- msgid "default"
111
- msgstr "padrão"
112
-
113
- #: admin/schedule-form-excludes.php:48
114
- msgid "defined"
115
- msgstr "definido"
116
-
117
- #: admin/schedule-form.php:27
118
- msgid "Manual Only"
119
- msgstr "Apenas Manualmente"
120
-
121
- #: admin/schedule-form.php:45
122
- msgid "The number of previous backups to store on the server. past this limit older backups will be deleted automatically."
123
- msgstr "O número de versões de backup que serão armazenadas no servidor. Passado este limite, os backups mais antigos serão automaticamente excluídos."
124
-
125
- #: admin/schedule.php:4
126
- msgid "this shouldn't take long&hellip;"
127
- msgstr "isso não deve demorar muito&hellip;"
128
-
129
- #: admin/schedule.php:4
130
- msgid "calculating the size of your site&hellip;"
131
- msgstr "calculando o tamanho de seu site&hellip;"
132
-
133
- #: admin/schedule.php:12
134
- msgid "The next backup will be on %1$s at %2$s"
135
- msgstr "O próximo backup será em %1$s às %2$s"
136
-
137
- #: admin/schedule.php:37
138
- msgid "every 12 hours at %1$s &amp; %2$s"
139
- msgstr "a cada 12 horas às %1$s &amp; %2$s"
140
-
141
- #: admin/schedule.php:43
142
- msgid "weekly on %1$s at %2$s"
143
- msgstr "semanalmente no(a) %1$s às %2$s"
144
-
145
- #: admin/schedule.php:49
146
- msgid "fortnightly on %1$s at %2$s"
147
- msgstr "quinzenalmente no(a) %1$s às %2$s"
148
-
149
- #: admin/schedule.php:56
150
- msgid "on the %1$s of each month at %2$s"
151
- msgstr "no %1$s de cada mês às %2$s"
152
-
153
- #: admin/schedule.php:62
154
- msgid "manually"
155
- msgstr "manualmente"
156
-
157
- #: admin/schedule.php:68
158
- msgid "this server"
159
- msgstr "neste servidor"
160
-
161
- #: admin/schedule.php:75
162
- msgid "store the only the last backup on %s"
163
- msgstr "armazenar apenas o último backup %s"
164
-
165
- #: admin/schedule.php:81
166
- msgid "don't store any backups on %s"
167
- msgstr "não armazenar nenhum backup em %s"
168
-
169
- #: admin/schedule.php:87
170
- msgid "store only the last %1$s backups on %2$s"
171
- msgstr "armazenar os últimos %1$s backups %2$s"
172
-
173
- #: admin/schedule.php:96
174
- msgid "Backup my %1$s %2$s %3$s, %4$s. %5$s"
175
- msgstr "Realizar o backup dos %1$s do %2$s %3$s, %4$s. %5$s"
176
-
177
- #: classes/email.php:23
178
- msgid "Receive a notification email when a backup completes, if the backup is small enough (&lt; 10mb) then it will be attached to the email. Separate multiple email address's with a comma."
179
- msgstr "Receba um email de notificação quando um backup for concluído. Se o backup for pequeno o suficiente (&lt; 10mb), então ele será anexado ao email. Separe os emails com uma virgula."
180
-
181
- #: classes/email.php:129
182
- msgid "BackUpWordPress was unable to backup your site %1$s."
183
- msgstr "O BackUpWordPress não foi capaz de realizar o backup do seu site %1$s."
184
-
185
- #: classes/email.php:129
186
- msgid "Here are the errors that we're encountered:"
187
- msgstr "Aqui estão os erros que foram encontrados:"
188
-
189
- #: classes/email.php:129
190
- msgid "If the errors above look like Martian, forward this email to %3$s and we'll take a look"
191
- msgstr "Se os erros acima parecem tão esquisitos quanto Marcianos, encaminhe este email para %3$s e iremos dar uma olhada"
192
-
193
- #: classes/email.php:129
194
- msgid ""
195
- "Kind Regards,\n"
196
- "The Apologetic BackUpWordPress Backup Emailing Robot"
197
- msgstr ""
198
- "Atenciosamente, \n"
199
- "O Apologético Robô Carteiro do BackUpWordPress"
200
-
201
- #: classes/email.php:142 classes/email.php:151
202
- msgid "BackUpWordPress has completed a backup of your site %1$s."
203
- msgstr "O BackUpWordPress completou a realização de um backup do seu site %1$s."
204
-
205
- #: classes/email.php:142
206
- msgid "The backup file should be attached to this email."
207
- msgstr "O arquivo de backup será anexado neste email."
208
-
209
- #: classes/email.php:142 classes/email.php:151
210
- msgid "You can download the backup file by clicking the link below:"
211
- msgstr "Você pode realizar o download do arquivo de backup clicando no link abaixo:"
212
-
213
- #: classes/email.php:142 classes/email.php:151
214
- msgid ""
215
- "Kind Regards,\n"
216
- "The Happy BackUpWordPress Backup Emailing Robot"
217
- msgstr ""
218
- "Atenciosamente,\n"
219
- "O Feliz Robô Carteiro de Backups do BackUpWordPress"
220
-
221
- #: classes/email.php:151
222
- msgid "Unfortunately the backup file was too large to attach to this email."
223
- msgstr "Infelizmente o arquivo de backup era muito grande para ser anexado nesta mensagem de email."
224
-
225
- #: classes/wp-cli.php:19
226
- msgid "Backup: Dumping database..."
227
- msgstr "Backup: Realizando o dumping do banco de dados..."
228
-
229
- #: classes/wp-cli.php:23
230
- msgid "Backup: Zipping everything up..."
231
- msgstr "Backup: Compactando tudo..."
232
-
233
- #: classes/wp-cli.php:38
234
- msgid "Invalid backup path"
235
- msgstr "Caminho de backup inválido"
236
-
237
- #: classes/wp-cli.php:43
238
- msgid "Invalid root path"
239
- msgstr "Caminho do diretório raiz inválido"
240
-
241
- #: classes/wp-cli.php:68
242
- msgid "Backup Complete: "
243
- msgstr "Backup Concluído: "
244
-
245
- #: classes/wp-cli.php:71
246
- msgid "Backup Failed"
247
- msgstr "Falha no Backup"
248
-
249
- #: functions/core.php:202
250
- msgid "By default BackUpWordPress performs a daily backup of your database and a weekly backup of your database &amp; files. You can modify these schedules."
251
- msgstr "Por padrão, o BackUpWordPress realiza um backup diário de seu banco de dados e um backup semanal de seu banco de dados &amp; arquivos. Você pode modificar esses agendamentos."
252
-
253
- #: functions/interface.php:111
254
- msgid "BackUpWordPress failed to perform the backup."
255
- msgstr "O BackUpWordPress não conseguiu realizar o backup."
256
-
257
- #: functions/interface.php:111
258
- msgid "You have likely hit a memory limit."
259
- msgstr "Você provavelmente atingiu o limite de memória."
260
-
261
- #: functions/interface.php:238
262
- msgid "Legacy"
263
- msgstr "Legado"
264
-
265
- #: hm-backup/hm-backup.php:906
266
- msgid "The mysqldump file was not created"
267
- msgstr "O arquivo mysqldump não foi criado"
268
-
269
- #: functions/interface.php:62
270
- msgid "Your backups directory isn't writable, run %1$s or %2$s or set the permissions yourself."
271
- msgstr "Seu diretório de backups não é gravável. Execute o comando %1$s ou %2$s, ou defina as permissões você mesmo."
272
-
273
- #: functions/interface.php:50
274
- msgid "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."
275
- msgstr "Não é possível criar o diretório de backups pois sua pasta %1$s não possui permissões para gravação. Execute o comando %2$s ou %3$s ou crie a pasta você mesmo."
276
-
277
- #: functions/core.php:202
278
- msgid "BackUpWordPress has setup your default schedules."
279
- msgstr "O BackUpWordPress configurou seus agendamentos padrão."
280
-
281
- #: classes/email.php:127
282
- msgid "Backup of %s Failed"
283
- msgstr "Backup de %s Falhou"
284
-
285
- #: classes/email.php:50
286
- msgid "Send an email notification to %s"
287
- msgstr "Enviar uma notificação por email para %s"
288
-
289
- #: classes/email.php:72
290
- msgid "%s isn't a valid email"
291
- msgstr "%s não é um email válido"
292
-
293
- #: admin/schedule.php:4
294
- msgid "Backups will be compressed and should be smaller than this."
295
- msgstr "Os backups serão compactados e ficarão menores que isso."
296
-
297
- #: classes/email.php:19
298
- msgid "Email notification"
299
- msgstr "Notificação por email"
300
-
301
- #: admin/schedule.php:19
302
- msgid "hourly on the hour"
303
- msgstr "de hora em hora"
304
-
305
- #: admin/schedule.php:25
306
- msgid "daily at %s"
307
- msgstr "diariamente às %s"
308
-
309
- #: admin/schedule-form.php:41
310
- msgid "Number of backups to store on this server"
311
- msgstr "Número de backups para armazenar"
312
-
313
- #: admin/schedule-form.php:7
314
- msgid "Schedule Settings"
315
- msgstr "Configurações do Agendamento"
316
-
317
- #: admin/actions.php:418 admin/schedule-form-excludes.php:119
318
- msgid "Close"
319
- msgstr "Fechar"
320
-
321
- #: admin/menu.php:69
322
- msgid "The information below is for version %1$s. View the %2$s file for help specific to version %3$s."
323
- msgstr "A informação abaixo é referente à versão %1$s. Consulte o arquivo %2$s para instruções específicas da versão %3$s."
324
-
325
- #: admin/constants.php:26
326
- msgid "The root directory that is backed up. Defaults to %s."
327
- msgstr "O diretório raiz onde será realizado o backup. O padrão é %s."
328
-
329
- #: admin/constants.php:23
330
- msgid "The capability to use when calling %1$s. Defaults to %2$s."
331
- msgstr "A capacidade que o usuário deve ter ao solicitar %1$s. O padrão é %2$s."
332
-
333
- #: admin/constants.php:14
334
- msgid "The path to your %1$s executable. Will be used to zip up your %2$s and %3$s if available."
335
- msgstr "O caminho para executar a função %1$s. Será usado para compactar seus %2$s e %3$s, se disponível."
336
-
337
- #: plugin.php:71
338
- msgid "BackUpWordPress requires WordPress version %s or greater."
339
- msgstr "O BackUpWordPress requer o WordPress versão %s ou superior."
340
-
341
- #: plugin.php:141 admin/actions.php:396
342
- msgid "Cancel"
343
- msgstr "Cancelar"
344
-
345
- #: admin/constants.php:11
346
- msgid "The path to your %1$s executable. Will be used for the %2$s part of the back up if available."
347
- msgstr "O caminho para executar o comando %1$s. Será usado para parte do backup do seu %2$s, se disponível."
348
-
349
- #: admin/constants.php:8 admin/constants.php:11 admin/constants.php:14
350
- #: admin/constants.php:17 admin/constants.php:20 admin/constants.php:23
351
- #: admin/constants.php:26 admin/constants.php:29
352
- msgid "e.g."
353
- msgstr "ex:"
354
-
355
- #: admin/constants.php:3
356
- msgid "You can %1$s any of the following %2$s in your %3$s to control advanced settings. %4$s. Defined %5$s will be highlighted."
357
- msgstr "Você pode %1$s qualquer uma das seguintes %2$s em seu arquivo %3$s para controlar certas definições avançadas. %4$s. As %5$s que estiverem personalizadas aparecerão abaixo destacadas."
358
-
359
- #: admin/actions.php:192 admin/actions.php:195
360
- msgid "%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 back ups. See the %3$s for more details."
361
- msgstr "%1$s está retornando a resposta %2$s que pode indicar que as tarefas agendadas não estão sendo executadas corretamente. O BackUpWordPress depende do wp-cron para realizar os seus backups agendados. Veja o %3$s para mais detalhes."
362
-
363
- #: functions/interface.php:72
364
- msgid "http://php.net/manual/en/features.safe-mode.php"
365
- msgstr "http://php.net/manual/pt_BR/features.safe-mode.php"
366
-
367
- #: functions/interface.php:72
368
- msgid "Safe Mode"
369
- msgstr "Safe Mode (Modo Seguro)"
370
-
371
- #: functions/interface.php:82
372
- msgid "Your custom backups directory %1$s doesn't exist and can't be created, your backups will be saved to %2$s instead."
373
- msgstr "Seu diretório de backups personalizado %1$s não existe e também não pode ser criado. Ao invés disso seus backups serão salvos em %2$s."
374
-
375
- #: functions/interface.php:92
376
- msgid "Your custom backups directory %1$s isn't writable, new backups will be saved to %2$s instead."
377
- msgstr "Seu diretório personalizado para backups %1$s não possui permissões para gravação, e ao invés disso, novos backups serão salvos em %2$s."
378
-
379
- #: functions/interface.php:252
380
- msgid "cancel"
381
- msgstr "cancelar"
382
-
383
- #: functions/interface.php:256
384
- msgid "Settings"
385
- msgstr "Configurações"
386
-
387
- #: functions/interface.php:259
388
- msgid "Excludes"
389
- msgstr "Exclusões"
390
-
391
- #: functions/interface.php:27
392
- msgid "Download"
393
- msgstr "Download"
394
-
395
- #: functions/interface.php:50 functions/interface.php:62
396
- msgid "BackUpWordPress is almost ready."
397
- msgstr "O BackUpWordPress está quase pronto."
398
-
399
- #: functions/interface.php:102
400
- msgid "BackUpWordPress detected issues with your last backup."
401
- msgstr "O BackUpWordPress detectou problemas com o seu último backup."
402
-
403
- #: functions/interface.php:227
404
- msgid "Database and Files"
405
- msgstr "Banco de Dados e Arquivos"
406
-
407
- #: functions/interface.php:233
408
- msgid "Database"
409
- msgstr "Banco de dados"
410
-
411
- #: hm-backup/hm-backup.php:931
412
- msgid "The backup file was not created"
413
- msgstr "O arquivo de backup não foi criado"
414
-
415
- #: hm-backup/hm-backup.php:951
416
- msgid "The following files are unreadable and couldn't be backed up: "
417
- msgstr "Os seguintes arquivos não puderam ser lidos e por isso não foram copiados no backup:"
418
-
419
- #: admin/actions.php:192 admin/actions.php:195 functions/interface.php:72
420
- #: functions/interface.php:82 functions/interface.php:92
421
- msgid "BackUpWordPress has detected a problem."
422
- msgstr "O BackUpWordPress detectou um problema."
423
-
424
- #: admin/actions.php:265
425
- msgid "Backup type cannot be empty"
426
- msgstr "O tipo de backup não pode ficar vazio"
427
-
428
- #: admin/actions.php:268
429
- msgid "Invalid backup type"
430
- msgstr "Tipo de backup inválido"
431
-
432
- #: admin/actions.php:278
433
- msgid "Schedule cannot be empty"
434
- msgstr "O intervalo não pode ficar vazio"
435
-
436
- #: admin/actions.php:281
437
- msgid "Invalid schedule"
438
- msgstr "Agendamento inválido"
439
-
440
- #: admin/actions.php:294
441
- msgid "Max backups must be a number"
442
- msgstr "A quant. de backups precisa ser um número"
443
-
444
- #: admin/actions.php:392
445
- msgid "%s didn't match any files."
446
- msgstr "%s não resulta em arquivo algum."
447
-
448
- #: admin/backups.php:13
449
- msgid "add schedule"
450
- msgstr "agendar novo backup"
451
-
452
- #: admin/backups.php:37
453
- msgid "Size"
454
- msgstr "Tamanho"
455
-
456
- #: admin/backups.php:38
457
- msgid "Type"
458
- msgstr "Tipo"
459
-
460
- #: admin/backups.php:39
461
- msgid "Actions"
462
- msgstr "Ações"
463
-
464
- #: admin/backups.php:62
465
- msgid "This is where your backups will appear once you have one."
466
- msgstr "Quando você tiver um backup, ele irá aparecer neste espaço."
467
-
468
- #: admin/constants.php:3
469
- msgid "The Codex can help"
470
- msgstr "O Codex pode ajudar"
471
-
472
- #: admin/constants.php:8
473
- msgid "The path to folder you would like to store your backup files in, defaults to %s."
474
- msgstr "O caminho do diretório que você gostaria de armazenar os arquivos de backup. O padrão é %s."
475
-
476
- #: admin/constants.php:11 admin/constants.php:14
477
- msgid "database"
478
- msgstr "banco de dados"
479
-
480
- #: admin/constants.php:14
481
- msgid "files"
482
- msgstr "arquivos"
483
-
484
- #: admin/constants.php:17
485
- msgid "Attempt to email a copy of your backups. Value should be email address to send backups to. Defaults to %s."
486
- msgstr "Opção de enviar uma cópia de seus backups por email. O valor precisar ser um endereço de email que receberá os envios. O padrão é %s."
487
-
488
- #: admin/constants.php:20
489
- msgid "Comma separated list of files or directories to exclude, the backups directory is automatically excluded."
490
- msgstr "Lista de arquivos ou diretórios (separados por vírgula) que devem ser excluídos do backup. O diretório de backups é automaticamente excluído."
491
-
492
- #: admin/menu.php:10 admin/page.php:5
493
- msgid "Manage Backups"
494
- msgstr "Gerenciar Backups"
495
-
496
- #: admin/menu.php:10 admin/menu.php:34
497
- msgid "Backups"
498
- msgstr "Backups"
499
-
500
- #: admin/menu.php:69
501
- msgid "You are not using the latest stable version of BackUpWordPress"
502
- msgstr "Você não está usando a última versão estável do BackUpWordPress"
503
-
504
- #: admin/menu.php:75
505
- msgid "FAQ"
506
- msgstr "FAQ"
507
-
508
- #: admin/constants.php:3 admin/menu.php:76
509
- msgid "Constants"
510
- msgstr "Constantes"
511
-
512
- #: admin/menu.php:79
513
- msgid "For more information:"
514
- msgstr "Para mais informações:"
515
-
516
- #: admin/menu.php:81
517
- msgid "Support Forums"
518
- msgstr "Fóruns de suporte"
519
-
520
- #: admin/menu.php:82
521
- msgid "Help with translation"
522
- msgstr "Ajude a traduzir"
523
-
524
- #: admin/page.php:13
525
- msgid "You need to fix the issues detailed above before BackUpWordPress can start."
526
- msgstr "Você precisa corrigir os erros indicados acima antes que o BackUpWordPress possa ser iniciado."
527
-
528
- #: admin/schedule-form-excludes.php:19
529
- msgid "Preview"
530
- msgstr "Visualizar"
531
-
532
- #: admin/schedule-form-excludes.php:29
533
- msgid "Exclude Rules"
534
- msgstr "Regras de exclusão"
535
-
536
- #: admin/schedule-form-excludes.php:52
537
- msgid "Remove"
538
- msgstr "Excluir"
539
-
540
- #: admin/schedule-form-excludes.php:71
541
- msgid "Excluded"
542
- msgstr "Excluído"
543
-
544
- #: admin/schedule-form-excludes.php:75
545
- msgid "Included"
546
- msgstr "Incluído"
547
-
548
- #: admin/schedule-form-excludes.php:79
549
- msgid "Unreadable"
550
- msgstr "Ilegível"
551
-
552
- #: admin/schedule-form-excludes.php:107
553
- msgid "Unreadable files can't be backed up"
554
- msgstr "Não é possível realizar o backup de arquivos ilegíveis"
555
-
556
- #: admin/schedule-form-excludes.php:113
557
- msgid "Your site is %s. Backups will be compressed and so will be smaller."
558
- msgstr "Seu site tem %s. Os backups serão compactados e ficarão menores."
559
-
560
- #: admin/schedule-form.php:11
561
- msgid "Backup"
562
- msgstr "Backup"
563
-
564
- #: admin/schedule-form.php:14
565
- msgid "Both Database &amp; files"
566
- msgstr "Banco de dados &amp; arquivos"
567
-
568
- #: admin/schedule-form.php:15
569
- msgid "Files only"
570
- msgstr "Apenas arquivos"
571
-
572
- #: admin/schedule-form.php:16
573
- msgid "Database only"
574
- msgstr "Apenas banco de dados"
575
-
576
- #: functions/interface.php:230
577
- msgid "Files"
578
- msgstr "Arquivos"
579
-
580
- #: admin/schedule-form-excludes.php:7
581
- msgid "Manage Excludes"
582
- msgstr "Gerenciar Exclusões"
583
-
584
- #: admin/schedule-form.php:23
585
- msgid "Schedule"
586
- msgstr "Intervalo"
587
-
588
- #: plugin.php:140 admin/schedule-form.php:54
589
- msgid "Update"
590
- msgstr ""
591
-
592
- #: admin/schedule.php:19
593
- msgid "hourly at %s minutes past the hour"
594
- msgstr "de hora em hora, passado %s minutos de cada hora"
595
-
596
- #: functions/interface.php:262
597
- msgid "Run now"
598
- msgstr "Executar agora"
599
-
600
- #: functions/interface.php:28 functions/interface.php:264
601
- msgid "Delete"
602
- msgstr "Excluir"
603
-
604
- #: plugin.php:60
605
- msgid "BackUpWordPress requires PHP version 5.2.4 or greater."
606
- msgstr "O BackUpWordPress requer o PHP versão 5.2.4 ou superior."
607
-
608
- #: classes/email.php:137
609
- msgid "Backup of %s"
610
- msgstr "Backup de %s"
611
-
612
- #: functions/core.php:293
613
- msgid "This %s file ensures that other people cannot download your backup files."
614
- msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/languages/hmbkp-zh_CN.mo DELETED
Binary file
backupwordpress/languages/hmbkp-zh_CN.po DELETED
@@ -1,610 +0,0 @@
1
- # Translation of 2.x in Chinese (China)
2
- # This file is distributed under the same license as the 2.x package.
3
- msgid ""
4
- msgstr ""
5
- "PO-Revision-Date: 2012-11-22 15:38:53+0000\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=1; plural=0;\n"
10
- "X-Generator: GlotPress/0.1\n"
11
- "Project-Id-Version: 2.x\n"
12
-
13
- #: admin/actions.php:419
14
- msgid "Email to Support"
15
- msgstr ""
16
-
17
- #: admin/page.php:17
18
- msgid "If your finding BackUpWordPress useful, please %s."
19
- msgstr ""
20
-
21
- #: admin/schedule-form-excludes.php:13
22
- msgid "New Exclude Rule[s]"
23
- msgstr ""
24
-
25
- #: admin/actions.php:410
26
- msgid "Your BackUp Failed"
27
- msgstr ""
28
-
29
- #: admin/actions.php:412
30
- msgid "Here's the response from the server:"
31
- msgstr ""
32
-
33
- #: admin/page.php:19
34
- msgid "If you need help getting things working then check the FAQ by clicking on help in the top right hand corner of this page."
35
- msgstr ""
36
-
37
- #: admin/page.php:17
38
- msgid "rate it on the plugin directory"
39
- msgstr ""
40
-
41
- #: classes/schedule.php:512 functions/interface.php:252
42
- msgid "Starting Backup"
43
- msgstr ""
44
-
45
- #: classes/schedule.php:582
46
- msgid "Dumping Database %s"
47
- msgstr ""
48
-
49
- #: classes/schedule.php:588
50
- msgid "Verifying Database Dump %s"
51
- msgstr ""
52
-
53
- #: classes/schedule.php:594
54
- msgid "Creating zip archive %s"
55
- msgstr ""
56
-
57
- #: classes/schedule.php:600
58
- msgid "Verifying Zip Archive %s"
59
- msgstr ""
60
-
61
- #: classes/schedule.php:606
62
- msgid "Finishing Backup"
63
- msgstr ""
64
-
65
- #: classes/wp-cli.php:16
66
- msgid "BackUpWordPress may not work when php is running with %s on"
67
- msgstr ""
68
-
69
- #: functions/interface.php:72
70
- msgid "%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."
71
- msgstr ""
72
-
73
- #: admin/constants.php:29
74
- msgid "The time that your schedules should run. Defaults to %s."
75
- msgstr ""
76
-
77
- #: plugin.php:142
78
- msgid "Are you sure you want to delete this schedule? All of it's backups will also be deleted."
79
- msgstr ""
80
-
81
- #: plugin.php:142 plugin.php:143 plugin.php:144 plugin.php:145
82
- msgid "'Cancel' to go back, 'OK' to delete."
83
- msgstr ""
84
-
85
- #: plugin.php:143
86
- msgid "Are you sure you want to delete this backup?"
87
- msgstr ""
88
-
89
- #: plugin.php:144
90
- msgid "Are you sure you want to remove this exclude rule?"
91
- msgstr ""
92
-
93
- #: plugin.php:145
94
- msgid "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?"
95
- msgstr ""
96
-
97
- #: admin/actions.php:291
98
- msgid "Max backups can't be empty"
99
- msgstr ""
100
-
101
- #: admin/actions.php:297
102
- msgid "Max backups must be greater than 0"
103
- msgstr ""
104
-
105
- #: admin/actions.php:396
106
- msgid "Exclude"
107
- msgstr ""
108
-
109
- #: admin/schedule-form-excludes.php:44
110
- msgid "default"
111
- msgstr ""
112
-
113
- #: admin/schedule-form-excludes.php:48
114
- msgid "defined"
115
- msgstr ""
116
-
117
- #: admin/schedule-form.php:27
118
- msgid "Manual Only"
119
- msgstr ""
120
-
121
- #: admin/schedule-form.php:45
122
- msgid "The number of previous backups to store on the server. past this limit older backups will be deleted automatically."
123
- msgstr ""
124
-
125
- #: admin/schedule.php:4
126
- msgid "this shouldn't take long&hellip;"
127
- msgstr ""
128
-
129
- #: admin/schedule.php:4
130
- msgid "calculating the size of your site&hellip;"
131
- msgstr ""
132
-
133
- #: admin/schedule.php:12
134
- msgid "The next backup will be on %1$s at %2$s"
135
- msgstr ""
136
-
137
- #: admin/schedule.php:37
138
- msgid "every 12 hours at %1$s &amp; %2$s"
139
- msgstr ""
140
-
141
- #: admin/schedule.php:43
142
- msgid "weekly on %1$s at %2$s"
143
- msgstr ""
144
-
145
- #: admin/schedule.php:49
146
- msgid "fortnightly on %1$s at %2$s"
147
- msgstr ""
148
-
149
- #: admin/schedule.php:56
150
- msgid "on the %1$s of each month at %2$s"
151
- msgstr ""
152
-
153
- #: admin/schedule.php:62
154
- msgid "manually"
155
- msgstr ""
156
-
157
- #: admin/schedule.php:68
158
- msgid "this server"
159
- msgstr ""
160
-
161
- #: admin/schedule.php:75
162
- msgid "store the only the last backup on %s"
163
- msgstr ""
164
-
165
- #: admin/schedule.php:81
166
- msgid "don't store any backups on %s"
167
- msgstr ""
168
-
169
- #: admin/schedule.php:87
170
- msgid "store only the last %1$s backups on %2$s"
171
- msgstr ""
172
-
173
- #: admin/schedule.php:96
174
- msgid "Backup my %1$s %2$s %3$s, %4$s. %5$s"
175
- msgstr ""
176
-
177
- #: classes/email.php:23
178
- msgid "Receive a notification email when a backup completes, if the backup is small enough (&lt; 10mb) then it will be attached to the email. Separate multiple email address's with a comma."
179
- msgstr ""
180
-
181
- #: classes/email.php:129
182
- msgid "BackUpWordPress was unable to backup your site %1$s."
183
- msgstr ""
184
-
185
- #: classes/email.php:129
186
- msgid "Here are the errors that we're encountered:"
187
- msgstr ""
188
-
189
- #: classes/email.php:129
190
- msgid "If the errors above look like Martian, forward this email to %3$s and we'll take a look"
191
- msgstr ""
192
-
193
- #: classes/email.php:129
194
- msgid ""
195
- "Kind Regards,\n"
196
- "The Apologetic BackUpWordPress Backup Emailing Robot"
197
- msgstr ""
198
-
199
- #: classes/email.php:142 classes/email.php:151
200
- msgid "BackUpWordPress has completed a backup of your site %1$s."
201
- msgstr ""
202
-
203
- #: classes/email.php:142
204
- msgid "The backup file should be attached to this email."
205
- msgstr ""
206
-
207
- #: classes/email.php:142 classes/email.php:151
208
- msgid "You can download the backup file by clicking the link below:"
209
- msgstr ""
210
-
211
- #: classes/email.php:142 classes/email.php:151
212
- msgid ""
213
- "Kind Regards,\n"
214
- "The Happy BackUpWordPress Backup Emailing Robot"
215
- msgstr ""
216
-
217
- #: classes/email.php:151
218
- msgid "Unfortunately the backup file was too large to attach to this email."
219
- msgstr ""
220
-
221
- #: classes/wp-cli.php:19
222
- msgid "Backup: Dumping database..."
223
- msgstr ""
224
-
225
- #: classes/wp-cli.php:23
226
- msgid "Backup: Zipping everything up..."
227
- msgstr ""
228
-
229
- #: classes/wp-cli.php:38
230
- msgid "Invalid backup path"
231
- msgstr ""
232
-
233
- #: classes/wp-cli.php:43
234
- msgid "Invalid root path"
235
- msgstr ""
236
-
237
- #: classes/wp-cli.php:68
238
- msgid "Backup Complete: "
239
- msgstr ""
240
-
241
- #: classes/wp-cli.php:71
242
- msgid "Backup Failed"
243
- msgstr ""
244
-
245
- #: functions/core.php:202
246
- msgid "By default BackUpWordPress performs a daily backup of your database and a weekly backup of your database &amp; files. You can modify these schedules."
247
- msgstr ""
248
-
249
- #: functions/interface.php:111
250
- msgid "BackUpWordPress failed to perform the backup."
251
- msgstr ""
252
-
253
- #: functions/interface.php:111
254
- msgid "You have likely hit a memory limit."
255
- msgstr ""
256
-
257
- #: functions/interface.php:238
258
- msgid "Legacy"
259
- msgstr ""
260
-
261
- #: hm-backup/hm-backup.php:906
262
- msgid "The mysqldump file was not created"
263
- msgstr ""
264
-
265
- #: functions/interface.php:62
266
- msgid "Your backups directory isn't writable, run %1$s or %2$s or set the permissions yourself."
267
- msgstr "你的备份目录无法写入,运行 %1$s 或 %2$s 或者自行设置权限。"
268
-
269
- #: functions/interface.php:50
270
- msgid "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."
271
- msgstr "因为目录 %1$s 无法写入导致不能创建备份目录, 运行 %2$s 或 %3$s 或 自行创建目录。"
272
-
273
- #: functions/core.php:202
274
- msgid "BackUpWordPress has setup your default schedules."
275
- msgstr "BackUpWordPress 已经配置了你的默认安排。"
276
-
277
- #: classes/email.php:127
278
- msgid "Backup of %s Failed"
279
- msgstr "%s 的备份失败"
280
-
281
- #: classes/email.php:50
282
- msgid "Send an email notification to %s"
283
- msgstr "给%s发送电子邮件通知"
284
-
285
- #: classes/email.php:72
286
- msgid "%s isn't a valid email"
287
- msgstr "%s 不是有效的电子邮件地址"
288
-
289
- #: admin/schedule.php:4
290
- msgid "Backups will be compressed and should be smaller than this."
291
- msgstr "备份会被压缩所以应该会比这个数值要小。"
292
-
293
- #: classes/email.php:19
294
- msgid "Email notification"
295
- msgstr "电子邮件通知"
296
-
297
- #: admin/schedule.php:19
298
- msgid "hourly on the hour"
299
- msgstr ""
300
-
301
- #: admin/schedule.php:25
302
- msgid "daily at %s"
303
- msgstr "在每天的 %s"
304
-
305
- #: admin/schedule-form.php:41
306
- msgid "Number of backups to store on this server"
307
- msgstr "存储在服务器上的备份数目"
308
-
309
- #: admin/schedule-form.php:7
310
- msgid "Schedule Settings"
311
- msgstr "日程安排"
312
-
313
- #: admin/actions.php:418 admin/schedule-form-excludes.php:119
314
- msgid "Close"
315
- msgstr "关闭"
316
-
317
- #: admin/menu.php:69
318
- msgid "The information below is for version %1$s. View the %2$s file for help specific to version %3$s."
319
- msgstr "以下信息适用于%1$s版本。查看%2$s 文件以获取%3$s版本的帮助信息。"
320
-
321
- #: admin/constants.php:26
322
- msgid "The root directory that is backed up. Defaults to %s."
323
- msgstr "根目录已经备份。默认备份到 %s 。"
324
-
325
- #: admin/constants.php:23
326
- msgid "The capability to use when calling %1$s. Defaults to %2$s."
327
- msgstr ""
328
-
329
- #: admin/constants.php:14
330
- msgid "The path to your %1$s executable. Will be used to zip up your %2$s and %3$s if available."
331
- msgstr ""
332
-
333
- #: plugin.php:71
334
- msgid "BackUpWordPress requires WordPress version %s or greater."
335
- msgstr "BackUpWordPress 需要Wordpress的版本至少为%s。"
336
-
337
- #: plugin.php:141 admin/actions.php:396
338
- msgid "Cancel"
339
- msgstr "取消"
340
-
341
- #: admin/constants.php:11
342
- msgid "The path to your %1$s executable. Will be used for the %2$s part of the back up if available."
343
- msgstr ""
344
-
345
- #: admin/constants.php:8 admin/constants.php:11 admin/constants.php:14
346
- #: admin/constants.php:17 admin/constants.php:20 admin/constants.php:23
347
- #: admin/constants.php:26 admin/constants.php:29
348
- msgid "e.g."
349
- msgstr "例如:"
350
-
351
- #: admin/constants.php:3
352
- msgid "You can %1$s any of the following %2$s in your %3$s to control advanced settings. %4$s. Defined %5$s will be highlighted."
353
- msgstr ""
354
-
355
- #: admin/actions.php:192 admin/actions.php:195
356
- msgid "%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 back ups. See the %3$s for more details."
357
- msgstr ""
358
-
359
- #: functions/interface.php:72
360
- msgid "http://php.net/manual/en/features.safe-mode.php"
361
- msgstr "http://php.net/manual/en/features.safe-mode.php"
362
-
363
- #: functions/interface.php:72
364
- msgid "Safe Mode"
365
- msgstr "安全模式"
366
-
367
- #: functions/interface.php:82
368
- msgid "Your custom backups directory %1$s doesn't exist and can't be created, your backups will be saved to %2$s instead."
369
- msgstr ""
370
-
371
- #: functions/interface.php:92
372
- msgid "Your custom backups directory %1$s isn't writable, new backups will be saved to %2$s instead."
373
- msgstr "您设定的备份目录 %1$s 无法写入,新的备份文件将会被存储到 %2$s 。"
374
-
375
- #: functions/interface.php:252
376
- msgid "cancel"
377
- msgstr "取消"
378
-
379
- #: functions/interface.php:256
380
- msgid "Settings"
381
- msgstr "设置"
382
-
383
- #: functions/interface.php:259
384
- msgid "Excludes"
385
- msgstr "排除"
386
-
387
- #: functions/interface.php:27
388
- msgid "Download"
389
- msgstr "下载"
390
-
391
- #: functions/interface.php:50 functions/interface.php:62
392
- msgid "BackUpWordPress is almost ready."
393
- msgstr "BackUpWordPress 已经准备好。"
394
-
395
- #: functions/interface.php:102
396
- msgid "BackUpWordPress detected issues with your last backup."
397
- msgstr "BackUpWordPress 检测到上一个备份存在错误。"
398
-
399
- #: functions/interface.php:227
400
- msgid "Database and Files"
401
- msgstr "数据库和文件"
402
-
403
- #: functions/interface.php:233
404
- msgid "Database"
405
- msgstr "数据库"
406
-
407
- #: hm-backup/hm-backup.php:931
408
- msgid "The backup file was not created"
409
- msgstr "备份文件没有被创建"
410
-
411
- #: hm-backup/hm-backup.php:951
412
- msgid "The following files are unreadable and couldn't be backed up: "
413
- msgstr "下列文件不可读,故无法备份:"
414
-
415
- #: admin/actions.php:192 admin/actions.php:195 functions/interface.php:72
416
- #: functions/interface.php:82 functions/interface.php:92
417
- msgid "BackUpWordPress has detected a problem."
418
- msgstr "BackUpWordPress 检测到一个问题。"
419
-
420
- #: admin/actions.php:265
421
- msgid "Backup type cannot be empty"
422
- msgstr "备份类型不能为空"
423
-
424
- #: admin/actions.php:268
425
- msgid "Invalid backup type"
426
- msgstr "无效的备份类型。"
427
-
428
- #: admin/actions.php:278
429
- msgid "Schedule cannot be empty"
430
- msgstr "计划不能为空"
431
-
432
- #: admin/actions.php:281
433
- msgid "Invalid schedule"
434
- msgstr "无效的计划"
435
-
436
- #: admin/actions.php:294
437
- msgid "Max backups must be a number"
438
- msgstr "最大备份数必须是数字"
439
-
440
- #: admin/actions.php:392
441
- msgid "%s didn't match any files."
442
- msgstr ""
443
-
444
- #: admin/backups.php:13
445
- msgid "add schedule"
446
- msgstr "添加计划"
447
-
448
- #: admin/backups.php:37
449
- msgid "Size"
450
- msgstr "大小"
451
-
452
- #: admin/backups.php:38
453
- msgid "Type"
454
- msgstr "类型"
455
-
456
- #: admin/backups.php:39
457
- msgid "Actions"
458
- msgstr "行动"
459
-
460
- #: admin/backups.php:62
461
- msgid "This is where your backups will appear once you have one."
462
- msgstr "这里是您的备份文件会出现的地方。"
463
-
464
- #: admin/constants.php:3
465
- msgid "The Codex can help"
466
- msgstr ""
467
-
468
- #: admin/constants.php:8
469
- msgid "The path to folder you would like to store your backup files in, defaults to %s."
470
- msgstr "您想要存储备份文件的目录,默认是%s。"
471
-
472
- #: admin/constants.php:11 admin/constants.php:14
473
- msgid "database"
474
- msgstr "数据库"
475
-
476
- #: admin/constants.php:14
477
- msgid "files"
478
- msgstr "文件"
479
-
480
- #: admin/constants.php:17
481
- msgid "Attempt to email a copy of your backups. Value should be email address to send backups to. Defaults to %s."
482
- msgstr ""
483
-
484
- #: admin/constants.php:20
485
- msgid "Comma separated list of files or directories to exclude, the backups directory is automatically excluded."
486
- msgstr ""
487
-
488
- #: admin/menu.php:10 admin/page.php:5
489
- msgid "Manage Backups"
490
- msgstr "管理备份"
491
-
492
- #: admin/menu.php:10 admin/menu.php:34
493
- msgid "Backups"
494
- msgstr "备份"
495
-
496
- #: admin/menu.php:69
497
- msgid "You are not using the latest stable version of BackUpWordPress"
498
- msgstr "您使用的不是BackUpWordPress的最新稳定版本"
499
-
500
- #: admin/menu.php:75
501
- msgid "FAQ"
502
- msgstr "常见问题"
503
-
504
- #: admin/constants.php:3 admin/menu.php:76
505
- msgid "Constants"
506
- msgstr "常量"
507
-
508
- #: admin/menu.php:79
509
- msgid "For more information:"
510
- msgstr "获取更多信息:"
511
-
512
- #: admin/menu.php:81
513
- msgid "Support Forums"
514
- msgstr "支持论坛"
515
-
516
- #: admin/menu.php:82
517
- msgid "Help with translation"
518
- msgstr "帮助进行翻译"
519
-
520
- #: admin/page.php:13
521
- msgid "You need to fix the issues detailed above before BackUpWordPress can start."
522
- msgstr ""
523
-
524
- #: admin/schedule-form-excludes.php:19
525
- msgid "Preview"
526
- msgstr "预览"
527
-
528
- #: admin/schedule-form-excludes.php:29
529
- msgid "Exclude Rules"
530
- msgstr "排除规则"
531
-
532
- #: admin/schedule-form-excludes.php:52
533
- msgid "Remove"
534
- msgstr "移除"
535
-
536
- #: admin/schedule-form-excludes.php:71
537
- msgid "Excluded"
538
- msgstr "已被排除的"
539
-
540
- #: admin/schedule-form-excludes.php:75
541
- msgid "Included"
542
- msgstr "已包括"
543
-
544
- #: admin/schedule-form-excludes.php:79
545
- msgid "Unreadable"
546
- msgstr "无法读取的"
547
-
548
- #: admin/schedule-form-excludes.php:107
549
- msgid "Unreadable files can't be backed up"
550
- msgstr "无法读取的文件不会被备份"
551
-
552
- #: admin/schedule-form-excludes.php:113
553
- msgid "Your site is %s. Backups will be compressed and so will be smaller."
554
- msgstr "您的站点大小为 %s. 压缩文件的大小会比这个值要小。"
555
-
556
- #: admin/schedule-form.php:11
557
- msgid "Backup"
558
- msgstr "备份"
559
-
560
- #: admin/schedule-form.php:14
561
- msgid "Both Database &amp; files"
562
- msgstr ""
563
-
564
- #: admin/schedule-form.php:15
565
- msgid "Files only"
566
- msgstr "仅文件"
567
-
568
- #: admin/schedule-form.php:16
569
- msgid "Database only"
570
- msgstr "仅数据库"
571
-
572
- #: functions/interface.php:230
573
- msgid "Files"
574
- msgstr "文件"
575
-
576
- #: admin/schedule-form-excludes.php:7
577
- msgid "Manage Excludes"
578
- msgstr ""
579
-
580
- #: admin/schedule-form.php:23
581
- msgid "Schedule"
582
- msgstr "计划"
583
-
584
- #: plugin.php:140 admin/schedule-form.php:54
585
- msgid "Update"
586
- msgstr "更新"
587
-
588
- #: admin/schedule.php:19
589
- msgid "hourly at %s minutes past the hour"
590
- msgstr ""
591
-
592
- #: functions/interface.php:262
593
- msgid "Run now"
594
- msgstr "现在备份"
595
-
596
- #: functions/interface.php:28 functions/interface.php:264
597
- msgid "Delete"
598
- msgstr "删除"
599
-
600
- #: plugin.php:60
601
- msgid "BackUpWordPress requires PHP version 5.2.4 or greater."
602
- msgstr "BackUpWordPress 需要 PHP 的版本至少为5.2.4。"
603
-
604
- #: classes/email.php:137
605
- msgid "Backup of %s"
606
- msgstr ""
607
-
608
- #: functions/core.php:293
609
- msgid "This %s file ensures that other people cannot download your backup files."
610
- msgstr "这个 %s 文件确保其他人不能下载您的备份文件"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/plugin.php DELETED
@@ -1,162 +0,0 @@
1
- <?php
2
-
3
- /* Copyright 2011 Human Made Limited (email : support@hmn.md)
4
-
5
- This program is free software; you can redistribute it and/or modify
6
- it under the terms of the GNU General Public License as published by
7
- the Free Software Foundation; either version 2 of the License, or
8
- (at your option) any later version.
9
-
10
- This program is distributed in the hope that it will be useful,
11
- but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- GNU General Public License for more details.
14
-
15
- You should have received a copy of the GNU General Public License
16
- along with this program; if not, write to the Free Software
17
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
- */
19
-
20
- if ( ! defined( 'HMBKP_PLUGIN_SLUG' ) )
21
- define( 'HMBKP_PLUGIN_SLUG', 'backupwordpress' );
22
-
23
- if ( ! defined( 'HMBKP_PLUGIN_PATH' ) )
24
- define( 'HMBKP_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
25
-
26
- if ( ! defined( 'HMBKP_PLUGIN_URL' ) )
27
- define( 'HMBKP_PLUGIN_URL', plugins_url( HMBKP_PLUGIN_SLUG ) );
28
-
29
- if ( ! defined( 'HMBKP_ADMIN_URL' ) )
30
- define( 'HMBKP_ADMIN_URL', add_query_arg( 'page', HMBKP_PLUGIN_SLUG, admin_url( 'tools.php' ) ) );
31
-
32
- define( 'HMBKP_SECURE_KEY', md5( ABSPATH . time() ) );
33
-
34
- if ( ! defined( 'HMBKP_REQUIRED_WP_VERSION' ) )
35
- define( 'HMBKP_REQUIRED_WP_VERSION', '3.3.3' );
36
-
37
- // Max memory limit isn't defined in old versions of WordPress
38
- if ( ! defined( 'WP_MAX_MEMORY_LIMIT' ) )
39
- define( 'WP_MAX_MEMORY_LIMIT', '256M' );
40
-
41
- if ( ! defined( 'HMBKP_SCHEDULE_TIME' ) )
42
- define( 'HMBKP_SCHEDULE_TIME', '11pm' );
43
-
44
- // Don't activate on anything less than PHP 5.2.4
45
- if ( version_compare( phpversion(), '5.2.4', '<' ) ) {
46
-
47
- require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
48
- deactivate_plugins( __FILE__ );
49
-
50
- if ( isset( $_GET['action'] ) && ( $_GET['action'] == 'activate' || $_GET['action'] == 'error_scrape' ) )
51
- die( __( 'BackUpWordPress requires PHP version 5.2.4 or greater.', 'hmbkp' ) );
52
-
53
- }
54
-
55
- // Don't activate on old versions of WordPress
56
- if ( version_compare( get_bloginfo( 'version' ), HMBKP_REQUIRED_WP_VERSION, '<' ) ) {
57
-
58
- require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
59
- deactivate_plugins( __FILE__ );
60
-
61
- if ( isset( $_GET['action'] ) && ( $_GET['action'] == 'activate' || $_GET['action'] == 'error_scrape' ) )
62
- die( sprintf( __( 'BackUpWordPress requires WordPress version %s or greater.', 'hmbkp' ), HMBKP_REQUIRED_WP_VERSION ) );
63
-
64
- }
65
-
66
- // Load the admin menu
67
- require_once( HMBKP_PLUGIN_PATH . '/admin/menu.php' );
68
- require_once( HMBKP_PLUGIN_PATH . '/admin/actions.php' );
69
-
70
- // Load hm-backup
71
- if ( ! class_exists( 'HM_Backup' ) )
72
- require_once( HMBKP_PLUGIN_PATH . '/hm-backup/hm-backup.php' );
73
-
74
- // Load the schedules
75
- require_once( HMBKP_PLUGIN_PATH . '/classes/schedule.php' );
76
- require_once( HMBKP_PLUGIN_PATH . '/classes/schedules.php' );
77
-
78
- // Load the core functions
79
- require_once( HMBKP_PLUGIN_PATH . '/functions/core.php' );
80
- require_once( HMBKP_PLUGIN_PATH . '/functions/interface.php' );
81
-
82
- // Load Services
83
- require_once( HMBKP_PLUGIN_PATH . '/classes/services.php' );
84
-
85
- // Load the email service
86
- require_once( HMBKP_PLUGIN_PATH . '/classes/email.php' );
87
-
88
- // Load the wp cli command
89
- if ( defined( 'WP_CLI' ) && WP_CLI )
90
- include( HMBKP_PLUGIN_PATH . '/classes/wp-cli.php' );
91
-
92
- // Handle any advanced option changes
93
- hmbkp_constant_changes();
94
-
95
- // Set the tmp directory to the backup path
96
- if ( ! defined( 'PCLZIP_TEMPORARY_DIR' ) )
97
- define( 'PCLZIP_TEMPORARY_DIR', trailingslashit( hmbkp_path() ) );
98
-
99
- // Hook in the activation and deactivation actions
100
- add_action( 'activate_' . HMBKP_PLUGIN_SLUG . '/plugin.php', 'hmbkp_activate' );
101
- add_action( 'deactivate_' . HMBKP_PLUGIN_SLUG . '/plugin.php', 'hmbkp_deactivate' );
102
-
103
- if ( ! function_exists( 'hmbkp_init' ) ) :
104
-
105
- /**
106
- * Plugin setup
107
- *
108
- * @return null
109
- */
110
- function hmbkp_init() {
111
-
112
- // define the plugin version
113
- define( 'HMBKP_VERSION', '2.1.3' );
114
-
115
- // Load translations
116
- load_plugin_textdomain( 'hmbkp', false, HMBKP_PLUGIN_SLUG . '/languages/' );
117
-
118
- // Fire the update action
119
- if ( HMBKP_VERSION != get_option( 'hmbkp_plugin_version' ) )
120
- hmbkp_update();
121
-
122
- // Load admin css and js
123
- if ( isset( $_GET['page'] ) && $_GET['page'] == HMBKP_PLUGIN_SLUG ) {
124
-
125
- wp_enqueue_script( 'hmbkp-fancybox', HMBKP_PLUGIN_URL . '/assets/fancyBox/source/jquery.fancybox.js', array( 'jquery' ), sanitize_title( HMBKP_VERSION ) );
126
- wp_enqueue_script( 'hmbkp', HMBKP_PLUGIN_URL . '/assets/hmbkp.js', array( 'jquery-ui-tabs', 'jquery-ui-widget', 'hmbkp-fancybox' ), sanitize_title( HMBKP_VERSION ) );
127
-
128
- wp_localize_script( 'hmbkp', 'objectL10n', array(
129
- 'update' => __( 'Update', 'hmbkp' ),
130
- 'cancel' => __( 'Cancel', 'hmbkp' ),
131
- 'delete_schedule' => __( 'Are you sure you want to delete this schedule? All of it\'s backups will also be deleted.' ) . "\n\n" . __( '\'Cancel\' to go back, \'OK\' to delete.', 'hmbkp' ) . "\n",
132
- 'delete_backup' => __( 'Are you sure you want to delete this backup?', 'hmbkp' ) . "\n\n" . __( '\'Cancel\' to go back, \'OK\' to delete.', 'hmbkp' ) . "\n",
133
- 'remove_exclude_rule' => __( 'Are you sure you want to remove this exclude rule?', 'hmbkp' ) . "\n\n" . __( '\'Cancel\' to go back, \'OK\' to delete.', 'hmbkp' ) . "\n",
134
- '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?', 'hmbkp' ) . "\n\n" . __( '\'Cancel\' to go back, \'OK\' to delete.', 'hmbkp' ) . "\n"
135
- ) );
136
-
137
- wp_enqueue_style( 'hmbkp_fancybox', HMBKP_PLUGIN_URL . '/assets/fancyBox/source/jquery.fancybox.css', false, HMBKP_VERSION );
138
- wp_enqueue_style( 'hmbkp', HMBKP_PLUGIN_URL . '/assets/hmbkp.css', false, HMBKP_VERSION );
139
-
140
- }
141
-
142
- }
143
- add_action( 'admin_init', 'hmbkp_init' );
144
-
145
- /**
146
- * Function to run when the schedule cron fires
147
- * @param array $args
148
- */
149
- function hmbkp_schedule_hook_run( $schedule_id ) {
150
-
151
- $schedules = new HMBKP_Schedules();
152
- $schedule = $schedules->get_schedule( $schedule_id );
153
-
154
- if ( ! $schedule )
155
- return;
156
-
157
- $schedule->run();
158
-
159
- }
160
- add_action( 'hmbkp_schedule_hook', 'hmbkp_schedule_hook_run' );
161
-
162
- endif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backupwordpress/readme.txt DELETED
@@ -1,456 +0,0 @@
1
- === BackUpWordPress ===
2
- Contributors: humanmade, joehoyle, mattheu, tcrsavage, willmot, cuvelier
3
- Tags: back up, backup, backups, database, zip, db, files, archive, wp-cli, humanmade
4
- Requires at least: 3.3.3
5
- Tested up to: 3.5
6
- Stable tag: 2.1.3
7
-
8
- Simple automated back ups of your WordPress powered website.
9
-
10
- == Description ==
11
-
12
- BackUpWordPress will back up your entire site including your database and all your files on a schedule that suits you.
13
-
14
- = Features =
15
-
16
- * Manage multiple schedules.
17
- * Super simple to use, no setup required.
18
- * Uses `zip` and `mysqldump` for faster back ups if they are available.
19
- * Works in low memory, "shared host" environments.
20
- * Option to have each backup file emailed to you.
21
- * Works on Linux & Windows Server.
22
- * Exclude files and folders from your back ups.
23
- * Good support should you need help.
24
- * Translations for Spanish, German, Chinese, Romanian, Russian, Serbian, Lithuanian, Italian, Czech, Dutch, French, Basque.
25
-
26
- = Help develop this plugin =
27
-
28
- The BackUpWordPress plugin is hosted GitHub, if you want to help out with development or testing then head over to https://github.com/humanmade/backupwordpress/.
29
-
30
- = Translations =
31
-
32
- We'd also love help translating the plugin into more languages, if you can help then please contact support@hmn.md or visit http://translate.hmn.md/.
33
-
34
- == Installation ==
35
-
36
- 1. Install BackUpWordPress either via the WordPress.org plugin directory, or by uploading the files to your server.
37
- 2. Activate the plugin.
38
- 3. Sit back and relax safe in the knowledge that your whole site will be backed up every day.
39
-
40
- The plugin will try to use the `mysqldump` and `zip` commands via shell if they are available, using these will greatly improve the time it takes to back up your site.
41
-
42
- == Frequently Asked Questions ==
43
-
44
- **Where does BackUpWordPress store the backup files?**
45
-
46
- Backups are stored on your server in `/wp-content/backups`, you can change the directory.
47
-
48
- **Important:** By default BackUpWordPress backs up everything in your site root as well as your database, this includes any non WordPress folders that happen to be in your site root. This does means that your backup directory can get quite large.
49
-
50
- **How do I restore my site from a backup?**
51
-
52
- You need to download the latest backup file either by clicking download on the backups page or via `FTP`. `Unzip` the files and upload all the files to your server overwriting your site. You can then import the database using your hosts database management tool (likely `phpMyAdmin`).
53
-
54
- See this post for more details http://hmn.md/backupwordpress-how-to-restore-from-backup-files/.
55
-
56
- **Does BackUpWordPress back up the backups directory?**
57
-
58
- No.
59
-
60
- **I'm not receiving my backups by email**
61
-
62
- Most servers have a filesize limit on email attachments, it's generally about 10mb. If your backup file is over that limit it won't be sent attached to the email, instead you should receive an email with a link to download the backup, if you aren't even receiving that then you likely have a mail issue on your server that you'll need to contact your host about.
63
-
64
- **How many backups are stored by default?**
65
-
66
- BackUpWordPress stores the last 10 backups by default.
67
-
68
- **How long should a backup take?**
69
-
70
- Unless your site is very large (many gigabytes) it should only take a few minutes to perform a back up, if your back up has been running for longer than an hour it's safe to assume that something has gone wrong, try de-activating and re-activating the plugin, if it keeps happening, contact support.
71
-
72
- **What do I do if I get the wp-cron error message**
73
-
74
- The issue is that your `wp-cron.php` is not returning a `200` response when hit with a http request originating from your own server, it could be several things, most of the time it's an issue with the server / site and not with BackUpWordPress.
75
-
76
- Some things you can test are.
77
-
78
- * Are scheduled posts working? (They use wp-cron too).
79
- * Are you hosted on Heart Internet? (wp-cron is known not to work with them).
80
- * If you click manual backup does it work?
81
- * Try adding `define( 'ALTERNATE_WP_CRON', true ); to your `wp-config.php`, do automatic backups work?
82
- * Is your site private (I.E. is it behind some kind of authentication, maintenance plugin, .htaccess) if so wp-cron won't work until you remove it, if you are and you temporarily remove the authentication, do backups start working?
83
-
84
- If you have tried all these then feel free to contact support.
85
-
86
- **How to get BackUpWordPress working in Heart Internet**
87
-
88
- The script to be entered into the Heart Internet cPanel is: `/usr/bin/php5 /home/sites/yourdomain.com/public_html/wp-cron.php` (note the space between php5 and the location of the file). The file `wp-cron.php` `chmod` must be set to `711`.
89
-
90
- **Further Support & Feedback**
91
-
92
- General support questions should be posted in the <a href="http://wordpress.org/tags/backupwordpress?forum_id=10">WordPress support forums, tagged with backupwordpress.</a>
93
-
94
- For development issues, feature requests or anybody wishing to help out with development checkout <a href="https://github.com/humanmade/backupwordpress/">BackUpWordPress on GitHub.</a>
95
-
96
- You can also tweet <a href="http://twitter.com/humanmadeltd">@humanmadeltd</a> or email support@hmn.md for further help/support.
97
-
98
- == Screenshots ==
99
-
100
- 1. Manage multiple schedules.
101
- 2. Choose your schedule, backup type, number of backups to keep and whether to recieve a notification email.
102
- 3. Easily manage exclude rules and see exactly which files are included and excluded from your backup.
103
-
104
- == Changelog ==
105
-
106
- #### 2.1.4
107
-
108
- * Don't repeatedly try to create the backups directory in the `uploads` if `uploads` isn't writable.
109
- * Show the correct path in the warning message when the backups path can't be created.
110
-
111
- #### 2.1.3
112
-
113
- * Fix a regression in `2.1.2` that broke previewing and adding new exclude rules.
114
-
115
- #### 2.1.2
116
-
117
- * Fix an issue that could stop the settings panel from closing on save on servers which return `'0'` for ajax requests.
118
- * Fix an issue that could cause the backup root to be set to `/` on sites with `site_url` and `home` set to different domains.
119
- * The mysqldump fallback function will now be used if `mysqldump` produces an empty file.
120
- * Fix a possible PHP `NOTICE` on Apache servers.
121
-
122
- #### 2.1.1
123
-
124
- * Fix a possible fatal error when a backup schedule is instantiated outside of wp-admin.
125
- * Don't use functions from misc.php as loading it too early can cause fatal errors.
126
- * Don't hardcode an English string in the JS, use the translated string instead.
127
- * Properly skip dot files, should fix fatal errors on systems with `open_basedir` restrictions.
128
- * Don't call `apache_mod_loaded` as it caused wierd DNS issue on some sites, use `global $is_apache` instead.
129
- * Fix a possible double full stop at the end of the schedule sentence.
130
- * Minor code cleanup.
131
-
132
- #### 2.1
133
-
134
- * Stop blocking people with `safe_mode = On` from using the plugin, instead just show a warning.
135
- * Fix possible fatal error when setting schedule to monthly.
136
- * Fix issues with download backup not working on some shared hosts.
137
- * Fix issuses with download backup not working on sites with strange characters in the site name.
138
- * Fix a bug could cause the update actions to fire on initial activation.
139
- * Improved reliability when changing backup paths, now with Unit Tests.
140
- * Generate the lists of excluded, included and unreadable files in a more memory efficient way, no more fatal errors on sites with lots of files.
141
- * Bring back .htaccess protection of the backups directory on `Apache` servers with `mod_rewrite` enabled.
142
- * Prepend a random string to the backups directory to make it harder to brute force guess.
143
- * Fall back to storing the backups directoy in `uploads` if `WP_CONTENT_DIR` isn't writable.
144
- * Attempt to catch `E_ERROR` level errors (Fatal errors) that happen during the backup process and offer to email them to support.
145
- * Provide more granular status messages during the backup process.
146
- * Show a spinner next to the schedule link when a backup is running on a schedule which you are not currently viewing.
147
- * Improve the feedback when removing an exclude rule.
148
- * Fix an issue that could cause an exclude rule to be marked as default when it in-fact isn't, thus not letting it be deleted.
149
- * Add a line encouraging people to rate the plugin if they like it.
150
- * Change the support line to point to the FAQ before recommending they contact support.
151
- * Fix the link to the "How to Restore" post in the FAQ.
152
- * Some string changes for translators, 18 changed strings.
153
-
154
-
155
- #### 2.0.6
156
-
157
- * Fix possible warning on plugin activation if the sites cron option is empty.
158
- * Don't show the version warning in the help for Constants as that comes from the current version.
159
-
160
- #### 2.0.5
161
-
162
- * Re-setup the cron schedules if they get deleted somehow.
163
- * Delete all BackUpWordPress cron entries when the plugin is deactivated.
164
- * Introduce the `HMBKP_SCHEDULE_TIME` constant to allow control over the time schedules run.
165
- * Make sure the schedule times and times of previous backups are shown in local time.
166
- * Fix a bug that could cause the legacy backup schedule to be created on every update, not just when going from 1.x to 2.x.
167
- * Improve the usefulness of the `wp-cron.php` response code check.
168
- * Use the built in `site_format` function for human readable filesizes instead of defining our own function.
169
-
170
-
171
- #### 2.0.4
172
-
173
- * Revert the change to the way the plugin url and path were calculated as it caused regressions on some systems.
174
-
175
- #### 2.0.3
176
-
177
- * Fix issues with scheduled backups not firing in some cases.
178
- * Better compatibility when the WP Remote plugin is active alongside BackUpWordPress.
179
- * Catch and display more WP Cron errors.
180
- * BackUpWordPress now fails to activate on WordPress 3.3.2 and below.
181
- * Other minor fixes and improvements.
182
-
183
- #### 2.0.2
184
-
185
- * Only send backup failed emails if the backup actually failed.
186
- * Turn off the generic "memory limit probably hit" message as it was showing for too many people.
187
- * Fix a possible notice when the backup running filename is blank.
188
- * Include the `wp_error` response in the cron check.
189
-
190
- #### 2.0.1
191
-
192
- * Fix fatal error on PHP 5.2.
193
-
194
- #### 2.0
195
-
196
- * Ability to have multiple schedules with separate settings & excludes per schedule.
197
- * Ability to manage exclude rules and see exactly which files are included and excluded.
198
- * Fix an issue with sites with an `open_basedir` restriction.
199
- * Backups should now be much more reliable in low memory environments.
200
- * Lots of other minor improvements and bug fixes.
201
-
202
- #### 1.6.9
203
-
204
- * Updated and improved translations across the board - props @elektronikLexikon.
205
- * German translation - props @elektronikLexikon.
206
- * New Basque translation - props Unai ZC.
207
- * New Dutch translation - Anno De Vries.
208
- * New Italian translation.
209
- * Better support for when WordPress is installed in a sub directory - props @mattheu
210
-
211
-
212
- #### 1.6.8
213
-
214
- * French translation props Christophe - http://catarina.fr.
215
- * Updated Spanish Translation props DD666 - https://github.com/radinamatic.
216
- * Serbian translation props StefanRistic - https://github.com/StefanRistic.
217
- * Lithuanian translation props Vincent G - http://www.Host1Free.com.
218
- * Romanian translation.
219
- * Fix conflict with WP Remote.
220
- * Fix a minor issue where invalid email address's were still stored.
221
- * The root path that is backed up can now be controlled by defining `HMBKP_ROOT`.
222
-
223
- #### 1.6.7
224
-
225
- * Fix issue with backups being listed in reverse chronological order.
226
- * Fix issue with newest backup being deleted when you hit your max backups limit.
227
- * It's now possible to have backups sent to multiple email address's by entering them as a comma separated list.
228
- * Fix a bug which broke the ability to override the `mysqldump` path with `HMBKP_MYSQLDUMP_PATH`.
229
- * Use `echo` rather than `pwd` when testing `shell_exec` as it's supported cross platform.
230
- * Updated Spanish translation.
231
- * Fix a minor spelling mistake.
232
- * Speed up the manage backups page by caching the FAQ data for 24 hours.
233
-
234
- #### 1.6.6
235
-
236
- * Fix backup path issue with case sensitive filesystems.
237
-
238
- #### 1.6.5
239
-
240
- * Fix an issue with emailing backups that could cause the backup file to not be attached.
241
- * Fix an issue that could cause the backup to be marked as running for ever if emailing the backup `FATAL` error'd.
242
- * Never show the running backup in the list of backups.
243
- * Show an error backup email failed to send.
244
- * Fix possible notice when deleting a backup file which doesn't exist.
245
- * Fix possible notice on older versions of `PHP` which don't define `E_DEPRECATED`.
246
- * Make `HMBKP_SECURE_KEY` override-able.
247
- * BackUpWordPress should now work when `ABSPATH` is `/`.
248
-
249
- #### 1.6.4
250
-
251
- * Don't show warning message as they cause to much panic.
252
- * Move previous methods errors to warnings in fallback methods.
253
- * Wrap `.htaccess` rewrite rules in if `mod_rewrite` check.
254
- * Add link to new restore help article to FAQ.
255
- * Fix issue that could cause "not using latest stable version" message to show when you were in-fact using the latest version.
256
- * Bug fix in `zip command` check that could cause an incorrect `zip` path to be used.
257
- * Detect and pass `MySQL` port to `mysqldump`.
258
-
259
- #### 1.6.3
260
-
261
- * Don't fail archive verification for errors in previous archive methods.
262
- * Improved detection of the `zip` and `mysqldump` commands.
263
- * Fix issues when `ABSPATH` is `/`.
264
- * Remove reliance on `SECURE_AUTH_KEY` as it's often not defined.
265
- * Use `warning()` not `error()` for issues reported by `zip`, `ZipArchive` & `PclZip`.
266
- * Fix download zip on Windows when `ABSPATH` contains a trailing forward slash.
267
- * Send backup email after backup completes so that fatal errors in email code don't stop the backup from completing.
268
- * Add missing / to `PCLZIP_TEMPORARY_DIR` define.
269
- * Catch and display errors during `mysqldump`.
270
-
271
- #### 1.6.2
272
-
273
- * Track `PHP` errors as backup warnings not errors.
274
- * Only show warning message for `PHP` errors in BackUpWordPress files.
275
- * Ability to dismiss the error / warning messages.
276
- * Disable use of `PclZip` for full archive checking for now as it causes memory issues on some large sites.
277
- * Don't delete "number of backups" setting on update.
278
- * Better handling of multibyte characters in archive and database dump filenames.
279
- * Mark backup as running and increase callback timeout to `500` when firing backup via ajax.
280
- * Don't send backup email if backup failed.
281
- * Filter out duplicate exclude rules.
282
-
283
- #### 1.6.1
284
-
285
- * Fix fatal error on PHP =< 5.3
286
-
287
- #### 1.6
288
-
289
- * Fixes issue with backups dir being included in backups on some Windows Servers.
290
- * Consistent handling of symlinks across all archive methods (they are followed).
291
- * Use .htaccess rewrite cond authentication to allow for secure http downloads of backup files.
292
- * Track errors and warnings that happen during backup and expose them through admin.
293
- * Fire manual backups using ajax instead of wp-cron, `HMBKP_DISABLE_MANUAL_BACKUP_CRON` is no longer needed and has been removed.
294
- * Ability to cancel a running backup.
295
- * Zip files are now integrity checked after every backup.
296
- * More robust handling of failed / corrupt zips, backup process now fallsback through the various zip methods until one works.
297
- * Use `mysql_query` instead of the depreciated `mysql_list_tables`.
298
-
299
- #### 1.5.2
300
-
301
- * Better handling of unreadable files in ZipArchive and the backup size calculation.
302
- * Support for wp-cli, usage: `wp backup [--files_only] [--database_only] [--path<dir>] [--root<dir>] [--zip_command_path=<path>] [--mysqldump_command_path=<path>]`
303
-
304
- #### 1.5.1
305
-
306
- * Better detection of `zip` command.
307
- * Don't delete user settings on update / deactivate.
308
- * Use `ZipArchive` if `zip` is not available, still falls back to `PclZip` if neither `zip` nor `ZipArchive` are installed.
309
- * Better exclude rule parsing, fixes lots of edge cases, excludes now pass all 52 unit tests.
310
- * Improved the speed of the backup size calculation.
311
-
312
- #### 1.5
313
-
314
- * Re-written core backup engine should be more robust especially in edge case scenarios.
315
- * 48 unit tests for the core backup engine, yay for unit tests.
316
- * Remove some extraneous status information from the admin interface.
317
- * Rename Advanced Options to Settings
318
- * New `Constant` `HMBKP_CAPABILITY` to allow the default `add_menu_page` capability to be changed.
319
- * Suppress possible filemtime warnings in some edge cases.
320
- * 3.3 compatability.
321
- * Set proper charset of MySQL backup, props valericus.
322
- * Fix some inconsistencies between the estimated backup size and actual backup size when excluding files.
323
-
324
- #### 1.4.1
325
-
326
- * 1.4 was incorrectly marked as beta.
327
-
328
- #### 1.4
329
-
330
- * Most options can now be set on the backups page, all options can still be set by defining them as `Constants`.
331
- * Russian translation, props valericus.
332
- * All dates are now translatable.
333
- * Fixed some strings which weren't translatable.
334
- * New Constant `HMBKP_DISABLE_MANUAL_BACKUP_CRON` which enable you to disable the use of `wp_cron` for manual backups.
335
- * Manual backups now work if `DISABLE_WP_CRON` is defined as `true`.
336
-
337
- #### 1.3.2
338
-
339
- * Spanish translation
340
- * Bump PHP version check to 5.2.4
341
- * Fallback to PHP mysqldump if shell_exec fails for any reason.
342
- * Silently ignore unreadable files / folders
343
- * Make sure binary data is properly exported when doing a mysqldump
344
- * Use 303 instead of 302 when redirecting in the admin.
345
- * Don't `set_time_limit` inside a loop
346
- * Use WordPress 3.2 style buttons
347
- * Don't pass an empty password to mysqldump
348
-
349
- #### 1.3.1
350
-
351
- * Check for PHP version. Deactivate plugin if running on PHP version 4.
352
-
353
- #### 1.3
354
-
355
- * Re-written back up engine, no longer copies everything to a tmp folder before zipping which should improve speed and reliability.
356
- * Support for excluding files and folders, define `HMBKP_EXCLUDE` with a comma separated list of files and folders to exclude, supports wildcards `*`, path fragments and absolute paths.
357
- * Full support for moving the backups directory, if you define a new backups directory then your existing backups will be moved to it.
358
- * Work around issues caused by low MySQL `wait_timeout` setting.
359
- * Add FAQ to readme.txt.
360
- * Pull FAQ into the contextual help tab on the backups page.
361
- * Block activation on old versions of WordPress.
362
- * Stop guessing compressed backup file size, instead just show size of site uncompressed.
363
- * Fix bug in `safe_mode` detection which could cause `Off` to act like `On`.
364
- * Better name for the database dump file.
365
- * Better name for the backup files.
366
- * Improve styling for advanced options.
367
- * Show examples for all advanced options.
368
- * Language improvements.
369
- * Layout tweaks.
370
-
371
- #### 1.2
372
-
373
- * Show live backup status in the back up now button when a back up is running.
374
- * Show free disk space after total used by backups.
375
- * Several langauge changes.
376
- * Work around the 1 cron every 60 seconds limit.
377
- * Store backup status in a 2 hour transient as a last ditch attempt to work around the "stuck on backup running" issue.
378
- * Show a warning and disable backups when PHP is in Safe Mode, may try to work round issues and re-enable in the future.
379
- * Highlight defined `Constants`.
380
- * Show defaults for all `Constants`.
381
- * Show a warning if both `HMBKP_FILES_ONLY` and `HMBKP_DATABASE_ONLY` are defined at the same time.
382
- * Make sure options added in 1.1.4 are cleared on de-activate.
383
- * Support `mysqldump on` Windows if it's available.
384
- * New option to have each backup emailed to you on completion. Props @matheu for the contribution.
385
- * Improved windows server support.
386
-
387
- #### 1.1.4
388
-
389
- * Fix a rare issue where database backups could fail when using the mysqldump PHP fallback if `mysql.max_links` is set to 2 or less.
390
- * Don't suppress `mysql_connect` errors in the mysqldump PHP fallback.
391
- * One time highlight of the most recent completed backup when viewing the manage backups page after a successful backup.
392
- * Fix a spelling error in the `shell_exec` disabled message.
393
- * Store the BackUpWordPress version as a `Constant` rather than a `Variable`.
394
- * Don't `(float)` the BackUpWordPress version number, fixes issues with minor versions numbers being truncated.
395
- * Minor PHPDoc improvements.
396
-
397
- #### 1.1.3
398
-
399
- * Attempt to re-connect if database connection hits a timeout while a backup is running, should fix issues with the "Back Up Now" button continuing to spin even though the backup is completed.
400
- * When using `PCLZIP` as the zip fallback don't store the files with absolute paths. Should fix issues unzipping the file archives using "Compressed (zipped) Folders" on Windows XP.
401
-
402
- #### 1.1.2
403
-
404
- * Fix a bug that stopped `HMBKP_DISABLE_AUTOMATIC_BACKUP` from working.
405
-
406
- #### 1.1.1
407
-
408
- * Fix a possible `max_execution_timeout` fatal error when attempting to calculate the path to `mysqldump`.
409
- * Clear the running backup status and reset the calculated filesize on update.
410
- * Show a link to the manage backups page in the plugin description.
411
- * Other general fixes.
412
-
413
- #### 1.1
414
-
415
- * Remove the logging facility as it provided little benefit and complicated the code, your existing logs will be deleted on update.
416
- * Expose the various `Constants` that can be defined to change advanced settings.
417
- * Added the ability to disable the automatic backups completely `define( 'HMBKP_DISABLE_AUTOMATIC_BACKUP', true );`.
418
- * Added the ability to switch to file only or database only backups `define( 'HMBKP_FILES_ONLY', true );` Or `define( 'HMBKP_DATABASE_ONLY', true );`.
419
- * Added the ability to define how many old backups should be kept `define( 'HMBKP_MAX_BACKUPS', 20 );`
420
- * Added the ability to define the time that the daily backup should run `define( 'HMBKP_DAILY_SCHEDULE_TIME', '16:30' );`
421
- * Tweaks to the backups page layout.
422
- * General bug fixes and improvements.
423
-
424
- #### 1.0.5
425
-
426
- * Don't ajax load estimated backup size if it's already been calculated.
427
- * Fix time in backup complete log message.
428
- * Don't mark backup as running until cron has been called, will fix issues with backup showing as running even if cron never fired.
429
- * Show number of backups saved message.
430
- * Add a link to the backups page to the plugin action links.
431
-
432
- #### 1.0.4
433
-
434
- Don't throw PHP Warnings when `shell_exec` is disabled
435
-
436
- #### 1.0.3
437
-
438
- Minor bug fix release.
439
-
440
- * Suppress `filesize()` warnings when calculating backup size.
441
- * Plugin should now work when symlinked.
442
- * Remove all options on deactivate, you should now be able to deactivate then activate to fix issues with settings etc. becoming corrupt.
443
- * Call setup_defaults for users who update from backupwordpress 0.4.5 so they get new settings.
444
- * Don't ajax ping running backup status quite so often.
445
-
446
- #### 1.0.1 & 1.0.2
447
-
448
- Fix some silly 1.0 bugs
449
-
450
- #### 1.0
451
-
452
- 1.0 represents a total rewrite & rethink of the BackUpWordPress plugin with a focus on making it "Just Work". The management and development of the plugin has been taken over by [Human Made Limited](http://hmn.md) the chaps behind [WP Remote](https://wpremote.com)
453
-
454
- #### Previous
455
-
456
- Version 0.4.5 and previous were developed by [wpdprx](http://profiles.wordpress.org/users/wpdprx/)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
plugin.php CHANGED
@@ -3,7 +3,7 @@
3
  /*
4
  Plugin Name: WP Remote
5
  Description: Manage your WordPress site with <a href="https://wpremote.com/">WP Remote</a>. <strong>Deactivate to clear your API Key.</strong>
6
- Version: 2.4.13
7
  Author: Human Made Limited
8
  Author URI: http://hmn.md/
9
  */
@@ -48,41 +48,8 @@ require_once( WPRP_PLUGIN_PATH . '/wprp.compatability.php' );
48
  // Backups require 3.1
49
  if ( version_compare( get_bloginfo( 'version' ), '3.1', '>=' ) ) {
50
 
51
- // deactivate backupwordpress
52
- if ( defined( 'HMBKP_PLUGIN_PATH' ) ) {
53
-
54
- $plugin_file = dirname( plugin_dir_path( HMBKP_PLUGIN_PATH ) ) . 'plugin.php';
55
-
56
- require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
57
- deactivate_plugins( array( 'backupwordpress/plugin.php' ), true );
58
-
59
- function wprp_backupwordpress_deactivated_notice() {
60
-
61
- echo '<div class="updated fade"><p><strong>The BackUpWordPress Plugin has been de-activated</strong> The WP Remote Plugin includes BackUpWordPress.</p></div>';
62
-
63
- }
64
- add_action( 'admin_notices', 'wprp_backupwordpress_deactivated_notice' );
65
-
66
- } else {
67
-
68
- define( 'HMBKP_PLUGIN_PATH', trailingslashit( WPRP_PLUGIN_PATH ) . 'backupwordpress' );
69
- define( 'HMBKP_PLUGIN_URL', trailingslashit( plugins_url( WPRP_PLUGIN_SLUG ) ) . 'backupwordpress' );
70
-
71
- require( WPRP_PLUGIN_PATH . '/backupwordpress/plugin.php' );
72
-
73
- // Set the correct path for the BackUpWordPress language files.
74
- load_plugin_textdomain( 'hmbkp', false, '/wpremote/' . HMBKP_PLUGIN_SLUG . '/languages/' );
75
-
76
- require_once( WPRP_PLUGIN_PATH . '/wprp.backups.php' );
77
-
78
- }
79
-
80
- // unhook default schedules from being created
81
- remove_action( 'admin_init', 'hmbkp_setup_default_schedules' );
82
- remove_filter( 'all_plugins', 'hmbkp_plugin_row', 10 );
83
- remove_filter( 'plugin_action_links', 'hmbkp_plugin_action_link', 10, 2 );
84
- remove_action( 'admin_head', 'hmbkp_admin_notices' );
85
-
86
 
87
  }
88
 
@@ -211,8 +178,19 @@ function wprp_update() {
211
 
212
  $old_wpremote_dir = trailingslashit( $uploads_dir['basedir'] ) . '_wpremote_backups';
213
 
214
- if ( file_exists( $old_wpremote_dir ) && function_exists( 'hmbkp_rmdirtree' ) )
215
- hmbkp_rmdirtree( $old_wpremote_dir );
 
 
 
 
 
 
 
 
 
 
 
216
 
217
  // Update the version stored in the db
218
  if ( get_option( 'wprp_plugin_version' ) !== WPRP_VERSION )
@@ -290,13 +268,4 @@ function _wpr_set_filesystem_credentials( $credentials ) {
290
 
291
  return $_credentials;
292
  }
293
- add_filter( 'request_filesystem_credentials', '_wpr_set_filesystem_credentials' );
294
-
295
- // we need the calculate filesize to work on no priv too
296
- add_action( 'wp_ajax_nopriv_wprp_calculate_backup_size', 'wprp_ajax_calculate_backup_size' );
297
-
298
- function wprp_ajax_calculate_backup_size() {
299
- require_once( WPRP_PLUGIN_PATH . '/wprp.backups.php' );
300
- WPRP_Backups::getInstance()->calculateEstimatedSize();
301
- exit;
302
- }
3
  /*
4
  Plugin Name: WP Remote
5
  Description: Manage your WordPress site with <a href="https://wpremote.com/">WP Remote</a>. <strong>Deactivate to clear your API Key.</strong>
6
+ Version: 2.5
7
  Author: Human Made Limited
8
  Author URI: http://hmn.md/
9
  */
48
  // Backups require 3.1
49
  if ( version_compare( get_bloginfo( 'version' ), '3.1', '>=' ) ) {
50
 
51
+ require_once( WPRP_PLUGIN_PATH . '/wprp.hm.backup.php' );
52
+ require_once( WPRP_PLUGIN_PATH . '/wprp.backups.php' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
 
54
  }
55
 
178
 
179
  $old_wpremote_dir = trailingslashit( $uploads_dir['basedir'] ) . '_wpremote_backups';
180
 
181
+ if ( file_exists( $old_wpremote_dir ) )
182
+ WPRP_Backups::rmdir_recursive( $old_wpremote_dir );
183
+
184
+ // If BackUpWordPress isn't installed then lets just delete the whole backups directory
185
+ if ( ! defined( 'HMBKP_PLUGIN_PATH' ) && $path = get_option( 'hmbkp_path' ) ) {
186
+
187
+ WPRP_Backups::rmdir_recursive( $path );
188
+
189
+ delete_option( 'hmbkp_path' );
190
+ delete_option( 'hmbkp_default_path' );
191
+ delete_option( 'hmbkp_plugin_version' );
192
+
193
+ }
194
 
195
  // Update the version stored in the db
196
  if ( get_option( 'wprp_plugin_version' ) !== WPRP_VERSION )
268
 
269
  return $_credentials;
270
  }
271
+ add_filter( 'request_filesystem_credentials', '_wpr_set_filesystem_credentials' );
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: humanmade, joehoyle, mattheu, tcrsavage, willmot
3
  Tags: wpremote, remote administration, multiple wordpress
4
  Requires at least: 2.9
5
  Tested up to: 3.5
6
- Stable tag: 2.4.13
7
 
8
  WP Remote is a free web app that enables you to easily manage all of your WordPress powered sites from one place.
9
 
@@ -31,7 +31,13 @@ You can email us at support@wpremote.com for support.
31
 
32
  == Changelog ==
33
 
34
- #### 2.4.12
 
 
 
 
 
 
35
 
36
  * Upgrade bundled BackUpWordPress to 2.1.3.
37
  * Fix an issue with Download Site on Apache servers.
3
  Tags: wpremote, remote administration, multiple wordpress
4
  Requires at least: 2.9
5
  Tested up to: 3.5
6
+ Stable tag: 2.5
7
 
8
  WP Remote is a free web app that enables you to easily manage all of your WordPress powered sites from one place.
9
 
31
 
32
  == Changelog ==
33
 
34
+ #### 2.5
35
+
36
+ * Remove BackUpWordPress, backups are now handled by the `HM Backup` class.
37
+ * BackUpWordPress can now be used alongside WP Remote without issues.
38
+ * Exclude `.git` and `.svn` folders from backups automatically.
39
+
40
+ #### 2.4.12 & 2.4.13
41
 
42
  * Upgrade bundled BackUpWordPress to 2.1.3.
43
  * Fix an issue with Download Site on Apache servers.
wprp.admin.php CHANGED
@@ -78,28 +78,4 @@ function wprp_deactivate() {
78
  }
79
  // Plugin activation and deactivation
80
  add_action( 'activate_' . WPRP_PLUGIN_SLUG . '/plugin.php', 'wprp_deactivate' );
81
- add_action( 'deactivate_' . WPRP_PLUGIN_SLUG . '/plugin.php', 'wprp_deactivate' );
82
-
83
- /**
84
- * Remove the BackUpWordPress menu from the Tools menu
85
- *
86
- */
87
- function wprp_remove_backupwordpress_from_admin_menu() {
88
-
89
- global $submenu;
90
-
91
- // Only remove BackUpWordPress if there aren't any schedules
92
- $additional_schedules = false;
93
-
94
- $schedules = new HMBKP_Schedules;
95
-
96
- $schedules = $schedules->get_schedules();
97
-
98
- foreach ( $schedules as $schedule )
99
- if ( strpos( $schedule->get_id(), 'wpremote' ) === false )
100
- $additional_schedules = true;
101
-
102
- if ( ! $additional_schedules && isset( $submenu['tools.php'][16] ) && $submenu['tools.php'][16][2] === 'backupwordpress' )
103
- unset( $submenu['tools.php'][16] );
104
- }
105
- add_action( 'admin_menu', 'wprp_remove_backupwordpress_from_admin_menu', 11 );
78
  }
79
  // Plugin activation and deactivation
80
  add_action( 'activate_' . WPRP_PLUGIN_SLUG . '/plugin.php', 'wprp_deactivate' );
81
+ add_action( 'deactivate_' . WPRP_PLUGIN_SLUG . '/plugin.php', 'wprp_deactivate' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
wprp.api.php CHANGED
@@ -2,20 +2,26 @@
2
 
3
  // Check the API Key
4
  if ( ! get_option( 'wpr_api_key' ) ) {
 
5
  echo json_encode( 'blank-api-key' );
6
  exit;
 
7
  } elseif ( ! isset( $_GET['wpr_api_key'] ) || urldecode( $_GET['wpr_api_key'] ) !== get_option( 'wpr_api_key' ) || ! isset( $_GET['actions'] ) ) {
 
8
  echo json_encode( 'bad-api-key' );
9
  exit;
 
10
  }
11
 
12
- $actions = explode( ',', $_GET['actions'] );
13
  $actions = array_flip( $actions );
14
 
15
  // Disable error_reporting so they don't break the json request
16
- //error_reporting( 0 );
 
17
 
18
  // Log in as admin
 
19
  wp_set_current_user( 1 );
20
 
21
  foreach( $actions as $action => $value ) {
@@ -41,13 +47,13 @@ foreach( $actions as $action => $value ) {
41
 
42
  $actions[$action] = array();
43
 
44
- if ( extension_loaded('ftp') || extension_loaded('sockets') || function_exists('fsockopen') )
45
  $actions[$action][] = 'ftp';
46
 
47
- if ( extension_loaded('ftp') )
48
  $actions[$action][] = 'ftps';
49
 
50
- if ( extension_loaded('ssh2') && function_exists('stream_get_contents') )
51
  $actions[$action][] = 'ssh';
52
 
53
  break;
@@ -74,13 +80,13 @@ foreach( $actions as $action => $value ) {
74
 
75
  case 'upgrade_plugin' :
76
 
77
- $actions[$action] = _wprp_upgrade_plugin( (string) $_GET['plugin'] );
78
 
79
  break;
80
 
81
  case 'activate_plugin' :
82
 
83
- $actions[$action] = _wprp_activate_plugin( (string) $_GET['plugin'] );
84
 
85
  break;
86
 
@@ -92,7 +98,7 @@ foreach( $actions as $action => $value ) {
92
 
93
  case 'upgrade_theme' :
94
 
95
- $actions[$action] = _wprp_upgrade_theme( (string) $_GET['theme'] );
96
 
97
  break;
98
 
@@ -100,21 +106,17 @@ foreach( $actions as $action => $value ) {
100
  case 'delete_backup' :
101
  case 'supports_backups' :
102
  case 'get_backup' :
103
- case 'add_backup_schedule' :
104
- case 'remove_backup_schedule' :
105
- case 'get_backup_schedules' :
106
  $actions[$action] = _wprp_backups_api_call( $action );
107
 
108
  break;
109
 
110
- // get site info
111
  case 'get_site_info' :
112
 
113
  $actions[$action] = array(
114
- 'site_url' => get_site_url(),
115
- 'home_url' => get_home_url(),
116
- 'admin_url' => get_admin_url(),
117
- 'backups' => _wprp_get_backups_info()
118
  );
119
 
120
  break;
@@ -130,4 +132,5 @@ foreach( $actions as $action => $value ) {
130
  }
131
 
132
  echo json_encode( $actions );
 
133
  exit;
2
 
3
  // Check the API Key
4
  if ( ! get_option( 'wpr_api_key' ) ) {
5
+
6
  echo json_encode( 'blank-api-key' );
7
  exit;
8
+
9
  } elseif ( ! isset( $_GET['wpr_api_key'] ) || urldecode( $_GET['wpr_api_key'] ) !== get_option( 'wpr_api_key' ) || ! isset( $_GET['actions'] ) ) {
10
+
11
  echo json_encode( 'bad-api-key' );
12
  exit;
13
+
14
  }
15
 
16
+ $actions = explode( ',', sanitize_text_field( $_GET['actions'] ) );
17
  $actions = array_flip( $actions );
18
 
19
  // Disable error_reporting so they don't break the json request
20
+ if ( ! defined( 'WP_DEBUG' ) || ! WP_DEBUG )
21
+ error_reporting( 0 );
22
 
23
  // Log in as admin
24
+ // TODO what about if admin use doesn't exists?
25
  wp_set_current_user( 1 );
26
 
27
  foreach( $actions as $action => $value ) {
47
 
48
  $actions[$action] = array();
49
 
50
+ if ( extension_loaded( 'ftp' ) || extension_loaded( 'sockets' ) || function_exists( 'fsockopen' ) )
51
  $actions[$action][] = 'ftp';
52
 
53
+ if ( extension_loaded( 'ftp' ) )
54
  $actions[$action][] = 'ftps';
55
 
56
+ if ( extension_loaded( 'ssh2' ) && function_exists( 'stream_get_contents' ) )
57
  $actions[$action][] = 'ssh';
58
 
59
  break;
80
 
81
  case 'upgrade_plugin' :
82
 
83
+ $actions[$action] = _wprp_upgrade_plugin( (string) sanitize_text_field( $_GET['plugin'] ) );
84
 
85
  break;
86
 
87
  case 'activate_plugin' :
88
 
89
+ $actions[$action] = _wprp_activate_plugin( (string) sanitize_text_field( $_GET['plugin'] ) );
90
 
91
  break;
92
 
98
 
99
  case 'upgrade_theme' :
100
 
101
+ $actions[$action] = _wprp_upgrade_theme( (string) sanitize_text_field( $_GET['theme'] ) );
102
 
103
  break;
104
 
106
  case 'delete_backup' :
107
  case 'supports_backups' :
108
  case 'get_backup' :
 
 
 
109
  $actions[$action] = _wprp_backups_api_call( $action );
110
 
111
  break;
112
 
 
113
  case 'get_site_info' :
114
 
115
  $actions[$action] = array(
116
+ 'site_url' => get_site_url(),
117
+ 'home_url' => get_home_url(),
118
+ 'admin_url' => get_admin_url(),
119
+ 'backups' => _wprp_get_backups_info()
120
  );
121
 
122
  break;
132
  }
133
 
134
  echo json_encode( $actions );
135
+
136
  exit;
wprp.backups.php CHANGED
@@ -1,36 +1,104 @@
1
  <?php
2
 
3
- class WPRP_Backups {
 
 
 
 
 
4
 
 
 
 
 
 
 
5
  private static $instance;
6
 
7
- public static function getInstance() {
 
 
 
 
 
 
8
 
9
  if ( empty( self::$instance ) )
10
  self::$instance = new WPRP_Backups();
11
 
12
  return self::$instance;
 
13
  }
14
 
15
  /**
16
- * Do a backup of the site
 
17
  *
18
- * @return true|WP_Error
 
 
19
  */
20
- public function doBackup() {
21
- @ignore_user_abort( true );
 
 
 
 
 
22
 
23
- $schedule = $this->getManualBackupSchedule();
24
 
25
- $schedule->run();
26
 
27
- $filepath = $schedule->get_archive_filepath();
 
 
 
 
28
 
29
- if ( ! file_exists( $filepath ) ) {
30
- return new WP_Error( 'backup-failed', implode(', ', $schedule->get_errors() ) );
31
  }
32
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  return true;
 
34
  }
35
 
36
  /**
@@ -38,29 +106,28 @@ class WPRP_Backups {
38
  *
39
  * @return WP_Error|string
40
  */
41
- public function getBackup() {
42
 
43
  global $is_apache;
44
 
45
- $schedule = $this->getManualBackupSchedule();
46
-
47
- if ( $status = $schedule->get_status() )
48
  return new WP_Error( 'error-status', $status );
49
 
50
- $backup = reset( $schedule->get_backups() );
 
51
 
52
  if ( file_exists( $backup ) ) {
53
 
54
  // Append the secret key on apache servers
55
- if ( $is_apache && defined( 'HMBKP_SECURE_KEY' ) && HMBKP_SECURE_KEY ) {
56
 
57
- $backup = add_query_arg( 'key', HMBKP_SECURE_KEY, $backup );
58
 
59
  // Force the .htaccess to be rebuilt
60
- if ( file_exists( hmbkp_path() . '/.htaccess' ) )
61
- unlink( hmbkp_path() . '/.htaccess' );
62
 
63
- hmbkp_path();
64
 
65
  }
66
 
@@ -69,168 +136,354 @@ class WPRP_Backups {
69
  }
70
 
71
  return new WP_Error( 'backup-failed', 'No backup was found' );
 
72
  }
73
 
74
- public function cleanBackup( $schedule ) {
 
 
 
 
 
 
75
 
76
- $schedules = new HMBKP_Schedules();
77
- $schedule = $schedules->get_schedule( $schedule );
78
 
79
- $backup = reset( $schedule->get_backups() );
 
 
80
 
81
- if ( file_exists( $backup ) )
82
- unlink( $backup );
 
 
 
 
 
 
 
 
83
  }
84
 
85
- public function getEstimatedSize() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
 
87
- if ( $size = get_transient( 'hmbkp_schedule_manual_filesize' ) )
88
- return size_format( $size, null, '%01u %s' );
89
 
90
  // we dont know the size yet, fire off a remote request to get it for later
91
  // it can take some time so we have a small timeout then return "Calculating"
92
- wp_remote_get(
93
- $url = add_query_arg( array( 'action' => 'wprp_calculate_backup_size', 'backup_excludes' => $this->getManualBackupSchedule()->get_excludes() ), admin_url( 'admin-ajax.php' ) ),
94
- array( 'timeout' => 0.1, 'sslverify' => false )
95
- );
96
 
97
  return 'Calculating';
98
 
99
  }
100
 
101
- public function calculateEstimatedSize() {
102
- $this->getManualBackupSchedule()->get_filesize();
103
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105
  /**
106
- * Enabled automatic backups for this install
107
  *
108
- * @param array $options { 'id' => string, type' => 'complete|files|database', 'reoccurance' => 'daily|...', 'excludes' => array() }
 
 
 
 
 
 
109
  */
110
- public function addSchedule( $options = array() ) {
111
 
112
- $schedules = new HMBKP_Schedules();
113
 
114
- if ( $schedules->get_schedule( $options['id'] ) )
115
- return;
 
 
 
 
 
 
 
116
 
117
- $schedule = new HMBKP_Scheduled_Backup( $options['id'] );
118
- $schedule->set_type( $options['type'] );
119
- $schedule->set_excludes( $options['excludes'], true );
120
- $schedule->set_max_backups( 1 );
121
 
122
- if ( $options['start_date'] )
123
- $schedule->set_schedule_start_time( $options['start_date'] );
124
 
125
- $schedule->set_reoccurrence( $options['reoccurance'] );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
126
 
127
- $schedule->save();
128
  }
129
 
130
  /**
131
- * Remove a schedule
132
  *
133
- * @param int $id
 
134
  */
135
- public function removeSchedule( $id ) {
136
- $schedules = new HMBKP_Schedules();
137
 
138
- if ( ! $schedules->get_schedule( $id ) )
139
- return;
 
 
 
 
 
 
140
 
141
- $schedules->get_schedule( $id )->cancel();
142
  }
143
 
144
  /**
145
- * Get an array of all the backup schedules
146
  *
147
- * @return array : array( 'id' => int, 'next_run_date' => int )
 
148
  */
149
- public function getSchedules() {
150
 
151
- $schedules = new HMBKP_Schedules();
152
- $array = array();
153
 
154
- foreach ( $schedules->get_schedules() as $schedule )
155
- $array[] = array( 'id' => $schedule->get_id(), 'next_run_date' => $schedule->get_next_occurrence() );
156
 
157
- return $array;
 
 
 
 
 
158
  }
159
 
160
  /**
161
- * Get the manual backup schedule from BackupWordPress
162
- * @return HMBKP_Scheduled_Backup
 
 
163
  */
164
- private function getManualBackupSchedule() {
165
 
166
- $schedule = new HMBKP_Scheduled_Backup( 'manual' );
167
- $schedule->set_type( 'complete' );
168
- $schedule->set_max_backups( 1 );
169
 
170
- // Excludes
171
- if ( ! empty( $_REQUEST['backup_excludes'] ) ) {
172
 
173
- $excludes = array_map( 'urldecode', (array) $_REQUEST['backup_excludes'] );
174
- $schedule->set_excludes( $excludes, true );
175
- }
176
 
177
- return $schedule;
178
  }
179
- }
180
 
181
- class WPRP_Backup_Service extends HMBKP_Service {
 
 
 
 
 
 
 
 
182
 
183
  /**
184
- * Fire the email notification on the hmbkp_backup_complete
185
  *
186
- * @see HM_Backup::do_action
187
- * @param string $action The action received from the backup
188
  * @return void
189
  */
190
- public function action( $action ) {
191
 
192
- global $is_apache;
 
193
 
194
- if ( $action == 'hmbkp_backup_complete' && strpos( $this->schedule->get_id(), 'wpremote' ) !== false ) {
195
 
196
- $file = $this->schedule->get_archive_filepath();
197
- $file_url = str_replace( WP_CONTENT_DIR, WP_CONTENT_URL, $file );
198
- $api_url = WPR_API_URL . 'backups/upload';
199
 
200
- if ( $is_apache && defined( 'HMBKP_SECURE_KEY' ) && HMBKP_SECURE_KEY ) {
201
 
202
- $file_url = add_query_arg( 'key', HMBKP_SECURE_KEY, $file_url );
 
 
 
 
 
 
 
 
203
 
204
- // Force the .htaccess to be rebuilt
205
- if ( file_exists( hmbkp_path() . '/.htaccess' ) )
206
- unlink( hmbkp_path() . '/.htaccess' );
207
 
208
- hmbkp_path();
 
209
 
210
- }
 
211
 
212
- $args = array(
213
- 'api_key' => get_option( 'wpr_api_key' ),
214
- 'backup_url'=> $file_url,
215
- 'domain' => get_bloginfo( 'url' )
216
- );
217
 
218
- wp_remote_post( $api_url, array( 'timeout' => 60, 'body' => $args ) );
219
- }
220
- }
221
 
222
- /**
223
- * Abstract methods must be implemented
224
- */
225
- public function form() {}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
226
 
227
- public function field() {}
 
228
 
229
- public function update( &$new_data, $old_data ) {}
230
 
231
- public function display() {}
232
  }
233
- HMBKP_Services::register( __FILE__, 'WPRP_Backup_Service' );
234
 
235
  /**
236
  * Handle the backups API calls
@@ -240,48 +493,50 @@ HMBKP_Services::register( __FILE__, 'WPRP_Backup_Service' );
240
  */
241
  function _wprp_backups_api_call( $action ) {
242
 
243
- switch( $action ) :
244
 
245
- // TODO in the future we should do some check here to make sure they do support backups
246
  case 'supports_backups' :
247
  return true;
248
 
249
  case 'do_backup' :
250
-
251
- return WPRP_Backups::getInstance()->doBackup();
252
 
253
  case 'get_backup' :
254
-
255
- return WPRP_Backups::getInstance()->getBackup();
256
-
257
  case 'delete_backup' :
 
258
 
259
- return WPRP_Backups::getInstance()->cleanBackup( $_GET['schedule_id']);
260
-
261
- case 'add_backup_schedule' :
262
- return WPRP_Backups::getInstance()->addSchedule( $_GET );
263
-
264
- case 'remove_backup_schedule' :
265
- return WPRP_Backups::getInstance()->removeSchedule( $_GET['id'] );
266
-
267
- case 'get_backup_schedules' :
268
- return WPRP_Backups::getInstance()->getSchedules();
269
- break;
270
-
271
- endswitch;
272
 
273
  }
274
 
275
-
 
 
 
 
276
  function _wprp_get_backups_info() {
277
 
278
- $hm_backup = new HM_Backup();
279
 
280
- $info = array(
281
  'mysqldump_path' => $hm_backup->get_mysqldump_command_path(),
282
  'zip_path' => $hm_backup->get_zip_command_path(),
283
- 'estimated_size' => WPRP_Backups::getInstance()->getEstimatedSize()
284
  );
285
 
286
- return $info;
287
- }
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
 
3
+ /**
4
+ * WPRP_Backups
5
+ *
6
+ * Singleton class for creating backups, all scheduling is handled by WP Remote
7
+ */
8
+ class WPRP_Backups extends WPRP_HM_Backup {
9
 
10
+ /**
11
+ * Contains the current instance
12
+ *
13
+ * @static
14
+ * @access private
15
+ */
16
  private static $instance;
17
 
18
+ /**
19
+ * Return the current instance of WPRP_Backups
20
+ *
21
+ * @static
22
+ * @access public
23
+ */
24
+ public static function get_instance() {
25
 
26
  if ( empty( self::$instance ) )
27
  self::$instance = new WPRP_Backups();
28
 
29
  return self::$instance;
30
+
31
  }
32
 
33
  /**
34
+ * Recursively delete a directory including
35
+ * all the files and sub-directories.
36
  *
37
+ * @param string $dir
38
+ * @static
39
+ * @access public
40
  */
41
+ public static function rmdir_recursive( $dir ) {
42
+
43
+ if ( is_file( $dir ) )
44
+ @unlink( $dir );
45
+
46
+ if ( ! is_dir( $dir ) )
47
+ return false;
48
 
49
+ $files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $dir ), RecursiveIteratorIterator::CHILD_FIRST, RecursiveIteratorIterator::CATCH_GET_CHILD );
50
 
51
+ foreach ( $files as $file ) {
52
 
53
+ if ( $file->isDir() )
54
+ @rmdir( $file->getPathname() );
55
+
56
+ else
57
+ @unlink( $file->getPathname() );
58
 
 
 
59
  }
60
 
61
+ @rmdir( $dir );
62
+
63
+ }
64
+
65
+ /**
66
+ * Setup HM Backup
67
+ *
68
+ * @access publics
69
+ * @see HM_Backup
70
+ */
71
+ public function __construct() {
72
+
73
+ // Set the backup path
74
+ $this->set_path( $this->path() );
75
+
76
+ // Set the excludes
77
+ if ( ! empty( $_GET['backup_excludes'] ) )
78
+ $this->set_excludes( array_map( 'urldecode', $_GET['backup_excludes'] ), true );
79
+
80
+ $this->filesize_transient = 'wprp_' . '_' . $this->get_type() . '_' . md5( $this->exclude_string() ) . '_filesize';
81
+
82
+ }
83
+
84
+ /**
85
+ * Perform a backup of the site
86
+ *
87
+ * @return true|WP_Error
88
+ */
89
+ public function do_backup() {
90
+
91
+ @ignore_user_abort( true );
92
+
93
+ $this->set_status( 'Starting backup...' );
94
+
95
+ $this->backup();
96
+
97
+ if ( ! file_exists( $this->get_archive_filepath() ) )
98
+ return new WP_Error( 'backup-failed', implode( ', ', $this->get_errors() ) );
99
+
100
  return true;
101
+
102
  }
103
 
104
  /**
106
  *
107
  * @return WP_Error|string
108
  */
109
+ public function get_backup() {
110
 
111
  global $is_apache;
112
 
113
+ if ( $status = $this->get_status() )
 
 
114
  return new WP_Error( 'error-status', $status );
115
 
116
+ $backup = glob( $this->get_path() . '/*.zip' );
117
+ $backup = reset( $backup );
118
 
119
  if ( file_exists( $backup ) ) {
120
 
121
  // Append the secret key on apache servers
122
+ if ( $is_apache && $this->key() ) {
123
 
124
+ $backup = add_query_arg( 'key', $this->key(), $backup );
125
 
126
  // Force the .htaccess to be rebuilt
127
+ if ( file_exists( $this->get_path() . '/.htaccess' ) )
128
+ unlink( $this->get_path() . '/.htaccess' );
129
 
130
+ $this->path();
131
 
132
  }
133
 
136
  }
137
 
138
  return new WP_Error( 'backup-failed', 'No backup was found' );
139
+
140
  }
141
 
142
+ /**
143
+ * Remove the backups directoy and everything it contains
144
+ *
145
+ * @access public
146
+ * @return void
147
+ */
148
+ public function cleanup() {
149
 
150
+ $zips = glob( $this->get_path() . '/*.zip' );
 
151
 
152
+ // Remove any .zip files
153
+ foreach ( $zips as $zip )
154
+ unlink( $zip );
155
 
156
+ if ( file_exists( trailingslashit( $this->get_path() ) . 'index.html' ) )
157
+ unlink( trailingslashit( $this->get_path() ) . 'index.html' );
158
+
159
+ if ( file_exists( trailingslashit( $this->get_path() ) . '.htaccess' ) )
160
+ unlink( trailingslashit( $this->get_path() ) . '.htaccess' );
161
+
162
+ rmdir( $this->get_path() );
163
+
164
+ delete_option( 'wprp_backup_path' );
165
+
166
  }
167
 
168
+ /**
169
+ * Get the estimated size of the sites files and database
170
+ *
171
+ * If the size hasn't been calculated yet then it fires an API request
172
+ * to calculate the size and returns string 'Calculating'
173
+ *
174
+ * @access public
175
+ * @return string $size|Calculating
176
+ */
177
+ public function get_estimate_size() {
178
+
179
+ // Check the cache
180
+ if ( $size = get_transient( $this->filesize_transient ) ) {
181
+
182
+ // If we have a number, format it and return
183
+ if ( is_numeric( $size ) )
184
+ return size_format( $size, null, '%01u %s' );
185
+
186
+ // Otherwise the filesize must still be calculating
187
+ else
188
+ return 'Calculating';
189
 
190
+ }
 
191
 
192
  // we dont know the size yet, fire off a remote request to get it for later
193
  // it can take some time so we have a small timeout then return "Calculating"
194
+ wp_remote_get( add_query_arg( array( 'action' => 'wprp_calculate_backup_size', 'backup_excludes' => $this->get_excludes() ), admin_url( 'admin-ajax.php' ) ), array( 'timeout' => 0.1, 'sslverify' => false ) );
 
 
 
195
 
196
  return 'Calculating';
197
 
198
  }
199
 
200
+ /**
201
+ * Hook into the actions fired in HM Backup and set the status
202
+ *
203
+ * @return null
204
+ */
205
+ protected function do_action( $action ) {
206
+
207
+ switch ( $action ) :
208
+
209
+ case 'hmbkp_mysqldump_started' :
210
+
211
+ $this->set_status( sprintf( 'Dumping Database %s', '(<code>' . $this->get_mysqldump_method() . '</code>)' ) );
212
+
213
+ break;
214
+
215
+ case 'hmbkp_mysqldump_verify_started' :
216
+
217
+ $this->set_status( sprintf( 'Verifying Database Dump %s', '(<code>' . $this->get_mysqldump_method() . '</code>)' ) );
218
+
219
+ break;
220
+
221
+ case 'hmbkp_archive_started' :
222
+
223
+ $this->set_status( sprintf( 'Creating zip archive %s', '(<code>' . $this->get_archive_method() . '</code>)' ) );
224
+
225
+ break;
226
+
227
+ case 'hmbkp_archive_verify_started' :
228
+
229
+ $this->set_status( sprintf( 'Verifying Zip Archive %s', '(<code>' . $this->get_archive_method() . '</code>)' ) );
230
+
231
+ break;
232
+
233
+ case 'hmbkp_backup_complete' :
234
+
235
+ if ( file_exists( $this->get_schedule_running_path() ) )
236
+ unlink( $this->get_schedule_running_path() );
237
+
238
+ break;
239
+
240
+ case 'hmbkp_error' :
241
+
242
+ if ( $this->get_errors() ) {
243
+
244
+ $file = $this->get_path() . '/.backup_errors';
245
+
246
+ if ( file_exists( $file ) )
247
+ unlink( $file );
248
+
249
+ if ( ! $handle = @fopen( $file, 'w' ) )
250
+ return;
251
+
252
+ fwrite( $handle, json_encode( $this->get_errors() ) );
253
+
254
+ fclose( $handle );
255
+
256
+ }
257
+
258
+ break;
259
+
260
+ case 'hmbkp_warning' :
261
 
262
+ if ( $this->get_warnings() ) {
263
+
264
+ $file = $this->get_path() . '/.backup_warnings';
265
+
266
+ if ( file_exists( $file ) )
267
+ unlink( $file );
268
+
269
+ if ( ! $handle = @fopen( $file, 'w' ) )
270
+ return;
271
+
272
+ fwrite( $handle, json_encode( $this->get_warnings() ) );
273
+
274
+ fclose( $handle );
275
+
276
+ }
277
+
278
+ break;
279
+
280
+ endswitch;
281
+
282
+ }
283
+
284
  /**
285
+ * Get the path to the backups directory
286
  *
287
+ * Will try to create it if it doesn't exist
288
+ * and will fallback to default if a custom dir
289
+ * isn't writable.
290
+ *
291
+ * @access private
292
+ * @see default_path()
293
+ * @return string $path
294
  */
295
+ private function path() {
296
 
297
+ global $is_apache;
298
 
299
+ $path = get_option( 'wprp_backup_path' );
300
+
301
+ // If the dir doesn't exist or isn't writable then use the default path instead instead
302
+ if ( ! $path || ( is_dir( $path ) && ! is_writable( $path ) ) || ( ! is_dir( $path ) && ! is_writable( dirname( $path ) ) ) )
303
+ $path = $this->path_default();
304
+
305
+ // Create the backups directory if it doesn't exist
306
+ if ( ! is_dir( $path ) && is_writable( dirname( $path ) ) )
307
+ mkdir( $path, 0755 );
308
 
309
+ // If the path has changed then cache it
310
+ if ( get_option( 'wprp_backup_path' ) !== $path )
311
+ update_option( 'wprp_backup_path', $path );
 
312
 
313
+ // Protect against directory browsing by including a index.html file
314
+ $index = $path . '/index.html';
315
 
316
+ if ( ! file_exists( $index ) && is_writable( $path ) )
317
+ file_put_contents( $index, '' );
318
+
319
+ $htaccess = $path . '/.htaccess';
320
+
321
+ // Protect the directory with a .htaccess file on Apache servers
322
+ if ( $is_apache && function_exists( 'insert_with_markers' ) && ! file_exists( $htaccess ) && is_writable( $path ) ) {
323
+
324
+ $contents[] = '# ' . sprintf( __( 'This %s file ensures that other people cannot download your backup files.', 'wprp' ), '.htaccess' );
325
+ $contents[] = '';
326
+ $contents[] = '<IfModule mod_rewrite.c>';
327
+ $contents[] = 'RewriteEngine On';
328
+ $contents[] = 'RewriteCond %{QUERY_STRING} !key=' . WPRP_SECURE_KEY;
329
+ $contents[] = 'RewriteRule (.*) - [F]';
330
+ $contents[] = '</IfModule>';
331
+ $contents[] = '';
332
+
333
+ insert_with_markers( $htaccess, 'WP Remote Backup', $contents );
334
+
335
+ }
336
+
337
+ return parent::conform_dir( $path );
338
 
 
339
  }
340
 
341
  /**
342
+ * Return the default backup path
343
  *
344
+ * @access private
345
+ * @return string $path
346
  */
347
+ private function path_default() {
 
348
 
349
+ if ( empty( $path ) )
350
+ $path = parent::conform_dir( trailingslashit( WP_CONTENT_DIR ) . substr( $this->key(), 0, 10 ) . '-backups' );
351
+
352
+ $upload_dir = wp_upload_dir();
353
+
354
+ // If the backups dir can't be created in WP_CONTENT_DIR then fallback to uploads
355
+ if ( ( ( ! is_dir( $path ) && ! is_writable( dirname( $path ) ) ) || ( is_dir( $path ) && ! is_writable( $path ) ) ) && strpos( $path, $upload_dir['basedir'] ) === false )
356
+ $path = parent::conform_dir( trailingslashit( $upload_dir['basedir'] ) . substr( $this->key(), 0, 10 ) . '-backups' );
357
 
358
+ return $path;
359
  }
360
 
361
  /**
362
+ * Calculate and generate the private key
363
  *
364
+ * @access private
365
+ * @return string $key
366
  */
367
+ private function key() {
368
 
369
+ if ( ! empty( $this->key ) )
370
+ return $this->key;
371
 
372
+ $key = array( ABSPATH, time() );
 
373
 
374
+ 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 )
375
+ if ( defined( $constant ) )
376
+ $key[] = $constant;
377
+
378
+ return md5( shuffle( $key ) );
379
+
380
  }
381
 
382
  /**
383
+ * Get the status of the running backup.
384
+ *
385
+ * @access public
386
+ * @return string
387
  */
388
+ private function get_status() {
389
 
390
+ if ( ! file_exists( $this->get_schedule_running_path() ) )
391
+ return '';
 
392
 
393
+ $status = file_get_contents( $this->get_schedule_running_path() );
 
394
 
395
+ return $status;
 
 
396
 
 
397
  }
 
398
 
399
+ /**
400
+ * Get the path to the backup running file that stores the running backup status
401
+ *
402
+ * @access private
403
+ * @return string
404
+ */
405
+ private function get_schedule_running_path() {
406
+ return $this->get_path() . '/.backup-running';
407
+ }
408
 
409
  /**
410
+ * Set the status of the running backup
411
  *
412
+ * @access public
413
+ * @param string $message
414
  * @return void
415
  */
416
+ private function set_status( $message ) {
417
 
418
+ if ( ! $handle = fopen( $this->get_schedule_running_path(), 'w' ) )
419
+ return;
420
 
421
+ fwrite( $handle, $message );
422
 
423
+ fclose( $handle );
 
 
424
 
425
+ }
426
 
427
+ /**
428
+ * Calculate the size of the backup
429
+ *
430
+ * Doesn't account for compression
431
+ *
432
+ * @access public
433
+ * @return string
434
+ */
435
+ public function get_filesize() {
436
 
437
+ $filesize = 0;
 
 
438
 
439
+ // Only try to calculate once per hour
440
+ set_transient( $this->filesize_transient, 'Calculating', time() + 60 * 60 );
441
 
442
+ // Don't include database if file only
443
+ if ( $this->get_type() != 'file' ) {
444
 
445
+ global $wpdb;
 
 
 
 
446
 
447
+ $res = $wpdb->get_results( 'SHOW TABLE STATUS FROM `' . DB_NAME . '`', ARRAY_A );
 
 
448
 
449
+ foreach ( $res as $r )
450
+ $filesize += (float) $r['Data_length'];
451
+
452
+ }
453
+
454
+ // Don't include files if database only
455
+ if ( $this->get_type() != 'database' ) {
456
+
457
+ // Get rid of any cached filesizes
458
+ clearstatcache();
459
+
460
+ $excludes = $this->exclude_string( 'regex' );
461
+
462
+ foreach ( $this->get_files() as $file ) {
463
+
464
+ // Skip dot files, they should only exist on versions of PHP between 5.2.11 -> 5.3
465
+ if ( method_exists( $file, 'isDot' ) && $file->isDot() )
466
+ continue;
467
+
468
+ if ( ! @realpath( $file->getPathname() ) || ! $file->isReadable() )
469
+ continue;
470
+
471
+ // Excludes
472
+ if ( $excludes && preg_match( '(' . $excludes . ')', str_ireplace( trailingslashit( $this->get_root() ), '', parent::conform_dir( $file->getPathname() ) ) ) )
473
+ continue;
474
+
475
+ $filesize += (float) $file->getSize();
476
+
477
+ }
478
+
479
+ }
480
 
481
+ // Cache for a day
482
+ set_transient( $this->filesize_transient, $filesize, time() + 60 * 60 * 24 );
483
 
484
+ }
485
 
 
486
  }
 
487
 
488
  /**
489
  * Handle the backups API calls
493
  */
494
  function _wprp_backups_api_call( $action ) {
495
 
496
+ switch( $action ) {
497
 
 
498
  case 'supports_backups' :
499
  return true;
500
 
501
  case 'do_backup' :
502
+ return WPRP_Backups::get_instance()->do_backup();
 
503
 
504
  case 'get_backup' :
505
+ return WPRP_Backups::get_instance()->get_backup();
506
+
 
507
  case 'delete_backup' :
508
+ return WPRP_Backups::get_instance()->cleanup();
509
 
510
+ }
 
 
 
 
 
 
 
 
 
 
 
 
511
 
512
  }
513
 
514
+ /**
515
+ * Return an array of back meta information
516
+ *
517
+ * @return array
518
+ */
519
  function _wprp_get_backups_info() {
520
 
521
+ $hm_backup = new WPRP_HM_Backup();
522
 
523
+ return array(
524
  'mysqldump_path' => $hm_backup->get_mysqldump_command_path(),
525
  'zip_path' => $hm_backup->get_zip_command_path(),
526
+ 'estimated_size' => WPRP_Backups::get_instance()->get_estimate_size()
527
  );
528
 
529
+ }
530
+
531
+ /**
532
+ * Calculate the filesize of the site
533
+ *
534
+ * The calculated size is stored in a transient
535
+ */
536
+ function wprp_ajax_calculate_backup_size() {
537
+
538
+ WPRP_Backups::get_instance()->get_filesize();
539
+
540
+ exit;
541
+ }
542
+ add_action( 'wp_ajax_nopriv_wprp_calculate_backup_size', 'wprp_ajax_calculate_backup_size' );
backupwordpress/hm-backup/hm-backup.php → wprp.hm.backup.php RENAMED
@@ -5,7 +5,7 @@
5
  *
6
  * @version 2.1
7
  */
8
- class HM_Backup {
9
 
10
  /**
11
  * The path where the backup file should be saved
@@ -648,7 +648,9 @@ class HM_Backup {
648
 
649
  $this->do_action( 'hmbkp_mysqldump_started' );
650
 
651
- $host = reset( explode( ':', DB_HOST ) );
 
 
652
  $port = strpos( DB_HOST, ':' ) ? end( explode( ':', DB_HOST ) ) : '';
653
 
654
  // Path to the mysqldump executable
@@ -683,8 +685,11 @@ class HM_Backup {
683
  // Pipe STDERR to STDOUT
684
  $cmd .= ' 2>&1';
685
 
686
- // Store any returned data in warning
687
- $this->warning( $this->get_mysqldump_method(), shell_exec( $cmd ) );
 
 
 
688
 
689
  $this->verify_mysqldump();
690
 
@@ -777,15 +782,18 @@ class HM_Backup {
777
 
778
  // Zip up $this->root with excludes
779
  if ( $this->get_type() !== 'database' && $this->exclude_string( 'zip' ) )
780
- $this->warning( $this->archive_method, shell_exec( 'cd ' . escapeshellarg( $this->get_root() ) . ' && ' . escapeshellcmd( $this->get_zip_command_path() ) . ' -rq ' . escapeshellarg( $this->get_archive_filepath() ) . ' ./' . ' -x ' . $this->exclude_string( 'zip' ) . ' 2>&1' ) );
781
 
782
  // Zip up $this->root without excludes
783
  elseif ( $this->get_type() !== 'database' )
784
- $this->warning( $this->archive_method, shell_exec( 'cd ' . escapeshellarg( $this->get_root() ) . ' && ' . escapeshellcmd( $this->get_zip_command_path() ) . ' -rq ' . escapeshellarg( $this->get_archive_filepath() ) . ' ./' . ' 2>&1' ) );
785
 
786
  // Add the database dump to the archive
787
  if ( $this->get_type() !== 'file' )
788
- $this->warning( $this->archive_method, shell_exec( 'cd ' . escapeshellarg( $this->get_path() ) . ' && ' . escapeshellcmd( $this->get_zip_command_path() ) . ' -uq ' . escapeshellarg( $this->get_archive_filepath() ) . ' ' . escapeshellarg( $this->get_database_dump_filename() ) . ' 2>&1' ) );
 
 
 
789
 
790
  $this->verify_archive();
791
 
@@ -800,7 +808,7 @@ class HM_Backup {
800
  */
801
  public function zip_archive() {
802
 
803
- $this->errors_to_warnings( $this->archive_method );
804
  $this->archive_method = 'ziparchive';
805
 
806
  $this->do_action( 'hmbkp_archive_started' );
@@ -823,7 +831,7 @@ class HM_Backup {
823
  continue;
824
 
825
  // Skip unreadable files
826
- if ( ! $file->isReadable() )
827
  continue;
828
 
829
  // Excludes
@@ -849,10 +857,10 @@ class HM_Backup {
849
  $zip->addFile( $this->get_database_dump_filepath(), $this->get_database_dump_filename() );
850
 
851
  if ( $zip->status )
852
- $this->warning( $this->archive_method, $zip->status );
853
 
854
  if ( $zip->statusSys )
855
- $this->warning( $this->archive_method, $zip->statusSys );
856
 
857
  $zip->close();
858
 
@@ -871,14 +879,14 @@ class HM_Backup {
871
  */
872
  public function pcl_zip() {
873
 
874
- $this->errors_to_warnings( $this->archive_method );
875
  $this->archive_method = 'pclzip';
876
 
877
  $this->do_action( 'hmbkp_archive_started' );
878
 
879
- global $_hmbkp_exclude_string;
880
 
881
- $_hmbkp_exclude_string = $this->exclude_string( 'regex' );
882
 
883
  $this->load_pclzip();
884
 
@@ -886,15 +894,15 @@ class HM_Backup {
886
 
887
  // Zip up everything
888
  if ( $this->get_type() !== 'database' )
889
- if ( ! $archive->add( $this->get_root(), PCLZIP_OPT_REMOVE_PATH, $this->get_root(), PCLZIP_CB_PRE_ADD, 'hmbkp_pclzip_callback' ) )
890
- $this->warning( $this->archive_method, $archive->errorInfo( true ) );
891
 
892
  // Add the database
893
  if ( $this->get_type() !== 'file' )
894
  if ( ! $archive->add( $this->get_database_dump_filepath(), PCLZIP_OPT_REMOVE_PATH, $this->get_path() ) )
895
- $this->warning( $this->archive_method, $archive->errorInfo( true ) );
896
 
897
- unset( $GLOBALS['_hmbkp_exclude_string'] );
898
 
899
  $this->verify_archive();
900
 
@@ -908,14 +916,19 @@ class HM_Backup {
908
  if ( ! empty( $this->mysqldump_verified ) )
909
  return true;
910
 
911
- // mysqldump can create empty dump files on error so we need to check the filesize
912
- if ( ! file_exists( $this->get_database_dump_filepath() ) || filesize( $this->get_database_dump_filepath() ) === 0 )
913
- $this->error( $this->get_mysqldump_method(), __( 'The mysqldump file was not created', 'hmbkp' ) );
 
 
 
 
914
 
915
- if ( $this->get_errors( $this->get_mysqldump_method() ) )
916
- return false;
 
917
 
918
- return $this->mysqldump_verified = true;
919
 
920
 
921
  }
@@ -934,9 +947,6 @@ class HM_Backup {
934
  if ( ! empty( $this->archive_verified ) )
935
  return true;
936
 
937
- if ( ! file_exists( $this->get_archive_filepath() ) )
938
- $this->error( $this->get_archive_method(), __( 'The backup file was not created', 'hmbkp' ) );
939
-
940
  // Verify using the zip command if possible
941
  if ( $this->get_zip_command_path() && $this->get_archive_method() === 'zip' ) {
942
 
@@ -951,13 +961,11 @@ class HM_Backup {
951
  if ( $this->get_errors( $this->get_archive_method() ) && file_exists( $this->get_archive_filepath() ) )
952
  unlink( $this->get_archive_filepath() );
953
 
954
- if ( $this->get_errors( $this->get_archive_method() ) )
955
- return false;
956
-
957
- if ( $this->get_unreadable_file_count() )
958
- $this->warning( $this->get_archive_method(), __( 'The following files are unreadable and couldn\'t be backed up: ', 'hmbkp' ) . implode( ', ', $this->get_unreadable_files() ) );
959
 
960
- return $this->archive_verified = true;
961
 
962
  }
963
 
@@ -1043,7 +1051,7 @@ class HM_Backup {
1043
  continue;
1044
 
1045
  // Skip unreadable files
1046
- if ( ! $file->isReadable() )
1047
  continue;
1048
 
1049
  // Excludes
@@ -1080,7 +1088,7 @@ class HM_Backup {
1080
  continue;
1081
 
1082
  // Skip unreadable files
1083
- if ( ! $file->isReadable() )
1084
  continue;
1085
 
1086
  // Excludes
@@ -1117,7 +1125,7 @@ class HM_Backup {
1117
  continue;
1118
 
1119
  // Skip unreadable files
1120
- if ( ! $file->isReadable() )
1121
  continue;
1122
 
1123
  // Excludes
@@ -1152,7 +1160,7 @@ class HM_Backup {
1152
  continue;
1153
 
1154
  // Skip unreadable files
1155
- if ( ! $file->isReadable() )
1156
  continue;
1157
 
1158
  // Excludes
@@ -1184,8 +1192,8 @@ class HM_Backup {
1184
  if ( method_exists( $file, 'isDot' ) && $file->isDot() )
1185
  continue;
1186
 
1187
- if ( ! $file->isReadable() )
1188
- $this->unreadable_files[] = $file;
1189
 
1190
  }
1191
 
@@ -1212,8 +1220,8 @@ class HM_Backup {
1212
  if ( method_exists( $file, 'isDot' ) && $file->isDot() )
1213
  continue;
1214
 
1215
- if ( ! $file->isReadable() )
1216
- $this->get_unreadable_file_count++;
1217
 
1218
  }
1219
 
@@ -1610,6 +1618,8 @@ class HM_Backup {
1610
  if ( empty( $context ) || empty( $error ) )
1611
  return;
1612
 
 
 
1613
  $this->errors[$context][$_key = md5( implode( ':' , (array) $error ) )] = $error;
1614
 
1615
  }
@@ -1665,6 +1675,8 @@ class HM_Backup {
1665
  if ( empty( $context ) || empty( $warning ) )
1666
  return;
1667
 
 
 
1668
  $this->warnings[$context][$_key = md5( implode( ':' , (array) $warning ) )] = $warning;
1669
 
1670
  }
@@ -1685,7 +1697,9 @@ class HM_Backup {
1685
 
1686
  $args = func_get_args();
1687
 
1688
- $this->warning( 'php', array_splice( $args, 0, 4 ) );
 
 
1689
 
1690
  return false;
1691
 
@@ -1703,16 +1717,16 @@ class HM_Backup {
1703
  * @param array &$file
1704
  * @return bool
1705
  */
1706
- function hmbkp_pclzip_callback( $event, &$file ) {
1707
 
1708
- global $_hmbkp_exclude_string;
1709
 
1710
  // Don't try to add unreadable files.
1711
  if ( ! is_readable( $file['filename'] ) || ! file_exists( $file['filename'] ) )
1712
  return false;
1713
 
1714
  // Match everything else past the exclude list
1715
- elseif ( $_hmbkp_exclude_string && preg_match( '(' . $_hmbkp_exclude_string . ')', $file['stored_filename'] ) )
1716
  return false;
1717
 
1718
  return true;
5
  *
6
  * @version 2.1
7
  */
8
+ class WPRP_HM_Backup {
9
 
10
  /**
11
  * The path where the backup file should be saved
648
 
649
  $this->do_action( 'hmbkp_mysqldump_started' );
650
 
651
+ $host = explode( ':', DB_HOST );
652
+
653
+ $host = reset( $host );
654
  $port = strpos( DB_HOST, ':' ) ? end( explode( ':', DB_HOST ) ) : '';
655
 
656
  // Path to the mysqldump executable
685
  // Pipe STDERR to STDOUT
686
  $cmd .= ' 2>&1';
687
 
688
+ // Store any returned data in an error
689
+ $stderr = shell_exec( $cmd );
690
+
691
+ if ( $stderr )
692
+ $this->error( $this->get_mysqldump_method(), $stderr );
693
 
694
  $this->verify_mysqldump();
695
 
782
 
783
  // Zip up $this->root with excludes
784
  if ( $this->get_type() !== 'database' && $this->exclude_string( 'zip' ) )
785
+ $stderr = shell_exec( 'cd ' . escapeshellarg( $this->get_root() ) . ' && ' . escapeshellcmd( $this->get_zip_command_path() ) . ' -rq ' . escapeshellarg( $this->get_archive_filepath() ) . ' ./' . ' -x ' . $this->exclude_string( 'zip' ) . ' 2>&1' );
786
 
787
  // Zip up $this->root without excludes
788
  elseif ( $this->get_type() !== 'database' )
789
+ $stderr = shell_exec( 'cd ' . escapeshellarg( $this->get_root() ) . ' && ' . escapeshellcmd( $this->get_zip_command_path() ) . ' -rq ' . escapeshellarg( $this->get_archive_filepath() ) . ' ./' . ' 2>&1' );
790
 
791
  // Add the database dump to the archive
792
  if ( $this->get_type() !== 'file' )
793
+ $stderr = shell_exec( 'cd ' . escapeshellarg( $this->get_path() ) . ' && ' . escapeshellcmd( $this->get_zip_command_path() ) . ' -uq ' . escapeshellarg( $this->get_archive_filepath() ) . ' ' . escapeshellarg( $this->get_database_dump_filename() ) . ' 2>&1' );
794
+
795
+ if ( $stderr )
796
+ $this->warning( $this->get_archive_method(), $stderr );
797
 
798
  $this->verify_archive();
799
 
808
  */
809
  public function zip_archive() {
810
 
811
+ $this->errors_to_warnings( $this->get_archive_method() );
812
  $this->archive_method = 'ziparchive';
813
 
814
  $this->do_action( 'hmbkp_archive_started' );
831
  continue;
832
 
833
  // Skip unreadable files
834
+ if ( ! @realpath( $file->getPathname() ) || ! $file->isReadable() )
835
  continue;
836
 
837
  // Excludes
857
  $zip->addFile( $this->get_database_dump_filepath(), $this->get_database_dump_filename() );
858
 
859
  if ( $zip->status )
860
+ $this->warning( $this->get_archive_method(), $zip->status );
861
 
862
  if ( $zip->statusSys )
863
+ $this->warning( $this->get_archive_method(), $zip->statusSys );
864
 
865
  $zip->close();
866
 
879
  */
880
  public function pcl_zip() {
881
 
882
+ $this->errors_to_warnings( $this->get_archive_method() );
883
  $this->archive_method = 'pclzip';
884
 
885
  $this->do_action( 'hmbkp_archive_started' );
886
 
887
+ global $_wprp_hmbkp_exclude_string;
888
 
889
+ $_wprp_hmbkp_exclude_string = $this->exclude_string( 'regex' );
890
 
891
  $this->load_pclzip();
892
 
894
 
895
  // Zip up everything
896
  if ( $this->get_type() !== 'database' )
897
+ if ( ! $archive->add( $this->get_root(), PCLZIP_OPT_REMOVE_PATH, $this->get_root(), PCLZIP_CB_PRE_ADD, 'wprp_hmbkp_pclzip_callback' ) )
898
+ $this->warning( $this->get_archive_method(), $archive->errorInfo( true ) );
899
 
900
  // Add the database
901
  if ( $this->get_type() !== 'file' )
902
  if ( ! $archive->add( $this->get_database_dump_filepath(), PCLZIP_OPT_REMOVE_PATH, $this->get_path() ) )
903
+ $this->warning( $this->get_archive_method(), $archive->errorInfo( true ) );
904
 
905
+ unset( $GLOBALS['_wprp_hmbkp_exclude_string'] );
906
 
907
  $this->verify_archive();
908
 
916
  if ( ! empty( $this->mysqldump_verified ) )
917
  return true;
918
 
919
+ // If there are mysqldump errors delete the database dump file as mysqldump will still have written one
920
+ if ( $this->get_errors( $this->get_mysqldump_method() ) && file_exists( $this->get_database_dump_filepath() ) )
921
+ unlink( $this->get_database_dump_filepath() );
922
+
923
+ // If we have an empty file delete it
924
+ if ( @filesize( $this->get_database_dump_filepath() ) === 0 )
925
+ unlink( $this->get_database_dump_filepath() );
926
 
927
+ // If the file still exists then it must be good
928
+ if ( file_exists( $this->get_database_dump_filepath() ) )
929
+ return $this->mysqldump_verified = true;
930
 
931
+ return false;
932
 
933
 
934
  }
947
  if ( ! empty( $this->archive_verified ) )
948
  return true;
949
 
 
 
 
950
  // Verify using the zip command if possible
951
  if ( $this->get_zip_command_path() && $this->get_archive_method() === 'zip' ) {
952
 
961
  if ( $this->get_errors( $this->get_archive_method() ) && file_exists( $this->get_archive_filepath() ) )
962
  unlink( $this->get_archive_filepath() );
963
 
964
+ // If the archive file still exists assume it's good
965
+ if ( file_exists( $this->get_archive_filepath() ) )
966
+ return $this->archive_verified = true;
 
 
967
 
968
+ return false;
969
 
970
  }
971
 
1051
  continue;
1052
 
1053
  // Skip unreadable files
1054
+ if ( ! @realpath( $file->getPathname() ) || ! $file->isReadable() )
1055
  continue;
1056
 
1057
  // Excludes
1088
  continue;
1089
 
1090
  // Skip unreadable files
1091
+ if ( ! @realpath( $file->getPathname() ) || ! $file->isReadable() )
1092
  continue;
1093
 
1094
  // Excludes
1125
  continue;
1126
 
1127
  // Skip unreadable files
1128
+ if ( ! @realpath( $file->getPathname() ) || ! $file->isReadable() )
1129
  continue;
1130
 
1131
  // Excludes
1160
  continue;
1161
 
1162
  // Skip unreadable files
1163
+ if ( ! @realpath( $file->getPathname() ) || ! $file->isReadable() )
1164
  continue;
1165
 
1166
  // Excludes
1192
  if ( method_exists( $file, 'isDot' ) && $file->isDot() )
1193
  continue;
1194
 
1195
+ if ( ! @realpath( $file->getPathname() ) || ! $file->isReadable() )
1196
+ $this->unreadable_files[] = $file;
1197
 
1198
  }
1199
 
1220
  if ( method_exists( $file, 'isDot' ) && $file->isDot() )
1221
  continue;
1222
 
1223
+ if ( ! @realpath( $file->getPathname() ) || ! $file->isReadable() )
1224
+ $this->get_unreadable_file_count++;
1225
 
1226
  }
1227
 
1618
  if ( empty( $context ) || empty( $error ) )
1619
  return;
1620
 
1621
+ $this->do_action( 'hmbkp_error' );
1622
+
1623
  $this->errors[$context][$_key = md5( implode( ':' , (array) $error ) )] = $error;
1624
 
1625
  }
1675
  if ( empty( $context ) || empty( $warning ) )
1676
  return;
1677
 
1678
+ $this->do_action( 'hmbkp_warning' );
1679
+
1680
  $this->warnings[$context][$_key = md5( implode( ':' , (array) $warning ) )] = $warning;
1681
 
1682
  }
1697
 
1698
  $args = func_get_args();
1699
 
1700
+ array_shift( $args );
1701
+
1702
+ $this->warning( 'php', implode( ', ', array_splice( $args, 0, 3 ) ) );
1703
 
1704
  return false;
1705
 
1717
  * @param array &$file
1718
  * @return bool
1719
  */
1720
+ function wprp_hmbkp_pclzip_callback( $event, &$file ) {
1721
 
1722
+ global $_wprp_hmbkp_exclude_string;
1723
 
1724
  // Don't try to add unreadable files.
1725
  if ( ! is_readable( $file['filename'] ) || ! file_exists( $file['filename'] ) )
1726
  return false;
1727
 
1728
  // Match everything else past the exclude list
1729
+ elseif ( $_wprp_hmbkp_exclude_string && preg_match( '(' . $_wprp_hmbkp_exclude_string . ')', $file['stored_filename'] ) )
1730
  return false;
1731
 
1732
  return true;