The WP Remote WordPress Plugin - Version 2.4

Version Description

Download this release

Release Info

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

Code changes from version 2.3.1 to 2.4

Files changed (81) hide show
  1. backupwordpress/admin/actions.php +403 -0
  2. backupwordpress/admin/backups.php +74 -0
  3. backupwordpress/admin/constants.php +30 -0
  4. backupwordpress/admin/menu.php +86 -0
  5. backupwordpress/admin/page.php +19 -0
  6. backupwordpress/admin/schedule-form-excludes.php +123 -0
  7. backupwordpress/admin/schedule-form.php +60 -0
  8. backupwordpress/admin/schedule.php +100 -0
  9. backupwordpress/assets/fancyBox/CHANGELOG.md +55 -0
  10. backupwordpress/assets/fancyBox/README.md +199 -0
  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 +15 -0
  22. backupwordpress/assets/fancyBox/demo/iframe.html +22 -0
  23. backupwordpress/assets/fancyBox/demo/index.html +302 -0
  24. backupwordpress/assets/fancyBox/lib/jquery-1.7.2.min.js +4 -0
  25. backupwordpress/assets/fancyBox/lib/jquery.mousewheel-3.0.6.pack.js +13 -0
  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 +85 -0
  31. backupwordpress/assets/fancyBox/source/helpers/jquery.fancybox-buttons.js +115 -0
  32. backupwordpress/assets/fancyBox/source/helpers/jquery.fancybox-media.js +86 -0
  33. backupwordpress/assets/fancyBox/source/helpers/jquery.fancybox-thumbs.css +54 -0
  34. backupwordpress/assets/fancyBox/source/helpers/jquery.fancybox-thumbs.js +157 -0
  35. backupwordpress/assets/fancyBox/source/jquery.fancybox.css +226 -0
  36. backupwordpress/assets/fancyBox/source/jquery.fancybox.js +1449 -0
  37. backupwordpress/assets/fancyBox/source/jquery.fancybox.pack.js +35 -0
  38. backupwordpress/assets/hmbkp.css +81 -0
  39. backupwordpress/assets/hmbkp.js +351 -0
  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 +564 -0
  46. backupwordpress/classes/email.php +164 -0
  47. backupwordpress/classes/schedule.php +773 -0
  48. backupwordpress/classes/schedules.php +70 -0
  49. backupwordpress/classes/services.php +233 -0
  50. backupwordpress/classes/wp-cli.php +95 -0
  51. backupwordpress/functions/core.php +363 -0
  52. backupwordpress/functions/interface.php +284 -0
  53. {hm-backup → backupwordpress/hm-backup}/hm-backup.php +98 -78
  54. backupwordpress/icon.png +0 -0
  55. backupwordpress/languages/hmbkp-de_DE.mo +0 -0
  56. backupwordpress/languages/hmbkp-de_DE.po +754 -0
  57. backupwordpress/languages/hmbkp-es_ES.mo +0 -0
  58. backupwordpress/languages/hmbkp-es_ES.po +540 -0
  59. backupwordpress/languages/hmbkp-eu.mo +0 -0
  60. backupwordpress/languages/hmbkp-eu.po +432 -0
  61. backupwordpress/languages/hmbkp-fr_FR.mo +0 -0
  62. backupwordpress/languages/hmbkp-fr_FR.po +542 -0
  63. backupwordpress/languages/hmbkp-lt.mo +0 -0
  64. backupwordpress/languages/hmbkp-lt.po +432 -0
  65. backupwordpress/languages/hmbkp-lt_LT.mo +0 -0
  66. backupwordpress/languages/hmbkp-lt_LT.po +546 -0
  67. backupwordpress/languages/hmbkp-nl.mo +0 -0
  68. backupwordpress/languages/hmbkp-nl.po +432 -0
  69. backupwordpress/languages/hmbkp-ro_RO.mo +0 -0
  70. backupwordpress/languages/hmbkp-ro_RO.po +544 -0
  71. backupwordpress/languages/hmbkp-ru_RU.mo +0 -0
  72. backupwordpress/languages/hmbkp-ru_RU.po +545 -0
  73. backupwordpress/languages/hmbkp-sr_SR.mo +0 -0
  74. backupwordpress/languages/hmbkp-sr_SR.po +524 -0
  75. backupwordpress/plugin.php +168 -0
  76. backupwordpress/readme.txt +391 -0
  77. plugin.php +48 -7
  78. readme.txt +7 -1
  79. wprp.admin.php +15 -2
  80. wprp.api.php +3 -1
  81. wprp.backups.php +218 -135
backupwordpress/admin/actions.php ADDED
@@ -0,0 +1,403 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ $schedule->delete_backup( base64_decode( urldecode( $_GET['hmbkp_delete_backup'] ) ) );
14
+
15
+ wp_redirect( remove_query_arg( array( 'hmbkp_delete_backup', '_wpnonce' ) ), 303 );
16
+
17
+ exit;
18
+
19
+ }
20
+ add_action( 'load-tools_page_' . HMBKP_PLUGIN_SLUG, 'hmbkp_request_delete_backup' );
21
+
22
+ /**
23
+ * Delete a schedule and all it's backups and then redirect
24
+ * back to the backups page
25
+ */
26
+ function hmbkp_request_delete_schedule() {
27
+
28
+ if ( empty( $_GET['action'] ) || $_GET['action'] !== 'hmbkp_delete_schedule' || ! check_admin_referer( 'hmbkp-delete_schedule' ) )
29
+ return;
30
+
31
+ $schedule = new HMBKP_Scheduled_Backup( urldecode( $_GET['hmbkp_schedule_id'] ) );
32
+ $schedule->cancel( true );
33
+
34
+ wp_redirect( remove_query_arg( array( 'hmbkp_schedule_id', 'action', '_wpnonce' ) ), 303 );
35
+
36
+ exit;
37
+
38
+ }
39
+ add_action( 'load-tools_page_' . HMBKP_PLUGIN_SLUG, 'hmbkp_request_delete_schedule' );
40
+
41
+ /**
42
+ * Perform a manual backup via ajax
43
+ */
44
+ function hmbkp_ajax_request_do_backup() {
45
+
46
+ if ( empty( $_GET['hmbkp_schedule_id'] ) )
47
+ return;
48
+
49
+ ignore_user_abort( true );
50
+
51
+ hmbkp_cleanup();
52
+
53
+ $schedule = new HMBKP_Scheduled_Backup( urldecode( $_GET['hmbkp_schedule_id'] ) );
54
+
55
+ $schedule->run();
56
+
57
+ hmbkp_schedule_actions( $schedule );
58
+
59
+ exit;
60
+
61
+ }
62
+ add_action( 'wp_ajax_hmbkp_run_schedule', 'hmbkp_ajax_request_do_backup' );
63
+
64
+ /**
65
+ * Send the download file to the browser and
66
+ * then redirect back to the backups page
67
+ */
68
+ function hmbkp_request_download_backup() {
69
+
70
+ if ( empty( $_GET['hmbkp_download_backup'] ) || ! check_admin_referer( 'hmbkp-download_backup' ) )
71
+ return;
72
+
73
+ wp_redirect( str_replace( realpath( HM_Backup::conform_dir( HM_Backup::get_home_path() ) ), home_url(), base64_decode( $_GET['hmbkp_download_backup'] ) ), 303 );
74
+
75
+ exit;
76
+
77
+ }
78
+ add_action( 'load-tools_page_' . HMBKP_PLUGIN_SLUG, 'hmbkp_request_download_backup' );
79
+
80
+ /**
81
+ * cancels a running backup then redirect
82
+ * back to the backups page
83
+ */
84
+ function hmbkp_request_cancel_backup() {
85
+
86
+ if ( ! isset( $_GET['action'] ) || $_GET['action'] !== 'hmbkp_cancel' )
87
+ return;
88
+
89
+ $schedule = new HMBKP_Scheduled_Backup( urldecode( $_GET['hmbkp_schedule_id'] ) );
90
+
91
+ // Delete the running backup
92
+ if ( $schedule->get_running_backup_filename() && file_exists( trailingslashit( hmbkp_path() ) . $schedule->get_running_backup_filename() ) )
93
+ unlink( trailingslashit( hmbkp_path() ) . $schedule->get_running_backup_filename() );
94
+
95
+ hmbkp_cleanup();
96
+
97
+ wp_redirect( remove_query_arg( array( 'action' ) ), 303 );
98
+
99
+ exit;
100
+
101
+ }
102
+ add_action( 'load-tools_page_' . HMBKP_PLUGIN_SLUG, 'hmbkp_request_cancel_backup' );
103
+
104
+ /**
105
+ * Dismiss an error and then redirect
106
+ * back to the backups page
107
+ */
108
+ function hmbkp_dismiss_error() {
109
+
110
+ if ( empty( $_GET['action'] ) || $_GET['action'] !== 'hmbkp_dismiss_error' )
111
+ return;
112
+
113
+ hmbkp_cleanup();
114
+
115
+ wp_redirect( remove_query_arg( 'action' ), 303 );
116
+
117
+ exit;
118
+
119
+ }
120
+ add_action( 'admin_init', 'hmbkp_dismiss_error' );
121
+
122
+ /**
123
+ * Display the running status via ajax
124
+ */
125
+ function hmbkp_ajax_is_backup_in_progress() {
126
+
127
+ if ( empty( $_GET['hmbkp_schedule_id'] ) )
128
+ return;
129
+
130
+ $schedule = new HMBKP_Scheduled_Backup( urldecode( $_GET['hmbkp_schedule_id'] ) );
131
+
132
+ if ( ! $schedule->get_status() )
133
+ echo 0;
134
+
135
+ else
136
+ hmbkp_schedule_actions( $schedule );
137
+
138
+ exit;
139
+
140
+ }
141
+ add_action( 'wp_ajax_hmbkp_is_in_progress', 'hmbkp_ajax_is_backup_in_progress' );
142
+
143
+ /**
144
+ * Display the calculated size via ajax
145
+ */
146
+ function hmbkp_ajax_calculate_backup_size() {
147
+
148
+ if ( empty( $_GET['hmbkp_schedule_id'] ) )
149
+ return;
150
+
151
+ $schedule = new HMBKP_Scheduled_Backup( urldecode( $_GET['hmbkp_schedule_id'] ) );
152
+
153
+ $recalculate_filesize = true;
154
+
155
+ include_once( HMBKP_PLUGIN_PATH . '/admin/schedule.php' );
156
+
157
+ exit;
158
+
159
+ }
160
+ add_action( 'wp_ajax_hmbkp_calculate', 'hmbkp_ajax_calculate_backup_size' );
161
+
162
+ /**
163
+ * Test the cron response and if it's not 200 show a warning message
164
+ */
165
+ function hmbkp_ajax_cron_test() {
166
+
167
+ $response = wp_remote_get( site_url( 'wp-cron.php' ) );
168
+
169
+ if ( is_wp_error( $response ) )
170
+ 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>';
171
+
172
+ else if ( $response['response']['code'] != 200 )
173
+ 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['response']['code'] . '</code>', '<a href="http://wordpress.org/extend/plugins/backupwordpress/faq/">FAQ</a>' ) . '</p></div>';
174
+
175
+ else
176
+ echo 1;
177
+
178
+ exit;
179
+
180
+ }
181
+ add_action( 'wp_ajax_hmbkp_cron_test', 'hmbkp_ajax_cron_test' );
182
+
183
+ /**
184
+ * Load the edit schedule form
185
+ */
186
+ function hmbkp_edit_schedule_load() {
187
+
188
+ $schedule = new HMBKP_Scheduled_Backup( esc_attr( $_GET['hmbkp_schedule_id'] ) );
189
+
190
+ require( HMBKP_PLUGIN_PATH . '/admin/schedule-form.php' );
191
+
192
+ exit;
193
+
194
+ }
195
+ add_action( 'wp_ajax_hmbkp_edit_schedule_load', 'hmbkp_edit_schedule_load' );
196
+
197
+ /**
198
+ * Load the edit schedule excludes form
199
+ */
200
+ function hmbkp_edit_schedule_excludes_load() {
201
+
202
+ $schedule = new HMBKP_Scheduled_Backup( esc_attr( $_GET['hmbkp_schedule_id'] ) );
203
+
204
+ require( HMBKP_PLUGIN_PATH . '/admin/schedule-form-excludes.php' );
205
+
206
+ exit;
207
+
208
+ }
209
+ add_action( 'wp_ajax_hmbkp_edit_schedule_excludes_load', 'hmbkp_edit_schedule_excludes_load' );
210
+
211
+ /**
212
+ * Load the add schedule form
213
+ */
214
+ function hmbkp_add_schedule_load() {
215
+
216
+ $schedule = new HMBKP_Scheduled_Backup( date( 'U' ) );
217
+ $is_new_schedule = true;
218
+
219
+ require( HMBKP_PLUGIN_PATH . '/admin/schedule-form.php' );
220
+
221
+ exit;
222
+
223
+ }
224
+ add_action( 'wp_ajax_hmbkp_add_schedule_load', 'hmbkp_add_schedule_load' );
225
+
226
+ /**
227
+ * Catch the edit schedule form
228
+ *
229
+ * Validate and either return errors or update the schedule
230
+ */
231
+ function hmnkp_edit_schedule_submit() {
232
+
233
+ if ( empty( $_GET['hmbkp_schedule_id'] ) )
234
+ return;
235
+
236
+ $schedule = new HMBKP_Scheduled_Backup( esc_attr( $_GET['hmbkp_schedule_id'] ) );
237
+
238
+ $errors = array();
239
+
240
+ if ( isset( $_GET['hmbkp_schedule_type'] ) ) {
241
+
242
+ if ( ! trim( $_GET['hmbkp_schedule_type'] ) )
243
+ $errors['hmbkp_schedule_type'] = __( 'Backup type cannot be empty', 'hmbkp' );
244
+
245
+ elseif ( ! in_array( $_GET['hmbkp_schedule_type'], array( 'complete', 'file', 'database' ) ) )
246
+ $errors['hmbkp_schedule_type'] = __( 'Invalid backup type', 'hmbkp' );
247
+
248
+ else
249
+ $schedule->set_type( $_GET['hmbkp_schedule_type'] );
250
+
251
+ }
252
+
253
+ if ( isset( $_GET['hmbkp_schedule_reoccurrence'] ) ) {
254
+
255
+ if ( empty( $_GET['hmbkp_schedule_reoccurrence'] ) )
256
+ $errors['hmbkp_schedule_reoccurrence'] = __( 'Schedule cannot be empty', 'hmbkp' );
257
+
258
+ elseif ( ! in_array( $_GET['hmbkp_schedule_reoccurrence'], array_keys( wp_get_schedules() ) ) && $_GET['hmbkp_schedule_reoccurrence'] !== 'manually' )
259
+ $errors['hmbkp_schedule_reoccurrence'] = __( 'Invalid schedule', 'hmbkp' );
260
+
261
+ else
262
+ $schedule->set_reoccurrence( $_GET['hmbkp_schedule_reoccurrence'] );
263
+
264
+ }
265
+
266
+ if ( isset( $_GET['hmbkp_schedule_max_backups'] ) ) {
267
+
268
+ if ( empty( $_GET['hmbkp_schedule_max_backups'] ) )
269
+ $errors['hmbkp_schedule_max_backups'] = __( 'Max backups can\'t be empty', 'hmbkp' );
270
+
271
+ elseif ( ! is_numeric( $_GET['hmbkp_schedule_max_backups'] ) )
272
+ $errors['hmbkp_schedule_max_backups'] = __( 'Max backups must be a number', 'hmbkp' );
273
+
274
+ elseif ( ! ( $_GET['hmbkp_schedule_max_backups'] >= 1 ) )
275
+ $errors['hmbkp_schedule_max_backups'] = __( 'Max backups must be greater than 0', 'hmbkp' );
276
+
277
+ else
278
+ $schedule->set_max_backups( (int) $_GET['hmbkp_schedule_max_backups'] );
279
+
280
+ $schedule->delete_old_backups();
281
+
282
+ }
283
+
284
+ foreach ( HMBKP_Services::get_services( $schedule ) as $service )
285
+ $errors = array_merge( $errors, $service->save() );
286
+
287
+ $schedule->save();
288
+
289
+ if ( $errors )
290
+ echo json_encode( $errors );
291
+
292
+ exit;
293
+
294
+ }
295
+ add_action( 'wp_ajax_hmnkp_edit_schedule_submit', 'hmnkp_edit_schedule_submit' );
296
+
297
+
298
+ /**
299
+ * Add an exclude rule
300
+ *
301
+ * @access public
302
+ * @return void
303
+ */
304
+ function hmbkp_add_exclude_rule() {
305
+
306
+ $schedule = new HMBKP_Scheduled_Backup( esc_attr( $_POST['hmbkp_schedule_id'] ) );
307
+
308
+ $schedule->set_excludes( $_POST['hmbkp_exclude_rule'], true );
309
+
310
+ $schedule->save();
311
+
312
+ include( HMBKP_PLUGIN_PATH . '/admin/schedule-form-excludes.php' );
313
+
314
+ exit;
315
+
316
+ }
317
+ add_action( 'wp_ajax_hmbkp_add_exclude_rule', 'hmbkp_add_exclude_rule' );
318
+
319
+
320
+ /**
321
+ * Delete an exclude rule
322
+ *
323
+ * @access public
324
+ * @return void
325
+ */
326
+ function hmbkp_delete_exclude_rule() {
327
+
328
+ $schedule = new HMBKP_Scheduled_Backup( esc_attr( $_POST['hmbkp_schedule_id'] ) );
329
+
330
+ $excludes = $schedule->get_excludes();
331
+
332
+ $schedule->set_excludes( array_diff( $excludes, (array) $_POST['hmbkp_exclude_rule'] ) );
333
+
334
+ $schedule->save();
335
+
336
+ include( HMBKP_PLUGIN_PATH . '/admin/schedule-form-excludes.php' );
337
+
338
+ exit;
339
+
340
+ }
341
+ add_action( 'wp_ajax_hmbkp_delete_exclude_rule', 'hmbkp_delete_exclude_rule' );
342
+
343
+
344
+ /**
345
+ * Ajax action for previewing an exclude rule.
346
+ *
347
+ * @access public
348
+ * @return void
349
+ */
350
+ function hmbkp_preview_exclude_rule() {
351
+
352
+ if ( ! empty( $_POST['hmbkp_schedule_id'] ) )
353
+ $schedule = new HMBKP_Scheduled_Backup( $_POST['hmbkp_schedule_id'] );
354
+
355
+ if ( ! empty( $_POST['hmbkp_schedule_excludes'] ) )
356
+ $excludes = explode( ',', $_POST['hmbkp_schedule_excludes'] );
357
+
358
+ if ( ! empty( $_POST['hmbkp_file_method'] ) )
359
+ $file_method = $_POST['hmbkp_file_method'];
360
+
361
+ hmbkp_file_list( $schedule, $excludes, $file_method );
362
+
363
+ foreach( $schedule->get_excluded_files() as $key => $excluded_file )
364
+ if ( strpos( $excluded_file, $schedule->get_path() ) === false )
365
+ $excluded_files[] = $excluded_file;
366
+
367
+ if ( ! empty( $excluded_files) ) { ?>
368
+
369
+ <p><?php printf( _n( '%s matches 1 file.', '%1$s matches %2$d files.', count( $excluded_files ), 'hmbkp' ), '<code>' . implode( '</code>, <code>', $excludes ) . '</code>', count( $excluded_files ) ); ?></p>
370
+
371
+ <?php } else { ?>
372
+
373
+ <p><?php printf( __( '%s didn\'t match any files.', 'hmbkp' ), '<code>' . implode( '</code>, <code>', $excludes ) . '</code>' ); ?></p>
374
+
375
+ <?php } ?>
376
+
377
+ <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>
378
+
379
+ <?php exit;
380
+
381
+ }
382
+ add_action( 'wp_ajax_hmbkp_file_list', 'hmbkp_preview_exclude_rule', 10, 0 );
383
+
384
+ /**
385
+ * Handles changes in the defined Constants
386
+ * that users can define to control advanced
387
+ * settings
388
+ */
389
+ function hmbkp_constant_changes() {
390
+
391
+ // If a custom backup path has been set or changed
392
+ if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH && HM_Backup::conform_dir( HMBKP_PATH ) !== ( $from = HM_Backup::conform_dir( get_option( 'hmbkp_path' ) ) ) )
393
+ hmbkp_path_move( $from, HMBKP_PATH );
394
+
395
+ // If a custom backup path has been removed
396
+ if ( ( ( defined( 'HMBKP_PATH' ) && ! HMBKP_PATH ) || ! defined( 'HMBKP_PATH' ) && HM_Backup::conform_dir( hmbkp_path_default() ) != ( $from = HM_Backup::conform_dir( get_option( 'hmbkp_path' ) ) ) ) )
397
+ hmbkp_path_move( $from, hmbkp_path_default() );
398
+
399
+ // If the custom path has changed and the new directory isn't writable
400
+ if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH && HM_Backup::conform_dir( HMBKP_PATH ) != ( $from = HM_Backup::conform_dir( get_option( 'hmbkp_path' ) ) ) && $from != hmbkp_path_default() && !is_writable( HMBKP_PATH ) && is_dir( $from ) )
401
+ hmbkp_path_move( $from, hmbkp_path_default() );
402
+
403
+ }
backupwordpress/admin/backups.php ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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><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 ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ </dl>
29
+
30
+ </div>
backupwordpress/admin/menu.php ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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' => $warning . $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 ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 you need help getting things working you are more than welcome to email us at %s and we\'ll do what we can.', 'hmbkp' ), '<a href="mailto:support@hmn.md">support@hmn.md</a>' ); ?></p>
18
+
19
+ </div>
backupwordpress/admin/schedule-form-excludes.php ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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', 'hmbkp' ); ?>
14
+
15
+ <input id="hmbkp-new-exclude-rule" type="text" class="code" placeholder=".git/, *.mp3, wp-content/uploads/" />
16
+
17
+ <button type="button" class="button-secondary hmbkp_preview_exclude_rule"><?php _e( 'Preview', 'hmbkp' ); ?></button>
18
+
19
+ </label>
20
+
21
+ </div>
22
+
23
+ <table class="widefat fixed">
24
+
25
+ <thead>
26
+ <tr>
27
+ <th><?php _e( 'Exclude Rules', 'hmbkp' ); ?></th>
28
+ </tr>
29
+ </thead>
30
+
31
+ <tbody>
32
+
33
+ <?php foreach( $schedule->get_excludes() as $key => $exclude ) : ?>
34
+
35
+ <tr>
36
+ <td data-hmbkp-exclude-rule="<?php echo esc_attr( $exclude ); ?>">
37
+
38
+ <span class="code"><?php echo esc_attr( str_ireplace( untrailingslashit( $schedule->get_root() ), '', $exclude ) ); ?></span>
39
+
40
+ <?php if ( strpos( $schedule->get_path(), untrailingslashit( $exclude ) ) !== false ) : ?>
41
+
42
+ <span class="reason"><?php _e( 'default', 'hmbkp' ); ?></span>
43
+
44
+ <?php elseif ( defined( 'HMBKP_EXCLUDE' ) && strpos( HMBKP_EXCLUDE, $exclude ) !== false ) : ?>
45
+
46
+ <span class="reason"><?php _e( 'defined', 'hmbkp' ); ?></span>
47
+
48
+ <?php else : ?>
49
+
50
+ <a href="#" class="delete-action"><?php _e( 'Remove', 'hmbkp' ); ?></a>
51
+
52
+ <?php endif; ?>
53
+
54
+ </td>
55
+ </tr>
56
+
57
+ <?php endforeach; ?>
58
+
59
+ </tbody>
60
+
61
+ </table>
62
+
63
+ <div class="hmbkp-tabs">
64
+
65
+ <ul class="subsubsub">
66
+
67
+ <?php if ( $schedule->get_excluded_files() ) : ?>
68
+
69
+ <li><a href="#hmbkp_excluded_files"><?php _e( 'Excluded', 'hmbkp' ); ?></a>(<?php echo count( $schedule->get_excluded_files() ); ?>)</li>
70
+
71
+ <?php endif; ?>
72
+
73
+ <li><a href="#hmbkp_included_files"><?php _e( 'Included', 'hmbkp' ); ?></a>(<?php echo count( $schedule->get_included_files() ); ?>)</li>
74
+
75
+ <?php if ( $schedule->get_unreadable_files() ) : ?>
76
+
77
+ <li><a href="#hmbkp_unreadable_files"><?php _e( 'Unreadable', 'hmbkp' ); ?></a>(<?php echo count( $schedule->get_unreadable_files() ); ?>)</li>
78
+
79
+ <?php endif; ?>
80
+
81
+ </ul>
82
+
83
+ <?php if ( $schedule->get_excluded_files() ) : ?>
84
+
85
+ <div id="hmbkp_excluded_files">
86
+
87
+ <?php hmbkp_file_list( $schedule, null, 'get_excluded_files' ); ?>
88
+
89
+ </div>
90
+
91
+ <?php endif; ?>
92
+
93
+ <div id="hmbkp_included_files">
94
+
95
+ <?php hmbkp_file_list( $schedule, null, 'get_included_files' ); ?>
96
+
97
+ </div>
98
+
99
+ <?php if ( $schedule->get_unreadable_files() ) : ?>
100
+
101
+ <div id="hmbkp_unreadable_files">
102
+
103
+ <?php hmbkp_file_list( $schedule, null, 'get_unreadable_files' ); ?>
104
+
105
+ <p class="description"><?php _e( 'Unreadable files can\'t be backed up', 'hmbkp' ); ?></p>
106
+
107
+ </div>
108
+
109
+ <?php endif; ?>
110
+
111
+ <p><?php printf( __( 'Your site is %s. Backups will be compressed and so will be smaller.', 'hmbkp' ), '<code>' . $schedule->get_filesize( false ) . '</code>' ); ?></p>
112
+
113
+ </div>
114
+
115
+ <p class="submit">
116
+
117
+ <button type="submit" class="button-primary"><?php _e( 'Close', 'hmbkp' ); ?></button>
118
+
119
+ </p>
120
+
121
+ </fieldset>
122
+
123
+ </form>
backupwordpress/admin/schedule-form.php ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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() );
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() ), date_i18n( get_option( 'time_format' ), $schedule->get_next_occurrence() ) ) . '"';
13
+
14
+ // Backup Re-occurrence
15
+ switch ( $schedule->get_reoccurrence() ) :
16
+
17
+ case 'hourly' :
18
+
19
+ $reoccurrence = date_i18n( get_option( 'time_format' ), $schedule->get_next_occurrence() ) === '00' ? sprintf( __( 'hourly on the hour', 'hmbkp' ) ) : sprintf( __( 'hourly at %s minutes past the hour', 'hmbkp' ), '<span ' . $next_backup . '>' . str_replace( '0', '', date_i18n( 'i', $schedule->get_next_occurrence() ) ) ) . '</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() ) . '</span>' );
26
+
27
+ break;
28
+
29
+
30
+ case 'twicedaily' :
31
+
32
+ $times[] = date_i18n( get_option( 'time_format' ), $schedule->get_next_occurrence() );
33
+ $times[] = date_i18n( get_option( 'time_format' ), strtotime( '+ 12 hours', $schedule->get_next_occurrence() ) );
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() ) . '</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() ) . '</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() ) . '</span>', '<span>' . date_i18n( get_option( 'time_format' ), $schedule->get_next_occurrence() ) . '</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( '. ', $services ) ); ?>
97
+
98
+ <?php hmbkp_schedule_actions( $schedule ); ?>
99
+
100
+ </div>
backupwordpress/assets/fancyBox/CHANGELOG.md ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,199 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
Binary file
backupwordpress/assets/fancyBox/demo/1_s.jpg ADDED
Binary file
backupwordpress/assets/fancyBox/demo/2_b.jpg ADDED
Binary file
backupwordpress/assets/fancyBox/demo/2_s.jpg ADDED
Binary file
backupwordpress/assets/fancyBox/demo/3_b.jpg ADDED
Binary file
backupwordpress/assets/fancyBox/demo/3_s.jpg ADDED
Binary file
backupwordpress/assets/fancyBox/demo/4_b.jpg ADDED
Binary file
backupwordpress/assets/fancyBox/demo/4_s.jpg ADDED
Binary file
backupwordpress/assets/fancyBox/demo/5_b.jpg ADDED
Binary file
backupwordpress/assets/fancyBox/demo/5_s.jpg ADDED
Binary file
backupwordpress/assets/fancyBox/demo/ajax.txt ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,302 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,4 @@
 
 
 
 
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 ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
Binary file
backupwordpress/assets/fancyBox/source/fancybox_loading.gif ADDED
Binary file
backupwordpress/assets/fancyBox/source/fancybox_sprite.png ADDED
Binary file
backupwordpress/assets/fancyBox/source/helpers/fancybox_buttons.png ADDED
Binary file
backupwordpress/assets/fancyBox/source/helpers/jquery.fancybox-buttons.css ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,1449 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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-running::before { background-image: url('wpspin_light.gif'); background-repeat: no-repeat; margin-right: 10px; content: " "; }
53
+ .hmbkp-schedule-sentence .hmbkp-status { display: block; font-size: 12px; color: #666; margin: 2px 0 0 26px; }
54
+ .hmbkp-schedule-sentence [title] { border-bottom: 1px dotted #CCC; cursor: help; }
55
+
56
+ .hmbkp-schedule-sentence .hmbkp-schedule-actions { visibility: visible; }
57
+ .hmbkp-schedule-actions { font-size: 12px; font-weight: normal; margin: 0 0 0 26px; }
58
+
59
+ button.hmbkp-ajax-loading { padding-left: 20px; }
60
+ button.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; }
61
+
62
+ button { height: 14px; }
63
+
64
+ .delete-action { color: #BC0B0B; }
65
+ .delete-action:hover .delete-action:focus { color: red; }
66
+
67
+ label[for="hmbkp-new-exclude-rule"] { overflow: hidden; }
68
+ .hmbkp_preview_exclude_rule { float: right; margin-top: 1px; }
69
+ .hmbkp_preview_exclude_rule.hmbkp-ajax-loading { width: 44px; }
70
+ div.hmbkp_add_exclude_rule { display: block; line-height: 25px; width: 320px; overflow: hidden; }
71
+ div.hmbkp_add_exclude_rule input { min-width: 240px; float: left; }
72
+ .hmbkp_preview_exclude_rule { float: right; width: 56px; }
73
+ .hmbkp_save_exclude_rule, .hmbkp_cancel_save_exclude_rule { float: right; }
74
+
75
+ .hmbkp-exclude-preview-open table, .hmbkp-exclude-preview-open .hmbkp-tabs, .hmbkp-exclude-preview-open p.submit { display: none; }
76
+ .hmbkp-exclude-preview-open .hmbkp_add_exclude_rule { margin: 0; }
77
+
78
+ table.widefat tbody td { padding: 8px 7px; }
79
+ .hmbkp-edit-schedule-excludes-form td a, .hmbkp-edit-schedule-excludes-form td span.reason { float: right; }
80
+ .hmbkp-edit-schedule-excludes-form td span.reason { color: #CCC; }
81
+ input[type="datetime-local"] { border-radius: 3px; border-width: 1px; border-style: solid; box-sizing: border-box; border-color: #DFDFDF; background-color: white; }
backupwordpress/assets/hmbkp.js ADDED
@@ -0,0 +1,351 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ // Setup the tabs
12
+ $( '.hmbkp-tabs' ).tabs();
13
+
14
+ // Set the first tab to be active
15
+ if ( ! $( '.subsubsub a.current' ).size() )
16
+ $( '.subsubsub li:first a').addClass( 'current' );
17
+
18
+ // Initialize fancybox
19
+ $( '.fancybox' ).fancybox( {
20
+
21
+ 'modal' : true,
22
+ 'type' : 'ajax',
23
+ 'maxWidth' : 320,
24
+ 'afterShow' : function() {
25
+
26
+ $( '.hmbkp-tabs' ).tabs();
27
+
28
+ if ( $( '.hmbkp-form p.submit:contains(\'Update\')' ).size() )
29
+ $( '<button type="button" class="button-secondary hmbkp_cancel">' + objectL10n.cancel + '</button></p>' ).appendTo( '.hmbkp-form p.submit' );
30
+
31
+ $( '.hmbkp_cancel' ).click( function() {
32
+ $.fancybox.close();
33
+ } );
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(), 'hmbkp_file_method' : 'get_excluded_files' },
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
+ ).error( function() {
92
+
93
+
94
+
95
+ } );
96
+
97
+ } );
98
+
99
+ // Fire the preview button when the enter key is pressed in the preview input
100
+ $( document ).on( 'keypress', '.hmbkp_add_exclude_rule input', function( e ) {
101
+
102
+ if ( ! $( '.hmbkp_add_exclude_rule input' ).val() )
103
+ return true;
104
+
105
+ var code = ( e.keyCode ? e.keyCode : e.which );
106
+
107
+ if ( code != 13 )
108
+ return true;
109
+
110
+ $( '.hmbkp_preview_exclude_rule' ).click();
111
+
112
+ e.preventDefault();
113
+
114
+ } );
115
+
116
+ // Cancel add exclude rule
117
+ $( document ).on( 'click', '.hmbkp_cancel_save_exclude_rule, .hmbkp-edit-schedule-excludes-form .submit button', function() {
118
+
119
+ $( '.hmbkp_add_exclude_rule ul' ).remove();
120
+ $( '.hmbkp_add_exclude_rule p' ).remove();
121
+
122
+ $( '.hmbkp-edit-schedule-excludes-form' ).removeClass( 'hmbkp-exclude-preview-open' );
123
+
124
+ } );
125
+
126
+ // Toggle additional fieldsets on
127
+ $( document ).on( 'click', '.hmbkp-toggle-fieldset', function() {
128
+
129
+ // Get the current fieldset
130
+ var fromFieldset = 'fieldset.' + $( this ).closest( 'fieldset' ).attr( 'class' );
131
+ var toFieldset = 'fieldset.' + $( this ).attr( 'data-hmbkp-fieldset' );
132
+
133
+ // Show the one we are moving too
134
+ $( toFieldset ).show().find( 'p.submit button' ).data( 'hmbkp-previous-fieldset', fromFieldset );
135
+
136
+ // Animate
137
+ $( fromFieldset ).animate( {
138
+ marginLeft : '-100%'
139
+ }, 'fast', function() {
140
+ $( this ).hide();
141
+ } );
142
+
143
+ } );
144
+
145
+ // Toggle additional fieldsets off
146
+ $( document ).on( 'click', '.hmbkp-form fieldset + fieldset p.submit button', function() {
147
+
148
+ // Get the current fieldset
149
+ var fromFieldset = 'fieldset.' + $( this ).closest( 'fieldset' ).attr( 'class' );
150
+ var toFieldset = $( this ).data( 'hmbkp-previous-fieldset' );
151
+
152
+ // Show the one we are moving too
153
+ $( toFieldset ).show();
154
+
155
+ $( toFieldset ).animate( {
156
+ marginLeft : '0'
157
+ }, 'fast', function() {
158
+ $( fromFieldset ).hide();
159
+ }
160
+ );
161
+
162
+ } );
163
+
164
+ // Add exclude rule
165
+ $( document ).on( 'click', '.hmbkp_save_exclude_rule', function() {
166
+
167
+ $( this ).addClass( 'hmbkp-ajax-loading' );
168
+
169
+ $.post(
170
+ ajaxurl,
171
+ { 'action' : 'hmbkp_add_exclude_rule', 'hmbkp_exclude_rule' : $( '.hmbkp_add_exclude_rule input' ).val(), 'hmbkp_schedule_id' : $( '[name="hmbkp_schedule_id"]' ).val() },
172
+ function( data ) {
173
+ $( '.hmbkp-edit-schedule-excludes-form' ).replaceWith( data );
174
+ $( '.hmbkp-edit-schedule-excludes-form' ).show();
175
+ $( '.hmbkp-tabs' ).tabs();
176
+ }
177
+ );
178
+
179
+ } );
180
+
181
+ // Remove exclude rule
182
+ $( document ).on( 'click', '.hmbkp-edit-schedule-excludes-form td a', function( e ) {
183
+
184
+ $( this ).addClass( 'hmbkp-ajax-loading' );
185
+
186
+ e.preventDefault();
187
+
188
+ $.post(
189
+ ajaxurl,
190
+ { 'action' : 'hmbkp_delete_exclude_rule', 'hmbkp_exclude_rule' : $( this ).closest( 'td' ).attr( 'data-hmbkp-exclude-rule' ), 'hmbkp_schedule_id' : $( '[name="hmbkp_schedule_id"]' ).val() },
191
+ function( data ) {
192
+ $( '.hmbkp-edit-schedule-excludes-form' ).replaceWith( data );
193
+ $( '.hmbkp-edit-schedule-excludes-form' ).show();
194
+ $( '.hmbkp-tabs' ).tabs();
195
+ }
196
+ );
197
+
198
+ } );
199
+
200
+ // Edit schedule form submit
201
+ $( document ).on( 'submit', 'form.hmbkp-form', function( e ) {
202
+
203
+ isNewSchedule = $( this ).closest( 'form' ).attr( 'data-schedule-action' ) == 'add' ? true : false;
204
+ scheduleId = $( this ).closest( 'form' ).find( '[name="hmbkp_schedule_id"]' ).val();
205
+
206
+ // Warn that backups will be deleted if max backups has been set to less than the number of backups currently stored
207
+ if ( ! isNewSchedule && Number( $( 'input[name="hmbkp_schedule_max_backups"]' ).val() ) < Number( $( '.hmbkp_manage_backups_row' ).size() ) && ! confirm( objectL10n.remove_old_backups ) )
208
+ return false;
209
+
210
+ $( this ).find( 'button[type="submit"]' ).addClass( 'hmbkp-ajax-loading' );
211
+
212
+ $( '.hmbkp-error span' ).remove();
213
+ $( '.hmbkp-error' ).removeClass( 'hmbkp-error' );
214
+
215
+ e.preventDefault();
216
+
217
+ $.post(
218
+ ajaxurl + '?' + $( this ).serialize(),
219
+ { 'action' : 'hmnkp_edit_schedule_submit' },
220
+ function( data ) {
221
+
222
+ // Assume success if no data passed back
223
+ if ( ! data ) {
224
+
225
+ $.fancybox.close();
226
+
227
+ // Reload the page so we see changes
228
+ if ( isNewSchedule )
229
+ location.replace( '//' + location.host + location.pathname + '?page=backupwordpress&hmbkp_schedule_id=' + scheduleId );
230
+
231
+ else
232
+ location.reload( true );
233
+
234
+ } else {
235
+
236
+ // Get the errors json string
237
+ errors = JSON.parse( data );
238
+
239
+ // Loop through the errors
240
+ $.each( errors, function( key, value ) {
241
+
242
+ // Focus the first field that errored
243
+ if ( typeof( hmbkp_focused ) == 'undefined' ) {
244
+
245
+ $( '[name="' + key + '"]' ).focus();
246
+
247
+ hmbkp_focused = true;
248
+
249
+ }
250
+
251
+ // Add an error class to all fields with errors
252
+ $( '[name="' + key + '"]' ).closest( 'label' ).addClass( 'hmbkp-error' );
253
+
254
+ // Add the error message
255
+ $( '[name="' + key + '"]' ).after( '<span>' + value + '</span>' );
256
+
257
+ } );
258
+
259
+ }
260
+
261
+ }
262
+ );
263
+
264
+ } );
265
+
266
+ // Text the cron response using ajax
267
+ $.get( ajaxurl, { 'action' : 'hmbkp_cron_test' },
268
+ function( data ) {
269
+ if ( data != 1 ) {
270
+ $( '.wrap > h2' ).after( data );
271
+ }
272
+ }
273
+ );
274
+
275
+ // Calculate the estimated backup size
276
+ if ( $( '.hmbkp-schedule-sentence .calculating' ).size() ) {
277
+ $.get( ajaxurl, { 'action' : 'hmbkp_calculate', 'hmbkp_schedule_id' : $( '[data-hmbkp-schedule-id]' ).attr( 'data-hmbkp-schedule-id' ) },
278
+ function( data ) {
279
+
280
+ if ( data.indexOf( 'title' ) != -1 )
281
+ $( '.hmbkp-schedule-sentence' ).replaceWith( data );
282
+
283
+ // Fail silently for now
284
+ else
285
+ $( '.calculating' ).remove();
286
+
287
+ }
288
+ ).error( function() {
289
+
290
+ // Fail silently for now
291
+ $( '.calculating' ).remove();
292
+
293
+ } );
294
+ }
295
+
296
+ if ( $( '.hmbkp-running' ).size() )
297
+ hmbkpRedirectOnBackupComplete();
298
+
299
+ $( '.hmbkp-run' ).live( 'click', function( e ) {
300
+
301
+ scheduleId = $( '[data-hmbkp-schedule-id]' ).attr( 'data-hmbkp-schedule-id' );
302
+
303
+ ajaxRequest = $.get(
304
+ ajaxurl,
305
+ { 'action' : 'hmbkp_run_schedule', 'hmbkp_schedule_id' : scheduleId },
306
+ function( data ) {
307
+
308
+ if ( data.indexOf( 'hmbkp-schedule-actions' ) != -1 )
309
+ location.reload( true );
310
+
311
+ // The backup failed so just redirect back
312
+ else
313
+ location.replace( '//' + location.host + location.pathname + '?page=backupwordpress&action=hmbkp_cancel&reason=broken&hmbkp_schedule_id=' + scheduleId );
314
+
315
+ }
316
+ ).error( function() {
317
+ location.replace( '//' + location.host + location.pathname + '?page=backupwordpress&action=hmbkp_cancel&reason=broken&hmbkp_schedule_id=' + scheduleId );
318
+ } );
319
+
320
+ $( this ).closest( '.hmbkp-schedule-sentence' ).addClass( 'hmbkp-running' );
321
+
322
+ hmbkpRedirectOnBackupComplete();
323
+
324
+ e.preventDefault();
325
+
326
+ } );
327
+
328
+ } );
329
+
330
+ function hmbkpRedirectOnBackupComplete( schedule_id ) {
331
+
332
+ jQuery.get(
333
+ ajaxurl,
334
+ { 'action' : 'hmbkp_is_in_progress', 'hmbkp_schedule_id' : jQuery( '[data-hmbkp-schedule-id]' ).attr( 'data-hmbkp-schedule-id' ) },
335
+ function( data ) {
336
+
337
+ if ( data == 0 ) {
338
+
339
+ location.reload( true );
340
+
341
+ } else {
342
+
343
+ setTimeout( 'hmbkpRedirectOnBackupComplete();', 500 );
344
+
345
+ jQuery( '.hmbkp-schedule-actions' ).replaceWith( data );
346
+
347
+ }
348
+ }
349
+ );
350
+
351
+ }
backupwordpress/assets/icon_backupwordpress_16x16.png ADDED
Binary file
backupwordpress/assets/icon_backupwordpress_16x16_hover.png ADDED
Binary file
backupwordpress/assets/icon_backupwordpress_32x32.png ADDED
Binary file
backupwordpress/assets/wpspin_light.gif ADDED
Binary file
backupwordpress/backupwordpress.mo ADDED
Binary file
backupwordpress/backupwordpress.po ADDED
@@ -0,0 +1,564 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: BackUpWordPress\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2012-08-22 15:46-0000\n"
6
+ "PO-Revision-Date: 2012-08-22 15:47-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-Poedit-SearchPath-0: .\n"
16
+
17
+ #: plugin.php:52
18
+ msgid "BackUpWordPress requires PHP version 5.2.4 or greater."
19
+ msgstr ""
20
+
21
+ #: plugin.php:63
22
+ #, php-format
23
+ msgid "BackUpWordPress requires WordPress version %s or greater."
24
+ msgstr ""
25
+
26
+ #: plugin.php:95 admin/schedule-form.php:52
27
+ msgid "Update"
28
+ msgstr ""
29
+
30
+ #: plugin.php:96
31
+ msgid "Cancel"
32
+ msgstr ""
33
+
34
+ #: plugin.php:97
35
+ msgid ""
36
+ "Are you sure you want to delete this schedule? All of it's backups will also "
37
+ "be deleted.\n"
38
+ "\n"
39
+ "'Cancel' to go back, 'OK' to delete.\n"
40
+ msgstr ""
41
+
42
+ #: plugin.php:98
43
+ msgid ""
44
+ "Are you sure you want to delete this backup?\n"
45
+ "\n"
46
+ "'Cancel' to go back, 'OK' to delete.\n"
47
+ msgstr ""
48
+
49
+ #: plugin.php:99
50
+ msgid ""
51
+ "Are you sure you want to remove this exclude rule?\n"
52
+ "\n"
53
+ "'Cancel' to go back, 'OK' to delete.\n"
54
+ msgstr ""
55
+
56
+ #: plugin.php:100
57
+ msgid ""
58
+ "Reducing the number of backups that are stored on this server will cause "
59
+ "some of your existing backups to be deleted, are you sure that's what you "
60
+ "want?\n"
61
+ "\n"
62
+ "'Cancel' to go back, 'OK' to delete.\n"
63
+ msgstr ""
64
+
65
+ #: admin/actions.php:163 functions/interface.php:72 functions/interface.php:82
66
+ #: functions/interface.php:92
67
+ msgid "BackUpWordPress has detected a problem."
68
+ msgstr ""
69
+
70
+ #: admin/actions.php:163
71
+ #, php-format
72
+ msgid ""
73
+ "%1$s is returning a %2$s response which could mean cron jobs aren't getting "
74
+ "fired properly. BackUpWordPress relies on wp-cron to run scheduled back ups. "
75
+ "See the %3$s for more details."
76
+ msgstr ""
77
+
78
+ #: admin/actions.php:232
79
+ msgid "Backup type cannot be empty"
80
+ msgstr ""
81
+
82
+ #: admin/actions.php:235
83
+ msgid "Invalid backup type"
84
+ msgstr ""
85
+
86
+ #: admin/actions.php:245
87
+ msgid "Schedule cannot be empty"
88
+ msgstr ""
89
+
90
+ #: admin/actions.php:248
91
+ msgid "Invalid schedule"
92
+ msgstr ""
93
+
94
+ #: admin/actions.php:258
95
+ msgid "Max backups must be more than 1"
96
+ msgstr ""
97
+
98
+ #: admin/actions.php:261
99
+ msgid "Max backups must be a number"
100
+ msgstr ""
101
+
102
+ #: admin/actions.php:338
103
+ #, php-format
104
+ msgid "%s didn't match any files."
105
+ msgstr ""
106
+
107
+ #: admin/backups.php:13
108
+ msgid "add schedule"
109
+ msgstr ""
110
+
111
+ #: admin/backups.php:37
112
+ msgid "Size"
113
+ msgstr ""
114
+
115
+ #: admin/backups.php:38
116
+ msgid "Type"
117
+ msgstr ""
118
+
119
+ #: admin/backups.php:39
120
+ msgid "Actions"
121
+ msgstr ""
122
+
123
+ #: admin/backups.php:62
124
+ msgid "This is where your backups will appear once you have one."
125
+ msgstr ""
126
+
127
+ #: admin/constants.php:3
128
+ #, php-format
129
+ msgid ""
130
+ "You can %1$s any of the following %2$s in your %3$s to control advanced "
131
+ "settings. %4$s. Defined %5$s will be highlighted."
132
+ msgstr ""
133
+
134
+ #: admin/constants.php:3 admin/menu.php:76
135
+ msgid "Constants"
136
+ msgstr ""
137
+
138
+ #: admin/constants.php:3
139
+ msgid "The Codex can help"
140
+ msgstr ""
141
+
142
+ #: admin/constants.php:8
143
+ #, php-format
144
+ msgid ""
145
+ "The path to folder you would like to store your backup files in, defaults to "
146
+ "%s."
147
+ msgstr ""
148
+
149
+ #: admin/constants.php:8 admin/constants.php:11 admin/constants.php:14
150
+ #: admin/constants.php:17 admin/constants.php:20 admin/constants.php:23
151
+ #: admin/constants.php:26 admin/constants.php:29 admin/constants.php:32
152
+ #: admin/constants.php:35 admin/constants.php:38 admin/constants.php:41
153
+ msgid "e.g."
154
+ msgstr ""
155
+
156
+ #: admin/constants.php:11
157
+ #, php-format
158
+ msgid ""
159
+ "The path to your %1$s executable. Will be used for the %2$s part of the back "
160
+ "up if available."
161
+ msgstr ""
162
+
163
+ #: admin/constants.php:11 admin/constants.php:14 admin/constants.php:23
164
+ #: admin/constants.php:26
165
+ msgid "database"
166
+ msgstr ""
167
+
168
+ #: admin/constants.php:14
169
+ #, php-format
170
+ msgid ""
171
+ "The path to your %1$s executable. Will be used to zip up your %2$s and %3$s "
172
+ "if available."
173
+ msgstr ""
174
+
175
+ #: admin/constants.php:14 admin/constants.php:23 admin/constants.php:26
176
+ msgid "files"
177
+ msgstr ""
178
+
179
+ #: admin/constants.php:17
180
+ #, php-format
181
+ msgid ""
182
+ "Completely disables the automatic back up. You can still back up using the "
183
+ "\"Back Up Now\" button. Defaults to %s."
184
+ msgstr ""
185
+
186
+ #: admin/constants.php:20
187
+ #, php-format
188
+ msgid ""
189
+ "Number of backups to keep, older backups will be deleted automatically when "
190
+ "a new backup is completed. Defaults to %s."
191
+ msgstr ""
192
+
193
+ #: admin/constants.php:23 admin/constants.php:26
194
+ #, php-format
195
+ msgid "Backup %1$s only, your %2$s won't be backed up. Defaults to %3$s."
196
+ msgstr ""
197
+
198
+ #: admin/constants.php:29
199
+ #, php-format
200
+ msgid "The time that the daily back up should run. Defaults to %s."
201
+ msgstr ""
202
+
203
+ #: admin/constants.php:32
204
+ #, php-format
205
+ msgid ""
206
+ "Attempt to email a copy of your backups. Value should be email address to "
207
+ "send backups to. Defaults to %s."
208
+ msgstr ""
209
+
210
+ #: admin/constants.php:35
211
+ msgid ""
212
+ "Comma separated list of files or directories to exclude, the backups "
213
+ "directory is automatically excluded."
214
+ msgstr ""
215
+
216
+ #: admin/constants.php:38
217
+ #, php-format
218
+ msgid "The capability to use when calling %1$s. Defaults to %2$s."
219
+ msgstr ""
220
+
221
+ #: admin/constants.php:41
222
+ #, php-format
223
+ msgid "The root directory that is backed up. Defaults to %s."
224
+ msgstr ""
225
+
226
+ #: admin/menu.php:10 admin/page.php:5
227
+ msgid "Manage Backups"
228
+ msgstr ""
229
+
230
+ #: admin/menu.php:10 admin/menu.php:34
231
+ msgid "Backups"
232
+ msgstr ""
233
+
234
+ #: admin/menu.php:69
235
+ msgid "You are not using the latest stable version of BackUpWordPress"
236
+ msgstr ""
237
+
238
+ #: admin/menu.php:69
239
+ #, php-format
240
+ msgid ""
241
+ "The information below is for version %1$s. View the %2$s file for help "
242
+ "specific to version %3$s."
243
+ msgstr ""
244
+
245
+ #: admin/menu.php:75
246
+ msgid "FAQ"
247
+ msgstr ""
248
+
249
+ #: admin/menu.php:79
250
+ msgid "For more information:"
251
+ msgstr ""
252
+
253
+ #: admin/menu.php:81
254
+ msgid "Support Forums"
255
+ msgstr ""
256
+
257
+ #: admin/menu.php:82
258
+ msgid "Help with translation"
259
+ msgstr ""
260
+
261
+ #: admin/page.php:13
262
+ msgid ""
263
+ "You need to fix the issues detailed above before BackUpWordPress can start."
264
+ msgstr ""
265
+
266
+ #: admin/page.php:17
267
+ #, php-format
268
+ msgid ""
269
+ "If you need help getting things working you are more than welcome to email "
270
+ "us at %s and we'll do what we can."
271
+ msgstr ""
272
+
273
+ #: admin/schedule-form-excludes.php:7
274
+ msgid "Manage Exclude"
275
+ msgstr ""
276
+
277
+ #: admin/schedule-form-excludes.php:13
278
+ msgid "New Exclude Rule"
279
+ msgstr ""
280
+
281
+ #: admin/schedule-form-excludes.php:17
282
+ msgid "Preview"
283
+ msgstr ""
284
+
285
+ #: admin/schedule-form-excludes.php:27
286
+ msgid "Exclude Rules"
287
+ msgstr ""
288
+
289
+ #: admin/schedule-form-excludes.php:42
290
+ msgid "Remove"
291
+ msgstr ""
292
+
293
+ #: admin/schedule-form-excludes.php:59
294
+ msgid "Excluded"
295
+ msgstr ""
296
+
297
+ #: admin/schedule-form-excludes.php:60
298
+ msgid "Included"
299
+ msgstr ""
300
+
301
+ #: admin/schedule-form-excludes.php:63
302
+ msgid "Unreadable"
303
+ msgstr ""
304
+
305
+ #: admin/schedule-form-excludes.php:86
306
+ msgid "Unreadable files can't be backed up"
307
+ msgstr ""
308
+
309
+ #: admin/schedule-form-excludes.php:92
310
+ #, php-format
311
+ msgid "Your site is %s. Backups will be compressed and so will be smaller."
312
+ msgstr ""
313
+
314
+ #: admin/schedule-form-excludes.php:98
315
+ msgid "Close"
316
+ msgstr ""
317
+
318
+ #: admin/schedule-form.php:7
319
+ msgid "Schedule Settings"
320
+ msgstr ""
321
+
322
+ #: admin/schedule-form.php:11
323
+ msgid "Backup"
324
+ msgstr ""
325
+
326
+ #: admin/schedule-form.php:14
327
+ msgid "Both Database &amp; files"
328
+ msgstr ""
329
+
330
+ #: admin/schedule-form.php:15
331
+ msgid "Files only"
332
+ msgstr ""
333
+
334
+ #: admin/schedule-form.php:16
335
+ msgid "Database only"
336
+ msgstr ""
337
+
338
+ #: admin/schedule-form.php:23
339
+ msgid "Schedule"
340
+ msgstr ""
341
+
342
+ #: admin/schedule-form.php:39
343
+ msgid "Number of backups to store on this server"
344
+ msgstr ""
345
+
346
+ #: admin/schedule-form.php:43
347
+ msgid ""
348
+ "The number of previous backups to store on the server. past this limit the "
349
+ "oldest backups will be deleted automatically."
350
+ msgstr ""
351
+
352
+ #: admin/schedule.php:16
353
+ msgid "hourly on the hour"
354
+ msgstr ""
355
+
356
+ #: admin/schedule.php:16
357
+ #, php-format
358
+ msgid "hourly at %s minutes past the hour"
359
+ msgstr ""
360
+
361
+ #: admin/schedule.php:22
362
+ #, php-format
363
+ msgid "daily at %s"
364
+ msgstr ""
365
+
366
+ #: admin/schedule.php:34
367
+ #, php-format
368
+ msgid "every 12 hours at %s &amp; %s"
369
+ msgstr ""
370
+
371
+ #: admin/schedule.php:40
372
+ #, php-format
373
+ msgid "weekly on %s at %s"
374
+ msgstr ""
375
+
376
+ #: admin/schedule.php:46
377
+ #, php-format
378
+ msgid "fortnightly on %s at %s"
379
+ msgstr ""
380
+
381
+ #: admin/schedule.php:53
382
+ #, php-format
383
+ msgid "on the %s of each month at %s"
384
+ msgstr ""
385
+
386
+ #: admin/schedule.php:59
387
+ msgid "server"
388
+ msgstr ""
389
+
390
+ #: admin/schedule.php:66
391
+ #, php-format
392
+ msgid "store the only the last backup %s"
393
+ msgstr ""
394
+
395
+ #: admin/schedule.php:72
396
+ #, php-format
397
+ msgid "don't store any backups %s"
398
+ msgstr ""
399
+
400
+ #: admin/schedule.php:78
401
+ #, php-format
402
+ msgid "store only the last %s backups %s"
403
+ msgstr ""
404
+
405
+ #: admin/schedule.php:87
406
+ #, php-format
407
+ msgid "Backup my %s %s %s, %s. %s"
408
+ msgstr ""
409
+
410
+ #: admin/schedule.php:87
411
+ msgid "Backups will be compressed and should be smaller than this."
412
+ msgstr ""
413
+
414
+ #: classes/email.php:19
415
+ msgid "Email notification"
416
+ msgstr ""
417
+
418
+ #: classes/email.php:50
419
+ #, php-format
420
+ msgid "Send an email notification to %s"
421
+ msgstr ""
422
+
423
+ #: classes/email.php:72
424
+ #, php-format
425
+ msgid "%s isn't a valid email"
426
+ msgstr ""
427
+
428
+ #: classes/email.php:127
429
+ #, php-format
430
+ msgid "Backup of %s Failed"
431
+ msgstr ""
432
+
433
+ #: classes/email.php:137
434
+ #, php-format
435
+ msgid "Backup of %s"
436
+ msgstr ""
437
+
438
+ #: classes/schedule.php:460
439
+ msgid "Backup started"
440
+ msgstr ""
441
+
442
+ #: classes/schedule.php:511
443
+ msgid "Creating zip archive"
444
+ msgstr ""
445
+
446
+ #: classes/schedule.php:517
447
+ msgid "Dumping database"
448
+ msgstr ""
449
+
450
+ #: functions/core.php:192
451
+ msgid "BackUpWordPress has setup your default schedules."
452
+ msgstr ""
453
+
454
+ #: functions/core.php:192
455
+ msgid ""
456
+ "By default BackUpWordPress performs a daily backup of your database and a "
457
+ "weekly backup of your database &amp; files. You can modify these schedules "
458
+ "below."
459
+ msgstr ""
460
+
461
+ #: functions/core.php:273
462
+ #, php-format
463
+ msgid ""
464
+ "This %s file ensures that other people cannot download your backup files."
465
+ msgstr ""
466
+
467
+ #: functions/interface.php:27
468
+ msgid "Download"
469
+ msgstr ""
470
+
471
+ #: functions/interface.php:28 functions/interface.php:215
472
+ msgid "Delete"
473
+ msgstr ""
474
+
475
+ #: functions/interface.php:50 functions/interface.php:62
476
+ msgid "BackUpWordPress is almost ready."
477
+ msgstr ""
478
+
479
+ #: functions/interface.php:50
480
+ #, php-format
481
+ msgid ""
482
+ "The backups directory can't be created because your %1$s directory isn't "
483
+ "writable, run %2$s or %3$s or create the folder yourself."
484
+ msgstr ""
485
+
486
+ #: functions/interface.php:62
487
+ #, php-format
488
+ msgid ""
489
+ "Your backups directory isn't writable, run %1$s or %2$s or set the "
490
+ "permissions yourself."
491
+ msgstr ""
492
+
493
+ #: functions/interface.php:72
494
+ #, php-format
495
+ msgid ""
496
+ "%1$s is running in %2$s. Please contact your host and ask them to disable "
497
+ "%3$s."
498
+ msgstr ""
499
+
500
+ #: functions/interface.php:72
501
+ msgid "http://php.net/manual/en/features.safe-mode.php"
502
+ msgstr ""
503
+
504
+ #: functions/interface.php:72
505
+ msgid "Safe Mode"
506
+ msgstr ""
507
+
508
+ #: functions/interface.php:82
509
+ #, php-format
510
+ msgid ""
511
+ "Your custom backups directory %1$s doesn't exist and can't be created, your "
512
+ "backups will be saved to %2$s instead."
513
+ msgstr ""
514
+
515
+ #: functions/interface.php:92
516
+ #, php-format
517
+ msgid ""
518
+ "Your custom backups directory %1$s isn't writable, new backups will be saved "
519
+ "to %2$s instead."
520
+ msgstr ""
521
+
522
+ #: functions/interface.php:102
523
+ msgid "BackUpWordPress detected issues with your last backup."
524
+ msgstr ""
525
+
526
+ #: functions/interface.php:182
527
+ msgid "Database and Files"
528
+ msgstr ""
529
+
530
+ #: functions/interface.php:185
531
+ msgid "Files"
532
+ msgstr ""
533
+
534
+ #: functions/interface.php:188
535
+ msgid "Database"
536
+ msgstr ""
537
+
538
+ #: functions/interface.php:193
539
+ msgid "Unknown"
540
+ msgstr ""
541
+
542
+ #: functions/interface.php:201
543
+ msgid "cancel"
544
+ msgstr ""
545
+
546
+ #: functions/interface.php:207
547
+ msgid "Settings"
548
+ msgstr ""
549
+
550
+ #: functions/interface.php:210
551
+ msgid "Excludes"
552
+ msgstr ""
553
+
554
+ #: functions/interface.php:213
555
+ msgid "Run now"
556
+ msgstr ""
557
+
558
+ #: hm-backup/hm-backup.php:892
559
+ msgid "The backup file was not created"
560
+ msgstr ""
561
+
562
+ #: hm-backup/hm-backup.php:963
563
+ msgid "The following files are unreadable and couldn't be backed up: "
564
+ msgstr ""
backupwordpress/classes/email.php ADDED
@@ -0,0 +1,164 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,773 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ * Take a file size and return a human readable
53
+ * version
54
+ *
55
+ * @access public
56
+ * @static
57
+ * @param int $size
58
+ * @param string $unit. (default: null)
59
+ * @param string $format. (default: '%01.2f %s')
60
+ * @param bool $si. (default: true)
61
+ * @return int
62
+ */
63
+ public static function human_filesize( $size, $unit = null, $format = '%01.2f %s', $si = true ) {
64
+
65
+ // Units
66
+ if ( $si === true ) :
67
+ $sizes = array( 'B', 'kB', 'MB', 'GB', 'TB', 'PB' );
68
+ $mod = 1000;
69
+
70
+ else :
71
+ $sizes = array('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB');
72
+ $mod = 1024;
73
+
74
+ endif;
75
+
76
+ $ii = count( $sizes ) - 1;
77
+
78
+ // Max unit
79
+ $unit = array_search( (string) $unit, $sizes );
80
+
81
+ if ( is_null( $unit ) || $unit === false )
82
+ $unit = $ii;
83
+
84
+ // Loop
85
+ $i = 0;
86
+
87
+ while ( $unit != $i && $size >= 1024 && $i < $ii ) {
88
+ $size /= $mod;
89
+ $i++;
90
+ }
91
+
92
+ return sprintf( $format, $size, $sizes[$i] );
93
+
94
+ }
95
+
96
+ /**
97
+ * Setup the schedule object
98
+ *
99
+ * Loads the options from the database and populates properties
100
+ *
101
+ * @access public
102
+ * @param string $id
103
+ */
104
+ public function __construct( $id ) {
105
+
106
+ // Verify the schedule id
107
+ if ( ! is_string( $id ) || ! trim( $id ) || ! is_string( $id ) )
108
+ throw new Exception( 'Argument 1 for ' . __METHOD__ . ' must be a non empty string' );
109
+
110
+ // Setup HM Backup
111
+ parent::__construct();
112
+
113
+ // Store id for later
114
+ $this->id = $id;
115
+
116
+ // Load the options
117
+ $this->options = array_filter( (array) get_option( 'hmbkp_schedule_' . $this->get_id() ) );
118
+
119
+ // Some properties can be overridden with defines
120
+ if ( defined( 'HMBKP_ROOT' ) && HMBKP_ROOT )
121
+ $this->set_root( HMBKP_ROOT );
122
+
123
+ if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH )
124
+ $this->set_path( HMBKP_PATH );
125
+
126
+ if ( defined( 'HMBKP_EXCLUDE' ) && HMBKP_EXCLUDE )
127
+ parent::set_excludes( HMBKP_EXCLUDE, true );
128
+
129
+ if ( defined( 'HMBKP_MYSQLDUMP_PATH' ) )
130
+ $this->set_mysqldump_command_path( HMBKP_MYSQLDUMP_PATH );
131
+
132
+ if ( defined( 'HMBKP_ZIP_PATH' ) )
133
+ $this->set_zip_command_path( HMBKP_ZIP_PATH );
134
+
135
+ if ( defined( 'HMBKP_ZIP_PATH' ) && HMBKP_ZIP_PATH === 'PclZip' && $this->skip_zip_archive = true )
136
+ $this->set_zip_command_path( false );
137
+
138
+ // Set the path - TODO remove external function dependancy
139
+ $this->set_path( hmbkp_path() );
140
+
141
+ // Set the archive filename to site name + schedule slug + date
142
+ $this->set_archive_filename( implode( '-', array( get_bloginfo( 'name' ), $this->get_id(), $this->get_type(), date( 'Y-m-d-H-i-s', current_time( 'timestamp' ) ) ) ) . '.zip' );
143
+
144
+ }
145
+
146
+ /**
147
+ * Get the id for this schedule
148
+ *
149
+ * @access public
150
+ */
151
+ public function get_id() {
152
+ return esc_attr( $this->id );
153
+ }
154
+
155
+ /**
156
+ * Get a slugified version of name
157
+ *
158
+ * @access public
159
+ */
160
+ public function get_slug() {
161
+
162
+ // We cache slug in $this to save expensive calls to sanitize_title
163
+ if ( isset( $this->slug ) )
164
+ return $this->slug;
165
+
166
+ return $this->slug = sanitize_title( $this->get_name() );
167
+
168
+ }
169
+
170
+ /**
171
+ * Get the name of this backup schedule
172
+ *
173
+ * @access public
174
+ * @return string
175
+ */
176
+ public function get_name() {
177
+
178
+ return ucwords( $this->get_type() ) . ' ' . $this->get_reoccurrence();
179
+
180
+ }
181
+
182
+ /**
183
+ * Get the type of backup
184
+ *
185
+ * @access public
186
+ * @return string
187
+ */
188
+ public function get_type() {
189
+
190
+ if ( empty( $this->options['type'] ) )
191
+ $this->set_type( 'complete' );
192
+
193
+ return $this->options['type'];
194
+
195
+ }
196
+
197
+ /**
198
+ * Set the type of backup
199
+ *
200
+ * @access public
201
+ * @param string $type
202
+ */
203
+ public function set_type( $type ) {
204
+
205
+ parent::set_type( $type );
206
+
207
+ $this->options['type'] = $type;
208
+
209
+ $this->clear_filesize_cache();
210
+
211
+ }
212
+
213
+ /**
214
+ * Get the exclude rules
215
+ *
216
+ * @access public
217
+ * @return array
218
+ */
219
+ public function get_excludes() {
220
+
221
+ if ( ! empty( $this->options['excludes'] ) )
222
+ parent::set_excludes( $this->options['excludes'] );
223
+
224
+ return parent::get_excludes();
225
+
226
+ }
227
+
228
+ /**
229
+ * Set the exclude rules
230
+ *
231
+ * @access public
232
+ * @param mixed $excludes A comma separated list or array of exclude rules
233
+ * @param bool $append Whether to replace or append to existing rules
234
+ * @return string
235
+ */
236
+ public function set_excludes( $excludes, $append = false ) {
237
+
238
+ // Use the validation from HM_Backup::set_excludes
239
+ parent::set_excludes( $excludes, $append );
240
+
241
+ // If these are valid excludes and they are different save them
242
+ if ( parent::get_excludes() && ( empty( $this->options['excludes'] ) || $this->options['excludes'] !== parent::get_excludes() ) ) {
243
+
244
+ $this->options['excludes'] = $append && ! empty( $this->options['excludes'] ) ? array_merge( (array) $this->options['excludes'], parent::get_excludes() ) : parent::get_excludes();;
245
+
246
+ parent::set_excludes( $this->options['excludes'] );
247
+
248
+ $this->clear_filesize_cache();
249
+
250
+ }
251
+
252
+ }
253
+
254
+ /**
255
+ * Get the maximum number of backups to keep
256
+ *
257
+ * @access public
258
+ */
259
+ public function get_max_backups() {
260
+
261
+ if ( empty( $this->options['max_backups'] ) )
262
+ $this->set_max_backups( 10 );
263
+
264
+ return (int) esc_attr( $this->options['max_backups'] );
265
+
266
+ }
267
+
268
+ /**
269
+ * Set the maximum number of backups to keep
270
+ *
271
+ * @access public
272
+ * @param int $max
273
+ */
274
+ public function set_max_backups( $max ) {
275
+
276
+ if ( empty( $max ) || ! is_int( $max ) )
277
+ throw new Exception( 'Argument 1 for ' . __METHOD__ . ' must be a valid integer' );
278
+
279
+ $this->options['max_backups'] = $max;
280
+
281
+ }
282
+
283
+ /**
284
+ * Get the array of services options for this schedule
285
+ *
286
+ * @access public
287
+ * @return array
288
+ */
289
+ public function get_service_options( $service, $option = null ) {
290
+
291
+ if ( ! is_null( $option ) && isset( $this->options[$service][$option] ) )
292
+ return $this->options[$service][$option];
293
+
294
+ if ( isset( $this->options[$service] ) )
295
+ return $this->options[$service];
296
+
297
+ return array();
298
+
299
+ }
300
+
301
+ /**
302
+ * Set the service options for this schedule
303
+ *
304
+ * @access public
305
+ */
306
+ public function set_service_options( $service, Array $options ) {
307
+
308
+ $this->options[$service] = $options;
309
+
310
+ }
311
+
312
+ /**
313
+ * Calculate the size of the backup
314
+ *
315
+ * Doesn't account for
316
+ * compression
317
+ *
318
+ * @access public
319
+ * @param bool $cached Whether to return from cache
320
+ * @return string
321
+ */
322
+ public function get_filesize( $cached = true ) {
323
+
324
+ if ( ! $cached || ! $filesize = get_transient( 'hmbkp_schedule_' . $this->get_id() . '_filesize' ) ) {
325
+
326
+ $filesize = 0;
327
+
328
+ // Don't include database if file only
329
+ if ( $this->get_type() != 'file' ) {
330
+
331
+ global $wpdb;
332
+
333
+ $res = $wpdb->get_results( 'SHOW TABLE STATUS FROM `' . DB_NAME . '`', ARRAY_A );
334
+
335
+ foreach ( $res as $r )
336
+ $filesize += (float) $r['Data_length'];
337
+
338
+ }
339
+
340
+ // Don't include files if database only
341
+ if ( $this->get_type() != 'database' ) {
342
+
343
+ // Get rid of any cached filesizes
344
+ clearstatcache();
345
+
346
+ $excludes = $this->exclude_string( 'regex' );
347
+
348
+ foreach ( $this->get_files() as $file ) {
349
+
350
+ if ( $file === '.' || $file === '..' || ! $file->isReadable() )
351
+ continue;
352
+
353
+ // Excludes
354
+ if ( $excludes && preg_match( '(' . $excludes . ')', str_ireplace( trailingslashit( $this->get_root() ), '', $this->conform_dir( $file->getPathname() ) ) ) )
355
+ continue;
356
+
357
+ $filesize += (float) $file->getSize();
358
+
359
+ }
360
+
361
+ }
362
+
363
+ // Cache for a day
364
+ set_transient( 'hmbkp_schedule_' . $this->get_id() . '_filesize', $filesize, time() + 60 * 60 * 24 );
365
+
366
+ }
367
+
368
+ return self::human_filesize( $filesize, null, '%01u %s' );
369
+
370
+ }
371
+
372
+ /**
373
+ * Check whether the filesize has already been calculated and cached.
374
+ *
375
+ * @access public
376
+ * @return void
377
+ */
378
+ public function is_filesize_cached() {
379
+ return (bool) get_transient( 'hmbkp_schedule_' . $this->get_id() . '_filesize' );
380
+ }
381
+
382
+ /**
383
+ * Clear the cached filesize, forces the filesize to be re-calculated the next
384
+ * time get_filesize is called
385
+ *
386
+ * @access public
387
+ * @return void
388
+ */
389
+ public function clear_filesize_cache() {
390
+ delete_transient( 'hmbkp_schedule_' . $this->get_id() . '_filesize' );
391
+ }
392
+
393
+ /**
394
+ * Get the start time for the schedule
395
+ *
396
+ * @access public
397
+ * @return int timestamp || 0 for manual only schedules
398
+ */
399
+ public function get_schedule_start_time() {
400
+
401
+ if ( $this->get_reoccurrence() === 'manually' )
402
+ return 0;
403
+
404
+ if ( ! $this->schedule_start_time ) {
405
+
406
+ if ( strtotime( '11pm' ) < strtotime( 'now' ) )
407
+ $date = strtotime( 'tomorrow 11pm' );
408
+ else
409
+ $date = strtotime( '11pm' );
410
+
411
+ $date -= ( get_option( 'gmt_offset' ) * 3600 );
412
+
413
+ $this->set_schedule_start_time( $date );
414
+ }
415
+ return $this->schedule_start_time;
416
+
417
+ }
418
+
419
+ /**
420
+ * Set the schedule start time.
421
+ *
422
+ * @access public
423
+ * @param int $timestamp
424
+ * @return void
425
+ */
426
+ public function set_schedule_start_time( $timestamp ) {
427
+
428
+ if ( (string) (int) $timestamp !== (string) $timestamp )
429
+ throw new Exception( 'Argument 1 for ' . __METHOD__ . ' must be a valid UNIX timestamp' );
430
+
431
+ $this->schedule_start_time = $timestamp;
432
+
433
+ }
434
+
435
+ /**
436
+ * Get the schedule reoccurrence
437
+ *
438
+ * @access public
439
+ */
440
+ public function get_reoccurrence() {
441
+
442
+ // Default to no reoccurrence
443
+ if ( empty( $this->options['reoccurrence'] ) )
444
+ $this->set_reoccurrence( 'manually' );
445
+
446
+ return esc_attr( $this->options['reoccurrence'] );
447
+
448
+ }
449
+
450
+ /**
451
+ * Set the schedule reoccurrence
452
+ *
453
+ * @access public
454
+ * @param string $reoccurrence
455
+ */
456
+ public function set_reoccurrence( $reoccurrence ) {
457
+
458
+ // Check it's valid
459
+ if ( ! is_string( $reoccurrence ) || ! trim( $reoccurrence ) || ( ! in_array( $reoccurrence, array_keys( wp_get_schedules() ) ) ) && $reoccurrence !== 'manually' )
460
+ throw new Exception( 'Argument 1 for ' . __METHOD__ . ' must be a valid cron reoccurrence or "manually"' );
461
+
462
+ if ( isset( $this->options['reoccurrence'] ) && $this->options['reoccurrence'] === $reoccurrence )
463
+ return;
464
+
465
+ $this->options['reoccurrence'] = $reoccurrence;
466
+
467
+ if ( $reoccurrence === 'manually' )
468
+ $this->unschedule();
469
+
470
+ else
471
+ $this->schedule();
472
+
473
+ }
474
+
475
+ /**
476
+ * Get the interval between backups
477
+ *
478
+ * @access public
479
+ * @return int
480
+ */
481
+ public function get_interval() {
482
+
483
+ $schedules = wp_get_schedules();
484
+
485
+ if ( $this->get_reoccurrence() === 'manually' )
486
+ return 0;
487
+
488
+ return $schedules[$this->get_reoccurrence()]['interval'];
489
+
490
+ }
491
+
492
+ /**
493
+ * Get the next occurrence of this scheduled backup
494
+ *
495
+ * @access public
496
+ */
497
+ public function get_next_occurrence() {
498
+
499
+ return wp_next_scheduled( 'hmbkp_schedule_hook', array( 'id' => $this->get_id() ) );
500
+
501
+ }
502
+
503
+ private function get_schedule_running_path() {
504
+ return $this->get_path() . '/.schedule-' . $this->get_id() . '-running';
505
+ }
506
+
507
+ /**
508
+ * Schedule the cron
509
+ *
510
+ * @access public
511
+ */
512
+ public function schedule() {
513
+
514
+ // Clear any existing hooks
515
+ $this->unschedule();
516
+
517
+ wp_schedule_event( $this->get_schedule_start_time(), $this->get_reoccurrence(), 'hmbkp_schedule_hook', array( 'id' => $this->get_id() ) );
518
+ }
519
+
520
+ public function unschedule() {
521
+ wp_clear_scheduled_hook( 'hmbkp_schedule_hook', array( 'id' => $this->get_id() ) );
522
+ }
523
+
524
+ /**
525
+ * Run the backup
526
+ *
527
+ * @access public
528
+ */
529
+ public function run() {
530
+
531
+ // Mark the backup as started
532
+ $this->set_status( __( 'Backup started', 'hmbkp' ) );
533
+
534
+ $this->backup();
535
+
536
+ // Delete the backup running file
537
+ if ( file_exists( $this->get_schedule_running_path() ) )
538
+ unlink( $this->get_schedule_running_path() );
539
+
540
+ $this->delete_old_backups();
541
+
542
+ }
543
+
544
+ /**
545
+ * Get the status of the running backup.
546
+ *
547
+ * @access public
548
+ * @return string
549
+ */
550
+ public function get_status() {
551
+
552
+ if ( ! file_exists( $this->get_schedule_running_path() ) )
553
+ return '';
554
+
555
+ return end( explode( '::', file_get_contents( $this->get_schedule_running_path() ) ) );
556
+
557
+ }
558
+
559
+ /**
560
+ * Get the filename that the running status is stored in.
561
+ *
562
+ * @access public
563
+ * @return string
564
+ */
565
+ public function get_running_backup_filename() {
566
+
567
+ if ( ! file_exists( $this->get_schedule_running_path() ) )
568
+ return '';
569
+
570
+ return reset( explode( '::', file_get_contents( $this->get_schedule_running_path() ) ) );
571
+ }
572
+
573
+ /**
574
+ * Set the status of the running backup
575
+ *
576
+ * @access public
577
+ * @param string $message
578
+ * @return void
579
+ */
580
+ protected function set_status( $message ) {
581
+
582
+ if ( ! $handle = fopen( $this->get_schedule_running_path(), 'w' ) )
583
+ return;
584
+
585
+ fwrite( $handle, $this->get_archive_filename() . '::' . $message );
586
+
587
+ fclose( $handle );
588
+
589
+ }
590
+
591
+ /**
592
+ * Hook into the actions fired in HM Backup and set the status
593
+ *
594
+ * @return null
595
+ */
596
+ protected function do_action( $action ) {
597
+
598
+ switch ( $action ) :
599
+
600
+ case 'hmbkp_archive_started' :
601
+
602
+ $this->set_status( __( 'Creating zip archive', 'hmbkp' ) );
603
+
604
+ break;
605
+
606
+ case 'hmbkp_mysqldump_started' :
607
+
608
+ $this->set_status( __( 'Dumping database', 'hmbkp' ) );
609
+
610
+ break;
611
+
612
+ case 'hmbkp_backup_complete' :
613
+
614
+ if ( $this->get_errors() ) {
615
+
616
+ $file = $this->get_path() . '/.backup_errors';
617
+
618
+ if ( file_exists( $file ) )
619
+ unlink( $file );
620
+
621
+ if ( ! $handle = @fopen( $file, 'w' ) )
622
+ return;
623
+
624
+ fwrite( $handle, json_encode( $this->get_errors() ) );
625
+
626
+ fclose( $handle );
627
+
628
+ }
629
+
630
+ if ( $this->get_warnings() ) {
631
+
632
+ $file = $this->get_path() . '/.backup_warnings';
633
+
634
+ if ( file_exists( $file ) )
635
+ unlink( $file );
636
+
637
+ if ( ! $handle = @fopen( $file, 'w' ) )
638
+ return;
639
+
640
+ fwrite( $handle, json_encode( $this->get_warnings() ) );
641
+
642
+ fclose( $handle );
643
+
644
+ }
645
+
646
+ break;
647
+
648
+ endswitch;
649
+
650
+ // Pass the actions to all the services
651
+ foreach ( HMBKP_Services::get_services( $this ) as $service )
652
+ $service->action( $action );
653
+
654
+ // Fire the parent function as well
655
+ parent::do_action( $action );
656
+
657
+ }
658
+
659
+ /**
660
+ * Get the backups created by this schedule
661
+ *
662
+ * @todo look into using recursiveDirectoryIterator and recursiveRegexIterator
663
+ * @access public
664
+ * @return string[] - file paths of the backups
665
+ */
666
+ public function get_backups() {
667
+
668
+ $files = array();
669
+
670
+ if ( $handle = @opendir( $this->get_path() ) ) {
671
+
672
+ while ( false !== ( $file = readdir( $handle ) ) )
673
+ if ( pathinfo( $file, PATHINFO_EXTENSION ) === 'zip' && strpos( $file, $this->get_id() ) !== false && $this->get_running_backup_filename() != $file )
674
+ $files[@filemtime( trailingslashit( $this->get_path() ) . $file )] = trailingslashit( $this->get_path() ) . $file;
675
+
676
+ closedir( $handle );
677
+
678
+ }
679
+
680
+ krsort( $files );
681
+
682
+ return $files;
683
+
684
+ }
685
+
686
+ /**
687
+ * Delete old backups
688
+ *
689
+ * @access private
690
+ */
691
+ public function delete_old_backups() {
692
+
693
+ if ( count( $this->get_backups() ) <= $this->get_max_backups() )
694
+ return;
695
+
696
+ array_map( array( $this, 'delete_backup' ), array_slice( $this->get_backups(), $this->get_max_backups() ) );
697
+
698
+ }
699
+
700
+ /**
701
+ * Delete a specific back up file created by this schedule
702
+ *
703
+ * @access public
704
+ * @param string $filepath
705
+ */
706
+ public function delete_backup( $filepath ) {
707
+
708
+ // Check that it's a valid filepath
709
+ if ( empty( $filepath ) || ! is_string( $filepath ) )
710
+ throw new Exception( 'Argument 1 for ' . __METHOD__ . ' must be a non empty string' );
711
+
712
+ // Make sure it exists
713
+ if ( ! file_exists( $filepath ) )
714
+ throw new Exception( $filepath . ' doesn\'t exist' );
715
+
716
+ // Make sure it was created by this schedule
717
+ if ( strpos( $filepath, $this->get_id() ) === false )
718
+ throw new Exception( 'That backup wasn\'t created by this schedule' );
719
+
720
+ unlink( $filepath );
721
+
722
+ }
723
+
724
+ /**
725
+ * Delete all back up files created by this schedule
726
+ *
727
+ * @access public
728
+ */
729
+ public function delete_backups() {
730
+
731
+ array_map( array( $this, 'delete_backup' ), $this->get_backups() );
732
+
733
+ }
734
+
735
+ /**
736
+ * Save the schedules options.
737
+ *
738
+ * @access public
739
+ */
740
+ public function save() {
741
+
742
+ // Only save them if they have changed
743
+ if ( $this->options !== get_option( 'hmbkp_schedule_' . $this->get_id() ) )
744
+ update_option( 'hmbkp_schedule_' . $this->get_id(), $this->options );
745
+
746
+ }
747
+
748
+ /**
749
+ * Cancel this schedule
750
+ *
751
+ * Cancels the cron job, removes the schedules options
752
+ * and optionally deletes all backups crated by
753
+ * this schedule.
754
+ *
755
+ * @access public
756
+ */
757
+ public function cancel() {
758
+
759
+ // Delete the schedule options
760
+ delete_option( 'hmbkp_schedule_' . $this->get_id() );
761
+
762
+ // Clear any existing schedules
763
+ $this->unschedule();
764
+
765
+ // Clear the filesize transient
766
+ $this->clear_filesize_cache();
767
+
768
+ // Delete it's backups
769
+ $this->delete_backups();
770
+
771
+ }
772
+
773
+ }
backupwordpress/classes/schedules.php ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,233 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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( __( 'Backup not possible when php is running safe_mode on', 'hmbkp' ) );
17
+ return false;
18
+ }
19
+
20
+ add_action( 'hmbkp_mysqldump_started', function() {
21
+ WP_CLI::line( __( 'Backup: Dumping database...', 'hmbkp' ) );
22
+ } );
23
+
24
+ add_action( 'hmbkp_archive_started', function() {
25
+ WP_CLI::line( __( 'Backup: Zipping everything up...', 'hmbkp' ) );
26
+ } );
27
+
28
+ // Clean up any mess left by a previous backup
29
+ hmbkp_cleanup();
30
+
31
+ $hm_backup = new HM_Backup();
32
+
33
+ if ( ! empty( $assoc_args['path'] ) )
34
+ $hm_backup->set_path( $assoc_args['path'] );
35
+
36
+ if ( ! empty( $assoc_args['root'] ) )
37
+ $hm_backup->set_root( $assoc_args['root'] );
38
+
39
+ 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() ) ) {
40
+ WP_CLI::error( __( 'Invalid backup path', 'hmbkp' ) );
41
+ return false;
42
+ }
43
+
44
+ if ( ! is_dir( $hm_backup->get_root() ) || ! is_readable( $hm_backup->get_root() ) ) {
45
+ WP_CLI::error( __( 'Invalid root path', 'hmbkp' ) );
46
+ return false;
47
+ }
48
+
49
+ if ( ! empty( $assoc_args['files_only'] ) )
50
+ $hm_backup->set_type( 'file' );
51
+
52
+ if ( ! empty( $assoc_args['database_only'] ) )
53
+ $hm_backup->set_type( 'database' );
54
+
55
+ if ( isset( $assoc_args['mysqldump_command_path'] ) )
56
+ $hm_backup->set_mysqldump_command_path( $assoc_args['mysqldump_command_path'] );
57
+
58
+ if ( isset( $assoc_args['zip_command_path'] ) )
59
+ $hm_backup->set_zip_command_path( $assoc_args['zip_command_path'] );
60
+
61
+ if ( ! empty( $assoc_args['excludes'] ) )
62
+ $hm_backup->set_excludes( $assoc_args['excludes'] );
63
+
64
+ $hm_backup->backup();
65
+
66
+ // Delete any old backup files
67
+ //hmbkp_delete_old_backups();
68
+
69
+ if ( file_exists( $hm_backup->get_archive_filepath() ) )
70
+ WP_CLI::success( __( 'Backup Complete: ', 'hmbkp' ) . $hm_backup->get_archive_filepath() );
71
+
72
+ else
73
+ WP_CLI::error( __( 'Backup Failed', 'hmbkp' ) );
74
+
75
+ }
76
+
77
+ static function help() {
78
+
79
+ WP_CLI::line( <<<EOB
80
+ usage: wp backup [--files_only] [--database_only] [--path<dir>] [--root<dir>] [--zip_command_path=<path>] [--mysqldump_command_path=<path>]
81
+
82
+ --files_only Backup files only, default to off
83
+ --database_only Backup database only, defaults to off
84
+ --path dir that the backup should be save in, defaults to wp-content/backups/
85
+ --root dir that should be backed up, defaults to site root.
86
+ --zip_command_path path to your zip binary, standard locations are automatically used
87
+ --mysqldump_command_path path to your mysqldump binary, standard locations are automatically used
88
+
89
+ EOB
90
+ );
91
+
92
+ }
93
+
94
+ }
95
+ WP_CLI::addCommand( 'backup', 'BackUpCommand' );
backupwordpress/functions/core.php ADDED
@@ -0,0 +1,363 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 cron
37
+ wp_clear_scheduled_hook( 'hmbkp_schedule_backup_hook' );
38
+ wp_clear_scheduled_hook( 'hmbkp_schedule_single_backup_hook' );
39
+
40
+ hmbkp_cleanup();
41
+
42
+ }
43
+
44
+ /**
45
+ * Handles anything that needs to be
46
+ * done when the plugin is updated
47
+ */
48
+ function hmbkp_update() {
49
+
50
+ // Update from backUpWordPress 0.4.5
51
+ if ( get_option( 'bkpwp_max_backups' ) ) {
52
+
53
+ // Carry over the custom path
54
+ if ( $legacy_path = get_option( 'bkpwppath' ) )
55
+ update_option( 'hmbkp_path', $legacy_path );
56
+
57
+ // Options to remove
58
+ $legacy_options = array(
59
+ 'bkpwp_archive_types',
60
+ 'bkpwp_automail_from',
61
+ 'bkpwp_domain',
62
+ 'bkpwp_domain_path',
63
+ 'bkpwp_easy_mode',
64
+ 'bkpwp_excludelists',
65
+ 'bkpwp_install_user',
66
+ 'bkpwp_listmax_backups',
67
+ 'bkpwp_max_backups',
68
+ 'bkpwp_presets',
69
+ 'bkpwp_reccurrences',
70
+ 'bkpwp_schedules',
71
+ 'bkpwp_calculation',
72
+ 'bkpwppath',
73
+ 'bkpwp_status_config',
74
+ 'bkpwp_status'
75
+ );
76
+
77
+ foreach ( $legacy_options as $option )
78
+ delete_option( $option );
79
+
80
+ global $wp_roles;
81
+
82
+ $wp_roles->remove_cap( 'administrator','manage_backups' );
83
+ $wp_roles->remove_cap( 'administrator','download_backups' );
84
+
85
+ wp_clear_scheduled_hook( 'bkpwp_schedule_bkpwp_hook' );
86
+
87
+ }
88
+
89
+ // Version 1 to 2
90
+ if ( version_compare ( '2.0' , get_option( 'hmbkp_plugin_version' ) ) ) {
91
+
92
+ /**
93
+ * Setup a backwards compatible schedule
94
+ */
95
+ $legacy_schedule = new HMBKP_Scheduled_Backup( 'backup' );
96
+
97
+ // Backup type
98
+ if ( ( defined( 'HMBKP_FILES_ONLY' ) && HMBKP_FILES_ONLY ) || get_option( 'hmbkp_files_only' ) )
99
+ $legacy_schedule->set_type( 'file' );
100
+
101
+ elseif ( ( defined( 'HMBKP_DATABASE_ONLY' ) && HMBKP_DATABASE_ONLY ) || get_option( 'hmbkp_database_only' ) )
102
+ $legacy_schedule->set_type( 'database' );
103
+
104
+ else
105
+ $legacy_schedule->set_type( 'complete' );
106
+
107
+ // Daily schedule time
108
+ if ( defined( 'HMBKP_DAILY_SCHEDULE_TIME' ) && HMBKP_DAILY_SCHEDULE_TIME )
109
+ $legacy_schedule->set_schedule_start_time( strtotime( HMBKP_DAILY_SCHEDULE_TIME ) );
110
+
111
+ // Backup schedule
112
+ $legacy_schedule->set_reoccurrence( str_replace( 'hmbkp_', '', get_option( 'hmbkp_schedule_frequency', 'daily' ) ) );
113
+
114
+ // Automatic backups disabled?
115
+ if ( ( defined( 'HMBKP_DISABLE_AUTOMATIC_BACKUP' ) && HMBKP_DISABLE_AUTOMATIC_BACKUP ) || get_option( 'hmbkp_disable_automatic_backup' ) )
116
+ $legacy_schedule->set_reoccurrence( 'manually' );
117
+
118
+ // Max backups
119
+ if ( defined( 'HMBKP_MAX_BACKUPS' ) && is_numeric( HMBKP_MAX_BACKUPS ) )
120
+ $legacy_schedule->set_max_backups( (int) HMBKP_MAX_BACKUPS );
121
+
122
+ else
123
+ $legacy_schedule->set_max_backups( (int) get_option( 'hmbkp_max_backups', 10 ) );
124
+
125
+ // Excludes
126
+ if ( get_option( 'hmbkp_excludes' ) )
127
+ $legacy_schedule->set_excludes( get_option( 'hmbkp_excludes' ) );
128
+
129
+ // Backup email
130
+ if ( defined( 'HMBKP_EMAIL' ) && is_email( HMBKP_EMAIL ) )
131
+ $legacy_schedule->set_service_options( 'HMBKP_Email_Service', array( 'email' => HMBKP_EMAIL ) );
132
+
133
+ elseif ( is_email( get_option( 'hmbkp_email_address' ) ) )
134
+ $legacy_schedule->set_service_options( 'HMBKP_Email_Service', array( 'email' => get_option( 'hmbkp_email_address' ) ) );
135
+
136
+ // Set the archive filename to what it used to be
137
+ $legacy_schedule->set_archive_filename( implode( '-', array( get_bloginfo( 'name' ), 'backup', date( 'Y-m-d-H-i-s', current_time( 'timestamp' ) ) ) ) . '.zip' );
138
+
139
+ $legacy_schedule->save();
140
+
141
+ // Remove the legacy options
142
+ foreach ( array( 'hmbkp_email', 'hmbkp_database_only', 'hmbkp_files_only', 'hmbkp_max_backups', 'hmbkp_email_address', 'hmbkp_email', 'hmbkp_schedule_frequency', 'hmbkp_disable_automatic_backup' ) as $option_name )
143
+ delete_option( $option_name );
144
+
145
+
146
+ }
147
+
148
+ // Every update
149
+ if ( version_compare( HMBKP_VERSION, get_option( 'hmbkp_plugin_version' ), '>' ) ) {
150
+
151
+ hmbkp_deactivate();
152
+
153
+ // Force .htaccess to be re-written
154
+ if ( file_exists( hmbkp_path() . '/.htaccess' ) )
155
+ unlink( hmbkp_path() . '/.htaccess' );
156
+
157
+ }
158
+
159
+ // Update the stored version
160
+ if ( get_option( 'hmbkp_plugin_version' ) !== HMBKP_VERSION )
161
+ update_option( 'hmbkp_plugin_version', HMBKP_VERSION );
162
+
163
+ }
164
+
165
+ /**
166
+ * Setup the default backup schedules
167
+ */
168
+ function hmbkp_setup_default_schedules() {
169
+
170
+ $schedules = new HMBKP_Schedules;
171
+
172
+ if ( $schedules->get_schedules() )
173
+ return;
174
+
175
+ /**
176
+ * Schedule a database backup daily and store backups
177
+ * for the last 2 weeks
178
+ */
179
+ $database_daily = new HMBKP_Scheduled_Backup( 'default-1' );
180
+ $database_daily->set_type( 'database' );
181
+ $database_daily->set_reoccurrence( 'daily' );
182
+ $database_daily->set_max_backups( 14 );
183
+ $database_daily->save();
184
+
185
+ /**
186
+ * Schedule a complete backup to run weekly and store backups for
187
+ * the last 3 months
188
+ */
189
+ $complete_weekly = new HMBKP_Scheduled_Backup( 'default-2' );
190
+ $complete_weekly->set_type( 'complete' );
191
+ $complete_weekly->set_reoccurrence( 'weekly' );
192
+ $complete_weekly->set_max_backups( 12 );
193
+ $complete_weekly->save();
194
+
195
+ function hmbkp_default_schedules_setup_warning() {
196
+ 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>';
197
+ }
198
+ add_action( 'admin_notices', 'hmbkp_default_schedules_setup_warning' );
199
+
200
+ }
201
+ add_action( 'admin_init', 'hmbkp_setup_default_schedules' );
202
+
203
+ /**
204
+ * Add weekly, fortnightly and monthly as a cron schedule choices
205
+ *
206
+ * @param array $reccurrences
207
+ * @return array $reccurrences
208
+ */
209
+ function hmbkp_more_reccurences( $reccurrences ) {
210
+
211
+ return array_merge( $reccurrences, array(
212
+ 'weekly' => array( 'interval' => 604800, 'display' => 'Once Weekly' ),
213
+ 'fortnightly' => array( 'interval' => 1209600, 'display' => 'Once Fortnightly' ),
214
+ 'monthly' => array( 'interval' => 2629743.83 , 'display' => 'Once Monthly' )
215
+ ) );
216
+ }
217
+ add_filter( 'cron_schedules', 'hmbkp_more_reccurences' );
218
+
219
+ /**
220
+ * Recursively delete a directory including
221
+ * all the files and sub-directories.
222
+ *
223
+ * @param string $dir
224
+ */
225
+ function hmbkp_rmdirtree( $dir ) {
226
+
227
+ if ( is_file( $dir ) )
228
+ @unlink( $dir );
229
+
230
+ if ( ! is_dir( $dir ) )
231
+ return false;
232
+
233
+ $files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $dir ), RecursiveIteratorIterator::CHILD_FIRST, RecursiveIteratorIterator::CATCH_GET_CHILD );
234
+
235
+ foreach ( $files as $file ) {
236
+
237
+ if ( $file->isDir() )
238
+ @rmdir( $file->getPathname() );
239
+
240
+ else
241
+ @unlink( $file->getPathname() );
242
+
243
+ }
244
+
245
+ @rmdir( $dir );
246
+
247
+ }
248
+
249
+ /**
250
+ * Get the path to the backups directory
251
+ *
252
+ * Will try to create it if it doesn't exist
253
+ * and will fallback to default if a custom dir
254
+ * isn't writable.
255
+ */
256
+ function hmbkp_path() {
257
+
258
+ $path = get_option( 'hmbkp_path' );
259
+
260
+ // Allow the backups path to be defined
261
+ if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH )
262
+ $path = HMBKP_PATH;
263
+
264
+ // If the dir doesn't exist or isn't writable then use wp-content/backups instead
265
+ if ( ( ! $path || ! is_writable( $path ) ) && HM_Backup::conform_dir( $path ) !== hmbkp_path_default() )
266
+ $path = hmbkp_path_default();
267
+
268
+ // Create the backups directory if it doesn't exist
269
+ if ( is_writable( dirname( $path ) ) && ! is_dir( $path ) )
270
+ mkdir( $path, 0755 );
271
+
272
+ if ( get_option( 'hmbkp_path' ) !== $path )
273
+ update_option( 'hmbkp_path', $path );
274
+
275
+ // Protect against directory browsing by including a index.html file
276
+ $index = $path . '/index.html';
277
+
278
+ if ( ! file_exists( $index ) && is_writable( $path ) )
279
+ file_put_contents( $index, '' );
280
+
281
+ return HM_Backup::conform_dir( $path );
282
+
283
+ }
284
+
285
+ /**
286
+ * Return the default backup path
287
+ *
288
+ * @return string path
289
+ */
290
+ function hmbkp_path_default() {
291
+ return HM_Backup::conform_dir( WP_CONTENT_DIR . '/backups' );
292
+ }
293
+
294
+ /**
295
+ * Move the backup directory and all existing backup files to a new
296
+ * location
297
+ *
298
+ * @param string $from path to move the backups dir from
299
+ * @param string $to path to move the backups dir to
300
+ * @return void
301
+ */
302
+ function hmbkp_path_move( $from, $to ) {
303
+
304
+ // Create the custom backups directory if it doesn't exist
305
+ if ( is_writable( dirname( $to ) ) && ! is_dir( $to ) )
306
+ mkdir( $to, 0755 );
307
+
308
+ if ( ! is_dir( $to ) || ! is_writable( $to ) || ! is_dir( $from ) )
309
+ return false;
310
+
311
+ hmbkp_cleanup();
312
+
313
+ if ( $handle = opendir( $from ) ) :
314
+
315
+ while ( false !== ( $file = readdir( $handle ) ) )
316
+ if ( $file !== '.' && $file !== '..' )
317
+ rename( trailingslashit( $from ) . $file, trailingslashit( $to ) . $file );
318
+
319
+ closedir( $handle );
320
+
321
+ endif;
322
+
323
+ hmbkp_rmdirtree( $from );
324
+
325
+ }
326
+
327
+ /**
328
+ * Check if a backup is possible with regards to file
329
+ * permissions etc.
330
+ *
331
+ * @return bool
332
+ */
333
+ function hmbkp_possible() {
334
+
335
+ if ( ! is_writable( hmbkp_path() ) || ! is_dir( hmbkp_path() ) || HM_Backup::is_safe_mode_active() )
336
+ return false;
337
+
338
+ return true;
339
+ }
340
+
341
+ /**
342
+ * Remove any non backup.zip files from the backups dir.
343
+ *
344
+ * @return void
345
+ */
346
+ function hmbkp_cleanup() {
347
+
348
+ $hmbkp_path = hmbkp_path();
349
+
350
+ if ( ! is_dir( $hmbkp_path ) )
351
+ return;
352
+
353
+ if ( $handle = opendir( $hmbkp_path ) ) :
354
+
355
+ while ( false !== ( $file = readdir( $handle ) ) )
356
+ if ( ! in_array( $file, array( '.', '..', 'index.html' ) ) && pathinfo( $file, PATHINFO_EXTENSION ) !== 'zip' )
357
+ hmbkp_rmdirtree( trailingslashit( $hmbkp_path ) . $file );
358
+
359
+ closedir( $handle );
360
+
361
+ endif;
362
+
363
+ }
backupwordpress/functions/interface.php ADDED
@@ -0,0 +1,284 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 = current_time( 'timestamp' ) - time(); ?>
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( HMBKP_Scheduled_Backup::human_filesize( @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 . ' ' . WP_CONTENT_DIR . '</code>', '<code>chmod 777 ' . WP_CONTENT_DIR . '</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 %3$s.', '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
+ $files = $schedule->$file_method();
169
+
170
+ if ( $files ) : ?>
171
+
172
+ <ul class="hmbkp_file_list code">
173
+
174
+ <?php foreach( $files as $file ) :
175
+
176
+ if ( ! is_null( $excludes ) && strpos( $file, str_ireplace( $schedule->get_root(), '', $schedule->get_path() ) ) !== false )
177
+ continue; ?>
178
+
179
+ <?php if ( $file->isDir() ) { ?>
180
+
181
+ <li title="<?php echo esc_attr( HM_Backup::conform_dir( trailingslashit( $file->getPathName() ) ) ); ?>"><?php echo trailingslashit( str_ireplace( HM_Backup::conform_dir( trailingslashit( $schedule->get_root() ) ), '', HM_Backup::conform_dir( $file->getPathName() ) ) ); ?></li>
182
+
183
+ <?php } else { ?>
184
+
185
+ <li title="<?php echo esc_attr( HM_Backup::conform_dir( $file->getPathName() ) ); ?>"><?php echo str_ireplace( HM_Backup::conform_dir( trailingslashit( $schedule->get_root() ) ), '', HM_Backup::conform_dir( $file->getPathName() ) ); ?></li>
186
+
187
+ <?php }
188
+
189
+ endforeach; ?>
190
+
191
+ </ul>
192
+
193
+ <?php endif;
194
+
195
+ }
196
+
197
+
198
+ /**
199
+ * Get the human readable backup type in.
200
+ *
201
+ * @access public
202
+ * @param string $type
203
+ * @param HMBKP_Scheduled_Backup $schedule (default: null)
204
+ * @return string
205
+ */
206
+ function hmbkp_human_get_type( $type, HMBKP_Scheduled_Backup $schedule = null ) {
207
+
208
+ if ( strpos( $type, 'complete' ) !== false )
209
+ return __( 'Database and Files', 'hmbkp' );
210
+
211
+ if ( strpos( $type, 'file' ) !== false )
212
+ return __( 'Files', 'hmbkp' );
213
+
214
+ if ( strpos( $type, 'database' ) !== false )
215
+ return __( 'Database', 'hmbkp' );
216
+
217
+ if ( ! is_null( $schedule ) )
218
+ return hmbkp_human_get_type( $schedule->get_type() );
219
+
220
+ return __( 'Legacy', 'hmbkp' );
221
+
222
+ }
223
+
224
+
225
+ /**
226
+ * Display the row of actions for a schedule
227
+ *
228
+ * @access public
229
+ * @param HMBKP_Scheduled_Backup $schedule
230
+ * @return void
231
+ */
232
+ function hmbkp_schedule_actions( HMBKP_Scheduled_Backup $schedule ) {
233
+
234
+ if ( $status = $schedule->get_status() ) { ?>
235
+
236
+ <span class="hmbkp-status"><?php echo $status; ?> <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>
237
+
238
+ <?php } else { ?>
239
+
240
+ <div class="hmbkp-schedule-actions row-actions">
241
+
242
+ <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> |
243
+
244
+ <?php if ( $schedule->get_type() !== 'database' ) { ?>
245
+ <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> |
246
+ <?php } ?>
247
+
248
+ <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> |
249
+
250
+ <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>
251
+
252
+ </div>
253
+
254
+ <?php }
255
+
256
+ }
257
+
258
+ /**
259
+ * Load the backup errors file
260
+ *
261
+ * @return string
262
+ */
263
+ function hmbkp_backup_errors() {
264
+
265
+ if ( ! file_exists( hmbkp_path() . '/.backup_errors' ) )
266
+ return '';
267
+
268
+ return file_get_contents( hmbkp_path() . '/.backup_errors' );
269
+
270
+ }
271
+
272
+ /**
273
+ * Load the backup warnings file
274
+ *
275
+ * @return string
276
+ */
277
+ function hmbkp_backup_warnings() {
278
+
279
+ if ( ! file_exists( hmbkp_path() . '/.backup_warnings' ) )
280
+ return '';
281
+
282
+ return file_get_contents( hmbkp_path() . '/.backup_warnings' );
283
+
284
+ }
{hm-backup → backupwordpress/hm-backup}/hm-backup.php RENAMED
@@ -3,9 +3,9 @@
3
  /**
4
  * Generic file and database backup class
5
  *
6
- * @version 2.0 Beta
7
  */
8
- class WPR_HM_Backup {
9
 
10
  /**
11
  * The path where the backup file should be saved
@@ -270,7 +270,7 @@ class WPR_HM_Backup {
270
  public function get_archive_filename() {
271
 
272
  if ( empty( $this->archive_filename ) )
273
- $this->set_archive_filename( strtolower( sanitize_file_name( implode( '-', array( get_bloginfo( 'name' ), 'backup', date( 'Y-m-d-H-i-s', current_time( 'timestamp' ) ) ) ) ) ) . '.zip' );
274
 
275
  return $this->archive_filename;
276
 
@@ -315,7 +315,7 @@ class WPR_HM_Backup {
315
  public function get_database_dump_filename() {
316
 
317
  if ( empty( $this->database_dump_filename ) )
318
- $this->set_database_dump_filename( strtolower( sanitize_file_name( remove_accents( 'database_' . DB_NAME . '.sql' ) ) ) );
319
 
320
  return $this->database_dump_filename;
321
 
@@ -608,7 +608,7 @@ class WPR_HM_Backup {
608
  */
609
  public function backup() {
610
 
611
- $this->do_action( 'wprhmbkp_backup_started' );
612
 
613
  // Backup database
614
  if ( $this->get_type() !== 'file' )
@@ -617,7 +617,7 @@ class WPR_HM_Backup {
617
  // Zip everything up
618
  $this->archive();
619
 
620
- $this->do_action( 'wprhmbkp_backup_complete' );
621
 
622
  }
623
 
@@ -631,7 +631,7 @@ class WPR_HM_Backup {
631
  */
632
  public function dump_database() {
633
 
634
- $this->do_action( 'wprhmbkp_mysqldump_started' );
635
 
636
  if ( $this->get_mysqldump_command_path() )
637
  $this->mysqldump();
@@ -639,7 +639,7 @@ class WPR_HM_Backup {
639
  if ( empty( $this->mysqldump_verified ) )
640
  $this->mysqldump_fallback();
641
 
642
- $this->do_action( 'wprhmbkp_mysqldump_finished' );
643
 
644
  }
645
 
@@ -741,7 +741,7 @@ class WPR_HM_Backup {
741
  */
742
  public function archive() {
743
 
744
- $this->do_action( 'wprhmbkp_archive_started' );
745
 
746
  // Do we have the path to the zip command
747
  if ( $this->get_zip_command_path() )
@@ -759,7 +759,7 @@ class WPR_HM_Backup {
759
  if ( file_exists( $this->get_database_dump_filepath() ) )
760
  unlink( $this->get_database_dump_filepath() );
761
 
762
- $this->do_action( 'wprhmbkp_archive_finished' );
763
 
764
  }
765
 
@@ -805,12 +805,21 @@ class WPR_HM_Backup {
805
  if ( ! class_exists( 'ZipArchive' ) || ! $zip->open( $this->get_archive_filepath(), ZIPARCHIVE::CREATE ) )
806
  return;
807
 
 
 
808
  if ( $this->get_type() !== 'database' ) {
809
 
810
  $files_added = 0;
811
 
812
  foreach ( $this->get_files() as $file ) {
813
 
 
 
 
 
 
 
 
814
  if ( $file->isDir() )
815
  $zip->addEmptyDir( trailingslashit( str_ireplace( trailingslashit( $this->get_root() ), '', $this->conform_dir( $file->getPathname() ) ) ) );
816
 
@@ -865,7 +874,7 @@ class WPR_HM_Backup {
865
 
866
  // Zip up everything
867
  if ( $this->get_type() !== 'database' )
868
- if ( ! $archive->add( $this->get_root(), PCLZIP_OPT_REMOVE_PATH, $this->get_root(), PCLZIP_CB_PRE_ADD, 'wpr_hmbkp_pclzip_callback' ) )
869
  $this->warning( $this->archive_method, $archive->errorInfo( true ) );
870
 
871
  // Add the database
@@ -928,13 +937,15 @@ class WPR_HM_Backup {
928
  if ( $this->get_errors( $this->get_archive_method() ) )
929
  return false;
930
 
 
 
 
931
  return $this->archive_verified = true;
932
 
933
  }
934
 
935
  /**
936
- * Generate the array of files to be backed up by looping through
937
- * root, ignore unreadable files and excludes
938
  *
939
  * @access public
940
  * @return array
@@ -946,44 +957,11 @@ class WPR_HM_Backup {
946
 
947
  $this->files = array();
948
 
949
- if ( defined( 'RecursiveDirectoryIterator::FOLLOW_SYMLINKS' ) ) {
950
-
951
- $filesystem = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $this->get_root(), RecursiveDirectoryIterator::FOLLOW_SYMLINKS ), RecursiveIteratorIterator::SELF_FIRST, RecursiveIteratorIterator::CATCH_GET_CHILD );
952
-
953
- $excludes = $this->exclude_string( 'regex' );
954
-
955
- foreach ( $filesystem as $file ) {
956
-
957
- /*
958
- * Ignore current dir and containing dir
959
- *
960
- * Required because in PHP 5.2 these aren't skipped automatically by RecursiveDirectoryIterator, they are skipped in PHP > 5.3
961
- */
962
- if ( $file === '.' || $file === '..' )
963
- continue;
964
-
965
- // Track & skip unreadable files
966
- if ( ! $file->isReadable() && $this->unreadable_files[] = $file )
967
- continue;
968
-
969
- $pathname = str_ireplace( trailingslashit( $this->get_root() ), '', $this->conform_dir( $file->getPathname() ) );
970
-
971
- // Excludes
972
- if ( $excludes && preg_match( '(' . $excludes . ')', $pathname ) && $this->excluded_files[] = $file )
973
- continue;
974
-
975
- $this->files[] = $file;
976
-
977
- }
978
-
979
- } else {
980
-
981
- $this->files = $this->files_fallback( $this->get_root() );
982
 
983
- }
984
-
985
- if ( ! empty( $this->unreadable_files ) )
986
- $this->warning( $this->get_archive_method(), __( 'The following files are unreadable and couldn\'t be backed up: ', 'hmbkp' ) . implode( ', ', $this->unreadable_files ) );
987
 
988
  return $this->files;
989
 
@@ -1000,7 +978,7 @@ class WPR_HM_Backup {
1000
  * @param array $files. (default: array())
1001
  * @return array
1002
  */
1003
- private function files_fallback( $dir, $files = array() ) {
1004
 
1005
  $handle = opendir( $dir );
1006
 
@@ -1015,18 +993,10 @@ class WPR_HM_Backup {
1015
  $filepath = $this->conform_dir( trailingslashit( $dir ) . $file );
1016
  $file = str_ireplace( trailingslashit( $this->get_root() ), '', $filepath );
1017
 
1018
- // Track & skip unreadable files
1019
- if ( ! is_readable( $filepath ) && $this->unreadable_files[] = new SplFileInfo( $filepath ) )
1020
- continue;
1021
-
1022
- // Skip the backups dir and any excluded paths
1023
- if ( ( $excludes && preg_match( '(' . $excludes . ')', $file ) ) && $this->excluded_files[] = new SplFileInfo( $filepath ) )
1024
- continue;
1025
-
1026
  $files[] = new SplFileInfo( $filepath );
1027
 
1028
  if ( is_dir( $filepath ) )
1029
- $files = $this->files_fallback( $filepath, $files );
1030
 
1031
  endwhile;
1032
 
@@ -1034,6 +1004,38 @@ class WPR_HM_Backup {
1034
 
1035
  }
1036
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1037
  /**
1038
  * Returns an array of files that match the exclude rules.
1039
  *
@@ -1042,13 +1044,25 @@ class WPR_HM_Backup {
1042
  */
1043
  public function get_excluded_files() {
1044
 
1045
- if ( empty( $this->files ) )
1046
- $this->get_files();
1047
-
1048
  if ( ! empty( $this->excluded_files ) )
1049
  return $this->excluded_files;
1050
 
1051
- return array();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1052
 
1053
  }
1054
 
@@ -1060,13 +1074,22 @@ class WPR_HM_Backup {
1060
  */
1061
  public function get_unreadable_files() {
1062
 
1063
- if ( empty( $this->files ) )
1064
- $this->get_files();
1065
-
1066
  if ( ! empty( $this->unreadable_files ) )
1067
  return $this->unreadable_files;
1068
 
1069
- return array();
 
 
 
 
 
 
 
 
 
 
 
 
1070
 
1071
  }
1072
 
@@ -1097,7 +1120,7 @@ class WPR_HM_Backup {
1097
 
1098
  // If path() is inside root(), exclude it
1099
  if ( strpos( $this->get_path(), $this->get_root() ) !== false )
1100
- $excludes[] = trailingslashit( $this->get_path() );
1101
 
1102
  return array_unique( $excludes );
1103
 
@@ -1132,7 +1155,7 @@ class WPR_HM_Backup {
1132
  * @param string $context. (default: 'zip')
1133
  * @return string
1134
  */
1135
- private function exclude_string( $context = 'zip' ) {
1136
 
1137
  // Return a comma separated list by default
1138
  $separator = ', ';
@@ -1210,7 +1233,7 @@ class WPR_HM_Backup {
1210
  }
1211
 
1212
  /**
1213
- * Add backquotes to tables and db-names inSQL queries. Taken from phpMyAdmin.
1214
  *
1215
  * @access private
1216
  * @param mixed $a_name
@@ -1419,7 +1442,7 @@ class WPR_HM_Backup {
1419
  // Actually write the sql file
1420
  if ( is_writable( $sqlname ) || ! file_exists( $sqlname ) ) {
1421
 
1422
- if ( ! $handle = fopen( $sqlname, 'a' ) )
1423
  return;
1424
 
1425
  if ( ! fwrite( $handle, $sql ) )
@@ -1447,7 +1470,6 @@ class WPR_HM_Backup {
1447
 
1448
  }
1449
 
1450
-
1451
  /**
1452
  * Add an error to the errors stack
1453
  *
@@ -1503,7 +1525,6 @@ class WPR_HM_Backup {
1503
 
1504
  }
1505
 
1506
-
1507
  /**
1508
  * Add an warning to the warnings stack
1509
  *
@@ -1520,7 +1541,6 @@ class WPR_HM_Backup {
1520
 
1521
  }
1522
 
1523
-
1524
  /**
1525
  * Custom error handler for catching errors
1526
  *
@@ -1555,16 +1575,16 @@ class WPR_HM_Backup {
1555
  * @param array &$file
1556
  * @return bool
1557
  */
1558
- function wpr_hmbkp_pclzip_callback( $event, &$file ) {
1559
 
1560
- global $_wpr_hmbkp_exclude_string;
1561
 
1562
  // Don't try to add unreadable files.
1563
  if ( ! is_readable( $file['filename'] ) || ! file_exists( $file['filename'] ) )
1564
  return false;
1565
 
1566
  // Match everything else past the exclude list
1567
- elseif ( $_wpr_hmbkp_exclude_string && preg_match( '(' . $_wpr_hmbkp_exclude_string . ')', $file['stored_filename'] ) )
1568
  return false;
1569
 
1570
  return true;
3
  /**
4
  * Generic file and database backup class
5
  *
6
+ * @version 2.0
7
  */
8
+ class HM_Backup {
9
 
10
  /**
11
  * The path where the backup file should be saved
270
  public function get_archive_filename() {
271
 
272
  if ( empty( $this->archive_filename ) )
273
+ $this->set_archive_filename( implode( '-', array( get_bloginfo( 'name' ), 'backup', date( 'Y-m-d-H-i-s', current_time( 'timestamp' ) ) ) ) . '.zip' );
274
 
275
  return $this->archive_filename;
276
 
315
  public function get_database_dump_filename() {
316
 
317
  if ( empty( $this->database_dump_filename ) )
318
+ $this->set_database_dump_filename( 'database_' . DB_NAME . '.sql' );
319
 
320
  return $this->database_dump_filename;
321
 
608
  */
609
  public function backup() {
610
 
611
+ $this->do_action( 'hmbkp_backup_started' );
612
 
613
  // Backup database
614
  if ( $this->get_type() !== 'file' )
617
  // Zip everything up
618
  $this->archive();
619
 
620
+ $this->do_action( 'hmbkp_backup_complete' );
621
 
622
  }
623
 
631
  */
632
  public function dump_database() {
633
 
634
+ $this->do_action( 'hmbkp_mysqldump_started' );
635
 
636
  if ( $this->get_mysqldump_command_path() )
637
  $this->mysqldump();
639
  if ( empty( $this->mysqldump_verified ) )
640
  $this->mysqldump_fallback();
641
 
642
+ $this->do_action( 'hmbkp_mysqldump_finished' );
643
 
644
  }
645
 
741
  */
742
  public function archive() {
743
 
744
+ $this->do_action( 'hmbkp_archive_started' );
745
 
746
  // Do we have the path to the zip command
747
  if ( $this->get_zip_command_path() )
759
  if ( file_exists( $this->get_database_dump_filepath() ) )
760
  unlink( $this->get_database_dump_filepath() );
761
 
762
+ $this->do_action( 'hmbkp_archive_finished' );
763
 
764
  }
765
 
805
  if ( ! class_exists( 'ZipArchive' ) || ! $zip->open( $this->get_archive_filepath(), ZIPARCHIVE::CREATE ) )
806
  return;
807
 
808
+ $excludes = $this->exclude_string( 'regex' );
809
+
810
  if ( $this->get_type() !== 'database' ) {
811
 
812
  $files_added = 0;
813
 
814
  foreach ( $this->get_files() as $file ) {
815
 
816
+ if ( $file === '.' || $file === '..' || ! $file->isReadable() )
817
+ continue;
818
+
819
+ // Excludes
820
+ if ( $excludes && preg_match( '(' . $excludes . ')', str_ireplace( trailingslashit( $this->get_root() ), '', $this->conform_dir( $file->getPathname() ) ) ) )
821
+ continue;
822
+
823
  if ( $file->isDir() )
824
  $zip->addEmptyDir( trailingslashit( str_ireplace( trailingslashit( $this->get_root() ), '', $this->conform_dir( $file->getPathname() ) ) ) );
825
 
874
 
875
  // Zip up everything
876
  if ( $this->get_type() !== 'database' )
877
+ if ( ! $archive->add( $this->get_root(), PCLZIP_OPT_REMOVE_PATH, $this->get_root(), PCLZIP_CB_PRE_ADD, 'hmbkp_pclzip_callback' ) )
878
  $this->warning( $this->archive_method, $archive->errorInfo( true ) );
879
 
880
  // Add the database
937
  if ( $this->get_errors( $this->get_archive_method() ) )
938
  return false;
939
 
940
+ if ( $this->get_unreadable_files() )
941
+ $this->warning( $this->get_archive_method(), __( 'The following files are unreadable and couldn\'t be backed up: ', 'hmbkp' ) . implode( ', ', $this->get_unreadable_files() ) );
942
+
943
  return $this->archive_verified = true;
944
 
945
  }
946
 
947
  /**
948
+ * Return an array of all files in the filesystem
 
949
  *
950
  * @access public
951
  * @return array
957
 
958
  $this->files = array();
959
 
960
+ if ( defined( 'RecursiveDirectoryIterator::FOLLOW_SYMLINKS' ) )
961
+ $this->files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $this->get_root(), RecursiveDirectoryIterator::FOLLOW_SYMLINKS ), RecursiveIteratorIterator::SELF_FIRST, RecursiveIteratorIterator::CATCH_GET_CHILD );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
962
 
963
+ else
964
+ $this->files = $this->get_files_fallback( $this->get_root() );
 
 
965
 
966
  return $this->files;
967
 
978
  * @param array $files. (default: array())
979
  * @return array
980
  */
981
+ private function get_files_fallback( $dir, $files = array() ) {
982
 
983
  $handle = opendir( $dir );
984
 
993
  $filepath = $this->conform_dir( trailingslashit( $dir ) . $file );
994
  $file = str_ireplace( trailingslashit( $this->get_root() ), '', $filepath );
995
 
 
 
 
 
 
 
 
 
996
  $files[] = new SplFileInfo( $filepath );
997
 
998
  if ( is_dir( $filepath ) )
999
+ $files = $this->get_files_fallback( $filepath, $files );
1000
 
1001
  endwhile;
1002
 
1004
 
1005
  }
1006
 
1007
+ /**
1008
+ * Returns an array of files that will be included in the backup.
1009
+ *
1010
+ * @access public
1011
+ * @return array
1012
+ */
1013
+ public function get_included_files() {
1014
+
1015
+ if ( ! empty( $this->included_files ) )
1016
+ return $this->included_files;
1017
+
1018
+ $this->included_files = array();
1019
+
1020
+ $excludes = $this->exclude_string( 'regex' );
1021
+
1022
+ foreach ( $this->get_files() as $file ) {
1023
+
1024
+ if ( $file === '.' || $file === '..' || ! $file->isReadable() )
1025
+ continue;
1026
+
1027
+ // Excludes
1028
+ if ( $excludes && preg_match( '(' . $excludes . ')', str_ireplace( trailingslashit( $this->get_root() ), '', $this->conform_dir( $file->getPathname() ) ) ) )
1029
+ continue;
1030
+
1031
+ $this->included_files[] = $file;
1032
+
1033
+ }
1034
+
1035
+ return $this->included_files;
1036
+
1037
+ }
1038
+
1039
  /**
1040
  * Returns an array of files that match the exclude rules.
1041
  *
1044
  */
1045
  public function get_excluded_files() {
1046
 
 
 
 
1047
  if ( ! empty( $this->excluded_files ) )
1048
  return $this->excluded_files;
1049
 
1050
+ $this->excluded_files = array();
1051
+
1052
+ $excludes = $this->exclude_string( 'regex' );
1053
+
1054
+ foreach ( $this->get_files() as $file ) {
1055
+
1056
+ if ( $file === '.' || $file === '..' || ! $file->isReadable() )
1057
+ continue;
1058
+
1059
+ // Excludes
1060
+ if ( $excludes && preg_match( '(' . $excludes . ')', str_ireplace( trailingslashit( $this->get_root() ), '', $this->conform_dir( $file->getPathname() ) ) ) )
1061
+ $this->excluded_files[] = $file;
1062
+
1063
+ }
1064
+
1065
+ return $this->excluded_files;
1066
 
1067
  }
1068
 
1074
  */
1075
  public function get_unreadable_files() {
1076
 
 
 
 
1077
  if ( ! empty( $this->unreadable_files ) )
1078
  return $this->unreadable_files;
1079
 
1080
+ $this->unreadable_files = array();
1081
+
1082
+ foreach ( $this->get_files() as $file ) {
1083
+
1084
+ if ( $file === '.' || $file === '..' )
1085
+ continue;
1086
+
1087
+ if ( ! $file->isReadable() )
1088
+ $this->unreadable_files[] = $file;
1089
+
1090
+ }
1091
+
1092
+ return $this->unreadable_files;
1093
 
1094
  }
1095
 
1120
 
1121
  // If path() is inside root(), exclude it
1122
  if ( strpos( $this->get_path(), $this->get_root() ) !== false )
1123
+ array_unshift( $excludes, trailingslashit( $this->get_path() ) );
1124
 
1125
  return array_unique( $excludes );
1126
 
1155
  * @param string $context. (default: 'zip')
1156
  * @return string
1157
  */
1158
+ protected function exclude_string( $context = 'zip' ) {
1159
 
1160
  // Return a comma separated list by default
1161
  $separator = ', ';
1233
  }
1234
 
1235
  /**
1236
+ * Add backquotes to tables and db-names in SQL queries. Taken from phpMyAdmin.
1237
  *
1238
  * @access private
1239
  * @param mixed $a_name
1442
  // Actually write the sql file
1443
  if ( is_writable( $sqlname ) || ! file_exists( $sqlname ) ) {
1444
 
1445
+ if ( ! $handle = @fopen( $sqlname, 'a' ) )
1446
  return;
1447
 
1448
  if ( ! fwrite( $handle, $sql ) )
1470
 
1471
  }
1472
 
 
1473
  /**
1474
  * Add an error to the errors stack
1475
  *
1525
 
1526
  }
1527
 
 
1528
  /**
1529
  * Add an warning to the warnings stack
1530
  *
1541
 
1542
  }
1543
 
 
1544
  /**
1545
  * Custom error handler for catching errors
1546
  *
1575
  * @param array &$file
1576
  * @return bool
1577
  */
1578
+ function hmbkp_pclzip_callback( $event, &$file ) {
1579
 
1580
+ global $_hmbkp_exclude_string;
1581
 
1582
  // Don't try to add unreadable files.
1583
  if ( ! is_readable( $file['filename'] ) || ! file_exists( $file['filename'] ) )
1584
  return false;
1585
 
1586
  // Match everything else past the exclude list
1587
+ elseif ( $_hmbkp_exclude_string && preg_match( '(' . $_hmbkp_exclude_string . ')', $file['stored_filename'] ) )
1588
  return false;
1589
 
1590
  return true;
backupwordpress/icon.png ADDED
Binary file
backupwordpress/languages/hmbkp-de_DE.mo ADDED
Binary file
backupwordpress/languages/hmbkp-de_DE.po ADDED
@@ -0,0 +1,754 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: BackUpWordPress\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2012-08-22 15:49+0100\n"
6
+ "PO-Revision-Date: 2012-08-22 15:49+0100\n"
7
+ "Last-Translator: Flo Edelmann <florian-edelmann@online.de>\n"
8
+ "Language-Team: Flo Edelmann <florian-edelmann@online.de>\n"
9
+ "Language: \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;__ngettext:1,2;_n:1,2\n"
14
+ "X-Poedit-Basepath: ..\n"
15
+ "X-Poedit-Language: German\n"
16
+ "X-Poedit-Country: GERMANY\n"
17
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
18
+ "X-Poedit-SourceCharset: utf-8\n"
19
+ "X-Poedit-SearchPath-0: .\n"
20
+
21
+ #: plugin.php:52
22
+ msgid "BackUpWordPress requires PHP version 5.2.4 or greater."
23
+ msgstr "BackUpWordPress benötigt PHP Version 5.2.4 oder höher."
24
+
25
+ #: plugin.php:63
26
+ #, php-format
27
+ msgid "BackUpWordPress requires WordPress version %s or greater."
28
+ msgstr "BackUpWordPress benötigt WordPress Version %s oder größer."
29
+
30
+ #: plugin.php:95
31
+ #: admin/schedule-form.php:52
32
+ msgid "Update"
33
+ msgstr "Update"
34
+
35
+ #: plugin.php:96
36
+ msgid "Cancel"
37
+ msgstr "Abbrechen"
38
+
39
+ #: plugin.php:97
40
+ msgid ""
41
+ "Are you sure you want to delete this schedule? All of it's backups will also be deleted.\n"
42
+ "\n"
43
+ "'Cancel' to go back, 'OK' to delete.\n"
44
+ msgstr ""
45
+ "Bist du sicher, dass du diesen Plan löschen möchtest? Alle enthaltenen Backups werden ebenfalls gelöscht.\n"
46
+ "\n"
47
+ "Drücke auf 'Abbrechen' zum Zurückgehen, 'OK' zum Löschen.\n"
48
+
49
+ #: plugin.php:98
50
+ msgid ""
51
+ "Are you sure you want to delete this backup?\n"
52
+ "\n"
53
+ "'Cancel' to go back, 'OK' to delete.\n"
54
+ msgstr ""
55
+ "Bist du sicher, dass du dieses Backup löschen möchtest?\n"
56
+ "\n"
57
+ "Drücke auf 'Abbrechen' zum Zurückgehen, 'OK' zum Löschen.\n"
58
+
59
+ #: plugin.php:99
60
+ msgid ""
61
+ "Are you sure you want to remove this exclude rule?\n"
62
+ "\n"
63
+ "'Cancel' to go back, 'OK' to delete.\n"
64
+ msgstr ""
65
+ "Bist du sicher, dass du diese Ausnahmeregel entfernen möchtest?\n"
66
+ "\n"
67
+ "Drücke auf 'Abbrechen' zum Zurückgehen, 'OK' zum Löschen.\n"
68
+
69
+ #: plugin.php:100
70
+ msgid ""
71
+ "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?\n"
72
+ "\n"
73
+ "'Cancel' to go back, 'OK' to delete.\n"
74
+ msgstr ""
75
+ "Wenn du die Anzahl der Backups, die auf diesem Server gespeichert werden, reduzierst, werden einige deiner existierenden Backups gelöscht. Bist du sicher, dass du das willst?\n"
76
+ "\n"
77
+ "Drücke auf 'Abbrechen' zum Zurückgehen, 'OK' zum Löschen.\n"
78
+
79
+ #: classes/schedule.php:460
80
+ msgid "Backup started"
81
+ msgstr "Backup gestartet"
82
+
83
+ #: classes/schedule.php:511
84
+ msgid "Creating zip archive"
85
+ msgstr "ZIP-Archiv wird erstellt"
86
+
87
+ #: classes/schedule.php:517
88
+ msgid "Dumping database"
89
+ msgstr "Datenbank wird gedump"
90
+
91
+ #: classes/email.php:19
92
+ msgid "Email notification"
93
+ msgstr "E-Mail-Benachrichtigung"
94
+
95
+ #: classes/email.php:50
96
+ #, php-format
97
+ msgid "Send an email notification to %s"
98
+ msgstr "Sende E-Mail-Benachrichtigungen an %s"
99
+
100
+ #: classes/email.php:72
101
+ #, php-format
102
+ msgid "%s isn't a valid email"
103
+ msgstr "%s ist keine gültige E-Mail-Adresse"
104
+
105
+ #: classes/email.php:127
106
+ #, php-format
107
+ msgid "Backup of %s Failed"
108
+ msgstr "Backup von %s fehlgeschlagen"
109
+
110
+ #: classes/email.php:137
111
+ #, php-format
112
+ msgid "Backup of %s"
113
+ msgstr "Backup von %s"
114
+
115
+ #: hm-backup/hm-backup.php:532
116
+ msgid "The backup file was not created"
117
+ msgstr "Die Backup-Datei wurde nicht angelegt"
118
+
119
+ #: hm-backup/hm-backup.php:603
120
+ msgid "The following files are unreadable and couldn't be backed up: "
121
+ msgstr "Die folgenden Dateien sind nicht lesbar und konnten nicht gesichert werden:"
122
+
123
+ #: admin/constants.php:3
124
+ #, php-format
125
+ 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."
126
+ 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."
127
+
128
+ #: admin/constants.php:3
129
+ msgid "Constants"
130
+ msgstr "Konstanten"
131
+
132
+ #: admin/constants.php:3
133
+ msgid "The Codex can help"
134
+ msgstr "Der Codex kann helfen"
135
+
136
+ #: admin/constants.php:8
137
+ #, php-format
138
+ msgid "The path to folder you would like to store your backup files in, defaults to %s."
139
+ msgstr "Der Pfad zum Verzeichnis, in dem du die Backups speichern möchtest. Standard: %s"
140
+
141
+ #: admin/constants.php:8
142
+ #: admin/constants.php:11
143
+ #: admin/constants.php:14
144
+ #: admin/constants.php:17
145
+ #: admin/constants.php:20
146
+ #: admin/constants.php:23
147
+ #: admin/constants.php:26
148
+ #: admin/constants.php:29
149
+ #: admin/constants.php:32
150
+ #: admin/constants.php:35
151
+ #: admin/constants.php:38
152
+ #: admin/constants.php:41
153
+ msgid "e.g."
154
+ msgstr "z.B."
155
+
156
+ #: admin/constants.php:11
157
+ #, php-format
158
+ msgid "The path to your %1$s executable. Will be used for the %2$s part of the back up if available."
159
+ msgstr "Der Pfad zur ausführbaren %1$s-Datei. Wird für den %2$s-Teil des Backups genutzt, wenn verfügbar."
160
+
161
+ #: admin/constants.php:11
162
+ #: admin/constants.php:14
163
+ #: admin/constants.php:23
164
+ #: admin/constants.php:26
165
+ msgid "database"
166
+ msgstr "Datenbank"
167
+
168
+ #: admin/constants.php:14
169
+ #, php-format
170
+ msgid "The path to your %1$s executable. Will be used to zip up your %2$s and %3$s if available."
171
+ 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."
172
+
173
+ #: admin/constants.php:14
174
+ #: admin/constants.php:23
175
+ #: admin/constants.php:26
176
+ msgid "files"
177
+ msgstr "Dateien"
178
+
179
+ #: admin/constants.php:17
180
+ #, php-format
181
+ msgid "Completely disables the automatic back up. You can still back up using the \"Back Up Now\" button. Defaults to %s."
182
+ msgstr "Deaktiviert die automatischen Backups vollständig. Du kannst trotzdem Backups erstellen, indem du den \"Jetzt sichern\"-Button verwendest. Standard: %s"
183
+
184
+ #: admin/constants.php:20
185
+ #, php-format
186
+ msgid "Number of backups to keep, older backups will be deleted automatically when a new backup is completed. Defaults to %s."
187
+ msgstr "Anzahl der zu behaltenden Backups. Ältere Backups werden automatisch gelöscht, sobald ein neues Backup fertiggestellt ist. Standard: %s"
188
+
189
+ #: admin/constants.php:23
190
+ #: admin/constants.php:26
191
+ #, php-format
192
+ msgid "Backup %1$s only, your %2$s won't be backed up. Defaults to %3$s."
193
+ msgstr "Nur die %1$s sichern, deine %2$s werden nicht gesichert. Standard: %3$s"
194
+
195
+ #: admin/constants.php:29
196
+ #, php-format
197
+ msgid "The time that the daily back up should run. Defaults to %s."
198
+ msgstr "Die Zeit, zu der das tägliche Backup laufen soll. Standard: %s"
199
+
200
+ #: admin/constants.php:32
201
+ #, php-format
202
+ msgid "Attempt to email a copy of your backups. Value should be email address to send backups to. Defaults to %s."
203
+ msgstr "Versuche, eine Kopie des Backups per E-Mail zu senden. Der Wert sollte eine E-Mail-Adresse sein. Standard: %s"
204
+
205
+ #: admin/constants.php:35
206
+ msgid "Comma separated list of files or directories to exclude, the backups directory is automatically excluded."
207
+ msgstr "Kommagetrennte Liste von Dateien oder Verzeichnissen, die ausgeschlossen werden sollen (das Backup-Verzeichnis ist automatisch ausgeschlossen)."
208
+
209
+ #: admin/constants.php:38
210
+ #, php-format
211
+ msgid "The capability to use when calling %1$s. Defaults to %2$s."
212
+ msgstr "Die Rolle, die beim Aufrufen von %1$s benutzt wird. Standard: %2$s"
213
+
214
+ #: admin/constants.php:41
215
+ #, php-format
216
+ msgid "The root directory that is backed up. Defaults to %s."
217
+ msgstr "Das Wurzelverzeichnis, das gesichert wird. Standard: %s"
218
+
219
+ #: admin/schedule-form.php:7
220
+ msgid "Schedule Settings"
221
+ msgstr "Plan-Einstellungen"
222
+
223
+ #: admin/schedule-form.php:11
224
+ msgid "Backup"
225
+ msgstr "Backup"
226
+
227
+ #: admin/schedule-form.php:14
228
+ msgid "Both Database &amp; files"
229
+ msgstr "Datenbank &amp; Dateien"
230
+
231
+ #: admin/schedule-form.php:15
232
+ msgid "Files only"
233
+ msgstr "Dateien"
234
+
235
+ #: admin/schedule-form.php:16
236
+ msgid "Database only"
237
+ msgstr "Datenbank"
238
+
239
+ #: admin/schedule-form.php:23
240
+ msgid "Schedule"
241
+ msgstr "Plan"
242
+
243
+ #: admin/schedule-form.php:39
244
+ msgid "Number of backups to store on this server"
245
+ msgstr "Anzahl der Backups, die auf dem Server gespeichert bleiben"
246
+
247
+ #: admin/schedule-form.php:43
248
+ msgid "The number of previous backups to store on the server. past this limit the oldest backups will be deleted automatically."
249
+ msgstr "Die Anzahl der vorherigen Backups, die auf dem Server gespeichert bleiben sollen. Über diesem Limit werden die ältesten Backups automatisch gelöscht."
250
+
251
+ #: admin/schedule.php:16
252
+ msgid "hourly on the hour"
253
+ msgstr ""
254
+
255
+ #: admin/schedule.php:16
256
+ #, php-format
257
+ msgid "hourly at %s minutes past the hour"
258
+ msgstr ""
259
+
260
+ #: admin/schedule.php:22
261
+ #, php-format
262
+ msgid "daily at %s"
263
+ msgstr ""
264
+
265
+ #: admin/schedule.php:34
266
+ #, php-format
267
+ msgid "every 12 hours at %s &amp; %s"
268
+ msgstr ""
269
+
270
+ #: admin/schedule.php:40
271
+ #, php-format
272
+ msgid "weekly on %s at %s"
273
+ msgstr ""
274
+
275
+ #: admin/schedule.php:46
276
+ #, php-format
277
+ msgid "fortnightly on %s at %s"
278
+ msgstr ""
279
+
280
+ #: admin/schedule.php:53
281
+ #, php-format
282
+ msgid "on the %s of each month at %s"
283
+ msgstr ""
284
+
285
+ #: admin/schedule.php:59
286
+ msgid "server"
287
+ msgstr "Server"
288
+
289
+ #: admin/schedule.php:66
290
+ #, php-format
291
+ msgid "store the only the last backup %s"
292
+ msgstr ""
293
+
294
+ #: admin/schedule.php:72
295
+ #, php-format
296
+ msgid "don't store any backups %s"
297
+ msgstr ""
298
+
299
+ #: admin/schedule.php:78
300
+ #, php-format
301
+ msgid "store only the last %s backups %s"
302
+ msgstr ""
303
+
304
+ #: admin/schedule.php:87
305
+ #, php-format
306
+ msgid "Backup my %s %s %s, %s. %s"
307
+ msgstr ""
308
+
309
+ #: admin/schedule.php:87
310
+ msgid "Backups will be compressed and should be smaller than this."
311
+ msgstr "Die Backups werden komprimiert und sollten kleiner sein."
312
+
313
+ #: admin/schedule-form-excludes.php:7
314
+ msgid "Manage Exclude"
315
+ msgstr "Ausnahmen verwalten"
316
+
317
+ #: admin/schedule-form-excludes.php:13
318
+ msgid "New Exclude Rule"
319
+ msgstr "Neue Ausnahmeregel"
320
+
321
+ #: admin/schedule-form-excludes.php:17
322
+ msgid "Preview"
323
+ msgstr "Vorschau"
324
+
325
+ #: admin/schedule-form-excludes.php:27
326
+ msgid "Exclude Rules"
327
+ msgstr "Ausnahmeregeln"
328
+
329
+ #: admin/schedule-form-excludes.php:42
330
+ msgid "Remove"
331
+ msgstr "Entfernen"
332
+
333
+ #: admin/schedule-form-excludes.php:59
334
+ msgid "Excluded"
335
+ msgstr "Ausnehmen"
336
+
337
+ #: admin/schedule-form-excludes.php:60
338
+ msgid "Included"
339
+ msgstr "Einschließen"
340
+
341
+ #: admin/schedule-form-excludes.php:63
342
+ msgid "Unreadable"
343
+ msgstr "Nicht lesbar"
344
+
345
+ #: admin/schedule-form-excludes.php:86
346
+ msgid "Unreadable files can't be backed up"
347
+ msgstr "Nicht lesbare Dateien können nicht gesichert werden"
348
+
349
+ #: admin/schedule-form-excludes.php:92
350
+ #, php-format
351
+ msgid "Your site is %s. Backups will be compressed and so will be smaller."
352
+ msgstr "Deine Seite ist %s groß. Die Backups werden komprimiert und sollten kleiner sein."
353
+
354
+ #: admin/schedule-form-excludes.php:98
355
+ msgid "Close"
356
+ msgstr "Schließen"
357
+
358
+ #: admin/actions.php:163
359
+ msgid "BackUpWordPress has detected a problem."
360
+ msgstr "BackUpWordPress hat ein Problem entdeckt."
361
+
362
+ #: admin/actions.php:163
363
+ #, php-format
364
+ 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."
365
+ 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."
366
+
367
+ #: admin/actions.php:232
368
+ msgid "Backup type cannot be empty"
369
+ msgstr "Backup-Typ kann nicht leer sein"
370
+
371
+ #: admin/actions.php:235
372
+ msgid "Invalid backup type"
373
+ msgstr "Ungültiger Backup-Typ"
374
+
375
+ #: admin/actions.php:245
376
+ msgid "Schedule cannot be empty"
377
+ msgstr "Aufgaben können nicht leer sein"
378
+
379
+ #: admin/actions.php:248
380
+ msgid "Invalid schedule"
381
+ msgstr "Ungültige Aufgaben"
382
+
383
+ #: admin/actions.php:258
384
+ msgid "Max backups must be more than 1"
385
+ msgstr "Maximale Anzahl der Backups muss größer als 1 sein"
386
+
387
+ #: admin/actions.php:261
388
+ msgid "Max backups must be a number"
389
+ msgstr "Maximale Anzahl der Backups muss eine Nummer sein"
390
+
391
+ #: admin/actions.php:334
392
+ #, php-format
393
+ msgid "%s matches 1 file."
394
+ msgid_plural "%s matches %d files"
395
+ msgstr[0] "%s passt auf eine Datei."
396
+ msgstr[1] "%s passt auf %d Dateien."
397
+
398
+ #: admin/actions.php:338
399
+ #, php-format
400
+ msgid "%s didn't match any files."
401
+ msgstr "%s passt auf keine Dateien."
402
+
403
+ #: admin/page.php:5
404
+ msgid "Manage Backups"
405
+ msgstr "Backups verwalten"
406
+
407
+ #: admin/page.php:13
408
+ msgid "You need to fix the issues detailed above before BackUpWordPress can start."
409
+ msgstr "Du musst die Probleme, die oben beschrieben werden, beheben, bevor BackUpWordPress starten kann."
410
+
411
+ #: admin/page.php:17
412
+ #, php-format
413
+ msgid "If you need help getting things working you are more than welcome to email us at %s and we'll do what we can."
414
+ msgstr "Wenn du Hilfe brauchst, sende uns ruhig eine E-Mail an %s (am besten auf Englisch) und wir werden tun, was wir können."
415
+
416
+ #: admin/backups.php:13
417
+ msgid "add schedule"
418
+ msgstr "Aufgabe hinzufügen"
419
+
420
+ #: admin/backups.php:36
421
+ #, php-format
422
+ msgid "1 backup completed"
423
+ msgid_plural "%d backups completed"
424
+ msgstr[0] "1 Backup fertiggestellt"
425
+ msgstr[1] "%d Backups fertiggestellt"
426
+
427
+ #: admin/backups.php:37
428
+ msgid "Size"
429
+ msgstr "Größe"
430
+
431
+ #: admin/backups.php:38
432
+ msgid "Type"
433
+ msgstr "Typ"
434
+
435
+ #: admin/backups.php:39
436
+ msgid "Actions"
437
+ msgstr "Aktionen"
438
+
439
+ #: admin/backups.php:62
440
+ msgid "This is where your backups will appear once you have one."
441
+ msgstr "Hier erscheinen deine Backups, sobald du welche hast."
442
+
443
+ #: admin/menu.php:10
444
+ #: admin/menu.php:34
445
+ msgid "Backups"
446
+ msgstr "Backups"
447
+
448
+ #: admin/menu.php:69
449
+ msgid "You are not using the latest stable version of BackUpWordPress"
450
+ msgstr "Du benutzt nicht die neueste stabile BackUpWordPress-Version"
451
+
452
+ #: admin/menu.php:69
453
+ #, php-format
454
+ msgid "The information below is for version %1$s. View the %2$s file for help specific to version %3$s."
455
+ 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."
456
+
457
+ #: admin/menu.php:75
458
+ msgid "FAQ"
459
+ msgstr "FAQ"
460
+
461
+ #: admin/menu.php:79
462
+ msgid "For more information:"
463
+ msgstr "Für mehr Informationen:"
464
+
465
+ #: admin/menu.php:81
466
+ msgid "Support Forums"
467
+ msgstr "Support-Foren"
468
+
469
+ #: admin/menu.php:82
470
+ msgid "Help with translation"
471
+ msgstr "Beim Übersetzen helfen"
472
+
473
+ #: functions/core.php:192
474
+ msgid "BackUpWordPress has setup your default schedules."
475
+ msgstr "BackUpWordPress hat deine Standard-Pläne eingerichtet."
476
+
477
+ #: functions/core.php:192
478
+ 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 below."
479
+ msgstr "Standardmäßig macht BackUpWordPress täglich ein Backup deiner Datenbank und wöchentlich eines deiner Datenbank und deiner Dateien. Du kannst diese Pläne hier bearbeiten."
480
+
481
+ #: functions/core.php:273
482
+ #, php-format
483
+ msgid "This %s file ensures that other people cannot download your backup files."
484
+ msgstr "Diese %s-Datei garantiert, dass andere Leute nicht deine Backup-Dateien herunterladen können."
485
+
486
+ #: functions/interface.php:27
487
+ msgid "Download"
488
+ msgstr "Download"
489
+
490
+ #: functions/interface.php:28
491
+ #: functions/interface.php:215
492
+ msgid "Delete"
493
+ msgstr "Löschen"
494
+
495
+ #: functions/interface.php:50
496
+ #: functions/interface.php:62
497
+ msgid "BackUpWordPress is almost ready."
498
+ msgstr "BackUpWordPress ist fast fertig."
499
+
500
+ #: functions/interface.php:50
501
+ #, php-format
502
+ 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."
503
+ 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."
504
+
505
+ #: functions/interface.php:62
506
+ #, php-format
507
+ msgid "Your backups directory isn't writable, run %1$s or %2$s or set the permissions yourself."
508
+ msgstr "Dein Backup-Verzeichnis ist nicht schreibbar. Führe %1$s oder %2$s aus oder setze die Berechtigungen selbst."
509
+
510
+ #: functions/interface.php:72
511
+ #, php-format
512
+ msgid "%1$s is running in %2$s. Please contact your host and ask them to disable %3$s."
513
+ msgstr "%1$s läuft im %2$s. Bitte kontaktiere deinen Administrator und bitte ihn, den %3$s zu deaktivieren."
514
+
515
+ #: functions/interface.php:72
516
+ msgid "http://php.net/manual/en/features.safe-mode.php"
517
+ msgstr "http://php.net/manual/de/features.safe-mode.php"
518
+
519
+ #: functions/interface.php:72
520
+ msgid "Safe Mode"
521
+ msgstr "Safe Mode"
522
+
523
+ #: functions/interface.php:82
524
+ #, php-format
525
+ msgid "Your custom backups directory %1$s doesn't exist and can't be created, your backups will be saved to %2$s instead."
526
+ msgstr "Dein angepasstes Backup-Verzeichnis %1$s existiert nicht und kann nicht erstellt werden, neue Backups werden stattdessen nach %2$s gespeichert."
527
+
528
+ #: functions/interface.php:92
529
+ #, php-format
530
+ msgid "Your custom backups directory %1$s isn't writable, new backups will be saved to %2$s instead."
531
+ msgstr "Dein angepasstes Backup-Verzeichnis %1$s ist nicht schreibbar, neue Backups werden stattdessen nach %2$s gespeichert."
532
+
533
+ #: functions/interface.php:102
534
+ msgid "BackUpWordPress detected issues with your last backup."
535
+ msgstr "BackUpWordPress hat Probleme bei deinem letzten Backup bemerkt."
536
+
537
+ #: functions/interface.php:182
538
+ msgid "Database and Files"
539
+ msgstr "Datenbank und Dateien"
540
+
541
+ #: functions/interface.php:185
542
+ msgid "Files"
543
+ msgstr "Dateien"
544
+
545
+ #: functions/interface.php:188
546
+ msgid "Database"
547
+ msgstr "Datenbank"
548
+
549
+ #: functions/interface.php:193
550
+ msgid "Unknown"
551
+ msgstr "Unbekannt"
552
+
553
+ #: functions/interface.php:201
554
+ msgid "cancel"
555
+ msgstr "abbrechen"
556
+
557
+ #: functions/interface.php:207
558
+ msgid "Settings"
559
+ msgstr "Einstellungen"
560
+
561
+ #: functions/interface.php:210
562
+ msgid "Excludes"
563
+ msgstr "Ausnahmen"
564
+
565
+ #: functions/interface.php:213
566
+ msgid "Run now"
567
+ msgstr "Jetzt ausführen"
568
+
569
+ #~ msgid ""
570
+ #~ "You can define %1$s in your %2$s to control some settings. A full list of "
571
+ #~ "%3$s can be found in the %4$s. Defined settings will not be editable "
572
+ #~ "below."
573
+ #~ msgstr ""
574
+ #~ "Du kannst %1$s in deinem %2$s definieren, um einige Einstellungen "
575
+ #~ "vorzunehmen. Eine komplette Liste der %3$s kannst du im %4$s finden. "
576
+ #~ "Definierte Einstellungen sind unten nicht veränderbar."
577
+
578
+ #~ msgid "help panel"
579
+ #~ msgstr "Hilfe-Panel"
580
+
581
+ #~ msgid "Automatic Backups"
582
+ #~ msgstr "Automatische Backups"
583
+
584
+ #~ msgid "Backup my site automatically."
585
+ #~ msgstr "Sichere meine Seite automatisch."
586
+
587
+ #~ msgid "No automatic backups."
588
+ #~ msgstr "Keine automatischen Backups."
589
+
590
+ #~ msgid "Frequency of backups"
591
+ #~ msgstr "Häufigkeit der Backups"
592
+
593
+ #~ msgid "Automatic backups will occur"
594
+ #~ msgstr "Automatische Backups werden ausgeführt:"
595
+
596
+ #~ msgid "Daily"
597
+ #~ msgstr "Täglich"
598
+
599
+ #~ msgid "Weekly"
600
+ #~ msgstr "Wöchentlich"
601
+
602
+ #~ msgid "Fortnightly"
603
+ #~ msgstr "Vierzehntägig"
604
+
605
+ #~ msgid "Monthly"
606
+ #~ msgstr "Monatlich"
607
+
608
+ #~ msgid "What to Backup"
609
+ #~ msgstr "Zu sichernde Daten"
610
+
611
+ #~ msgid "Backup my"
612
+ #~ msgstr "Sichere meine"
613
+
614
+ #~ msgid "Number of backups"
615
+ #~ msgstr "Anzahl der Backups"
616
+
617
+ #~ msgid "Email backups"
618
+ #~ msgstr "Backup-E-Mail"
619
+
620
+ #~ msgid ""
621
+ #~ "A copy of the backup file will be emailed to this address. Disabled if "
622
+ #~ "left blank."
623
+ #~ msgstr ""
624
+ #~ "Eine Kopie der Backup-Datei wird per E-Mail an diese Adresse gesendet. "
625
+ #~ "Leerlassen zum deaktivieren."
626
+
627
+ #~ msgid ""
628
+ #~ "A comma separated list of file and directory paths that you do "
629
+ #~ "<strong>not</strong> want to backup."
630
+ #~ msgstr ""
631
+ #~ "Eine kommagetrennte Liste von Datei- und Verzeichnispfaden, die du "
632
+ #~ "<strong>nicht</strong> sichern möchtest."
633
+
634
+ #~ msgid "Save Changes"
635
+ #~ msgstr "Änderungen speichern"
636
+
637
+ #~ msgid "Only the most recent backup will be saved"
638
+
639
+ #~ msgid_plural "The %d most recent backups will be saved"
640
+ #~ msgstr[0] "Nur das neueste Backup wird gespeichert"
641
+ #~ msgstr[1] "Die %d neuesten Backups werden gespeichert"
642
+
643
+ #~ msgid "Total %s"
644
+ #~ msgstr "Insgesamt %s"
645
+
646
+ #~ msgid "Back Up Now"
647
+ #~ msgstr "Jetzt sichern"
648
+
649
+ #~ msgid "You have entered an invalid number of backups."
650
+ #~ msgstr "Du hast eine ungültige Anzahl von Backups eingegeben."
651
+
652
+ #~ msgid "Automatic backups are %s."
653
+ #~ msgstr "Automatische Backups sind %s."
654
+
655
+ #~ msgid "disabled"
656
+ #~ msgstr "deaktiviert"
657
+
658
+ #~ msgid "&amp;"
659
+ #~ msgstr "&amp;"
660
+
661
+ #~ msgid ""
662
+ #~ "Your %1$s will be automatically backed up %2$s. The next backup will "
663
+ #~ "occur at %3$s on %4$s and be saved to %5$s."
664
+
665
+ #~ msgid_plural ""
666
+ #~ "Your %1$s will be automatically backed up %2$s. The next backup will "
667
+ #~ "occur at %3$s on %4$s and be saved to %5$s."
668
+ #~ msgstr[0] ""
669
+ #~ "Deine %1$s wird automatisch %2$s gesichert. Das nächste Backup findet am "
670
+ #~ "%4$s um %3$s statt und wird nach %5$s gespeichert."
671
+ #~ msgstr[1] ""
672
+ #~ "Deine %1$s werden automatisch %2$s gesichert. Das nächste Backup findet "
673
+ #~ "am %3$s um %4$s statt und wird nach %5$s gespeichert."
674
+
675
+ #~ msgid "It's currently %s"
676
+ #~ msgstr "Es ist jetzt %s"
677
+
678
+ #~ msgid "Calculating Size..."
679
+ #~ msgstr "Größe berechnen..."
680
+
681
+ #~ msgid "A copy of each backup will be emailed to %s."
682
+ #~ msgstr "Eine Kopie jedes Backups wird an %s gesendet."
683
+
684
+ #~ msgid "The following paths will be excluded from your backups %s."
685
+ #~ msgstr ""
686
+ #~ "Die folgenden Pfade werden von deinen Backups ausgeschlossen sein: %s"
687
+
688
+ #~ msgid "Settings saved."
689
+ #~ msgstr "Einstellungen gespeichert."
690
+
691
+ #~ msgid ""
692
+ #~ "You have both %1$s and %2$s defined so there isn't anything to back up."
693
+ #~ msgstr ""
694
+ #~ "Du hast sowohl %1$s, als auch %2$s definiert. Deswegen gibt es nichts zu "
695
+ #~ "sichern."
696
+
697
+ #~ msgid "The following email address is not valid: %s."
698
+
699
+ #~ msgid_plural "The following email addresses are not valid: %s."
700
+ #~ msgstr[0] "Die folgende E-Mail-Adresse ist ungültig: %s"
701
+ #~ msgstr[1] "Die folgenden E-Mail-Adressen sind ungültig: %s"
702
+
703
+ #~ msgid ""
704
+ #~ "The last backup email failed to send. It's likely that the file is too "
705
+ #~ "large."
706
+ #~ msgstr ""
707
+ #~ "Das letzte Backup-E-Mail konnte nicht gesendet werden. Wahrscheinlich ist "
708
+ #~ "die Datei zu groß."
709
+
710
+ #~ msgid ""
711
+ #~ "You have defined a custom exclude list but the following paths don't "
712
+ #~ "exist %s, are you sure you entered them correctly?"
713
+ #~ msgstr ""
714
+ #~ "Du hast eine Ausnahmen-Liste definiert, aber die folgenden Pfade "
715
+ #~ "existieren nicht: %s. Bist du sicher, dass du sie korrekt eingegeben hast?"
716
+
717
+ #~ msgid "Removing old backups"
718
+ #~ msgstr "Alte Backups werden gelöscht"
719
+
720
+ #~ msgid ""
721
+ #~ "BackUpWordPress has completed a backup of your site %1$s.\\n\\nThe backup "
722
+ #~ "file should be attached to this email.\\n\\nYou can also download the "
723
+ #~ "backup file by clicking the link below:\\n\\n%2$s\\n\\nKind Regards\\n\\n "
724
+ #~ "The Happy BackUpWordPress Backup Emailing Robot"
725
+ #~ msgstr ""
726
+ #~ "BackUpWordPress hat ein Backup deiner Seite %1$s fertiggestellt.\n"
727
+ #~ "\n"
728
+ #~ "Die Backup-Datei sollte an diese E-Mail angehängt sein.\n"
729
+ #~ "\n"
730
+ #~ "Du kannst es auch herunterladen, indem du den folgenden Link anklickst:\n"
731
+ #~ "\n"
732
+ #~ "%2$s\n"
733
+ #~ "\n"
734
+ #~ "Liebe Grüße\n"
735
+ #~ "\n"
736
+ #~ " Der glückliche BackUpWordPress-Backup-E-Mail-Roboter"
737
+
738
+ #~ msgid ""
739
+ #~ "BackUpWordPress has completed a backup of your site %1$s.\\n"
740
+ #~ "\\nUnfortunately the backup file was too large to attach to this email.\\n"
741
+ #~ "\\nYou can download the backup file by clicking the link below:\\n\\n%2$s"
742
+ #~ "\\n\\nKind Regards\\n\\n The Happy BackUpWordPress Backup Emailing Robot"
743
+ #~ msgstr ""
744
+ #~ "BackUpWordPress hat ein Backup deiner Seite %1$s fertiggestellt.\n"
745
+ #~ "\n"
746
+ #~ "Leider war die Backup-Datei zu groß, um sie an dieses E-Mail anzuhängen.\n"
747
+ #~ "\n"
748
+ #~ "Du kannst es aber herunterladen, indem du den folgenden Link anklickst:\n"
749
+ #~ "\n"
750
+ #~ "%2$s\n"
751
+ #~ "\n"
752
+ #~ "Liebe Grüße\n"
753
+ #~ "\n"
754
+ #~ " Der glückliche BackUpWordPress-Backup-E-Mail-Roboter"
backupwordpress/languages/hmbkp-es_ES.mo ADDED
Binary file
backupwordpress/languages/hmbkp-es_ES.po ADDED
@@ -0,0 +1,540 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Translation of 1.6.8 in Spanish (Spain)
2
+ # This file is distributed under the same license as the 1.6.8 package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: 1.6.8\n"
6
+ "Report-Msgid-Bugs-To: \n"
7
+ "POT-Creation-Date: 2012-08-14 14:41+0100\n"
8
+ "PO-Revision-Date: 2012-08-14 14:41+0100\n"
9
+ "Last-Translator: Flo Edelmann <florian-edelmann@online.de>\n"
10
+ "Language-Team: \n"
11
+ "Language: \n"
12
+ "MIME-Version: 1.0\n"
13
+ "Content-Type: text/plain; charset=UTF-8\n"
14
+ "Content-Transfer-Encoding: 8bit\n"
15
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
16
+ "X-Generator: GlotPress/0.1\n"
17
+ "X-Poedit-Language: Spanish\n"
18
+ "X-Poedit-Country: SPAIN\n"
19
+ "X-Poedit-SourceCharset: utf-8\n"
20
+ "X-Poedit-KeywordsList: __;_e;_n:1,2\n"
21
+ "X-Poedit-Basepath: ..\n"
22
+ "X-Poedit-SearchPath-0: .\n"
23
+
24
+ #: admin.settings.php:3
25
+ #: admin.page.php:11
26
+ msgid "Settings"
27
+ msgstr "Opciones"
28
+
29
+ #: admin.settings.php:5
30
+ #, php-format
31
+ msgid "You can define %1$s in your %2$s to control some settings. A full list of %3$s can be found in the %4$s. Defined settings will not be editable below."
32
+ msgstr "Puedes establecer %1$s de %2$s para controlar algunas opciones de configuración. La lista completa de %3$s se encuentra en %4$s. No podrás cambiar las opciones de configuración predeterminadas."
33
+
34
+ #: admin.settings.php:5
35
+ #: admin.constants.php:3
36
+ #: admin.menus.php:76
37
+ msgid "Constants"
38
+ msgstr "Constantes"
39
+
40
+ #: admin.settings.php:5
41
+ msgid "help panel"
42
+ msgstr "panel de ayuda"
43
+
44
+ #: admin.settings.php:16
45
+ msgid "Automatic Backups"
46
+ msgstr "Copias de seguridad automáticas"
47
+
48
+ #: admin.settings.php:22
49
+ msgid "Backup my site automatically."
50
+ msgstr "Hacer copias de seguridad de mi sitio de manera automática."
51
+
52
+ #: admin.settings.php:27
53
+ msgid "No automatic backups."
54
+ msgstr "No hacer copias de seguridad de mi sitio de manera automática."
55
+
56
+ #: admin.settings.php:36
57
+ msgid "Frequency of backups"
58
+ msgstr "Frecuencia de las copias de seguridad"
59
+
60
+ #: admin.settings.php:40
61
+ msgid "Automatic backups will occur"
62
+ msgstr "Copias de seguridad automáticas se producirán"
63
+
64
+ #: admin.settings.php:43
65
+ msgid "Daily"
66
+ msgstr "Cada día"
67
+
68
+ #: admin.settings.php:44
69
+ msgid "Weekly"
70
+ msgstr "Cada semana"
71
+
72
+ #: admin.settings.php:45
73
+ msgid "Fortnightly"
74
+ msgstr "Cada dos semanas"
75
+
76
+ #: admin.settings.php:46
77
+ msgid "Monthly"
78
+ msgstr "Cada mes"
79
+
80
+ #: admin.settings.php:55
81
+ msgid "What to Backup"
82
+ msgstr "Incluir en la copia de seguridad"
83
+
84
+ #: admin.settings.php:59
85
+ msgid "Backup my"
86
+ msgstr "Hacer copia de seguridad de mi"
87
+
88
+ #: admin.settings.php:62
89
+ msgid "database &amp; files"
90
+ msgstr "base de datos &amp; archivos"
91
+
92
+ #: admin.settings.php:63
93
+ msgid "database only"
94
+ msgstr "sólo base de datos"
95
+
96
+ #: admin.settings.php:64
97
+ msgid "files only"
98
+ msgstr "sólo archivos"
99
+
100
+ #: admin.settings.php:72
101
+ msgid "Number of backups"
102
+ msgstr "Número de copias de seguridad"
103
+
104
+ #: admin.settings.php:73
105
+ #, php-format
106
+ msgid "The last %s backups will be stored on the server."
107
+ msgstr "Las %s últimas copias de seguridad se almacenarán en el servidor."
108
+
109
+ #: admin.settings.php:77
110
+ msgid "Email backups"
111
+ msgstr "Enviar copias de seguridad por correo electrónico"
112
+
113
+ #: admin.settings.php:78
114
+ msgid "A copy of the backup file will be emailed to this address. Disabled if left blank."
115
+ msgstr "Se enviará el archivo de copia de seguridad a esta dirección de correo electrónico. Dejar en blanco para desactivar."
116
+
117
+ #: admin.settings.php:82
118
+ msgid "Excludes"
119
+ msgstr "Excluir"
120
+
121
+ #: admin.settings.php:85
122
+ msgid "A comma separated list of file and directory paths that you do <strong>not</strong> want to backup."
123
+ msgstr "Lista de archivos y rutas de carpetas que <strong>no</strong> deseas incluir en la copia de seguridad."
124
+
125
+ #: admin.settings.php:86
126
+ #: admin.constants.php:8
127
+ #: admin.constants.php:11
128
+ #: admin.constants.php:14
129
+ #: admin.constants.php:17
130
+ #: admin.constants.php:20
131
+ #: admin.constants.php:23
132
+ #: admin.constants.php:26
133
+ #: admin.constants.php:29
134
+ #: admin.constants.php:32
135
+ #: admin.constants.php:35
136
+ #: admin.constants.php:38
137
+ #: admin.constants.php:41
138
+ msgid "e.g."
139
+ msgstr "por ejemplo"
140
+
141
+ #: admin.settings.php:94
142
+ msgid "Save Changes"
143
+ msgstr "Guardar los cambios"
144
+
145
+ #: admin.backups-table.php:12
146
+ #, php-format
147
+ msgid "1 backup completed"
148
+ msgid_plural "%d backups completed"
149
+ msgstr[0] ""
150
+ msgstr[1] ""
151
+
152
+ #: admin.backups-table.php:13
153
+ msgid "Size"
154
+ msgstr "Tamaño"
155
+
156
+ #: admin.backups-table.php:14
157
+ msgid "Actions"
158
+ msgstr "Acciones"
159
+
160
+ #: admin.backups-table.php:20
161
+ #, php-format
162
+ msgid "Only the most recent backup will be saved"
163
+ msgid_plural "The %d most recent backups will be saved"
164
+ msgstr[0] ""
165
+ msgstr[1] ""
166
+
167
+ #: admin.backups-table.php:21
168
+ #, php-format
169
+ msgid "Total %s"
170
+ msgstr "Total %s"
171
+
172
+ #: admin.page.php:7
173
+ #: admin.menus.php:10
174
+ msgid "Manage Backups"
175
+ msgstr "Gestionar copias de seguridad"
176
+
177
+ #: admin.page.php:23
178
+ msgid "You need to fix the issues detailed above before BackUpWordPress can start."
179
+ msgstr "Debes arreglar los problemas indicados arriba para que BackUpWordPress pueda iniciar."
180
+
181
+ #: admin.page.php:29
182
+ #, php-format
183
+ msgid "If you need help getting things working you are more than welcome to email us at %s and we'll do what we can to help."
184
+ msgstr "Si necesitas ayuda puedes contactarnos al correo electrónico %s y haremos todo lo posible para ayudarte."
185
+
186
+ #: admin.backup-button.php:3
187
+ msgid "cancel"
188
+ msgstr "cancelar"
189
+
190
+ #: admin.backup-button.php:7
191
+ msgid "Back Up Now"
192
+ msgstr "Hacer copia de seguridad ahora"
193
+
194
+ #: admin.constants.php:3
195
+ #, php-format
196
+ 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."
197
+ msgstr "Puedes %1$s cualquiera de los %2$s en tu %3$s para controlar opciones avanzadas. %4$s. %5$s establecidas verán destacadas."
198
+
199
+ #: admin.constants.php:3
200
+ msgid "The Codex can help"
201
+ msgstr "Busca ayuda en el Codex"
202
+
203
+ #: admin.constants.php:8
204
+ #, php-format
205
+ msgid "The path to folder you would like to store your backup files in, defaults to %s."
206
+ msgstr "La ruta hacia el directorio en el que deseas guardar tus copias de seguridad será por defecto %s."
207
+
208
+ #: admin.constants.php:11
209
+ #, php-format
210
+ msgid "The path to your %1$s executable. Will be used for the %2$s part of the back up if available."
211
+ msgstr "La ruta hacia tu %1$s ejecutable. Se utilizará para la parte %2$s de la copia de seguridad si está disponible."
212
+
213
+ #: admin.constants.php:11
214
+ #: admin.constants.php:14
215
+ #: admin.constants.php:23
216
+ #: admin.constants.php:26
217
+ #: admin.status.php:14
218
+ #: admin.status.php:18
219
+ msgid "database"
220
+ msgstr "base de datos"
221
+
222
+ #: admin.constants.php:14
223
+ #, php-format
224
+ msgid "The path to your %1$s executable. Will be used to zip up your %2$s and %3$s if available."
225
+ msgstr "La ruta hacia tu %1$s ejecutable. Se utilizará para hacer el archivo zip de tu %2$s y %3$s si está disponible."
226
+
227
+ #: admin.constants.php:14
228
+ #: admin.constants.php:23
229
+ #: admin.constants.php:26
230
+ #: admin.status.php:14
231
+ #: admin.status.php:22
232
+ msgid "files"
233
+ msgstr "archivos"
234
+
235
+ #: admin.constants.php:17
236
+ #, php-format
237
+ msgid "Completely disables the automatic back up. You can still back up using the \"Back Up Now\" button. Defaults to %s."
238
+ msgstr "Desactiva completamente las copias automáticas. Podrás hacer copias de seguridad de todas maneras utilizando el botón \"Hacer copia de seguridad ahora\". Valor predeterminado es %s."
239
+
240
+ #: admin.constants.php:20
241
+ #, fuzzy, php-format
242
+ msgid "Number of backups to keep, older backups will be deleted automatically when a new backup is completed. Defaults to %s."
243
+ msgstr "El numero de copias de seguridad que se guardarán; las copias más antiguas se borrarán automáticamente cuando se crea una nueva copia. Valor predeterminado es %s."
244
+
245
+ #: admin.constants.php:23
246
+ #: admin.constants.php:26
247
+ #, php-format
248
+ msgid "Backup %1$s only, your %2$s won't be backed up. Defaults to %3$s."
249
+ msgstr "Copiar sólo %1$s, %2$s no será incluido. Valor predeterminado %3$s."
250
+
251
+ #: admin.constants.php:29
252
+ #, php-format
253
+ msgid "The time that the daily back up should run. Defaults to %s."
254
+ msgstr "La hora a la que se creará la copia diaria. Valor predeterminado es %s."
255
+
256
+ #: admin.constants.php:32
257
+ #, php-format
258
+ msgid "Attempt to email a copy of your backups. Value should be email address to send backups to. Defaults to %s."
259
+ msgstr "Intento de enviar un correo con tu copia de de seguridad. El valor debería ser la dirección de correo de envíos. Valor predeterminado es %s."
260
+
261
+ #: admin.constants.php:35
262
+ msgid "Comma separated list of files or directories to exclude, the backups directory is automatically excluded."
263
+ msgstr "Listado de archivos o directorios para excluir de la copia de seguridad separados por coma."
264
+
265
+ #: admin.constants.php:38
266
+ #, php-format
267
+ msgid "The capability to use when calling %1$s. Defaults to %2$s."
268
+ msgstr "Capacidad que se usa al llamar %1$s. Valor predeterminado es %2$s."
269
+
270
+ #: admin.constants.php:41
271
+ #, fuzzy, php-format
272
+ msgid "The root directory that is backed up. Defaults to %s."
273
+ msgstr "La hora a la que se creará la copia diaria. Valor predeterminado es %s."
274
+
275
+ #: admin.actions.php:70
276
+ msgid "You have entered an invalid number of backups."
277
+ msgstr "Has introducido un número de copias de seguridad no válido."
278
+
279
+ #: admin.actions.php:79
280
+ #, php-format
281
+ msgid "%s is an invalid email address."
282
+ msgstr "%s no es una dirección de correo valida."
283
+
284
+ #: admin.actions.php:249
285
+ #: functions/interface.functions.php:89
286
+ #: functions/interface.functions.php:99
287
+ #: functions/interface.functions.php:110
288
+ #: functions/interface.functions.php:120
289
+ #: functions/interface.functions.php:130
290
+ #: functions/interface.functions.php:140
291
+ #: functions/interface.functions.php:150
292
+ msgid "BackUpWordPress has detected a problem."
293
+ msgstr "BackUpWordPress ha detectado un problema."
294
+
295
+ #: admin.actions.php:249
296
+ #, php-format
297
+ 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."
298
+ msgstr "%1$s esta devolviendo una respuesta %2$s lo que podría significar que procesos cron no se están ejecutado correctamente. BackUpWordPress no puede funcionar sin que wp-cron haga copias de seguridad en un proceso aparte. Consultar %3$s para más información."
299
+
300
+ #: admin.menus.php:10
301
+ #: admin.menus.php:34
302
+ msgid "Backups"
303
+ msgstr "Copias de seguridad"
304
+
305
+ #: admin.menus.php:65
306
+ msgid "You are not using the latest stable version of BackUpWordPress"
307
+ msgstr "No estás usando la versión más reciente y estable de BackUpWordPress"
308
+
309
+ #: admin.menus.php:65
310
+ #, php-format
311
+ msgid "The information below is for version %1$s. View the <code>readme.txt</code> file for help specific to version %2$s."
312
+ msgstr "La información abajo es válida para la versión %1$s. Consulta el archivo <code>readme.txt</code> para ayuda especifica para la versión %2$s."
313
+
314
+ #: admin.menus.php:75
315
+ msgid "FAQ"
316
+ msgstr "Preguntas frecuentes"
317
+
318
+ #: admin.menus.php:79
319
+ msgid "For more information:"
320
+ msgstr "Para más información:"
321
+
322
+ #: admin.menus.php:81
323
+ msgid "Support Forums"
324
+ msgstr "Foros de soporte"
325
+
326
+ #: admin.menus.php:82
327
+ msgid "Help with translation"
328
+ msgstr "Ayuda con las traducciones"
329
+
330
+ #: plugin.php:47
331
+ msgid "BackUpWordPress requires PHP version 5.2.4 or greater."
332
+ msgstr "BackUpWordPress requiere PHP versión 5.2.4 o superior."
333
+
334
+ #: plugin.php:58
335
+ #, php-format
336
+ msgid "BackUpWordPress requires WordPress version %s."
337
+ msgstr "BackUpWordPress requiere la versión %s de Wordpress."
338
+
339
+ #: admin.status.php:9
340
+ #, php-format
341
+ msgid "Automatic backups are %s."
342
+ msgstr "Las copias automáticas están %s."
343
+
344
+ #: admin.status.php:9
345
+ msgid "disabled"
346
+ msgstr "desactivadas"
347
+
348
+ #: admin.status.php:14
349
+ msgid "&amp;"
350
+ msgstr "&amp;"
351
+
352
+ #: admin.status.php:32
353
+ #, php-format
354
+ msgid "Your %1$s will be automatically backed up %2$s. The next backup will occur at %3$s on %4$s and be saved to %5$s."
355
+ msgid_plural "Your %1$s will be automatically backed up %2$s. The next backup will occur at %3$s on %4$s and be saved to %5$s."
356
+ msgstr[0] "Tus %1$s se incluirán en la copia de seguridad automática %2$s. La siguiente copia de seguridad se producirá a las %3$s el %4$s y se guardará en %5$s."
357
+ msgstr[1] "Tus %1$s se incluirán en la copia de seguridad automática %2$s. La siguiente copia de seguridad se producirá a las %3$s el %4$s y se guardará en %5$s."
358
+
359
+ #: admin.status.php:39
360
+ #, php-format
361
+ msgid "It's currently %s"
362
+ msgstr "Actualmente son %s"
363
+
364
+ #: admin.status.php:47
365
+ #, php-format
366
+ msgid "Your site is %s. Backups will be compressed and should be smaller than this."
367
+ msgstr "Tu sitio web pesa %s. Las copias de seguridad serán comprimidas y deberían pesar menos."
368
+
369
+ #: admin.status.php:47
370
+ msgid "Calculating Size..."
371
+ msgstr "Calculando el tamaño..."
372
+
373
+ #: admin.status.php:50
374
+ #, php-format
375
+ msgid "A copy of each backup will be emailed to %s."
376
+ msgstr "Una de copia de seguridad será enviada por correo electrónico a %s."
377
+
378
+ #: admin.status.php:54
379
+ #, php-format
380
+ msgid "The following paths will be excluded from your backups %s."
381
+ msgstr "Las siguientes rutas se excluirán de tu copias de seguridad %s."
382
+
383
+ #: hm-backup/hm-backup.php:532
384
+ msgid "The backup file was not created"
385
+ msgstr "No se ha creado el archivo de copia de seguridad"
386
+
387
+ #: hm-backup/hm-backup.php:603
388
+ msgid "The following files are unreadable and couldn't be backed up: "
389
+ msgstr "Los siguientes archivos son ilegibles y no se ha incluido en la copia de seguridad: "
390
+
391
+ #: functions/interface.functions.php:25
392
+ msgid "Download"
393
+ msgstr "Descarga"
394
+
395
+ #: functions/interface.functions.php:26
396
+ msgid "Delete"
397
+ msgstr "Borrar"
398
+
399
+ #: functions/interface.functions.php:48
400
+ msgid "Settings saved."
401
+ msgstr "Configuración guardada."
402
+
403
+ #: functions/interface.functions.php:67
404
+ #: functions/interface.functions.php:79
405
+ msgid "BackUpWordPress is almost ready."
406
+ msgstr "BackUpWordPress está casi preparado."
407
+
408
+ #: functions/interface.functions.php:67
409
+ #, php-format
410
+ 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."
411
+ msgstr "El directorio de copias de seguridad no se pudo crear porque tu directorio %1$s no tiene el permiso de escritura; ejecuta %2$s o %3$s o crea el directorio tu mismo."
412
+
413
+ #: functions/interface.functions.php:79
414
+ #, php-format
415
+ msgid "Your backups directory isn't writable, run %1$s or %2$s or set the permissions yourself."
416
+ msgstr "El directorio de tus copias de seguridad no tiene permiso de escritura, ejecuta %1$s o %2$s o configura los permisos tu mismo."
417
+
418
+ #: functions/interface.functions.php:89
419
+ #, php-format
420
+ msgid "%1$s is running in %2$s. Please contact your host and ask them to disable %3$s."
421
+ msgstr "%1$s se está ejecutando en %2$s. Por favor contacta con tu administrador de alojamiento para que pare el proceso %3$s."
422
+
423
+ #: functions/interface.functions.php:89
424
+ msgid "http://php.net/manual/en/features.safe-mode.php"
425
+ msgstr "http://php.net/manual/es/features.safe-mode.php"
426
+
427
+ #: functions/interface.functions.php:89
428
+ msgid "Safe Mode"
429
+ msgstr "Safe Mode"
430
+
431
+ #: functions/interface.functions.php:99
432
+ #, php-format
433
+ msgid "You have both %1$s and %2$s defined so there isn't anything to back up."
434
+ msgstr "Tienes %1$s y %2$s definidos - no hay archivos para hacer copias de seguridad."
435
+
436
+ #: functions/interface.functions.php:110
437
+ #, fuzzy, php-format
438
+ msgid "The following email address is not valid: %s."
439
+ msgid_plural "The following email addresses are not valid: %s."
440
+ msgstr[0] "La siguiente dirección de correo electrónico no es válida: %s."
441
+ msgstr[1] "La siguiente dirección de correo electrónico no es válida: %s."
442
+
443
+ #: functions/interface.functions.php:120
444
+ msgid "The last backup email failed to send. It's likely that the file is too large."
445
+ msgstr "No se pudo enviar el último correo electrónico con copia de seguridad. Es probable que el archivo sea demasiado grande."
446
+
447
+ #: functions/interface.functions.php:130
448
+ #, php-format
449
+ msgid "Your custom backups directory %1$s doesn't exist and can't be created, your backups will be saved to %2$s instead."
450
+ msgstr "No existe la carpeta de tus copias de seguridad %1$s y no se puede crear; tus copias se guardarán en %2$s."
451
+
452
+ #: functions/interface.functions.php:140
453
+ #, php-format
454
+ msgid "Your custom backups directory %1$s isn't writable, new backups will be saved to %2$s instead."
455
+ msgstr "La carpeta de tus copias de seguridad %1$s no tiene permisos de escritura; las nuevas copias se guardarán en %2$s."
456
+
457
+ #: functions/interface.functions.php:150
458
+ #, php-format
459
+ msgid "You have defined a custom exclude list but the following paths don't exist %s, are you sure you entered them correctly?"
460
+ msgstr "Has definido la lista de exclusión personalizada pero las rutas %s no existen; ¿estás seguro de que las escribiste correctamente?"
461
+
462
+ #: functions/interface.functions.php:160
463
+ msgid "BackUpWordPress detected issues with your last backup."
464
+ msgstr "BackUpWordPress ha detectado problemas con la última copia de seguridad."
465
+
466
+ #: functions/backup.actions.php:12
467
+ msgid "Dumping database"
468
+ msgstr "Guardando la base de datos"
469
+
470
+ #: functions/backup.actions.php:22
471
+ msgid "Creating zip archive"
472
+ msgstr "Creando archivo zip"
473
+
474
+ #: functions/backup.functions.php:19
475
+ msgid "Removing old backups"
476
+ msgstr "Borrando copias antiguas"
477
+
478
+ #: functions/backup.functions.php:147
479
+ #: functions/backup.functions.php:157
480
+ #, php-format
481
+ msgid "Backup of %s"
482
+ msgstr "Copia de %s"
483
+
484
+ #: functions/backup.functions.php:148
485
+ #, php-format
486
+ msgid ""
487
+ "BackUpWordPress has completed a backup of your site %1$s.\\n"
488
+ "\\n"
489
+ "The backup file should be attached to this email.\\n"
490
+ "\\n"
491
+ "You can also download the backup file by clicking the link below:\\n"
492
+ "\\n"
493
+ "%2$s\\n"
494
+ "\\n"
495
+ "Kind Regards\\n"
496
+ "\\n"
497
+ " The Happy BackUpWordPress Backup Emailing Robot"
498
+ msgstr ""
499
+ "BackUpWordpress ha completado una copia de seguridad de tu sito %1$s.\n"
500
+ "\n"
501
+ "El archivo de copia de seguridad se encuentra adjunto a este correo electrónico.\n"
502
+ "\n"
503
+ "También puedes descargarlo desde el enlace indicado más abajo:\n"
504
+ "\n"
505
+ "%2$s\n"
506
+ "\n"
507
+ "Un saludo\n"
508
+ "\n"
509
+ "El feliz robot de envíos de BackUpWordPress"
510
+
511
+ #: functions/backup.functions.php:158
512
+ #, php-format
513
+ msgid ""
514
+ "BackUpWordPress has completed a backup of your site %1$s.\\n"
515
+ "\\n"
516
+ "Unfortunately the backup file was too large to attach to this email.\\n"
517
+ "\\n"
518
+ "You can download the backup file by clicking the link below:\\n"
519
+ "\\n"
520
+ "%2$s\\n"
521
+ "\\n"
522
+ "Kind Regards\\n"
523
+ "\\n"
524
+ " The Happy BackUpWordPress Backup Emailing Robot"
525
+ msgstr ""
526
+ "BackUpWordpress ha completado una copia de seguridad de tu sito %1$s.\n"
527
+ "\n"
528
+ "Desafortunadamente el archivo de copia de seguridad creado es demasiado grande para enviar como archivo adjunto, pero puedes descargarlo desde enlace indicado aquí:\n"
529
+ "\n"
530
+ "%2$s\n"
531
+ "\n"
532
+ "Un saludo\n"
533
+ "\n"
534
+ "El feliz robot de envíos de BackUpWordPress"
535
+
536
+ #: functions/core.functions.php:339
537
+ #, php-format
538
+ msgid "This %s file ensures that other people cannot download your backup files."
539
+ msgstr "El archivo %s de seguridad hace que otras personas no pueden descargar tus copias de seguridad."
540
+
backupwordpress/languages/hmbkp-eu.mo ADDED
Binary file
backupwordpress/languages/hmbkp-eu.po ADDED
@@ -0,0 +1,432 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Translation of 1.6.8 in Basque
2
+ # This file is distributed under the same license as the 1.6.8 package.
3
+ msgid ""
4
+ msgstr ""
5
+ "PO-Revision-Date: 2012-08-10 14:34:15+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: 1.6.8\n"
12
+
13
+ #: admin.menus.php:82
14
+ msgid "Help with translation"
15
+ msgstr "Itzulpenarekin lagundu"
16
+
17
+ #: admin.backup-button.php:3
18
+ msgid "cancel"
19
+ msgstr "ezeztatu"
20
+
21
+ #: admin.constants.php:23 admin.constants.php:26
22
+ msgid "Backup %s only, your %s won't be backed up. Defaults to %s."
23
+ msgstr "Honen %s babeskopia baino ez egin. %s honen babeskopiarik ez da egingo. %s lehenespen gisa."
24
+
25
+ #: admin.menus.php:65
26
+ msgid "The information below is for version %s. View the readme.txt file for help specific to version %s."
27
+ msgstr "Beheko informazioa %s bertsiorako da. %s bertsioko laguntza lortzeko, readme.txt fitxategia irakurri."
28
+
29
+ #: admin.menus.php:75
30
+ msgid "FAQ"
31
+ msgstr "MEG"
32
+
33
+ #: admin.constants.php:3 admin.menus.php:76 admin.settings.php:5
34
+ msgid "Constants"
35
+ msgstr "Iraunkorrak"
36
+
37
+ #: admin.menus.php:81
38
+ msgid "Support Forums"
39
+ msgstr "Laguntza-foroak"
40
+
41
+ #: admin.settings.php:5
42
+ msgid "You can define %s in your %s to control some settings. A full list of %s can be found in the %s. Defined settings will not be editable below."
43
+ msgstr "%s zehaztu dezakezu zeure %s ezarpen batzuk kontrolatzeko. %s-(r)en zerrenda oso bat aurki daiteke hemen: %s. Zehaztutako ezarpenak ezin izango dira azpian aldatu."
44
+
45
+ #: admin.settings.php:5
46
+ msgid "help panel"
47
+ msgstr "laguntza taula"
48
+
49
+ #: admin.settings.php:94
50
+ msgid "Save Changes"
51
+ msgstr "Aldaketak Gorde"
52
+
53
+ #: functions/core.functions.php:339
54
+ msgid "This %s file ensures that other people cannot download your backup files."
55
+ msgstr "Fitxategi %s hau, beste inork zeure babeskopiak jaisten ez dituelaz ziurtatzen da."
56
+
57
+ #: functions/interface.functions.php:48
58
+ msgid "Settings saved."
59
+ msgstr "Ezarpenak gordeta."
60
+
61
+ #: admin.actions.php:70
62
+ msgid "You have entered an invalid number of backups."
63
+ msgstr "Babeskopia kopuru oker bat idatzi duzu."
64
+
65
+ #: admin.actions.php:79
66
+ msgid "%s is an invalid email address."
67
+ msgstr "%s posta elektroniko helbide okerra da."
68
+
69
+ #: admin.actions.php:249 functions/interface.functions.php:89
70
+ #: functions/interface.functions.php:99 functions/interface.functions.php:109
71
+ #: functions/interface.functions.php:119 functions/interface.functions.php:129
72
+ #: functions/interface.functions.php:139 functions/interface.functions.php:149
73
+ msgid "BackUpWordPress has detected a problem."
74
+ msgstr "BackUpWordPress-ek arazo bat aurkitu du."
75
+
76
+ #: admin.actions.php:249
77
+ msgid "%s is returning a %s response which could mean cron jobs aren't getting fired properly. BackUpWordPress relies on wp-cron to run scheduled back ups. See the %s for more details."
78
+ msgstr "Hau (%s) honen (%s) erantzuna bilakatzen ari da, cron lanak zuzen bidaltzen ez direla esanahi ahal duena. BackUpWordPress wp-cron-en oinarritzen da antolatutako babeskopiak egiteko. %s ikusi xehetasun gehiagorako."
79
+
80
+ #: admin.backup-button.php:7
81
+ msgid "Back Up Now"
82
+ msgstr "Babeskopia Oraintxe Egin"
83
+
84
+ #: admin.backups-table.php:13
85
+ msgid "Size"
86
+ msgstr "Neurria"
87
+
88
+ #: admin.backups-table.php:14
89
+ msgid "Actions"
90
+ msgstr "Ekintzak"
91
+
92
+ #: admin.backups-table.php:21
93
+ msgid "Total %s"
94
+ msgstr "%s guztira"
95
+
96
+ #: admin.constants.php:3
97
+ msgid "You can %s any of the following %s in your %s to control advanced settings. %s. Defined %s will be highlighted."
98
+ msgstr "%s ahal duzu ondorengo edozein %s zeure %s ezarpen aurreratuak kontrolatzeko. %s. Zehaztutako %s nabarmenduta egongo dira."
99
+
100
+ #: admin.constants.php:3
101
+ msgid "The Codex can help"
102
+ msgstr "Kodizeak lagundu dezake"
103
+
104
+ #: admin.constants.php:8
105
+ msgid "The path to folder you would like to store your backup files in, defaults to %s."
106
+ msgstr "Zeure babeskopien fitxategiak gorde gura dituzun karpetaren bide-izena, %s da lehenespen gisa."
107
+
108
+ #: admin.constants.php:11
109
+ msgid "The path to your %s executable. Will be used for the %s part of the back up if available."
110
+ msgstr "Zeure egikaritutako %s-(e)rako bide-izena. Ahal bada, babeskopiaren %s atalerako erabiliko da. "
111
+
112
+ #: admin.constants.php:11 admin.constants.php:14 admin.constants.php:23
113
+ #: admin.constants.php:26 admin.status.php:14 admin.status.php:17
114
+ msgid "database"
115
+ msgstr "datu-basea"
116
+
117
+ #: admin.constants.php:14
118
+ msgid "The path to your %s executable. Will be used to zip up your %s and %s if available."
119
+ msgstr "Zeure egikaritutako %s-(e)rako bide-izena. Ahal bada, zeure %s eta %s konprimitzeko erabiliko da."
120
+
121
+ #: admin.constants.php:14 admin.constants.php:23 admin.constants.php:26
122
+ #: admin.status.php:14 admin.status.php:20
123
+ msgid "files"
124
+ msgstr "fitxategiak"
125
+
126
+ #: admin.constants.php:17
127
+ msgid "Completely disables the automatic back up. You can still back up using the \"Back Up Now\" button. Defaults to %s."
128
+ msgstr "Guztiz ezgaitzen du babeskopia automatikoa, baina \"Babeskopia Oraintxe Egin\" botoia erabiliz egin dezakezu. %s lehenespen gisa."
129
+
130
+ #: admin.constants.php:20
131
+ msgid "Number of backups to keep, older backups will be deleted automatically when a new backup is completed. Detaults to %s."
132
+ msgstr "Gorde behar den babeskopien kopurua. Babeskopia zaharrak automatikoki ezabatuko dira babeskopia berri bat sortzen denean. %s lehenespen gisa."
133
+
134
+ #: admin.constants.php:29
135
+ msgid "The time that the daily back up should run. Defaults to %s."
136
+ msgstr "Egunero babeskopia egiten hasten den ordua. %s lehenespen gisa."
137
+
138
+ #: admin.constants.php:32
139
+ msgid "Attempt to email a copy of your backups. Value should be email address to send backups to. Defaults to %s."
140
+ msgstr "Zeure babeskopien kopia bat posta elektronikora bidaltzen saiatu. Zeure posta elektronikoa sartu babeskopiak jasotzeko. %s lehenespen gisa."
141
+
142
+ #: admin.constants.php:35
143
+ msgid "Comma separated list of files or directories to exclude, the backups directory is automatically excluded."
144
+ msgstr "Komez bananduriko baztertzeko fitxategi eta direktorio bide-izenen zerrenda. Babeskopien direktorioa automatikoki baztertzen da."
145
+
146
+ #: admin.constants.php:38
147
+ msgid "The capability to use when calling %s. Defaults to %s."
148
+ msgstr "%s deitzerakoan erabiltzeko duen gaitasuna. %s lehenespen gisa."
149
+
150
+ #: admin.menus.php:10 admin.page.php:7
151
+ msgid "Manage Backups"
152
+ msgstr "Babeskopiak Kudeatu"
153
+
154
+ #: admin.menus.php:10 admin.menus.php:34
155
+ msgid "Backups"
156
+ msgstr "Babeskopiak"
157
+
158
+ #: admin.menus.php:65
159
+ msgid "You are not using the latest stable version of BackUpWordPress"
160
+ msgstr "Ez zaude BackUpWordPress-eko azken bertsioa erabiltzen"
161
+
162
+ #: admin.menus.php:79
163
+ msgid "For more information:"
164
+ msgstr "Informazio gehiagorako:"
165
+
166
+ #: admin.page.php:11 admin.settings.php:3
167
+ msgid "Settings"
168
+ msgstr "Ezarpenak"
169
+
170
+ #: admin.page.php:23
171
+ msgid "You need to fix the issues detailed above before BackUpWordPress can start."
172
+ msgstr "Aurretiaz azaldutako arazoak konpontzea beharrezkoa da BackUpWordPress martxan jartzeko."
173
+
174
+ #: admin.page.php:29
175
+ msgid "If you need help getting things working you are more than welcome to email us at %s and we'll do what we can to help."
176
+ msgstr "Laguntzarik behar baduzu gauzak martxan jartzeko, %s-era posta elektroniko bat bidal diezagukezu eta ahal dugun guztia egingo dugu laguntzeko."
177
+
178
+ #: admin.settings.php:16
179
+ msgid "Automatic Backups"
180
+ msgstr "Babeskopia automatikoak"
181
+
182
+ #: admin.settings.php:22
183
+ msgid "Backup my site automatically."
184
+ msgstr "Neure gunearen babeskopia automatikoki egin."
185
+
186
+ #: admin.settings.php:27
187
+ msgid "No automatic backups."
188
+ msgstr "Babeskopia automatikorik ez."
189
+
190
+ #: admin.settings.php:36
191
+ msgid "Frequency of backups"
192
+ msgstr "Babeskopien maiztasuna"
193
+
194
+ #: admin.settings.php:40
195
+ msgid "Automatic backups will occur"
196
+ msgstr "Babeskopia automatikoak egingo dira"
197
+
198
+ #: admin.settings.php:43
199
+ msgid "Daily"
200
+ msgstr "Egunero"
201
+
202
+ #: admin.settings.php:44
203
+ msgid "Weekly"
204
+ msgstr "Astero"
205
+
206
+ #: admin.settings.php:45
207
+ msgid "Fortnightly"
208
+ msgstr "Hamabost egunez behin"
209
+
210
+ #: admin.settings.php:46
211
+ msgid "Monthly"
212
+ msgstr "Hilero"
213
+
214
+ #: admin.settings.php:55
215
+ msgid "What to Backup"
216
+ msgstr "Zeren Babeskopia"
217
+
218
+ #: admin.settings.php:59
219
+ msgid "Backup my"
220
+ msgstr "Honen babeskopia egin"
221
+
222
+ #: admin.settings.php:62
223
+ msgid "database &amp; files"
224
+ msgstr "datu-baseak eta fitxategiak"
225
+
226
+ #: admin.settings.php:63
227
+ msgid "database only"
228
+ msgstr "datu-basea bakarrik"
229
+
230
+ #: admin.settings.php:64
231
+ msgid "files only"
232
+ msgstr "fitxategiak bakarrik"
233
+
234
+ #: admin.settings.php:72
235
+ msgid "Number of backups"
236
+ msgstr "Babeskopia kopurua"
237
+
238
+ #: admin.settings.php:73
239
+ msgid "The last %s backups will be stored on the server."
240
+ msgstr "Azkenengo %s babeskopiak zerbitzarian gordeko dira."
241
+
242
+ #: admin.settings.php:77
243
+ msgid "Email backups"
244
+ msgstr "Babeskopiak posta elektronikoaz bidali"
245
+
246
+ #: admin.settings.php:78
247
+ msgid "A copy of the backup file will be emailed to this address. Disabled if left blank."
248
+ msgstr "Babeskopiaren kopia bat posta elektroniko honetara bidaliko da. Ezgaituta hutsik egotekotan."
249
+
250
+ #: admin.settings.php:82
251
+ msgid "Excludes"
252
+ msgstr "Baztertuak"
253
+
254
+ #: admin.settings.php:85
255
+ msgid "A comma separated list of file and directory paths that you do <strong>not</strong> want to backup."
256
+ msgstr "Babeskopia egin gura <strong>ez</strong> duzun fitxategi eta direktorio bide-izenen zerrenda, komez banandurikoa."
257
+
258
+ #: admin.settings.php:86
259
+ msgid "e.g."
260
+ msgstr "adibidez"
261
+
262
+ #: admin.status.php:9
263
+ msgid "Automatic backups are %s."
264
+ msgstr "%s babeskopia automatikoak dira."
265
+
266
+ #: admin.status.php:9
267
+ msgid "disabled"
268
+ msgstr "ezgaituta"
269
+
270
+ #: admin.status.php:14
271
+ msgid "&amp;"
272
+ msgstr "eta"
273
+
274
+ #: admin.status.php:25
275
+ msgid "Your %s will be automatically backed up <code>%s</code>. The next backup will occur at %s on %s and be saved to %s."
276
+ msgstr "%s babeskopia <code>%s</code> automatikoki egingo da. Hurrengo babeskopia %s-(r)etan, %s-(e)an eta %s-(e)n gordeko da."
277
+
278
+ #: admin.status.php:25
279
+ msgid "It's currently %s"
280
+ msgstr "Orain %s da"
281
+
282
+ #: admin.status.php:31
283
+ msgid "Your site is %s. Backups will be compressed and should be smaller than this."
284
+ msgstr "Zeure gunea %s da. Babeskopiak konprimatu eta hau baino txikiagoak izan dira."
285
+
286
+ #: admin.status.php:31
287
+ msgid "Calculating Size..."
288
+ msgstr "Neurria Kalkulatzen..."
289
+
290
+ #: admin.status.php:34
291
+ msgid "A copy of each backup will be emailed to %s."
292
+ msgstr "Babeskopia bakoitzaren kopia bat %s posta elektronikora bidaliko da."
293
+
294
+ #: admin.status.php:38
295
+ msgid "The following paths will be excluded from your backups %s."
296
+ msgstr "Hurrengo bide-izenak babeskopiatik kanpo geratuko dira: %s."
297
+
298
+ #: functions/backup.actions.php:12
299
+ msgid "Dumping database"
300
+ msgstr "Datu-basera bidaltzen"
301
+
302
+ #: functions/backup.actions.php:22
303
+ msgid "Creating zip archive"
304
+ msgstr "Zip fitxategia sortzen"
305
+
306
+ #: functions/backup.functions.php:19
307
+ msgid "Removing old backups"
308
+ msgstr "Babeskopia zaharrak ezabatzen"
309
+
310
+ #: functions/backup.functions.php:147 functions/backup.functions.php:157
311
+ msgid "Backup of %s"
312
+ msgstr "%s-(r)en babeskopia"
313
+
314
+ #: functions/backup.functions.php:148
315
+ msgid ""
316
+ "BackUpWordPress has completed a backup of your site %s.\n"
317
+ "\n"
318
+ "The backup file should be attached to this email.\n"
319
+ "\n"
320
+ "You can also download the backup file by clicking the link below:\n"
321
+ "\n"
322
+ "%s\n"
323
+ "\n"
324
+ "Kind Regards\n"
325
+ "\n"
326
+ " The Happy BackUpWordPress Backup Emailing Robot"
327
+ msgstr ""
328
+ "BackUpWordPress-ek zeure %s gunearen babeskopia bat egiten amaitu du.\n"
329
+ "\n"
330
+ "Babeskopiaren fitxategia posta elektroniko honetara erantsiko da.\n"
331
+ "\n"
332
+ "Azpian dagoen estekan klik eginez, babeskopiaren fitxategia jaitsi dezakezu baita ere:\n"
333
+ "\n"
334
+ "%s\n"
335
+ "\n"
336
+ "Agur bero bat\n"
337
+ "\n"
338
+ "Posta Elektronikoak Bidaltzen Dituen BackUpWordPress-eko Errobot Zoriontsua"
339
+
340
+ #: functions/backup.functions.php:158
341
+ msgid ""
342
+ "BackUpWordPress has completed a backup of your site %s.\n"
343
+ "\n"
344
+ "Unfortunately the backup file was too large to attach to this email.\n"
345
+ "\n"
346
+ "You can download the backup file by clicking the link below:\n"
347
+ "\n"
348
+ "%s\n"
349
+ "\n"
350
+ "Kind Regards\n"
351
+ "\n"
352
+ " The Happy BackUpWordPress Backup Emailing Robot"
353
+ msgstr ""
354
+ "BackUpWordPress-ek zeure %s gunearen babeskopia bat egiten amaitu du.\n"
355
+ "\n"
356
+ "Zoritxarrez, babeskopiaren fitxategia handiegia da posta elektronikora eransteko.\n"
357
+ "\n"
358
+ "Azpian dagoen estekan klik eginez, babeskopiaren fitxategia jaitsi dezakezu:\n"
359
+ "\n"
360
+ "%s\n"
361
+ "\n"
362
+ "Agur bero bat\n"
363
+ "\n"
364
+ "Posta Elektronikoak Bidaltzen Dituen BackUpWordPress-eko Errobot Zoriontsua"
365
+
366
+ #: functions/interface.functions.php:25
367
+ msgid "Download"
368
+ msgstr "Jaitsi"
369
+
370
+ #: functions/interface.functions.php:26
371
+ msgid "Delete"
372
+ msgstr "Ezabatu"
373
+
374
+ #: functions/interface.functions.php:67 functions/interface.functions.php:79
375
+ msgid "BackUpWordPress is almost ready."
376
+ msgstr "BackUpWordPress ia prest dago."
377
+
378
+ #: functions/interface.functions.php:67
379
+ msgid "The backups directory can't be created because your %s directory isn't writable, run %s or %s or create the folder yourself."
380
+ msgstr "Babeskopien direktorioa ezin da sortu %s direktorioa idazgarria ez delako, %s edo %s egikaritu edo sortu karpeta zeure kabuz."
381
+
382
+ #: functions/interface.functions.php:79
383
+ msgid "Your backups directory isn't writable. run %s or %s or set the permissions yourself."
384
+ msgstr "Zeure babeskopien direktorioa ez da idazgarria. %s edo %s egikaritu edo baimenak zeure kabuz ezarri."
385
+
386
+ #: functions/interface.functions.php:89
387
+ msgid " %s is running in %s. Please contact your host and ask them to disable %s."
388
+ msgstr "%s %s-(e) egikaritzen ari da. Mesedez zeure ostalariarekin harremanetan jarri eta %s ezgaitzeko eskatu."
389
+
390
+ #: functions/interface.functions.php:99
391
+ msgid "You have both %s and %s defined so there isn't anything to back up."
392
+ msgstr "%s eta %s aukeratuak, beraz, ez dago ezeren babeskopiarik egiterik."
393
+
394
+ #: functions/interface.functions.php:109
395
+ msgid "The following email address's are not valid: %s."
396
+ msgstr "Hurrengo posta elektroniko helbideak ez dira zuzenak: %s."
397
+
398
+ #: functions/interface.functions.php:119
399
+ msgid "The last backup email failed to send. It's likely that the file is too large."
400
+ msgstr "Azkenengo babeskopiaren bidalketak huts egin du. Fitxategiaren neurria oso handia delako izan daiteke."
401
+
402
+ #: functions/interface.functions.php:129
403
+ msgid "Your custom backups directory %s doesn't exist and can't be created, your backups will be saved to %s instead."
404
+ msgstr "Babeskopiak gordetzeko ezarri duzun %s direktorioa ez da existitzen eta ezin da sortu, beraz, zeure babeskopiak hemen gordeko dira: %s."
405
+
406
+ #: functions/interface.functions.php:139
407
+ msgid "Your custom backups directory %s isn't writable, new backups will be saved to %s instead."
408
+ msgstr "Babeskopiak gordetzeko ezarri duzun %s direktorioa ez da idazgarria, beraz, babeskopia berriak hemen gordeko dira: %s. "
409
+
410
+ #: functions/interface.functions.php:149
411
+ msgid "You have defined a custom exclude list but the following paths don't exist %s, are you sure you entered them correctly?"
412
+ msgstr "Bazterketa-zerrenda egin duzu, baina hurrengo bide-izenak ez dira existitzen %s, zuzen idatzi dituzula ziur zaude?"
413
+
414
+ #: functions/interface.functions.php:159
415
+ msgid "BackUpWordPress detected issues with your last backup."
416
+ msgstr "BackUpWordPress-ek arazoak aurkitu ditu zeure azken babeskopian."
417
+
418
+ #: hm-backup/hm-backup.php:532
419
+ msgid "The backup file was not created"
420
+ msgstr "Babeskopiaren fitxategia ez da sortu"
421
+
422
+ #: hm-backup/hm-backup.php:603
423
+ msgid "The following files are unreadable and couldn't be backed up: "
424
+ msgstr "Hurrengo fitxategiak irakurtezinak dira eta ezin da hauen babeskopiarik egin:"
425
+
426
+ #: plugin.php:47
427
+ msgid "BackUpWordPress requires PHP version 5.2.4 or greater."
428
+ msgstr "BackUpWordPress-ek PHP-eko 5.2.4 bertsioa edo hobeagoa behar du."
429
+
430
+ #: plugin.php:58
431
+ msgid "BackUpWordPress requires WordPress version %s."
432
+ msgstr "BackUpWordPress-ek WordPress-eko %s bertsioa behar du."
backupwordpress/languages/hmbkp-fr_FR.mo ADDED
Binary file
backupwordpress/languages/hmbkp-fr_FR.po ADDED
@@ -0,0 +1,542 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Translation of 1.6.8 in French (France)
2
+ # This file is distributed under the same license as the 1.6.8 package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: 1.6.8\n"
6
+ "Report-Msgid-Bugs-To: \n"
7
+ "POT-Creation-Date: 2012-08-14 14:40+0100\n"
8
+ "PO-Revision-Date: 2012-08-14 14:41+0100\n"
9
+ "Last-Translator: Flo Edelmann <florian-edelmann@online.de>\n"
10
+ "Language-Team: \n"
11
+ "Language: \n"
12
+ "MIME-Version: 1.0\n"
13
+ "Content-Type: text/plain; charset=UTF-8\n"
14
+ "Content-Transfer-Encoding: 8bit\n"
15
+ "Plural-Forms: nplurals=2; plural=n > 1;\n"
16
+ "X-Generator: GlotPress/0.1\n"
17
+ "X-Poedit-Language: French\n"
18
+ "X-Poedit-Country: FRANCE\n"
19
+ "X-Poedit-SourceCharset: utf-8\n"
20
+ "X-Poedit-KeywordsList: __;_e;_n:1,2\n"
21
+ "X-Poedit-Basepath: ..\n"
22
+ "X-Poedit-SearchPath-0: .\n"
23
+
24
+ #: admin.settings.php:3
25
+ #: admin.page.php:11
26
+ msgid "Settings"
27
+ msgstr "Paramètres"
28
+
29
+ #: admin.settings.php:5
30
+ #, php-format
31
+ msgid "You can define %1$s in your %2$s to control some settings. A full list of %3$s can be found in the %4$s. Defined settings will not be editable below."
32
+ msgstr "Vous pouvez définir des %1$s dans votre %2$s pour contrôler certains paramètres. Une liste complète des %3$s est disponible dans le %4$s. La valeur des paramètres ne peut pas être modifié ici."
33
+
34
+ #: admin.settings.php:5
35
+ #: admin.constants.php:3
36
+ #: admin.menus.php:76
37
+ msgid "Constants"
38
+ msgstr "Constantes"
39
+
40
+ #: admin.settings.php:5
41
+ msgid "help panel"
42
+ msgstr "page d'aide"
43
+
44
+ #: admin.settings.php:16
45
+ msgid "Automatic Backups"
46
+ msgstr "Sauvegardes automatiques"
47
+
48
+ #: admin.settings.php:22
49
+ msgid "Backup my site automatically."
50
+ msgstr "Sauvegarder mon site automatiquement."
51
+
52
+ #: admin.settings.php:27
53
+ msgid "No automatic backups."
54
+ msgstr "Pas de sauvegardes automatiques."
55
+
56
+ #: admin.settings.php:36
57
+ msgid "Frequency of backups"
58
+ msgstr "Fréquences des sauvegardes"
59
+
60
+ #: admin.settings.php:40
61
+ msgid "Automatic backups will occur"
62
+ msgstr "Les sauvegardes automatiques auront lieu"
63
+
64
+ #: admin.settings.php:43
65
+ msgid "Daily"
66
+ msgstr "Quotidiennement"
67
+
68
+ #: admin.settings.php:44
69
+ msgid "Weekly"
70
+ msgstr "Hebdomadairement"
71
+
72
+ #: admin.settings.php:45
73
+ msgid "Fortnightly"
74
+ msgstr "Tous les quinze jours"
75
+
76
+ #: admin.settings.php:46
77
+ msgid "Monthly"
78
+ msgstr "Mensuellement"
79
+
80
+ #: admin.settings.php:55
81
+ msgid "What to Backup"
82
+ msgstr "Étendue de la sauvegarde"
83
+
84
+ #: admin.settings.php:59
85
+ msgid "Backup my"
86
+ msgstr "Sauvegardez"
87
+
88
+ #: admin.settings.php:62
89
+ msgid "database &amp; files"
90
+ msgstr "la base de données et les fichiers"
91
+
92
+ #: admin.settings.php:63
93
+ msgid "database only"
94
+ msgstr "la base de données seule"
95
+
96
+ #: admin.settings.php:64
97
+ msgid "files only"
98
+ msgstr "les fichiers seuls"
99
+
100
+ #: admin.settings.php:72
101
+ msgid "Number of backups"
102
+ msgstr "Nombre de sauvegardes"
103
+
104
+ #: admin.settings.php:73
105
+ #, php-format
106
+ msgid "The last %s backups will be stored on the server."
107
+ msgstr "Les %s dernières sauvegardes seront conservées sur le serveur."
108
+
109
+ #: admin.settings.php:77
110
+ msgid "Email backups"
111
+ msgstr "Envoi par courriel"
112
+
113
+ #: admin.settings.php:78
114
+ msgid "A copy of the backup file will be emailed to this address. Disabled if left blank."
115
+ msgstr "Une copie de la sauvegarde sera envoyée par courriel à cette adresse. Laisser blanc pour désactiver l'envoi."
116
+
117
+ #: admin.settings.php:82
118
+ msgid "Excludes"
119
+ msgstr "Exclusions"
120
+
121
+ #: admin.settings.php:85
122
+ msgid "A comma separated list of file and directory paths that you do <strong>not</strong> want to backup."
123
+ msgstr "Liste de fichiers ou de répertoires, séparés par des virgules, que vous ne voulez <strong>pas</strong> sauvegarder."
124
+
125
+ #: admin.settings.php:86
126
+ #: admin.constants.php:8
127
+ #: admin.constants.php:11
128
+ #: admin.constants.php:14
129
+ #: admin.constants.php:17
130
+ #: admin.constants.php:20
131
+ #: admin.constants.php:23
132
+ #: admin.constants.php:26
133
+ #: admin.constants.php:29
134
+ #: admin.constants.php:32
135
+ #: admin.constants.php:35
136
+ #: admin.constants.php:38
137
+ #: admin.constants.php:41
138
+ msgid "e.g."
139
+ msgstr "exemple :"
140
+
141
+ #: admin.settings.php:94
142
+ msgid "Save Changes"
143
+ msgstr "Sauver les modifications"
144
+
145
+ #: admin.backups-table.php:12
146
+ #, php-format
147
+ msgid "1 backup completed"
148
+ msgid_plural "%d backups completed"
149
+ msgstr[0] ""
150
+ msgstr[1] ""
151
+
152
+ #: admin.backups-table.php:13
153
+ msgid "Size"
154
+ msgstr "Taille"
155
+
156
+ #: admin.backups-table.php:14
157
+ msgid "Actions"
158
+ msgstr "Actions"
159
+
160
+ #: admin.backups-table.php:20
161
+ #, php-format
162
+ msgid "Only the most recent backup will be saved"
163
+ msgid_plural "The %d most recent backups will be saved"
164
+ msgstr[0] ""
165
+ msgstr[1] ""
166
+
167
+ #: admin.backups-table.php:21
168
+ #, php-format
169
+ msgid "Total %s"
170
+ msgstr "%s au total"
171
+
172
+ #: admin.page.php:7
173
+ #: admin.menus.php:10
174
+ msgid "Manage Backups"
175
+ msgstr "Gestion des sauvegardes"
176
+
177
+ #: admin.page.php:23
178
+ msgid "You need to fix the issues detailed above before BackUpWordPress can start."
179
+ msgstr "Vous devez régler les problèmes ci dessus pour que BackUpWordPress puisse démarrer."
180
+
181
+ #: admin.page.php:29
182
+ #, php-format
183
+ msgid "If you need help getting things working you are more than welcome to email us at %s and we'll do what we can to help."
184
+ msgstr "Si vous avez besoin d'aide pour tout faire fonctionner, nous vous engourageons à nous écrire à %s et nous ferrons notre possible pour vous aider."
185
+
186
+ #: admin.backup-button.php:3
187
+ msgid "cancel"
188
+ msgstr "Abandon"
189
+
190
+ #: admin.backup-button.php:7
191
+ msgid "Back Up Now"
192
+ msgstr "Sauvegarder maintenant"
193
+
194
+ #: admin.constants.php:3
195
+ #, php-format
196
+ 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."
197
+ msgstr "Vous pouvez %1$s chacun des éléments suivants %2$s dans votre %3$s pour contrôler les options avancées. %4$s. Le %5$s défini sera mis en évidence."
198
+
199
+ #: admin.constants.php:3
200
+ msgid "The Codex can help"
201
+ msgstr "Le Codex peut vous aider"
202
+
203
+ #: admin.constants.php:8
204
+ #, php-format
205
+ msgid "The path to folder you would like to store your backup files in, defaults to %s."
206
+ msgstr "Le chemin du répertoire où vous souhaitez stocker vos sauvegardes, par défaut : %s"
207
+
208
+ #: admin.constants.php:11
209
+ #, php-format
210
+ msgid "The path to your %1$s executable. Will be used for the %2$s part of the back up if available."
211
+ msgstr "Chemin vers votre exécutable %1$s. Il sera utilisé pour réaliser la partie %2$s de la sauvegarde s'il est disponible."
212
+
213
+ #: admin.constants.php:11
214
+ #: admin.constants.php:14
215
+ #: admin.constants.php:23
216
+ #: admin.constants.php:26
217
+ #: admin.status.php:14
218
+ #: admin.status.php:18
219
+ msgid "database"
220
+ msgstr "base de données"
221
+
222
+ #: admin.constants.php:14
223
+ #, php-format
224
+ msgid "The path to your %1$s executable. Will be used to zip up your %2$s and %3$s if available."
225
+ msgstr "Chemin vers votre exécutable %1$s. Il sera utilisé pour compresser vos %2$s et votre %3$s s'il est disponible."
226
+
227
+ #: admin.constants.php:14
228
+ #: admin.constants.php:23
229
+ #: admin.constants.php:26
230
+ #: admin.status.php:14
231
+ #: admin.status.php:22
232
+ msgid "files"
233
+ msgstr "fichiers"
234
+
235
+ #: admin.constants.php:17
236
+ #, php-format
237
+ msgid "Completely disables the automatic back up. You can still back up using the \"Back Up Now\" button. Defaults to %s."
238
+ msgstr "Désactive totalement la sauvegarde automatique. Vous pouvez toujours faire une sauvagarde en utilisant le bouton \"Sauvegarder maintenant\". Par défaut à %s."
239
+
240
+ #: admin.constants.php:20
241
+ #, fuzzy, php-format
242
+ msgid "Number of backups to keep, older backups will be deleted automatically when a new backup is completed. Defaults to %s."
243
+ msgstr "Nombre de sauvegardes à conserver, les plus anciennes sont automatiquement effacées quand une nouvelle sauvegarde est effectuée. Par défaut à %s."
244
+
245
+ #: admin.constants.php:23
246
+ #: admin.constants.php:26
247
+ #, php-format
248
+ msgid "Backup %1$s only, your %2$s won't be backed up. Defaults to %3$s."
249
+ msgstr "Sauvegarde %1$s seulement, vos %2$s ne seront pas sauvegardés. Par défaut à %3$s."
250
+
251
+ #: admin.constants.php:29
252
+ #, php-format
253
+ msgid "The time that the daily back up should run. Defaults to %s."
254
+ msgstr "Heure à laquelle la sauvegarde quotidienne à lieu. Par défaut à %s heures."
255
+
256
+ #: admin.constants.php:32
257
+ #, php-format
258
+ msgid "Attempt to email a copy of your backups. Value should be email address to send backups to. Defaults to %s."
259
+ msgstr "Tente d'envoyer une copie de la sauvegarde par e-mail. Saisissez l'adresse e-mail où envoyer. Par défaut : %s."
260
+
261
+ #: admin.constants.php:35
262
+ msgid "Comma separated list of files or directories to exclude, the backups directory is automatically excluded."
263
+ msgstr "Liste des fichiers ou des répertoires à exclure, le répertoire des sauvegardes est automatiquement exclu."
264
+
265
+ #: admin.constants.php:38
266
+ #, php-format
267
+ msgid "The capability to use when calling %1$s. Defaults to %2$s."
268
+ msgstr "Capacité à utiliser lors de l'appel à %1$s. La valeur par défaut est %2$s."
269
+
270
+ #: admin.constants.php:41
271
+ #, fuzzy, php-format
272
+ msgid "The root directory that is backed up. Defaults to %s."
273
+ msgstr "Heure à laquelle la sauvegarde quotidienne à lieu. Par défaut à %s heures."
274
+
275
+ #: admin.actions.php:70
276
+ msgid "You have entered an invalid number of backups."
277
+ msgstr "Vous avez saisi un nombre de sauvegarde invalide."
278
+
279
+ #: admin.actions.php:79
280
+ #, php-format
281
+ msgid "%s is an invalid email address."
282
+ msgstr "%s est une adresse de courriel invalide."
283
+
284
+ #: admin.actions.php:249
285
+ #: functions/interface.functions.php:89
286
+ #: functions/interface.functions.php:99
287
+ #: functions/interface.functions.php:110
288
+ #: functions/interface.functions.php:120
289
+ #: functions/interface.functions.php:130
290
+ #: functions/interface.functions.php:140
291
+ #: functions/interface.functions.php:150
292
+ msgid "BackUpWordPress has detected a problem."
293
+ msgstr "BackUpWordPress a détecté un problème."
294
+
295
+ #: admin.actions.php:249
296
+ #, php-format
297
+ 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."
298
+ msgstr "%1$s a renvoyé la réponse %2$s qui semble indiquer que les travaux cron ne s'achèvent pas correctement. BackUpWordPress ne fonctionne que si wp-cron peux lancer les sauvegardes programmées. Voir la %3$s pour plus de détails."
299
+
300
+ #: admin.menus.php:10
301
+ #: admin.menus.php:34
302
+ msgid "Backups"
303
+ msgstr "Sauvegardes"
304
+
305
+ #: admin.menus.php:65
306
+ msgid "You are not using the latest stable version of BackUpWordPress"
307
+ msgstr "Vous n'utilisez pas la dernière version de BackUpWordPress."
308
+
309
+ #: admin.menus.php:65
310
+ #, php-format
311
+ msgid "The information below is for version %1$s. View the <code>readme.txt</code> file for help specific to version %2$s."
312
+ msgstr "Les informations qui suivent concernent la version %1$s. Lisez le fichier <code>readme.txt</code> pour une aide spécifique à la version %2$s."
313
+
314
+ #: admin.menus.php:75
315
+ msgid "FAQ"
316
+ msgstr "FAQ"
317
+
318
+ #: admin.menus.php:79
319
+ msgid "For more information:"
320
+ msgstr "Pour plus d'informations :"
321
+
322
+ #: admin.menus.php:81
323
+ msgid "Support Forums"
324
+ msgstr "Forums de support"
325
+
326
+ #: admin.menus.php:82
327
+ msgid "Help with translation"
328
+ msgstr "Aide pour la traduction"
329
+
330
+ #: plugin.php:47
331
+ msgid "BackUpWordPress requires PHP version 5.2.4 or greater."
332
+ msgstr "BackUpWordPress nécessite PHP version 5.2.4 ou plus."
333
+
334
+ #: plugin.php:58
335
+ #, php-format
336
+ msgid "BackUpWordPress requires WordPress version %s."
337
+ msgstr "BackUpWordPress a besoin de la version %s de Wordpress."
338
+
339
+ #: admin.status.php:9
340
+ #, php-format
341
+ msgid "Automatic backups are %s."
342
+ msgstr "Les sauvegardes automatiques sont %s."
343
+
344
+ #: admin.status.php:9
345
+ msgid "disabled"
346
+ msgstr "désactivé"
347
+
348
+ #: admin.status.php:14
349
+ msgid "&amp;"
350
+ msgstr "&amp;"
351
+
352
+ #: admin.status.php:32
353
+ #, php-format
354
+ msgid "Your %1$s will be automatically backed up %2$s. The next backup will occur at %3$s on %4$s and be saved to %5$s."
355
+ msgid_plural "Your %1$s will be automatically backed up %2$s. The next backup will occur at %3$s on %4$s and be saved to %5$s."
356
+ msgstr[0] "La sauvegarde %1$s sera effectuée automatiquement %2$s. La prochaine aura lieu à %3$s le %4$s et sera sauvegardé sous %5$s."
357
+ msgstr[1] "La sauvegarde %1$s sera effectuée automatiquement %2$s. La prochaine aura lieu à %3$s le %4$s et sera sauvegardé sous %5$s."
358
+
359
+ #: admin.status.php:39
360
+ #, php-format
361
+ msgid "It's currently %s"
362
+ msgstr "Il est actuellement %s"
363
+
364
+ #: admin.status.php:47
365
+ #, php-format
366
+ msgid "Your site is %s. Backups will be compressed and should be smaller than this."
367
+ msgstr "Votre site web pèse %s. La sauvegarde sera compressée pour être plus petite que ça."
368
+
369
+ #: admin.status.php:47
370
+ msgid "Calculating Size..."
371
+ msgstr "Calcul du volume ..."
372
+
373
+ #: admin.status.php:50
374
+ #, php-format
375
+ msgid "A copy of each backup will be emailed to %s."
376
+ msgstr "Une copie des sauvegardes sera envoyée par e-mail à %s."
377
+
378
+ #: admin.status.php:54
379
+ #, php-format
380
+ msgid "The following paths will be excluded from your backups %s."
381
+ msgstr "Les répertoires suivants seront exclus des sauvegardes %s."
382
+
383
+ #: hm-backup/hm-backup.php:532
384
+ msgid "The backup file was not created"
385
+ msgstr "Le fichier de la sauvegarde n'a pas été créé."
386
+
387
+ #: hm-backup/hm-backup.php:603
388
+ msgid "The following files are unreadable and couldn't be backed up: "
389
+ msgstr "Les fichiers suivants ne sont pas lisibles et ne peuvent être sauvegardés :"
390
+
391
+ #: functions/interface.functions.php:25
392
+ msgid "Download"
393
+ msgstr "Téléchargement"
394
+
395
+ #: functions/interface.functions.php:26
396
+ msgid "Delete"
397
+ msgstr "Effacement"
398
+
399
+ #: functions/interface.functions.php:48
400
+ msgid "Settings saved."
401
+ msgstr "Modifications enregistrées"
402
+
403
+ #: functions/interface.functions.php:67
404
+ #: functions/interface.functions.php:79
405
+ msgid "BackUpWordPress is almost ready."
406
+ msgstr "BackUpWordPress est prêt."
407
+
408
+ #: functions/interface.functions.php:67
409
+ #, php-format
410
+ 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."
411
+ msgstr "Le répertoire des sauvegardes ne peut pas être créé car vous il n'est pas possible d'écrire dans %1$s, lancez %2$s ou %3$s ou créez le répertoire vous même."
412
+
413
+ #: functions/interface.functions.php:79
414
+ #, php-format
415
+ msgid "Your backups directory isn't writable, run %1$s or %2$s or set the permissions yourself."
416
+ msgstr "Il n'est pas possible d'écrire dans le répertoire des sauvegardes, lancez %1$s ou %2$s ou changez les permissions vous même."
417
+
418
+ #: functions/interface.functions.php:89
419
+ #, php-format
420
+ msgid "%1$s is running in %2$s. Please contact your host and ask them to disable %3$s."
421
+ msgstr "%1$s est actif sur %2$s. Contactez votre administrateur et demandez lui de désactiver %3$s."
422
+
423
+ #: functions/interface.functions.php:89
424
+ msgid "http://php.net/manual/en/features.safe-mode.php"
425
+ msgstr "http://php.net/manual/fr/features.safe-mode.php"
426
+
427
+ #: functions/interface.functions.php:89
428
+ msgid "Safe Mode"
429
+ msgstr "Safe Mode"
430
+
431
+ #: functions/interface.functions.php:99
432
+ #, php-format
433
+ msgid "You have both %1$s and %2$s defined so there isn't anything to back up."
434
+ msgstr "Vous avez défini %1$s et %2$s mais il n'y a rien à sauvegarder."
435
+
436
+ #: functions/interface.functions.php:110
437
+ #, php-format
438
+ msgid "The following email address is not valid: %s."
439
+ msgid_plural "The following email addresses are not valid: %s."
440
+ msgstr[0] "L'adresse de courriel suivante n'est pas valide: %s"
441
+ msgstr[1] "Les adresses de courriel suivante ne sont pas valides: %s"
442
+
443
+ #: functions/interface.functions.php:120
444
+ msgid "The last backup email failed to send. It's likely that the file is too large."
445
+ msgstr "L'envoi de la dernière sauvegarde par courriel a échoué. C'est probablement que le fichier est trop volumineux."
446
+
447
+ #: functions/interface.functions.php:130
448
+ #, php-format
449
+ msgid "Your custom backups directory %1$s doesn't exist and can't be created, your backups will be saved to %2$s instead."
450
+ msgstr "Le répertoire de sauvegarde spécifié %1$s n'existe pas et ne peut être créé; les sauvegardes seront stockées dans %2$s à la place."
451
+
452
+ #: functions/interface.functions.php:140
453
+ #, php-format
454
+ msgid "Your custom backups directory %1$s isn't writable, new backups will be saved to %2$s instead."
455
+ msgstr "Il n'est pas possible d'écrire dans le répertoire de sauvegarde spécifié %1$s; les sauvegardes seront stockées dans %2$s à la place."
456
+
457
+ #: functions/interface.functions.php:150
458
+ #, php-format
459
+ msgid "You have defined a custom exclude list but the following paths don't exist %s, are you sure you entered them correctly?"
460
+ msgstr "Vous avez défini une liste d'exclusion avec un chemin qui n'existe pas %s; êtes vous sûr que vous l'avez correctement renseigné ?"
461
+
462
+ #: functions/interface.functions.php:160
463
+ msgid "BackUpWordPress detected issues with your last backup."
464
+ msgstr "BackUpWordPress à rencontré un problème lors de votre dernière sauvegarde."
465
+
466
+ #: functions/backup.actions.php:12
467
+ msgid "Dumping database"
468
+ msgstr "Export de la base de donnée"
469
+
470
+ #: functions/backup.actions.php:22
471
+ msgid "Creating zip archive"
472
+ msgstr "Création de l'archive ZIP"
473
+
474
+ #: functions/backup.functions.php:19
475
+ msgid "Removing old backups"
476
+ msgstr "Effacement des anciennes sauvegardes"
477
+
478
+ #: functions/backup.functions.php:147
479
+ #: functions/backup.functions.php:157
480
+ #, php-format
481
+ msgid "Backup of %s"
482
+ msgstr "Sauvegarde de %s"
483
+
484
+ #: functions/backup.functions.php:148
485
+ #, php-format
486
+ msgid ""
487
+ "BackUpWordPress has completed a backup of your site %1$s.\\n"
488
+ "\\n"
489
+ "The backup file should be attached to this email.\\n"
490
+ "\\n"
491
+ "You can also download the backup file by clicking the link below:\\n"
492
+ "\\n"
493
+ "%2$s\\n"
494
+ "\\n"
495
+ "Kind Regards\\n"
496
+ "\\n"
497
+ " The Happy BackUpWordPress Backup Emailing Robot"
498
+ msgstr ""
499
+ "BackUpWordPress a terminé la sauvegarde de votre site %1$s.\n"
500
+ "\n"
501
+ "Le fichier de sauvegarde est joint à cet email.\n"
502
+ "\n"
503
+ "Vous pouvez également télécharger cette sauvegarde en suivant le lien ci-dessous :\n"
504
+ "\n"
505
+ "%2$s\n"
506
+ "\n"
507
+ "Cordialement\n"
508
+ "\n"
509
+ "Votre toujours souriant Robot BackUpWordPress "
510
+
511
+ #: functions/backup.functions.php:158
512
+ #, php-format
513
+ msgid ""
514
+ "BackUpWordPress has completed a backup of your site %1$s.\\n"
515
+ "\\n"
516
+ "Unfortunately the backup file was too large to attach to this email.\\n"
517
+ "\\n"
518
+ "You can download the backup file by clicking the link below:\\n"
519
+ "\\n"
520
+ "%2$s\\n"
521
+ "\\n"
522
+ "Kind Regards\\n"
523
+ "\\n"
524
+ " The Happy BackUpWordPress Backup Emailing Robot"
525
+ msgstr ""
526
+ "BackUpWordPress a terminé la sauvegarde de votre site %1$s.\n"
527
+ "\n"
528
+ "Le fichier de sauvegarde est trop volumineux pour être joint à cet email.\n"
529
+ "\n"
530
+ "Vous pouvez le télécharger en suivant le lien ci-dessous :\n"
531
+ "\n"
532
+ "%2$s\n"
533
+ "\n"
534
+ "Cordialement\n"
535
+ "\n"
536
+ "Votre toujours souriant Robot BackUpWordPress "
537
+
538
+ #: functions/core.functions.php:339
539
+ #, php-format
540
+ msgid "This %s file ensures that other people cannot download your backup files."
541
+ msgstr "Ce fichier %s garanti qu'aucune autre personne ne peut télécharger vos sauvegardes."
542
+
backupwordpress/languages/hmbkp-lt.mo ADDED
Binary file
backupwordpress/languages/hmbkp-lt.po ADDED
@@ -0,0 +1,432 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Translation of 1.6.8 in Lithuanian
2
+ # This file is distributed under the same license as the 1.6.8 package.
3
+ msgid ""
4
+ msgstr ""
5
+ "PO-Revision-Date: 2012-08-10 14:37:47+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=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
10
+ "X-Generator: GlotPress/0.1\n"
11
+ "Project-Id-Version: 1.6.8\n"
12
+
13
+ #: admin.menus.php:82
14
+ msgid "Help with translation"
15
+ msgstr ""
16
+
17
+ #: admin.backup-button.php:3
18
+ msgid "cancel"
19
+ msgstr ""
20
+
21
+ #: admin.constants.php:23 admin.constants.php:26
22
+ msgid "Backup %s only, your %s won't be backed up. Defaults to %s."
23
+ msgstr ""
24
+
25
+ #: admin.menus.php:65
26
+ msgid "The information below is for version %s. View the readme.txt file for help specific to version %s."
27
+ msgstr ""
28
+
29
+ #: admin.menus.php:75
30
+ msgid "FAQ"
31
+ msgstr ""
32
+
33
+ #: admin.constants.php:3 admin.menus.php:76 admin.settings.php:5
34
+ msgid "Constants"
35
+ msgstr ""
36
+
37
+ #: admin.menus.php:81
38
+ msgid "Support Forums"
39
+ msgstr ""
40
+
41
+ #: admin.settings.php:5
42
+ msgid "You can define %s in your %s to control some settings. A full list of %s can be found in the %s. Defined settings will not be editable below."
43
+ msgstr ""
44
+
45
+ #: admin.settings.php:5
46
+ msgid "help panel"
47
+ msgstr ""
48
+
49
+ #: admin.settings.php:94
50
+ msgid "Save Changes"
51
+ msgstr ""
52
+
53
+ #: functions/core.functions.php:339
54
+ msgid "This %s file ensures that other people cannot download your backup files."
55
+ msgstr ""
56
+
57
+ #: functions/interface.functions.php:48
58
+ msgid "Settings saved."
59
+ msgstr ""
60
+
61
+ #: admin.actions.php:70
62
+ msgid "You have entered an invalid number of backups."
63
+ msgstr ""
64
+
65
+ #: admin.actions.php:79
66
+ msgid "%s is an invalid email address."
67
+ msgstr ""
68
+
69
+ #: admin.actions.php:249 functions/interface.functions.php:89
70
+ #: functions/interface.functions.php:99 functions/interface.functions.php:109
71
+ #: functions/interface.functions.php:119 functions/interface.functions.php:129
72
+ #: functions/interface.functions.php:139 functions/interface.functions.php:149
73
+ msgid "BackUpWordPress has detected a problem."
74
+ msgstr "BackUpWordPress aptiko problemą."
75
+
76
+ #: admin.actions.php:249
77
+ msgid "%s is returning a %s response which could mean cron jobs aren't getting fired properly. BackUpWordPress relies on wp-cron to run scheduled back ups. See the %s for more details."
78
+ msgstr ""
79
+
80
+ #: admin.backup-button.php:7
81
+ msgid "Back Up Now"
82
+ msgstr "Kurti Atsarginę kopiją Dabar"
83
+
84
+ #: admin.backups-table.php:13
85
+ msgid "Size"
86
+ msgstr "Dydis"
87
+
88
+ #: admin.backups-table.php:14
89
+ msgid "Actions"
90
+ msgstr "Veiksmai"
91
+
92
+ #: admin.backups-table.php:21
93
+ msgid "Total %s"
94
+ msgstr "Iš viso %s"
95
+
96
+ #: admin.constants.php:3
97
+ msgid "You can %s any of the following %s in your %s to control advanced settings. %s. Defined %s will be highlighted."
98
+ msgstr ""
99
+
100
+ #: admin.constants.php:3
101
+ msgid "The Codex can help"
102
+ msgstr "The Codex gali pagelbėti"
103
+
104
+ #: admin.constants.php:8
105
+ msgid "The path to folder you would like to store your backup files in, defaults to %s."
106
+ msgstr "Aplanko, kuriame norėtumėte laikyti savo atsargines kopijas adresas. Pagal nutylėjimą %s."
107
+
108
+ #: admin.constants.php:11
109
+ msgid "The path to your %s executable. Will be used for the %s part of the back up if available."
110
+ msgstr "Adresas į Jūsų %s yra vykdomasis. Jis bus naudojamas %s atsarginės kopijos daliai, jeigu tik tai bus įmanoma."
111
+
112
+ #: admin.constants.php:11 admin.constants.php:14 admin.constants.php:23
113
+ #: admin.constants.php:26 admin.status.php:14 admin.status.php:17
114
+ msgid "database"
115
+ msgstr "duomenų bazė"
116
+
117
+ #: admin.constants.php:14
118
+ msgid "The path to your %s executable. Will be used to zip up your %s and %s if available."
119
+ msgstr "Adresas į Jūsų %s yra vykdomasis. Jis bus naudojamas suspaudžiant Jūsų %s ir %s, jeigu tik bus įmanoma."
120
+
121
+ #: admin.constants.php:14 admin.constants.php:23 admin.constants.php:26
122
+ #: admin.status.php:14 admin.status.php:20
123
+ msgid "files"
124
+ msgstr "rinkmenos"
125
+
126
+ #: admin.constants.php:17
127
+ msgid "Completely disables the automatic back up. You can still back up using the \"Back Up Now\" button. Defaults to %s."
128
+ msgstr "Visiškai panaikina automatinę atsarginių kopijų darymo funkciją. Jūs vis dar galite pasidaryti atsarginę kopiją, naudojant \"Daryti Atsarginę Kopiją Dabar\" mygtuką. Pagal nutylėjimą %s."
129
+
130
+ #: admin.constants.php:20
131
+ msgid "Number of backups to keep, older backups will be deleted automatically when a new backup is completed. Detaults to %s."
132
+ msgstr "Saugomų atsarginių kopijų kiekis, senesnės atsarginės kopijos bus ištrintos automatiškai, kuomet sėkmingai atliekamas naujos atsarginės kopijos sukūrimas. Pagal nutylėjimą %s."
133
+
134
+ #: admin.constants.php:29
135
+ msgid "The time that the daily back up should run. Defaults to %s."
136
+ msgstr "Laikas, kurį dieninės atsarginės kopijos kūrimas turėtų būti vykdomas. Pagal nutylėjimą %s."
137
+
138
+ #: admin.constants.php:32
139
+ msgid "Attempt to email a copy of your backups. Value should be email address to send backups to. Defaults to %s."
140
+ msgstr "Bandyti persiųsti Jūsų atsargines kopijas elektroniniu paštu. Reikšmė turėtų būti elektroninio pašto adresas, į kurį bus siunčiamos atsarginės kopijos. Pagal nutylėjimą %s."
141
+
142
+ #: admin.constants.php:35
143
+ msgid "Comma separated list of files or directories to exclude, the backups directory is automatically excluded."
144
+ msgstr "Išskiriamų rinkmenų ar direktorijų sąrašas (narius išskiriant kableliais), kurios nebus įtrauktos į automatinį atsarginių kopijų kūrimą."
145
+
146
+ #: admin.constants.php:38
147
+ msgid "The capability to use when calling %s. Defaults to %s."
148
+ msgstr ""
149
+
150
+ #: admin.menus.php:10 admin.page.php:7
151
+ msgid "Manage Backups"
152
+ msgstr "Valdyti Atsargines kopijas"
153
+
154
+ #: admin.menus.php:10 admin.menus.php:34
155
+ msgid "Backups"
156
+ msgstr "Atsarginės kopijos"
157
+
158
+ #: admin.menus.php:65
159
+ msgid "You are not using the latest stable version of BackUpWordPress"
160
+ msgstr "Jūsų nenaudojate paskutiniosios pilnos BackUpWordPress papildinio versijos."
161
+
162
+ #: admin.menus.php:79
163
+ msgid "For more information:"
164
+ msgstr ""
165
+
166
+ #: admin.page.php:11 admin.settings.php:3
167
+ msgid "Settings"
168
+ msgstr ""
169
+
170
+ #: admin.page.php:23
171
+ msgid "You need to fix the issues detailed above before BackUpWordPress can start."
172
+ msgstr "Jūs turite sutvarkyti problemas, aprašytas viršuje, prieš BackUpWordPress galimą paleidimą."
173
+
174
+ #: admin.page.php:29
175
+ msgid "If you need help getting things working you are more than welcome to email us at %s and we'll do what we can to help."
176
+ msgstr "Jeigu Jums reikia pagalbos sprendžiant bėdas, nesivaržykite parašyti mums elektroninio laiško į %s pašto dėžutę ir mes suteiksime Jums pagalbą, jeigu tik galėsime."
177
+
178
+ #: admin.settings.php:16
179
+ msgid "Automatic Backups"
180
+ msgstr ""
181
+
182
+ #: admin.settings.php:22
183
+ msgid "Backup my site automatically."
184
+ msgstr ""
185
+
186
+ #: admin.settings.php:27
187
+ msgid "No automatic backups."
188
+ msgstr ""
189
+
190
+ #: admin.settings.php:36
191
+ msgid "Frequency of backups"
192
+ msgstr ""
193
+
194
+ #: admin.settings.php:40
195
+ msgid "Automatic backups will occur"
196
+ msgstr ""
197
+
198
+ #: admin.settings.php:43
199
+ msgid "Daily"
200
+ msgstr ""
201
+
202
+ #: admin.settings.php:44
203
+ msgid "Weekly"
204
+ msgstr ""
205
+
206
+ #: admin.settings.php:45
207
+ msgid "Fortnightly"
208
+ msgstr ""
209
+
210
+ #: admin.settings.php:46
211
+ msgid "Monthly"
212
+ msgstr ""
213
+
214
+ #: admin.settings.php:55
215
+ msgid "What to Backup"
216
+ msgstr ""
217
+
218
+ #: admin.settings.php:59
219
+ msgid "Backup my"
220
+ msgstr ""
221
+
222
+ #: admin.settings.php:62
223
+ msgid "database &amp; files"
224
+ msgstr ""
225
+
226
+ #: admin.settings.php:63
227
+ msgid "database only"
228
+ msgstr ""
229
+
230
+ #: admin.settings.php:64
231
+ msgid "files only"
232
+ msgstr ""
233
+
234
+ #: admin.settings.php:72
235
+ msgid "Number of backups"
236
+ msgstr ""
237
+
238
+ #: admin.settings.php:73
239
+ msgid "The last %s backups will be stored on the server."
240
+ msgstr ""
241
+
242
+ #: admin.settings.php:77
243
+ msgid "Email backups"
244
+ msgstr ""
245
+
246
+ #: admin.settings.php:78
247
+ msgid "A copy of the backup file will be emailed to this address. Disabled if left blank."
248
+ msgstr ""
249
+
250
+ #: admin.settings.php:82
251
+ msgid "Excludes"
252
+ msgstr ""
253
+
254
+ #: admin.settings.php:85
255
+ msgid "A comma separated list of file and directory paths that you do <strong>not</strong> want to backup."
256
+ msgstr ""
257
+
258
+ #: admin.settings.php:86
259
+ msgid "e.g."
260
+ msgstr ""
261
+
262
+ #: admin.status.php:9
263
+ msgid "Automatic backups are %s."
264
+ msgstr "Automatinių atsarginių kopijų kūrimas yra %s."
265
+
266
+ #: admin.status.php:9
267
+ msgid "disabled"
268
+ msgstr "išjungtas"
269
+
270
+ #: admin.status.php:14
271
+ msgid "&amp;"
272
+ msgstr "&amp;"
273
+
274
+ #: admin.status.php:25
275
+ msgid "Your %s will be automatically backed up <code>%s</code>. The next backup will occur at %s on %s and be saved to %s."
276
+ msgstr ""
277
+
278
+ #: admin.status.php:25
279
+ msgid "It's currently %s"
280
+ msgstr ""
281
+
282
+ #: admin.status.php:31
283
+ msgid "Your site is %s. Backups will be compressed and should be smaller than this."
284
+ msgstr "Jūsų tinklalapis yra %s. Atsarginės kopijos bus suspaustos ir turėtų būti mažesnės nei tai."
285
+
286
+ #: admin.status.php:31
287
+ msgid "Calculating Size..."
288
+ msgstr "Skaičiuojamas Dydis..."
289
+
290
+ #: admin.status.php:34
291
+ msgid "A copy of each backup will be emailed to %s."
292
+ msgstr "Kiekvienos atsarginės kopijos kopija bus išsiųsta elektroniniu paštu %s."
293
+
294
+ #: admin.status.php:38
295
+ msgid "The following paths will be excluded from your backups %s."
296
+ msgstr "Šie adresai bus išskirti iš Jūsų atsarginių kopijų %s."
297
+
298
+ #: functions/backup.actions.php:12
299
+ msgid "Dumping database"
300
+ msgstr "Duomenų bazės iškrovimas"
301
+
302
+ #: functions/backup.actions.php:22
303
+ msgid "Creating zip archive"
304
+ msgstr "Kuriamas zip archyvas"
305
+
306
+ #: functions/backup.functions.php:19
307
+ msgid "Removing old backups"
308
+ msgstr "Pašalinamos senos atsarginės kopijos"
309
+
310
+ #: functions/backup.functions.php:147 functions/backup.functions.php:157
311
+ msgid "Backup of %s"
312
+ msgstr "%s atsarginė kopija"
313
+
314
+ #: functions/backup.functions.php:148
315
+ msgid ""
316
+ "BackUpWordPress has completed a backup of your site %s.\n"
317
+ "\n"
318
+ "The backup file should be attached to this email.\n"
319
+ "\n"
320
+ "You can also download the backup file by clicking the link below:\n"
321
+ "\n"
322
+ "%s\n"
323
+ "\n"
324
+ "Kind Regards\n"
325
+ "\n"
326
+ " The Happy BackUpWordPress Backup Emailing Robot"
327
+ msgstr ""
328
+ "BackUpWordpress baigė kurti Jūsų tinklalapio %s atsarginę kopiją.\n"
329
+ "\n"
330
+ "Atsarginės kopijos rinkmena turėtų būti pridėta prie šio elektroninio laiško.\n"
331
+ "\n"
332
+ "Jūs taip pat galite parsisiųsti atsarginės kopijos rinkmeną, paspausdamas nuorodą žemiau:\n"
333
+ "\n"
334
+ "%s\n"
335
+ "\n"
336
+ "Pagarbiai\n"
337
+ "\n"
338
+ "Laimingas BackUpWordPress Elektroninių laiškų siuntimo Robotas"
339
+
340
+ #: functions/backup.functions.php:158
341
+ msgid ""
342
+ "BackUpWordPress has completed a backup of your site %s.\n"
343
+ "\n"
344
+ "Unfortunately the backup file was too large to attach to this email.\n"
345
+ "\n"
346
+ "You can download the backup file by clicking the link below:\n"
347
+ "\n"
348
+ "%s\n"
349
+ "\n"
350
+ "Kind Regards\n"
351
+ "\n"
352
+ " The Happy BackUpWordPress Backup Emailing Robot"
353
+ msgstr ""
354
+ "BackUpWordpress baigė kurti Jūsų tinklalapio %s atsarginę kopiją.\n"
355
+ "\n"
356
+ "Nelaimei, atsarginės kopijos rinkmena buvo per didelė, kad ją būtų galima prisegti prie šio elektroninio laiško.\n"
357
+ "\n"
358
+ "Jūs taip pat galite parsisiųsti atsarginės kopijos rinkmeną, paspausdamas nuorodą žemiau:\n"
359
+ "\n"
360
+ "%s\n"
361
+ "\n"
362
+ "Pagarbiai\n"
363
+ "\n"
364
+ "Laimingas BackUpWordPress Elektroninių laiškų siuntimo Robotas"
365
+
366
+ #: functions/interface.functions.php:25
367
+ msgid "Download"
368
+ msgstr "Parsisiųsti"
369
+
370
+ #: functions/interface.functions.php:26
371
+ msgid "Delete"
372
+ msgstr "Ištrinti"
373
+
374
+ #: functions/interface.functions.php:67 functions/interface.functions.php:79
375
+ msgid "BackUpWordPress is almost ready."
376
+ msgstr "BackUpWordPress beveik paruoštas."
377
+
378
+ #: functions/interface.functions.php:67
379
+ msgid "The backups directory can't be created because your %s directory isn't writable, run %s or %s or create the folder yourself."
380
+ msgstr "Atsarginių kopijų katalogas negali būti sukurtas, nes Jūsų %s katalogas nėra įrašytinas, paleiskite %s arba %s, arba sukurkite aplanką pats."
381
+
382
+ #: functions/interface.functions.php:79
383
+ msgid "Your backups directory isn't writable. run %s or %s or set the permissions yourself."
384
+ msgstr "Jūsų %s katalogas nėra įrašytinas, paleiskite %s arba %s, arba pakeiskite leidimus pats."
385
+
386
+ #: functions/interface.functions.php:89
387
+ msgid " %s is running in %s. Please contact your host and ask them to disable %s."
388
+ msgstr "%s vyksta %s. Prašome susisiekti su savo priglobos tiekėju ir paprašyti jo išjungti %s."
389
+
390
+ #: functions/interface.functions.php:99
391
+ msgid "You have both %s and %s defined so there isn't anything to back up."
392
+ msgstr "Jūs apibūdinote abudu - ir %s, ir %s , todėl nėra nieko, kieno atsarginę kopiją būtų galima sukurti."
393
+
394
+ #: functions/interface.functions.php:109
395
+ msgid "The following email address's are not valid: %s."
396
+ msgstr ""
397
+
398
+ #: functions/interface.functions.php:119
399
+ msgid "The last backup email failed to send. It's likely that the file is too large."
400
+ msgstr ""
401
+
402
+ #: functions/interface.functions.php:129
403
+ msgid "Your custom backups directory %s doesn't exist and can't be created, your backups will be saved to %s instead."
404
+ msgstr "Jūsų individualizuotas atsarginių kopijų katalogas %s neegzistuoja ir negali būti sukurtas, todėl Jūsų atsarginės kopijos bus įrašytos į %s, vietoje nurodytojo katalogo."
405
+
406
+ #: functions/interface.functions.php:139
407
+ msgid "Your custom backups directory %s isn't writable, new backups will be saved to %s instead."
408
+ msgstr "Jūsų individualizuotas atsarginių kopijų katalogas %s nėra įrašytinas, todėl naujos atsarginės kopijos bus įrašytos į %s, vietoje nurodytojo katalogo."
409
+
410
+ #: functions/interface.functions.php:149
411
+ msgid "You have defined a custom exclude list but the following paths don't exist %s, are you sure you entered them correctly?"
412
+ msgstr "Jūs nurodėte individualizuotą išskyrimų sąrašą, bet šie adresai neegzistuoja %s, ar esate tikras, jog įrašėte juos teisingai?"
413
+
414
+ #: functions/interface.functions.php:159
415
+ msgid "BackUpWordPress detected issues with your last backup."
416
+ msgstr ""
417
+
418
+ #: hm-backup/hm-backup.php:532
419
+ msgid "The backup file was not created"
420
+ msgstr ""
421
+
422
+ #: hm-backup/hm-backup.php:603
423
+ msgid "The following files are unreadable and couldn't be backed up: "
424
+ msgstr ""
425
+
426
+ #: plugin.php:47
427
+ msgid "BackUpWordPress requires PHP version 5.2.4 or greater."
428
+ msgstr ""
429
+
430
+ #: plugin.php:58
431
+ msgid "BackUpWordPress requires WordPress version %s."
432
+ msgstr "BackUpWordPress reikalauja WordPress versijos %s."
backupwordpress/languages/hmbkp-lt_LT.mo ADDED
Binary file
backupwordpress/languages/hmbkp-lt_LT.po ADDED
@@ -0,0 +1,546 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Translation of 1.6.8 in Lithuanian
2
+ # This file is distributed under the same license as the 1.6.8 package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: 1.6.8\n"
6
+ "Report-Msgid-Bugs-To: \n"
7
+ "POT-Creation-Date: 2012-08-14 14:41+0100\n"
8
+ "PO-Revision-Date: 2012-08-14 14:44+0100\n"
9
+ "Last-Translator: Flo Edelmann <florian-edelmann@online.de>\n"
10
+ "Language-Team: \n"
11
+ "Language: \n"
12
+ "MIME-Version: 1.0\n"
13
+ "Content-Type: text/plain; charset=UTF-8\n"
14
+ "Content-Transfer-Encoding: 8bit\n"
15
+ "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
16
+ "X-Generator: GlotPress/0.1\n"
17
+ "X-Poedit-Language: Lithuanian\n"
18
+ "X-Poedit-Country: LITHUANIA\n"
19
+ "X-Poedit-SourceCharset: utf-8\n"
20
+ "X-Poedit-KeywordsList: __;_e;_n:1,2\n"
21
+ "X-Poedit-Basepath: ..\n"
22
+ "X-Poedit-SearchPath-0: .\n"
23
+
24
+ #: admin.settings.php:3
25
+ #: admin.page.php:11
26
+ msgid "Settings"
27
+ msgstr ""
28
+
29
+ #: admin.settings.php:5
30
+ #, php-format
31
+ msgid "You can define %1$s in your %2$s to control some settings. A full list of %3$s can be found in the %4$s. Defined settings will not be editable below."
32
+ msgstr ""
33
+
34
+ #: admin.settings.php:5
35
+ #: admin.constants.php:3
36
+ #: admin.menus.php:76
37
+ msgid "Constants"
38
+ msgstr ""
39
+
40
+ #: admin.settings.php:5
41
+ msgid "help panel"
42
+ msgstr ""
43
+
44
+ #: admin.settings.php:16
45
+ msgid "Automatic Backups"
46
+ msgstr ""
47
+
48
+ #: admin.settings.php:22
49
+ msgid "Backup my site automatically."
50
+ msgstr ""
51
+
52
+ #: admin.settings.php:27
53
+ msgid "No automatic backups."
54
+ msgstr ""
55
+
56
+ #: admin.settings.php:36
57
+ msgid "Frequency of backups"
58
+ msgstr ""
59
+
60
+ #: admin.settings.php:40
61
+ msgid "Automatic backups will occur"
62
+ msgstr ""
63
+
64
+ #: admin.settings.php:43
65
+ msgid "Daily"
66
+ msgstr ""
67
+
68
+ #: admin.settings.php:44
69
+ msgid "Weekly"
70
+ msgstr ""
71
+
72
+ #: admin.settings.php:45
73
+ msgid "Fortnightly"
74
+ msgstr ""
75
+
76
+ #: admin.settings.php:46
77
+ msgid "Monthly"
78
+ msgstr ""
79
+
80
+ #: admin.settings.php:55
81
+ msgid "What to Backup"
82
+ msgstr ""
83
+
84
+ #: admin.settings.php:59
85
+ msgid "Backup my"
86
+ msgstr ""
87
+
88
+ #: admin.settings.php:62
89
+ msgid "database &amp; files"
90
+ msgstr ""
91
+
92
+ #: admin.settings.php:63
93
+ msgid "database only"
94
+ msgstr ""
95
+
96
+ #: admin.settings.php:64
97
+ msgid "files only"
98
+ msgstr ""
99
+
100
+ #: admin.settings.php:72
101
+ msgid "Number of backups"
102
+ msgstr ""
103
+
104
+ #: admin.settings.php:73
105
+ #, php-format
106
+ msgid "The last %s backups will be stored on the server."
107
+ msgstr ""
108
+
109
+ #: admin.settings.php:77
110
+ msgid "Email backups"
111
+ msgstr ""
112
+
113
+ #: admin.settings.php:78
114
+ msgid "A copy of the backup file will be emailed to this address. Disabled if left blank."
115
+ msgstr ""
116
+
117
+ #: admin.settings.php:82
118
+ msgid "Excludes"
119
+ msgstr ""
120
+
121
+ #: admin.settings.php:85
122
+ msgid "A comma separated list of file and directory paths that you do <strong>not</strong> want to backup."
123
+ msgstr ""
124
+
125
+ #: admin.settings.php:86
126
+ #: admin.constants.php:8
127
+ #: admin.constants.php:11
128
+ #: admin.constants.php:14
129
+ #: admin.constants.php:17
130
+ #: admin.constants.php:20
131
+ #: admin.constants.php:23
132
+ #: admin.constants.php:26
133
+ #: admin.constants.php:29
134
+ #: admin.constants.php:32
135
+ #: admin.constants.php:35
136
+ #: admin.constants.php:38
137
+ #: admin.constants.php:41
138
+ msgid "e.g."
139
+ msgstr ""
140
+
141
+ #: admin.settings.php:94
142
+ msgid "Save Changes"
143
+ msgstr ""
144
+
145
+ #: admin.backups-table.php:12
146
+ #, php-format
147
+ msgid "1 backup completed"
148
+ msgid_plural "%d backups completed"
149
+ msgstr[0] ""
150
+ msgstr[1] ""
151
+ msgstr[2] ""
152
+
153
+ #: admin.backups-table.php:13
154
+ msgid "Size"
155
+ msgstr "Dydis"
156
+
157
+ #: admin.backups-table.php:14
158
+ msgid "Actions"
159
+ msgstr "Veiksmai"
160
+
161
+ #: admin.backups-table.php:20
162
+ #, php-format
163
+ msgid "Only the most recent backup will be saved"
164
+ msgid_plural "The %d most recent backups will be saved"
165
+ msgstr[0] ""
166
+ msgstr[1] ""
167
+ msgstr[2] ""
168
+
169
+ #: admin.backups-table.php:21
170
+ #, php-format
171
+ msgid "Total %s"
172
+ msgstr "Iš viso %s"
173
+
174
+ #: admin.page.php:7
175
+ #: admin.menus.php:10
176
+ msgid "Manage Backups"
177
+ msgstr "Valdyti Atsargines kopijas"
178
+
179
+ #: admin.page.php:23
180
+ msgid "You need to fix the issues detailed above before BackUpWordPress can start."
181
+ msgstr "Jūs turite sutvarkyti problemas, aprašytas viršuje, prieš BackUpWordPress galimą paleidimą."
182
+
183
+ #: admin.page.php:29
184
+ #, php-format
185
+ msgid "If you need help getting things working you are more than welcome to email us at %s and we'll do what we can to help."
186
+ msgstr "Jeigu Jums reikia pagalbos sprendžiant bėdas, nesivaržykite parašyti mums elektroninio laiško į %s pašto dėžutę ir mes suteiksime Jums pagalbą, jeigu tik galėsime."
187
+
188
+ #: admin.backup-button.php:3
189
+ msgid "cancel"
190
+ msgstr ""
191
+
192
+ #: admin.backup-button.php:7
193
+ msgid "Back Up Now"
194
+ msgstr "Kurti Atsarginę kopiją Dabar"
195
+
196
+ #: admin.constants.php:3
197
+ #, php-format
198
+ 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."
199
+ msgstr ""
200
+
201
+ #: admin.constants.php:3
202
+ msgid "The Codex can help"
203
+ msgstr "The Codex gali pagelbėti"
204
+
205
+ #: admin.constants.php:8
206
+ #, php-format
207
+ msgid "The path to folder you would like to store your backup files in, defaults to %s."
208
+ msgstr "Aplanko, kuriame norėtumėte laikyti savo atsargines kopijas adresas. Pagal nutylėjimą %s."
209
+
210
+ #: admin.constants.php:11
211
+ #, php-format
212
+ msgid "The path to your %1$s executable. Will be used for the %2$s part of the back up if available."
213
+ msgstr "Adresas į Jūsų %1$s yra vykdomasis. Jis bus naudojamas %2$s atsarginės kopijos daliai, jeigu tik tai bus įmanoma."
214
+
215
+ #: admin.constants.php:11
216
+ #: admin.constants.php:14
217
+ #: admin.constants.php:23
218
+ #: admin.constants.php:26
219
+ #: admin.status.php:14
220
+ #: admin.status.php:18
221
+ msgid "database"
222
+ msgstr "duomenų bazė"
223
+
224
+ #: admin.constants.php:14
225
+ #, php-format
226
+ msgid "The path to your %1$s executable. Will be used to zip up your %2$s and %3$s if available."
227
+ msgstr "Adresas į Jūsų %1$s yra vykdomasis. Jis bus naudojamas suspaudžiant Jūsų %2$s ir %3$s, jeigu tik bus įmanoma."
228
+
229
+ #: admin.constants.php:14
230
+ #: admin.constants.php:23
231
+ #: admin.constants.php:26
232
+ #: admin.status.php:14
233
+ #: admin.status.php:22
234
+ msgid "files"
235
+ msgstr "rinkmenos"
236
+
237
+ #: admin.constants.php:17
238
+ #, php-format
239
+ msgid "Completely disables the automatic back up. You can still back up using the \"Back Up Now\" button. Defaults to %s."
240
+ msgstr "Visiškai panaikina automatinę atsarginių kopijų darymo funkciją. Jūs vis dar galite pasidaryti atsarginę kopiją, naudojant \"Daryti Atsarginę Kopiją Dabar\" mygtuką. Pagal nutylėjimą %s."
241
+
242
+ #: admin.constants.php:20
243
+ #, fuzzy, php-format
244
+ msgid "Number of backups to keep, older backups will be deleted automatically when a new backup is completed. Defaults to %s."
245
+ msgstr "Saugomų atsarginių kopijų kiekis, senesnės atsarginės kopijos bus ištrintos automatiškai, kuomet sėkmingai atliekamas naujos atsarginės kopijos sukūrimas. Pagal nutylėjimą %s."
246
+
247
+ #: admin.constants.php:23
248
+ #: admin.constants.php:26
249
+ #, php-format
250
+ msgid "Backup %1$s only, your %2$s won't be backed up. Defaults to %3$s."
251
+ msgstr ""
252
+
253
+ #: admin.constants.php:29
254
+ #, php-format
255
+ msgid "The time that the daily back up should run. Defaults to %s."
256
+ msgstr "Laikas, kurį dieninės atsarginės kopijos kūrimas turėtų būti vykdomas. Pagal nutylėjimą %s."
257
+
258
+ #: admin.constants.php:32
259
+ #, php-format
260
+ msgid "Attempt to email a copy of your backups. Value should be email address to send backups to. Defaults to %s."
261
+ msgstr "Bandyti persiųsti Jūsų atsargines kopijas elektroniniu paštu. Reikšmė turėtų būti elektroninio pašto adresas, į kurį bus siunčiamos atsarginės kopijos. Pagal nutylėjimą %s."
262
+
263
+ #: admin.constants.php:35
264
+ msgid "Comma separated list of files or directories to exclude, the backups directory is automatically excluded."
265
+ msgstr "Išskiriamų rinkmenų ar direktorijų sąrašas (narius išskiriant kableliais), kurios nebus įtrauktos į automatinį atsarginių kopijų kūrimą."
266
+
267
+ #: admin.constants.php:38
268
+ #, php-format
269
+ msgid "The capability to use when calling %1$s. Defaults to %2$s."
270
+ msgstr ""
271
+
272
+ #: admin.constants.php:41
273
+ #, fuzzy, php-format
274
+ msgid "The root directory that is backed up. Defaults to %s."
275
+ msgstr "Laikas, kurį dieninės atsarginės kopijos kūrimas turėtų būti vykdomas. Pagal nutylėjimą %s."
276
+
277
+ #: admin.actions.php:70
278
+ msgid "You have entered an invalid number of backups."
279
+ msgstr ""
280
+
281
+ #: admin.actions.php:79
282
+ #, php-format
283
+ msgid "%s is an invalid email address."
284
+ msgstr ""
285
+
286
+ #: admin.actions.php:249
287
+ #: functions/interface.functions.php:89
288
+ #: functions/interface.functions.php:99
289
+ #: functions/interface.functions.php:110
290
+ #: functions/interface.functions.php:120
291
+ #: functions/interface.functions.php:130
292
+ #: functions/interface.functions.php:140
293
+ #: functions/interface.functions.php:150
294
+ msgid "BackUpWordPress has detected a problem."
295
+ msgstr "BackUpWordPress aptiko problemą."
296
+
297
+ #: admin.actions.php:249
298
+ #, php-format
299
+ 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."
300
+ msgstr ""
301
+
302
+ #: admin.menus.php:10
303
+ #: admin.menus.php:34
304
+ msgid "Backups"
305
+ msgstr "Atsarginės kopijos"
306
+
307
+ #: admin.menus.php:65
308
+ msgid "You are not using the latest stable version of BackUpWordPress"
309
+ msgstr "Jūsų nenaudojate paskutiniosios pilnos BackUpWordPress papildinio versijos."
310
+
311
+ #: admin.menus.php:65
312
+ #, php-format
313
+ msgid "The information below is for version %1$s. View the <code>readme.txt</code> file for help specific to version %2$s."
314
+ msgstr ""
315
+
316
+ #: admin.menus.php:75
317
+ msgid "FAQ"
318
+ msgstr ""
319
+
320
+ #: admin.menus.php:79
321
+ msgid "For more information:"
322
+ msgstr ""
323
+
324
+ #: admin.menus.php:81
325
+ msgid "Support Forums"
326
+ msgstr ""
327
+
328
+ #: admin.menus.php:82
329
+ msgid "Help with translation"
330
+ msgstr ""
331
+
332
+ #: plugin.php:47
333
+ msgid "BackUpWordPress requires PHP version 5.2.4 or greater."
334
+ msgstr ""
335
+
336
+ #: plugin.php:58
337
+ #, php-format
338
+ msgid "BackUpWordPress requires WordPress version %s."
339
+ msgstr "BackUpWordPress reikalauja WordPress versijos %s."
340
+
341
+ #: admin.status.php:9
342
+ #, php-format
343
+ msgid "Automatic backups are %s."
344
+ msgstr "Automatinių atsarginių kopijų kūrimas yra %s."
345
+
346
+ #: admin.status.php:9
347
+ msgid "disabled"
348
+ msgstr "išjungtas"
349
+
350
+ #: admin.status.php:14
351
+ msgid "&amp;"
352
+ msgstr "&amp;"
353
+
354
+ #: admin.status.php:32
355
+ #, php-format
356
+ msgid "Your %1$s will be automatically backed up %2$s. The next backup will occur at %3$s on %4$s and be saved to %5$s."
357
+ msgid_plural "Your %1$s will be automatically backed up %2$s. The next backup will occur at %3$s on %4$s and be saved to %5$s."
358
+ msgstr[0] ""
359
+ msgstr[1] ""
360
+ msgstr[2] ""
361
+
362
+ #: admin.status.php:39
363
+ #, php-format
364
+ msgid "It's currently %s"
365
+ msgstr ""
366
+
367
+ #: admin.status.php:47
368
+ #, php-format
369
+ msgid "Your site is %s. Backups will be compressed and should be smaller than this."
370
+ msgstr "Jūsų tinklalapis yra %s. Atsarginės kopijos bus suspaustos ir turėtų būti mažesnės nei tai."
371
+
372
+ #: admin.status.php:47
373
+ msgid "Calculating Size..."
374
+ msgstr "Skaičiuojamas Dydis..."
375
+
376
+ #: admin.status.php:50
377
+ #, php-format
378
+ msgid "A copy of each backup will be emailed to %s."
379
+ msgstr "Kiekvienos atsarginės kopijos kopija bus išsiųsta elektroniniu paštu %s."
380
+
381
+ #: admin.status.php:54
382
+ #, php-format
383
+ msgid "The following paths will be excluded from your backups %s."
384
+ msgstr "Šie adresai bus išskirti iš Jūsų atsarginių kopijų %s."
385
+
386
+ #: hm-backup/hm-backup.php:532
387
+ msgid "The backup file was not created"
388
+ msgstr ""
389
+
390
+ #: hm-backup/hm-backup.php:603
391
+ msgid "The following files are unreadable and couldn't be backed up: "
392
+ msgstr ""
393
+
394
+ #: functions/interface.functions.php:25
395
+ msgid "Download"
396
+ msgstr "Parsisiųsti"
397
+
398
+ #: functions/interface.functions.php:26
399
+ msgid "Delete"
400
+ msgstr "Ištrinti"
401
+
402
+ #: functions/interface.functions.php:48
403
+ msgid "Settings saved."
404
+ msgstr ""
405
+
406
+ #: functions/interface.functions.php:67
407
+ #: functions/interface.functions.php:79
408
+ msgid "BackUpWordPress is almost ready."
409
+ msgstr "BackUpWordPress beveik paruoštas."
410
+
411
+ #: functions/interface.functions.php:67
412
+ #, php-format
413
+ 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."
414
+ msgstr "Atsarginių kopijų katalogas negali būti sukurtas, nes Jūsų %1$s katalogas nėra įrašytinas, paleiskite %2$s arba %3$s, arba sukurkite aplanką pats."
415
+
416
+ #: functions/interface.functions.php:79
417
+ #, php-format
418
+ msgid "Your backups directory isn't writable, run %1$s or %2$s or set the permissions yourself."
419
+ msgstr "Jūsų %s katalogas nėra įrašytinas, paleiskite %1$s arba %2$s, arba pakeiskite leidimus pats."
420
+
421
+ #: functions/interface.functions.php:89
422
+ #, php-format
423
+ msgid "%1$s is running in %2$s. Please contact your host and ask them to disable %3$s."
424
+ msgstr "%1$s vyksta %2$s. Prašome susisiekti su savo priglobos tiekėju ir paprašyti jo išjungti %3$s."
425
+
426
+ #: functions/interface.functions.php:89
427
+ msgid "http://php.net/manual/en/features.safe-mode.php"
428
+ msgstr "http://php.net/manual/en/features.safe-mode.php"
429
+
430
+ #: functions/interface.functions.php:89
431
+ msgid "Safe Mode"
432
+ msgstr "Safe Mode"
433
+
434
+ #: functions/interface.functions.php:99
435
+ #, php-format
436
+ msgid "You have both %1$s and %2$s defined so there isn't anything to back up."
437
+ msgstr "Jūs apibūdinote abudu - ir %1$s, ir %2$s , todėl nėra nieko, kieno atsarginę kopiją būtų galima sukurti."
438
+
439
+ #: functions/interface.functions.php:110
440
+ #, php-format
441
+ msgid "The following email address is not valid: %s."
442
+ msgid_plural "The following email addresses are not valid: %s."
443
+ msgstr[0] ""
444
+ msgstr[1] ""
445
+ msgstr[2] ""
446
+
447
+ #: functions/interface.functions.php:120
448
+ msgid "The last backup email failed to send. It's likely that the file is too large."
449
+ msgstr ""
450
+
451
+ #: functions/interface.functions.php:130
452
+ #, php-format
453
+ msgid "Your custom backups directory %1$s doesn't exist and can't be created, your backups will be saved to %2$s instead."
454
+ msgstr "Jūsų individualizuotas atsarginių kopijų katalogas %1$s neegzistuoja ir negali būti sukurtas, todėl Jūsų atsarginės kopijos bus įrašytos į %2$s, vietoje nurodytojo katalogo."
455
+
456
+ #: functions/interface.functions.php:140
457
+ #, php-format
458
+ msgid "Your custom backups directory %1$s isn't writable, new backups will be saved to %2$s instead."
459
+ msgstr "Jūsų individualizuotas atsarginių kopijų katalogas %1$s nėra įrašytinas, todėl naujos atsarginės kopijos bus įrašytos į %2$s, vietoje nurodytojo katalogo."
460
+
461
+ #: functions/interface.functions.php:150
462
+ #, php-format
463
+ msgid "You have defined a custom exclude list but the following paths don't exist %s, are you sure you entered them correctly?"
464
+ msgstr "Jūs nurodėte individualizuotą išskyrimų sąrašą, bet šie adresai neegzistuoja %s, ar esate tikras, jog įrašėte juos teisingai?"
465
+
466
+ #: functions/interface.functions.php:160
467
+ msgid "BackUpWordPress detected issues with your last backup."
468
+ msgstr ""
469
+
470
+ #: functions/backup.actions.php:12
471
+ msgid "Dumping database"
472
+ msgstr "Duomenų bazės iškrovimas"
473
+
474
+ #: functions/backup.actions.php:22
475
+ msgid "Creating zip archive"
476
+ msgstr "Kuriamas zip archyvas"
477
+
478
+ #: functions/backup.functions.php:19
479
+ msgid "Removing old backups"
480
+ msgstr "Pašalinamos senos atsarginės kopijos"
481
+
482
+ #: functions/backup.functions.php:147
483
+ #: functions/backup.functions.php:157
484
+ #, php-format
485
+ msgid "Backup of %s"
486
+ msgstr "%s atsarginė kopija"
487
+
488
+ #: functions/backup.functions.php:148
489
+ #, php-format
490
+ msgid ""
491
+ "BackUpWordPress has completed a backup of your site %1$s.\\n"
492
+ "\\n"
493
+ "The backup file should be attached to this email.\\n"
494
+ "\\n"
495
+ "You can also download the backup file by clicking the link below:\\n"
496
+ "\\n"
497
+ "%2$s\\n"
498
+ "\\n"
499
+ "Kind Regards\\n"
500
+ "\\n"
501
+ " The Happy BackUpWordPress Backup Emailing Robot"
502
+ msgstr ""
503
+ "BackUpWordpress baigė kurti Jūsų tinklalapio %1$s atsarginę kopiją.\n"
504
+ "\n"
505
+ "Atsarginės kopijos rinkmena turėtų būti pridėta prie šio elektroninio laiško.\n"
506
+ "\n"
507
+ "Jūs taip pat galite parsisiųsti atsarginės kopijos rinkmeną, paspausdamas nuorodą žemiau:\n"
508
+ "\n"
509
+ "%2$s\n"
510
+ "\n"
511
+ "Pagarbiai\n"
512
+ "\n"
513
+ "Laimingas BackUpWordPress Elektroninių laiškų siuntimo Robotas"
514
+
515
+ #: functions/backup.functions.php:158
516
+ #, php-format
517
+ msgid ""
518
+ "BackUpWordPress has completed a backup of your site %1$s.\\n"
519
+ "\\n"
520
+ "Unfortunately the backup file was too large to attach to this email.\\n"
521
+ "\\n"
522
+ "You can download the backup file by clicking the link below:\\n"
523
+ "\\n"
524
+ "%2$s\\n"
525
+ "\\n"
526
+ "Kind Regards\\n"
527
+ "\\n"
528
+ " The Happy BackUpWordPress Backup Emailing Robot"
529
+ msgstr ""
530
+ "BackUpWordpress baigė kurti Jūsų tinklalapio %1$s atsarginę kopiją.\n"
531
+ "\n"
532
+ "Nelaimei, atsarginės kopijos rinkmena buvo per didelė, kad ją būtų galima prisegti prie šio elektroninio laiško.\n"
533
+ "\n"
534
+ "Jūs taip pat galite parsisiųsti atsarginės kopijos rinkmeną, paspausdamas nuorodą žemiau:\n"
535
+ "\n"
536
+ "%2$s\n"
537
+ "\n"
538
+ "Pagarbiai\n"
539
+ "\n"
540
+ "Laimingas BackUpWordPress Elektroninių laiškų siuntimo Robotas"
541
+
542
+ #: functions/core.functions.php:339
543
+ #, php-format
544
+ msgid "This %s file ensures that other people cannot download your backup files."
545
+ msgstr ""
546
+
backupwordpress/languages/hmbkp-nl.mo ADDED
Binary file
backupwordpress/languages/hmbkp-nl.po ADDED
@@ -0,0 +1,432 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Translation of 1.6.8 in Dutch
2
+ # This file is distributed under the same license as the 1.6.8 package.
3
+ msgid ""
4
+ msgstr ""
5
+ "PO-Revision-Date: 2012-08-10 14:35:04+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: 1.6.8\n"
12
+
13
+ #: admin.menus.php:82
14
+ msgid "Help with translation"
15
+ msgstr "Vertaal hulp"
16
+
17
+ #: admin.backup-button.php:3
18
+ msgid "cancel"
19
+ msgstr "Annuleren"
20
+
21
+ #: admin.constants.php:23 admin.constants.php:26
22
+ msgid "Backup %s only, your %s won't be backed up. Defaults to %s."
23
+ msgstr "Backup alleen %s, de %s zullen niet gebacked up worden. Standaard ingesteld op %s."
24
+
25
+ #: admin.menus.php:65
26
+ msgid "The information below is for version %s. View the readme.txt file for help specific to version %s."
27
+ msgstr "De informatie hier onder is voor versie %s. Bekijk de readme.txt voor hulp speciaal voor versie %s. "
28
+
29
+ #: admin.menus.php:75
30
+ msgid "FAQ"
31
+ msgstr "Veel gestelde vragen"
32
+
33
+ #: admin.constants.php:3 admin.menus.php:76 admin.settings.php:5
34
+ msgid "Constants"
35
+ msgstr "Constanten"
36
+
37
+ #: admin.menus.php:81
38
+ msgid "Support Forums"
39
+ msgstr "Ondersteunings forums"
40
+
41
+ #: admin.settings.php:5
42
+ msgid "You can define %s in your %s to control some settings. A full list of %s can be found in the %s. Defined settings will not be editable below."
43
+ msgstr "Je kunt %s definiëren in je %s om de instellingen te beheren. Een volledige lijst van %s is opgesomd in %s. Gedefinieerde instellingen zijn niet hieronder aan te passen."
44
+
45
+ #: admin.settings.php:5
46
+ msgid "help panel"
47
+ msgstr "Hulp scherm"
48
+
49
+ #: admin.settings.php:94
50
+ msgid "Save Changes"
51
+ msgstr "Wijzigingen opslaan"
52
+
53
+ #: functions/core.functions.php:339
54
+ msgid "This %s file ensures that other people cannot download your backup files."
55
+ msgstr "Dit %s bestand voorkomt dat ander gebruikers je back up bestanden downloaden."
56
+
57
+ #: functions/interface.functions.php:48
58
+ msgid "Settings saved."
59
+ msgstr "Instellingen opgeslagen."
60
+
61
+ #: admin.actions.php:70
62
+ msgid "You have entered an invalid number of backups."
63
+ msgstr "Je hebt een ongeldig aantal back ups ingevuld."
64
+
65
+ #: admin.actions.php:79
66
+ msgid "%s is an invalid email address."
67
+ msgstr "%s is een ongeldig email adres."
68
+
69
+ #: admin.actions.php:249 functions/interface.functions.php:89
70
+ #: functions/interface.functions.php:99 functions/interface.functions.php:109
71
+ #: functions/interface.functions.php:119 functions/interface.functions.php:129
72
+ #: functions/interface.functions.php:139 functions/interface.functions.php:149
73
+ msgid "BackUpWordPress has detected a problem."
74
+ msgstr "BackUpWordPress heeft een probleem ondervonden."
75
+
76
+ #: admin.actions.php:249
77
+ msgid "%s is returning a %s response which could mean cron jobs aren't getting fired properly. BackUpWordPress relies on wp-cron to run scheduled back ups. See the %s for more details."
78
+ msgstr ""
79
+ "%s geeft een %s antwoord welke kan betekenen dat cron jobs niet goed opgestart worden.\n"
80
+ "BackUpWordPress is afhankelijk van wp-cron om geplande back ups te maken. Zie de %s voor meer details."
81
+
82
+ #: admin.backup-button.php:7
83
+ msgid "Back Up Now"
84
+ msgstr "Back Up Nu."
85
+
86
+ #: admin.backups-table.php:13
87
+ msgid "Size"
88
+ msgstr "Grootte"
89
+
90
+ #: admin.backups-table.php:14
91
+ msgid "Actions"
92
+ msgstr "Acties"
93
+
94
+ #: admin.backups-table.php:21
95
+ msgid "Total %s"
96
+ msgstr "Totaal %s"
97
+
98
+ #: admin.constants.php:3
99
+ msgid "You can %s any of the following %s in your %s to control advanced settings. %s. Defined %s will be highlighted."
100
+ msgstr "Je kunt %s elke van de volgende %s in je %s om geavanceerde instellingen te beheren. %s. Gedefiniëerde %s zijn gemarkeerd."
101
+
102
+ #: admin.constants.php:3
103
+ msgid "The Codex can help"
104
+ msgstr "De Codex kan hulp bieden."
105
+
106
+ #: admin.constants.php:8
107
+ msgid "The path to folder you would like to store your backup files in, defaults to %s."
108
+ msgstr "Het pad naar de map waar je de back up bestanden wilt bewaren, standaard naar %s."
109
+
110
+ #: admin.constants.php:11
111
+ msgid "The path to your %s executable. Will be used for the %s part of the back up if available."
112
+ msgstr "Het pad naar je %s uitvoerbaar bestand. Wordt gebruikt voor het %s gedeelte van de back up indien beschikbaar."
113
+
114
+ #: admin.constants.php:11 admin.constants.php:14 admin.constants.php:23
115
+ #: admin.constants.php:26 admin.status.php:14 admin.status.php:17
116
+ msgid "database"
117
+ msgstr "database"
118
+
119
+ #: admin.constants.php:14
120
+ msgid "The path to your %s executable. Will be used to zip up your %s and %s if available."
121
+ msgstr "Het pad naar je %s uitvoerbaar bestand. Wordt gebruikt om het %s gedeelte in te pakken en %s indien beschikbaar. "
122
+
123
+ #: admin.constants.php:14 admin.constants.php:23 admin.constants.php:26
124
+ #: admin.status.php:14 admin.status.php:20
125
+ msgid "files"
126
+ msgstr "bestanden"
127
+
128
+ #: admin.constants.php:17
129
+ msgid "Completely disables the automatic back up. You can still back up using the \"Back Up Now\" button. Defaults to %s."
130
+ msgstr "Schakelt de automatische back-up volledig uit. Je kunt nog steeds een back-up maken met behulp van de \"Back Up Nu\" knop. Standaard naar %s."
131
+
132
+ #: admin.constants.php:20
133
+ msgid "Number of backups to keep, older backups will be deleted automatically when a new backup is completed. Detaults to %s."
134
+ msgstr "Aantal te bewaren back-ups, oudere back-ups worden automatisch verwijderd wanneer er een nieuwe back-up is voltooid. Standaard naar %s."
135
+
136
+ #: admin.constants.php:29
137
+ msgid "The time that the daily back up should run. Defaults to %s."
138
+ msgstr "De tijd waarop de dagelijkse back-up moet worden uitgevoerd. Standaard naar %s."
139
+
140
+ #: admin.constants.php:32
141
+ msgid "Attempt to email a copy of your backups. Value should be email address to send backups to. Defaults to %s."
142
+ 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."
143
+
144
+ #: admin.constants.php:35
145
+ msgid "Comma separated list of files or directories to exclude, the backups directory is automatically excluded."
146
+ msgstr "Een door komma's gescheiden lijst van bestanden of mappen die uitgesloten worden, de backup(s) map is automatisch uitgesloten."
147
+
148
+ #: admin.constants.php:38
149
+ msgid "The capability to use when calling %s. Defaults to %s."
150
+ msgstr "De mogelijkheid om te gebruiken bij het aanroepen van %s. Standaard naar %s."
151
+
152
+ #: admin.menus.php:10 admin.page.php:7
153
+ msgid "Manage Backups"
154
+ msgstr "Beheer back ups"
155
+
156
+ #: admin.menus.php:10 admin.menus.php:34
157
+ msgid "Backups"
158
+ msgstr "Back ups"
159
+
160
+ #: admin.menus.php:65
161
+ msgid "You are not using the latest stable version of BackUpWordPress"
162
+ msgstr "Je gebruikt niet de laatste stabiele versie van BackUpWordPress"
163
+
164
+ #: admin.menus.php:79
165
+ msgid "For more information:"
166
+ msgstr "Voor meer informatie:"
167
+
168
+ #: admin.page.php:11 admin.settings.php:3
169
+ msgid "Settings"
170
+ msgstr "Instellingen"
171
+
172
+ #: admin.page.php:23
173
+ msgid "You need to fix the issues detailed above before BackUpWordPress can start."
174
+ msgstr "Je moet de hierboven beschreven problemen oplossen voordat BackUpWordPress kan beginnen."
175
+
176
+ #: admin.page.php:29
177
+ msgid "If you need help getting things working you are more than welcome to email us at %s and we'll do what we can to help."
178
+ msgstr "Als u hulp nodig bent om dingen te laten werken bent u meer dan welkom om ons te e-mailen op %s en we zullen doen wat we kunnen om te helpen."
179
+
180
+ #: admin.settings.php:16
181
+ msgid "Automatic Backups"
182
+ msgstr "Automatische Backups"
183
+
184
+ #: admin.settings.php:22
185
+ msgid "Backup my site automatically."
186
+ msgstr "Backup mijn site automatisch"
187
+
188
+ #: admin.settings.php:27
189
+ msgid "No automatic backups."
190
+ msgstr "Geen automatische backups."
191
+
192
+ #: admin.settings.php:36
193
+ msgid "Frequency of backups"
194
+ msgstr "Frequentie van de backups"
195
+
196
+ #: admin.settings.php:40
197
+ msgid "Automatic backups will occur"
198
+ msgstr "Automatische backups ingesteld."
199
+
200
+ #: admin.settings.php:43
201
+ msgid "Daily"
202
+ msgstr "Dagelijks"
203
+
204
+ #: admin.settings.php:44
205
+ msgid "Weekly"
206
+ msgstr "Wekelijks"
207
+
208
+ #: admin.settings.php:45
209
+ msgid "Fortnightly"
210
+ msgstr "Alle veertien dagen"
211
+
212
+ #: admin.settings.php:46
213
+ msgid "Monthly"
214
+ msgstr "Maandelijks"
215
+
216
+ #: admin.settings.php:55
217
+ msgid "What to Backup"
218
+ msgstr "Wat te back uppen"
219
+
220
+ #: admin.settings.php:59
221
+ msgid "Backup my"
222
+ msgstr "Back up mijn"
223
+
224
+ #: admin.settings.php:62
225
+ msgid "database &amp; files"
226
+ msgstr "database &amp; bestanden"
227
+
228
+ #: admin.settings.php:63
229
+ msgid "database only"
230
+ msgstr "Alleen database"
231
+
232
+ #: admin.settings.php:64
233
+ msgid "files only"
234
+ msgstr "Alleen bestanden"
235
+
236
+ #: admin.settings.php:72
237
+ msgid "Number of backups"
238
+ msgstr "Aantal back ups"
239
+
240
+ #: admin.settings.php:73
241
+ msgid "The last %s backups will be stored on the server."
242
+ msgstr "De laatste %s backups zullen worden opgeslagen op de server."
243
+
244
+ #: admin.settings.php:77
245
+ msgid "Email backups"
246
+ msgstr "Email back ups."
247
+
248
+ #: admin.settings.php:78
249
+ msgid "A copy of the backup file will be emailed to this address. Disabled if left blank."
250
+ msgstr "Een kopie van de back up zal worden verzonden naar dit email adres. Uitgeschakeld indien niet ingevuld."
251
+
252
+ #: admin.settings.php:82
253
+ msgid "Excludes"
254
+ msgstr "Exclusief"
255
+
256
+ #: admin.settings.php:85
257
+ msgid "A comma separated list of file and directory paths that you do <strong>not</strong> want to backup."
258
+ msgstr "Een door komma's gescheiden lijst van bestanden en mappen die je <strong>niet</strong> wilt back uppen."
259
+
260
+ #: admin.settings.php:86
261
+ msgid "e.g."
262
+ msgstr "bijv."
263
+
264
+ #: admin.status.php:9
265
+ msgid "Automatic backups are %s."
266
+ msgstr "Automatische back-ups zijn %s."
267
+
268
+ #: admin.status.php:9
269
+ msgid "disabled"
270
+ msgstr "uitgeschakeld"
271
+
272
+ #: admin.status.php:14
273
+ msgid "&amp;"
274
+ msgstr "&amp;"
275
+
276
+ #: admin.status.php:25
277
+ msgid "Your %s will be automatically backed up <code>%s</code>. The next backup will occur at %s on %s and be saved to %s."
278
+ msgstr "Uw %s wordt automatisch geback-upped <code> %s</code>. De volgende back-up zal plaatsvinden op %s op %s en worden opgeslagen in %s."
279
+
280
+ #: admin.status.php:25
281
+ msgid "It's currently %s"
282
+ msgstr "Op dit moment %s"
283
+
284
+ #: admin.status.php:31
285
+ msgid "Your site is %s. Backups will be compressed and should be smaller than this."
286
+ msgstr "Je site is %s. Back ups worden gecomprimeerd (gezipt) en zouden kleiner moeten worden dan dit."
287
+
288
+ #: admin.status.php:31
289
+ msgid "Calculating Size..."
290
+ msgstr "Grootte berekenen..."
291
+
292
+ #: admin.status.php:34
293
+ msgid "A copy of each backup will be emailed to %s."
294
+ msgstr "Een kopie van elke back up zal worden gemaild naar %s."
295
+
296
+ #: admin.status.php:38
297
+ msgid "The following paths will be excluded from your backups %s."
298
+ msgstr "De volgende paden zullen worden uitgesloten van je back-ups %s."
299
+
300
+ #: functions/backup.actions.php:12
301
+ msgid "Dumping database"
302
+ msgstr "Database verwijderen"
303
+
304
+ #: functions/backup.actions.php:22
305
+ msgid "Creating zip archive"
306
+ msgstr "Een zip archief maken"
307
+
308
+ #: functions/backup.functions.php:19
309
+ msgid "Removing old backups"
310
+ msgstr "Oude back ups verwijderen"
311
+
312
+ #: functions/backup.functions.php:147 functions/backup.functions.php:157
313
+ msgid "Backup of %s"
314
+ msgstr "Back up van %s"
315
+
316
+ #: functions/backup.functions.php:148
317
+ msgid ""
318
+ "BackUpWordPress has completed a backup of your site %s.\n"
319
+ "\n"
320
+ "The backup file should be attached to this email.\n"
321
+ "\n"
322
+ "You can also download the backup file by clicking the link below:\n"
323
+ "\n"
324
+ "%s\n"
325
+ "\n"
326
+ "Kind Regards\n"
327
+ "\n"
328
+ " The Happy BackUpWordPress Backup Emailing Robot"
329
+ msgstr ""
330
+ "BackUpWordPress heeft een back up van je site %s gemaakt.\n"
331
+ "\n"
332
+ "Het back up bestand is als bijlage toegevoegd bij deze mail.\n"
333
+ "\n"
334
+ "Je kunt het back up bestand ook downloaden door op onderstaande link te klikken:\n"
335
+ "\n"
336
+ "%s\n"
337
+ "\n"
338
+ "Vriendelijke groet\n"
339
+ "\n"
340
+ "De \"Happy BackUpWordPress Backup Email Robot."
341
+
342
+ #: functions/backup.functions.php:158
343
+ msgid ""
344
+ "BackUpWordPress has completed a backup of your site %s.\n"
345
+ "\n"
346
+ "Unfortunately the backup file was too large to attach to this email.\n"
347
+ "\n"
348
+ "You can download the backup file by clicking the link below:\n"
349
+ "\n"
350
+ "%s\n"
351
+ "\n"
352
+ "Kind Regards\n"
353
+ "\n"
354
+ " The Happy BackUpWordPress Backup Emailing Robot"
355
+ msgstr ""
356
+ "BackUpWordPress heeft een back up van je site %s gemaakt. \n"
357
+ "\n"
358
+ "Het back up bestand is te groot om als bijlage toe te voegen bij deze mail.\n"
359
+ "\n"
360
+ "Je kunt het back up bestand downloaden door op onderstaande link te klikken:\n"
361
+ "\n"
362
+ " %s\n"
363
+ "\n"
364
+ "Vriendelijke groet De \"Happy BackUpWordPress Backup Email Robot. "
365
+
366
+ #: functions/interface.functions.php:25
367
+ msgid "Download"
368
+ msgstr "Download"
369
+
370
+ #: functions/interface.functions.php:26
371
+ msgid "Delete"
372
+ msgstr "Verwijderen"
373
+
374
+ #: functions/interface.functions.php:67 functions/interface.functions.php:79
375
+ msgid "BackUpWordPress is almost ready."
376
+ msgstr "BackUpWordPress is bijna klaar."
377
+
378
+ #: functions/interface.functions.php:67
379
+ msgid "The backups directory can't be created because your %s directory isn't writable, run %s or %s or create the folder yourself."
380
+ msgstr "Je Back Up map kan niet gemaakt worden omdat je %s map niet beschrijfbaar is, voer %s of %s uit om de map handmatig te creëren."
381
+
382
+ #: functions/interface.functions.php:79
383
+ msgid "Your backups directory isn't writable. run %s or %s or set the permissions yourself."
384
+ msgstr "Je Back Up map is beveiligd tegen schrijven, voer %s of %s uit of verander de permissies handmatig."
385
+
386
+ #: functions/interface.functions.php:89
387
+ msgid " %s is running in %s. Please contact your host and ask them to disable %s."
388
+ msgstr "%s wordt uitgevoerd in %s. Neem contact op met je host en vraag hem om %s uit te schakelen"
389
+
390
+ #: functions/interface.functions.php:99
391
+ msgid "You have both %s and %s defined so there isn't anything to back up."
392
+ msgstr "Je hebt zowel %s als %s gedefinieerd voor uitsluiting, dus er is niets om te back uppen."
393
+
394
+ #: functions/interface.functions.php:109
395
+ msgid "The following email address's are not valid: %s."
396
+ msgstr "De volgende email adressen zijn niet geldig: %s."
397
+
398
+ #: functions/interface.functions.php:119
399
+ msgid "The last backup email failed to send. It's likely that the file is too large."
400
+ msgstr "De laatste back up kon niet worden verzonden. Waarschijnlijk is het bestand te groot."
401
+
402
+ #: functions/interface.functions.php:129
403
+ msgid "Your custom backups directory %s doesn't exist and can't be created, your backups will be saved to %s instead."
404
+ msgstr "Je aangepaste back-ups map %s bestaat niet en kan niet worden gemaakt, in plaats daarvan zullen je back-ups worden opgeslagen in %s."
405
+
406
+ #: functions/interface.functions.php:139
407
+ msgid "Your custom backups directory %s isn't writable, new backups will be saved to %s instead."
408
+ msgstr "Je aangepaste back-ups map %s is tegen schrijven beveiligd, nieuwe back-ups zullen worden opgeslagen in %s. "
409
+
410
+ #: functions/interface.functions.php:149
411
+ msgid "You have defined a custom exclude list but the following paths don't exist %s, are you sure you entered them correctly?"
412
+ msgstr "Je hebt een aangepaste lijst van uitsluitingen gedefinieerd, maar de volgende paden zijn er niet %s, weet je zeker dat je deze correct ingevoerd hebt?"
413
+
414
+ #: functions/interface.functions.php:159
415
+ msgid "BackUpWordPress detected issues with your last backup."
416
+ msgstr "BackUpWordPress heeft problemen ondervonden met je laatste back-up."
417
+
418
+ #: hm-backup/hm-backup.php:532
419
+ msgid "The backup file was not created"
420
+ msgstr "Het back-up bestand is niet gemaakt"
421
+
422
+ #: hm-backup/hm-backup.php:603
423
+ msgid "The following files are unreadable and couldn't be backed up: "
424
+ msgstr "De volgende bestanden zijn onleesbaar en konden niet in een back-up worden opgenomen:"
425
+
426
+ #: plugin.php:47
427
+ msgid "BackUpWordPress requires PHP version 5.2.4 or greater."
428
+ msgstr "BackUpWordPress vereist PHP versie 5.2.4 of hoger."
429
+
430
+ #: plugin.php:58
431
+ msgid "BackUpWordPress requires WordPress version %s."
432
+ msgstr "BackUpWordPress vereist WordPress versie %s."
backupwordpress/languages/hmbkp-ro_RO.mo ADDED
Binary file
backupwordpress/languages/hmbkp-ro_RO.po ADDED
@@ -0,0 +1,544 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Translation of 1.6.8 in Romanian
2
+ # This file is distributed under the same license as the 1.6.8 package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: 1.6.8\n"
6
+ "Report-Msgid-Bugs-To: \n"
7
+ "POT-Creation-Date: 2012-08-14 14:54+0100\n"
8
+ "PO-Revision-Date: 2012-08-14 14:55+0100\n"
9
+ "Last-Translator: Flo Edelmann <florian-edelmann@online.de>\n"
10
+ "Language-Team: \n"
11
+ "Language: \n"
12
+ "MIME-Version: 1.0\n"
13
+ "Content-Type: text/plain; charset=UTF-8\n"
14
+ "Content-Transfer-Encoding: 8bit\n"
15
+ "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);;\n"
16
+ "X-Generator: GlotPress/0.1\n"
17
+ "X-Poedit-Language: Romanian\n"
18
+ "X-Poedit-Country: ROMANIA\n"
19
+ "X-Poedit-SourceCharset: utf-8\n"
20
+ "X-Poedit-KeywordsList: __;_e;_n:1,2\n"
21
+ "X-Poedit-Basepath: ..\n"
22
+ "X-Poedit-SearchPath-0: .\n"
23
+
24
+ #: admin.settings.php:3
25
+ #: admin.page.php:11
26
+ msgid "Settings"
27
+ msgstr ""
28
+
29
+ #: admin.settings.php:5
30
+ #, php-format
31
+ msgid "You can define %1$s in your %2$s to control some settings. A full list of %3$s can be found in the %4$s. Defined settings will not be editable below."
32
+ msgstr ""
33
+
34
+ #: admin.settings.php:5
35
+ #: admin.constants.php:3
36
+ #: admin.menus.php:76
37
+ msgid "Constants"
38
+ msgstr ""
39
+
40
+ #: admin.settings.php:5
41
+ msgid "help panel"
42
+ msgstr ""
43
+
44
+ #: admin.settings.php:16
45
+ msgid "Automatic Backups"
46
+ msgstr ""
47
+
48
+ #: admin.settings.php:22
49
+ msgid "Backup my site automatically."
50
+ msgstr ""
51
+
52
+ #: admin.settings.php:27
53
+ msgid "No automatic backups."
54
+ msgstr ""
55
+
56
+ #: admin.settings.php:36
57
+ msgid "Frequency of backups"
58
+ msgstr ""
59
+
60
+ #: admin.settings.php:40
61
+ msgid "Automatic backups will occur"
62
+ msgstr ""
63
+
64
+ #: admin.settings.php:43
65
+ msgid "Daily"
66
+ msgstr ""
67
+
68
+ #: admin.settings.php:44
69
+ msgid "Weekly"
70
+ msgstr ""
71
+
72
+ #: admin.settings.php:45
73
+ msgid "Fortnightly"
74
+ msgstr ""
75
+
76
+ #: admin.settings.php:46
77
+ msgid "Monthly"
78
+ msgstr ""
79
+
80
+ #: admin.settings.php:55
81
+ msgid "What to Backup"
82
+ msgstr ""
83
+
84
+ #: admin.settings.php:59
85
+ msgid "Backup my"
86
+ msgstr ""
87
+
88
+ #: admin.settings.php:62
89
+ msgid "database &amp; files"
90
+ msgstr ""
91
+
92
+ #: admin.settings.php:63
93
+ msgid "database only"
94
+ msgstr ""
95
+
96
+ #: admin.settings.php:64
97
+ msgid "files only"
98
+ msgstr ""
99
+
100
+ #: admin.settings.php:72
101
+ msgid "Number of backups"
102
+ msgstr ""
103
+
104
+ #: admin.settings.php:73
105
+ #, php-format
106
+ msgid "The last %s backups will be stored on the server."
107
+ msgstr ""
108
+
109
+ #: admin.settings.php:77
110
+ msgid "Email backups"
111
+ msgstr ""
112
+
113
+ #: admin.settings.php:78
114
+ msgid "A copy of the backup file will be emailed to this address. Disabled if left blank."
115
+ msgstr ""
116
+
117
+ #: admin.settings.php:82
118
+ msgid "Excludes"
119
+ msgstr ""
120
+
121
+ #: admin.settings.php:85
122
+ msgid "A comma separated list of file and directory paths that you do <strong>not</strong> want to backup."
123
+ msgstr ""
124
+
125
+ #: admin.settings.php:86
126
+ #: admin.constants.php:8
127
+ #: admin.constants.php:11
128
+ #: admin.constants.php:14
129
+ #: admin.constants.php:17
130
+ #: admin.constants.php:20
131
+ #: admin.constants.php:23
132
+ #: admin.constants.php:26
133
+ #: admin.constants.php:29
134
+ #: admin.constants.php:32
135
+ #: admin.constants.php:35
136
+ #: admin.constants.php:38
137
+ #: admin.constants.php:41
138
+ msgid "e.g."
139
+ msgstr ""
140
+
141
+ #: admin.settings.php:94
142
+ msgid "Save Changes"
143
+ msgstr ""
144
+
145
+ #: admin.backups-table.php:12
146
+ #, php-format
147
+ msgid "1 backup completed"
148
+ msgid_plural "%d backups completed"
149
+ msgstr[0] ""
150
+ msgstr[1] ""
151
+ msgstr[2] ""
152
+
153
+ #: admin.backups-table.php:13
154
+ msgid "Size"
155
+ msgstr "Dimensiunea"
156
+
157
+ #: admin.backups-table.php:14
158
+ msgid "Actions"
159
+ msgstr "Acţiuni"
160
+
161
+ #: admin.backups-table.php:20
162
+ #, php-format
163
+ msgid "Only the most recent backup will be saved"
164
+ msgid_plural "The %d most recent backups will be saved"
165
+ msgstr[0] ""
166
+ msgstr[1] ""
167
+ msgstr[2] ""
168
+
169
+ #: admin.backups-table.php:21
170
+ #, php-format
171
+ msgid "Total %s"
172
+ msgstr ""
173
+
174
+ #: admin.page.php:7
175
+ #: admin.menus.php:10
176
+ msgid "Manage Backups"
177
+ msgstr "Gestionaţi backup-uri"
178
+
179
+ #: admin.page.php:23
180
+ msgid "You need to fix the issues detailed above before BackUpWordPress can start."
181
+ msgstr "Aveţi nevoie pentru a remedia problemele detaliate mai sus înainte de a începe BackUpWordPress."
182
+
183
+ #: admin.page.php:29
184
+ #, php-format
185
+ msgid "If you need help getting things working you are more than welcome to email us at %s and we'll do what we can to help."
186
+ msgstr "Dacă aveţi nevoie de ajutor Noţiuni de bază lucrurile de lucru sunteţi mai mult decât binevenit la e-mail-ne la %s şi vom face ceea ce putem pentru a ajuta."
187
+
188
+ #: admin.backup-button.php:3
189
+ msgid "cancel"
190
+ msgstr ""
191
+
192
+ #: admin.backup-button.php:7
193
+ msgid "Back Up Now"
194
+ msgstr "Rezervă acum"
195
+
196
+ #: admin.constants.php:3
197
+ #, php-format
198
+ 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."
199
+ msgstr ""
200
+
201
+ #: admin.constants.php:3
202
+ msgid "The Codex can help"
203
+ msgstr "Codex poate ajuta"
204
+
205
+ #: admin.constants.php:8
206
+ #, php-format
207
+ msgid "The path to folder you would like to store your backup files in, defaults to %s."
208
+ msgstr "Calea la folderul pe care doriţi să stocaţi fişierele copie de rezervă în, implicit la % s."
209
+
210
+ #: admin.constants.php:11
211
+ #, php-format
212
+ msgid "The path to your %1$s executable. Will be used for the %2$s part of the back up if available."
213
+ msgstr ""
214
+
215
+ #: admin.constants.php:11
216
+ #: admin.constants.php:14
217
+ #: admin.constants.php:23
218
+ #: admin.constants.php:26
219
+ #: admin.status.php:14
220
+ #: admin.status.php:18
221
+ msgid "database"
222
+ msgstr "baza de date"
223
+
224
+ #: admin.constants.php:14
225
+ #, php-format
226
+ msgid "The path to your %1$s executable. Will be used to zip up your %2$s and %3$s if available."
227
+ msgstr ""
228
+
229
+ #: admin.constants.php:14
230
+ #: admin.constants.php:23
231
+ #: admin.constants.php:26
232
+ #: admin.status.php:14
233
+ #: admin.status.php:22
234
+ msgid "files"
235
+ msgstr "fişiere"
236
+
237
+ #: admin.constants.php:17
238
+ #, php-format
239
+ msgid "Completely disables the automatic back up. You can still back up using the \"Back Up Now\" button. Defaults to %s."
240
+ msgstr ""
241
+
242
+ #: admin.constants.php:20
243
+ #, php-format
244
+ msgid "Number of backups to keep, older backups will be deleted automatically when a new backup is completed. Defaults to %s."
245
+ msgstr ""
246
+
247
+ #: admin.constants.php:23
248
+ #: admin.constants.php:26
249
+ #, php-format
250
+ msgid "Backup %1$s only, your %2$s won't be backed up. Defaults to %3$s."
251
+ msgstr ""
252
+
253
+ #: admin.constants.php:29
254
+ #, php-format
255
+ msgid "The time that the daily back up should run. Defaults to %s."
256
+ msgstr ""
257
+
258
+ #: admin.constants.php:32
259
+ #, php-format
260
+ msgid "Attempt to email a copy of your backups. Value should be email address to send backups to. Defaults to %s."
261
+ msgstr ""
262
+
263
+ #: admin.constants.php:35
264
+ msgid "Comma separated list of files or directories to exclude, the backups directory is automatically excluded."
265
+ msgstr ""
266
+
267
+ #: admin.constants.php:38
268
+ #, php-format
269
+ msgid "The capability to use when calling %1$s. Defaults to %2$s."
270
+ msgstr ""
271
+
272
+ #: admin.constants.php:41
273
+ #, php-format
274
+ msgid "The root directory that is backed up. Defaults to %s."
275
+ msgstr ""
276
+
277
+ #: admin.actions.php:70
278
+ msgid "You have entered an invalid number of backups."
279
+ msgstr ""
280
+
281
+ #: admin.actions.php:79
282
+ #, php-format
283
+ msgid "%s is an invalid email address."
284
+ msgstr ""
285
+
286
+ #: admin.actions.php:249
287
+ #: functions/interface.functions.php:89
288
+ #: functions/interface.functions.php:99
289
+ #: functions/interface.functions.php:110
290
+ #: functions/interface.functions.php:120
291
+ #: functions/interface.functions.php:130
292
+ #: functions/interface.functions.php:140
293
+ #: functions/interface.functions.php:150
294
+ msgid "BackUpWordPress has detected a problem."
295
+ msgstr "BackUpWordPress a detectat o problemă."
296
+
297
+ #: admin.actions.php:249
298
+ #, php-format
299
+ 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."
300
+ msgstr ""
301
+
302
+ #: admin.menus.php:10
303
+ #: admin.menus.php:34
304
+ msgid "Backups"
305
+ msgstr "Copii de rezervă"
306
+
307
+ #: admin.menus.php:65
308
+ msgid "You are not using the latest stable version of BackUpWordPress"
309
+ msgstr "Nu utilizaţi cea mai recentă versiune stabilă de BackUpWordPress"
310
+
311
+ #: admin.menus.php:65
312
+ #, php-format
313
+ msgid "The information below is for version %1$s. View the <code>readme.txt</code> file for help specific to version %2$s."
314
+ msgstr ""
315
+
316
+ #: admin.menus.php:75
317
+ msgid "FAQ"
318
+ msgstr ""
319
+
320
+ #: admin.menus.php:79
321
+ msgid "For more information:"
322
+ msgstr ""
323
+
324
+ #: admin.menus.php:81
325
+ msgid "Support Forums"
326
+ msgstr ""
327
+
328
+ #: admin.menus.php:82
329
+ msgid "Help with translation"
330
+ msgstr ""
331
+
332
+ #: plugin.php:47
333
+ msgid "BackUpWordPress requires PHP version 5.2.4 or greater."
334
+ msgstr ""
335
+
336
+ #: plugin.php:58
337
+ #, php-format
338
+ msgid "BackUpWordPress requires WordPress version %s."
339
+ msgstr "BackUpWordPress necesită WordPress versiunea % s."
340
+
341
+ #: admin.status.php:9
342
+ #, php-format
343
+ msgid "Automatic backups are %s."
344
+ msgstr "Copierea de rezervă sunt % s."
345
+
346
+ #: admin.status.php:9
347
+ msgid "disabled"
348
+ msgstr "dezactivat"
349
+
350
+ #: admin.status.php:14
351
+ msgid "&amp;"
352
+ msgstr ""
353
+
354
+ #: admin.status.php:32
355
+ #, php-format
356
+ msgid "Your %1$s will be automatically backed up %2$s. The next backup will occur at %3$s on %4$s and be saved to %5$s."
357
+ msgid_plural "Your %1$s will be automatically backed up %2$s. The next backup will occur at %3$s on %4$s and be saved to %5$s."
358
+ msgstr[0] ""
359
+ msgstr[1] ""
360
+ msgstr[2] ""
361
+
362
+ #: admin.status.php:39
363
+ #, php-format
364
+ msgid "It's currently %s"
365
+ msgstr ""
366
+
367
+ #: admin.status.php:47
368
+ #, php-format
369
+ msgid "Your site is %s. Backups will be compressed and should be smaller than this."
370
+ msgstr ""
371
+
372
+ #: admin.status.php:47
373
+ msgid "Calculating Size..."
374
+ msgstr "Calculul dimensiunea..."
375
+
376
+ #: admin.status.php:50
377
+ #, php-format
378
+ msgid "A copy of each backup will be emailed to %s."
379
+ msgstr "O copie de rezervă fiecare va fi trimis la % s."
380
+
381
+ #: admin.status.php:54
382
+ #, php-format
383
+ msgid "The following paths will be excluded from your backups %s."
384
+ msgstr "Următoarele căi vor fi excluşi din copiile de rezervă % s."
385
+
386
+ #: hm-backup/hm-backup.php:532
387
+ msgid "The backup file was not created"
388
+ msgstr ""
389
+
390
+ #: hm-backup/hm-backup.php:603
391
+ msgid "The following files are unreadable and couldn't be backed up: "
392
+ msgstr ""
393
+
394
+ #: functions/interface.functions.php:25
395
+ msgid "Download"
396
+ msgstr "Download"
397
+
398
+ #: functions/interface.functions.php:26
399
+ msgid "Delete"
400
+ msgstr "Ştergere"
401
+
402
+ #: functions/interface.functions.php:48
403
+ msgid "Settings saved."
404
+ msgstr ""
405
+
406
+ #: functions/interface.functions.php:67
407
+ #: functions/interface.functions.php:79
408
+ msgid "BackUpWordPress is almost ready."
409
+ msgstr ""
410
+
411
+ #: functions/interface.functions.php:67
412
+ #, php-format
413
+ 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."
414
+ msgstr "Imposibil de creat directorul de backup-uri, deoarece directorul %1$s nu este inscriptibil, a alerga %2$s sau %3$s sau pentru a crea folderul-te."
415
+
416
+ #: functions/interface.functions.php:79
417
+ #, php-format
418
+ msgid "Your backups directory isn't writable, run %1$s or %2$s or set the permissions yourself."
419
+ msgstr "Directorul de backup-uri nu este inscriptibil. a alerga %1$s sau %2$s sau setaţi permisiunile-te."
420
+
421
+ #: functions/interface.functions.php:89
422
+ #, php-format
423
+ msgid "%1$s is running in %2$s. Please contact your host and ask them to disable %3$s."
424
+ msgstr ""
425
+
426
+ #: functions/interface.functions.php:89
427
+ msgid "http://php.net/manual/en/features.safe-mode.php"
428
+ msgstr "http://php.net/manual/ro/features.safe-mode.php"
429
+
430
+ #: functions/interface.functions.php:89
431
+ msgid "Safe Mode"
432
+ msgstr "Safe Mode"
433
+
434
+ #: functions/interface.functions.php:99
435
+ #, php-format
436
+ msgid "You have both %1$s and %2$s defined so there isn't anything to back up."
437
+ msgstr "Aveţi atât %1$s şi %2$s definite astfel încât nu există nimic de rezervă."
438
+
439
+ #: functions/interface.functions.php:110
440
+ #, php-format
441
+ msgid "The following email address is not valid: %s."
442
+ msgid_plural "The following email addresses are not valid: %s."
443
+ msgstr[0] ""
444
+ msgstr[1] ""
445
+ msgstr[2] ""
446
+
447
+ #: functions/interface.functions.php:120
448
+ msgid "The last backup email failed to send. It's likely that the file is too large."
449
+ msgstr ""
450
+
451
+ #: functions/interface.functions.php:130
452
+ #, php-format
453
+ msgid "Your custom backups directory %1$s doesn't exist and can't be created, your backups will be saved to %2$s instead."
454
+ msgstr "Directorul de backup-uri personalizate %1$s nu există şi nu pot fi create, copiile de rezervă va fi salvată la %2$s în schimb."
455
+
456
+ #: functions/interface.functions.php:140
457
+ #, php-format
458
+ msgid "Your custom backups directory %1$s isn't writable, new backups will be saved to %2$s instead."
459
+ msgstr "Directorul de backup-uri personalizate %1$s nu este inscriptibil, backup-uri noi va fi salvat în %2$s în schimb."
460
+
461
+ #: functions/interface.functions.php:150
462
+ #, php-format
463
+ msgid "You have defined a custom exclude list but the following paths don't exist %s, are you sure you entered them correctly?"
464
+ msgstr "Le-aţi definit o listă particularizată exclude dar următoarele căi nu există % s, sunt sigur că le-aţi introdus corect?"
465
+
466
+ #: functions/interface.functions.php:160
467
+ msgid "BackUpWordPress detected issues with your last backup."
468
+ msgstr ""
469
+
470
+ #: functions/backup.actions.php:12
471
+ msgid "Dumping database"
472
+ msgstr "Baza de date de dumping"
473
+
474
+ #: functions/backup.actions.php:22
475
+ msgid "Creating zip archive"
476
+ msgstr "Crearea arhiva zip"
477
+
478
+ #: functions/backup.functions.php:19
479
+ msgid "Removing old backups"
480
+ msgstr "Eliminarea backup-uri vechi"
481
+
482
+ #: functions/backup.functions.php:147
483
+ #: functions/backup.functions.php:157
484
+ #, php-format
485
+ msgid "Backup of %s"
486
+ msgstr "Copie de rezervă a %s"
487
+
488
+ #: functions/backup.functions.php:148
489
+ #, php-format
490
+ msgid ""
491
+ "BackUpWordPress has completed a backup of your site %1$s.\\n"
492
+ "\\n"
493
+ "The backup file should be attached to this email.\\n"
494
+ "\\n"
495
+ "You can also download the backup file by clicking the link below:\\n"
496
+ "\\n"
497
+ "%2$s\\n"
498
+ "\\n"
499
+ "Kind Regards\\n"
500
+ "\\n"
501
+ " The Happy BackUpWordPress Backup Emailing Robot"
502
+ msgstr ""
503
+ "BackUpWordpress ha completado una copia de seguridad de tu web %1$s.\n"
504
+ "\n"
505
+ "El archivo de copia de seguridad se encuentra adjunto a este correo electrónico.\n"
506
+ "\n"
507
+ "También puedes descargarlo desde el enlace indicado más abajo:\n"
508
+ "\n"
509
+ "%2$s\n"
510
+ "\n"
511
+ "Un saludo\n"
512
+ "\n"
513
+ "El feliz robot de BackUpWordPress Email"
514
+
515
+ #: functions/backup.functions.php:158
516
+ #, php-format
517
+ msgid ""
518
+ "BackUpWordPress has completed a backup of your site %1$s.\\n"
519
+ "\\n"
520
+ "Unfortunately the backup file was too large to attach to this email.\\n"
521
+ "\\n"
522
+ "You can download the backup file by clicking the link below:\\n"
523
+ "\\n"
524
+ "%2$s\\n"
525
+ "\\n"
526
+ "Kind Regards\\n"
527
+ "\\n"
528
+ " The Happy BackUpWordPress Backup Emailing Robot"
529
+ msgstr ""
530
+ "BackUpWordpress ha completado una copia de seguridad de tu web %1$s.\n"
531
+ "\n"
532
+ "Desafortunadamente el archivo de copia de seguridad creado es demasiado pesado para enviar como archivo adjunto, pero puedes descargarlo desde enlace indicado aquí:\n"
533
+ "\n"
534
+ "%2$s\n"
535
+ "\n"
536
+ "Un saludo\n"
537
+ "\n"
538
+ "El feliz robot de BackUpWordPress Email"
539
+
540
+ #: functions/core.functions.php:339
541
+ #, php-format
542
+ msgid "This %s file ensures that other people cannot download your backup files."
543
+ msgstr ""
544
+
backupwordpress/languages/hmbkp-ru_RU.mo ADDED
Binary file
backupwordpress/languages/hmbkp-ru_RU.po ADDED
@@ -0,0 +1,545 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Translation of 1.6.8 in Russian
2
+ # This file is distributed under the same license as the 1.6.8 package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: 1.6.8\n"
6
+ "Report-Msgid-Bugs-To: \n"
7
+ "POT-Creation-Date: 2012-08-14 14:46+0100\n"
8
+ "PO-Revision-Date: 2012-08-14 14:56+0100\n"
9
+ "Last-Translator: Flo Edelmann <florian-edelmann@online.de>\n"
10
+ "Language-Team: \n"
11
+ "Language: \n"
12
+ "MIME-Version: 1.0\n"
13
+ "Content-Type: text/plain; charset=UTF-8\n"
14
+ "Content-Transfer-Encoding: 8bit\n"
15
+ "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
16
+ "X-Generator: GlotPress/0.1\n"
17
+ "X-Poedit-Language: Russian\n"
18
+ "X-Poedit-Country: RUSSIA\n"
19
+ "X-Poedit-SourceCharset: utf-8\n"
20
+ "X-Poedit-KeywordsList: __;_e;_n:1,2\n"
21
+ "X-Poedit-Basepath: ..\n"
22
+ "X-Poedit-SearchPath-0: .\n"
23
+
24
+ #: admin.settings.php:3
25
+ #: admin.page.php:11
26
+ msgid "Settings"
27
+ msgstr ""
28
+
29
+ #: admin.settings.php:5
30
+ #, php-format
31
+ msgid "You can define %1$s in your %2$s to control some settings. A full list of %3$s can be found in the %4$s. Defined settings will not be editable below."
32
+ msgstr ""
33
+
34
+ #: admin.settings.php:5
35
+ #: admin.constants.php:3
36
+ #: admin.menus.php:76
37
+ msgid "Constants"
38
+ msgstr ""
39
+
40
+ #: admin.settings.php:5
41
+ msgid "help panel"
42
+ msgstr ""
43
+
44
+ #: admin.settings.php:16
45
+ msgid "Automatic Backups"
46
+ msgstr ""
47
+
48
+ #: admin.settings.php:22
49
+ msgid "Backup my site automatically."
50
+ msgstr ""
51
+
52
+ #: admin.settings.php:27
53
+ msgid "No automatic backups."
54
+ msgstr ""
55
+
56
+ #: admin.settings.php:36
57
+ msgid "Frequency of backups"
58
+ msgstr ""
59
+
60
+ #: admin.settings.php:40
61
+ msgid "Automatic backups will occur"
62
+ msgstr ""
63
+
64
+ #: admin.settings.php:43
65
+ msgid "Daily"
66
+ msgstr ""
67
+
68
+ #: admin.settings.php:44
69
+ msgid "Weekly"
70
+ msgstr ""
71
+
72
+ #: admin.settings.php:45
73
+ msgid "Fortnightly"
74
+ msgstr ""
75
+
76
+ #: admin.settings.php:46
77
+ msgid "Monthly"
78
+ msgstr ""
79
+
80
+ #: admin.settings.php:55
81
+ msgid "What to Backup"
82
+ msgstr ""
83
+
84
+ #: admin.settings.php:59
85
+ msgid "Backup my"
86
+ msgstr ""
87
+
88
+ #: admin.settings.php:62
89
+ msgid "database &amp; files"
90
+ msgstr ""
91
+
92
+ #: admin.settings.php:63
93
+ msgid "database only"
94
+ msgstr ""
95
+
96
+ #: admin.settings.php:64
97
+ msgid "files only"
98
+ msgstr ""
99
+
100
+ #: admin.settings.php:72
101
+ msgid "Number of backups"
102
+ msgstr ""
103
+
104
+ #: admin.settings.php:73
105
+ #, php-format
106
+ msgid "The last %s backups will be stored on the server."
107
+ msgstr ""
108
+
109
+ #: admin.settings.php:77
110
+ msgid "Email backups"
111
+ msgstr ""
112
+
113
+ #: admin.settings.php:78
114
+ msgid "A copy of the backup file will be emailed to this address. Disabled if left blank."
115
+ msgstr ""
116
+
117
+ #: admin.settings.php:82
118
+ msgid "Excludes"
119
+ msgstr ""
120
+
121
+ #: admin.settings.php:85
122
+ msgid "A comma separated list of file and directory paths that you do <strong>not</strong> want to backup."
123
+ msgstr ""
124
+
125
+ #: admin.settings.php:86
126
+ #: admin.constants.php:8
127
+ #: admin.constants.php:11
128
+ #: admin.constants.php:14
129
+ #: admin.constants.php:17
130
+ #: admin.constants.php:20
131
+ #: admin.constants.php:23
132
+ #: admin.constants.php:26
133
+ #: admin.constants.php:29
134
+ #: admin.constants.php:32
135
+ #: admin.constants.php:35
136
+ #: admin.constants.php:38
137
+ #: admin.constants.php:41
138
+ msgid "e.g."
139
+ msgstr ""
140
+
141
+ #: admin.settings.php:94
142
+ msgid "Save Changes"
143
+ msgstr ""
144
+
145
+ #: admin.backups-table.php:12
146
+ #, php-format
147
+ msgid "1 backup completed"
148
+ msgid_plural "%d backups completed"
149
+ msgstr[0] ""
150
+ msgstr[1] ""
151
+ msgstr[2] ""
152
+
153
+ #: admin.backups-table.php:13
154
+ msgid "Size"
155
+ msgstr "Размер"
156
+
157
+ #: admin.backups-table.php:14
158
+ msgid "Actions"
159
+ msgstr "Действия"
160
+
161
+ #: admin.backups-table.php:20
162
+ #, php-format
163
+ msgid "Only the most recent backup will be saved"
164
+ msgid_plural "The %d most recent backups will be saved"
165
+ msgstr[0] ""
166
+ msgstr[1] ""
167
+ msgstr[2] ""
168
+
169
+ #: admin.backups-table.php:21
170
+ #, php-format
171
+ msgid "Total %s"
172
+ msgstr "Всего %s"
173
+
174
+ #: admin.page.php:7
175
+ #: admin.menus.php:10
176
+ msgid "Manage Backups"
177
+ msgstr "Управление резервным копированием"
178
+
179
+ #: admin.page.php:23
180
+ msgid "You need to fix the issues detailed above before BackUpWordPress can start."
181
+ msgstr "Исправьте ошибки, приведённые выше, прежде чем BackUpWordPress сможет начать работу."
182
+
183
+ #: admin.page.php:29
184
+ #, php-format
185
+ msgid "If you need help getting things working you are more than welcome to email us at %s and we'll do what we can to help."
186
+ msgstr "Если вам требуется помощь в том, чтобы заставить всё это работать, непременно пишите нам на %s, и мы сделаем всё, что в наших силах."
187
+
188
+ #: admin.backup-button.php:3
189
+ msgid "cancel"
190
+ msgstr ""
191
+
192
+ #: admin.backup-button.php:7
193
+ msgid "Back Up Now"
194
+ msgstr "Сделать копию"
195
+
196
+ #: admin.constants.php:3
197
+ #, php-format
198
+ 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."
199
+ msgstr ""
200
+
201
+ #: admin.constants.php:3
202
+ msgid "The Codex can help"
203
+ msgstr "Подробности смотрите в Кодексе"
204
+
205
+ #: admin.constants.php:8
206
+ #, php-format
207
+ msgid "The path to folder you would like to store your backup files in, defaults to %s."
208
+ msgstr "Путь к папке, где вы хотите хранить ваши резервные копии. По умолчанию это %s."
209
+
210
+ #: admin.constants.php:11
211
+ #, php-format
212
+ msgid "The path to your %1$s executable. Will be used for the %2$s part of the back up if available."
213
+ msgstr "Путь к исполняемому файлу %1$s. Он будет использован для копирования %2$s, если доступен."
214
+
215
+ #: admin.constants.php:11
216
+ #: admin.constants.php:14
217
+ #: admin.constants.php:23
218
+ #: admin.constants.php:26
219
+ #: admin.status.php:14
220
+ #: admin.status.php:18
221
+ msgid "database"
222
+ msgstr "баз данных"
223
+
224
+ #: admin.constants.php:14
225
+ #, php-format
226
+ msgid "The path to your %1$s executable. Will be used to zip up your %2$s and %3$s if available."
227
+ msgstr "Путь к исполняемому файлу %1$s. Он будет использован для сжатия %2$s и %3$s, если доступен."
228
+
229
+ #: admin.constants.php:14
230
+ #: admin.constants.php:23
231
+ #: admin.constants.php:26
232
+ #: admin.status.php:14
233
+ #: admin.status.php:22
234
+ msgid "files"
235
+ msgstr "файлов"
236
+
237
+ #: admin.constants.php:17
238
+ #, php-format
239
+ msgid "Completely disables the automatic back up. You can still back up using the \"Back Up Now\" button. Defaults to %s."
240
+ msgstr "Полный запрет на автоматическое резервное копирование. Однако, ручное копирование кнопкой \"Сделать копию\" будет доступно. Значение по умолчанию %s."
241
+
242
+ #: admin.constants.php:20
243
+ #, fuzzy, php-format
244
+ msgid "Number of backups to keep, older backups will be deleted automatically when a new backup is completed. Defaults to %s."
245
+ msgstr "Количество хранимых резервных копий. Более старые копии будут удалены автоматически после создания новой. Значение по умолчанию %s."
246
+
247
+ #: admin.constants.php:23
248
+ #: admin.constants.php:26
249
+ #, php-format
250
+ msgid "Backup %1$s only, your %2$s won't be backed up. Defaults to %3$s."
251
+ msgstr ""
252
+
253
+ #: admin.constants.php:29
254
+ #, php-format
255
+ msgid "The time that the daily back up should run. Defaults to %s."
256
+ msgstr "Время запуска ежедневного резервного копирования. Значение по умолчанию %s."
257
+
258
+ #: admin.constants.php:32
259
+ #, php-format
260
+ msgid "Attempt to email a copy of your backups. Value should be email address to send backups to. Defaults to %s."
261
+ msgstr "Попытаться отправить резервную копию на e-mail. Значением должен быть e-mail адрес. Значение по умолчанию %s."
262
+
263
+ #: admin.constants.php:35
264
+ msgid "Comma separated list of files or directories to exclude, the backups directory is automatically excluded."
265
+ msgstr "Список файлов и папок, которые нужно исключить из резервной копии, разделённый запятыми. Папка с предыдущими резервными копиями исключается автоматически. "
266
+
267
+ #: admin.constants.php:38
268
+ #, php-format
269
+ msgid "The capability to use when calling %1$s. Defaults to %2$s."
270
+ msgstr ""
271
+
272
+ #: admin.constants.php:41
273
+ #, fuzzy, php-format
274
+ msgid "The root directory that is backed up. Defaults to %s."
275
+ msgstr "Время запуска ежедневного резервного копирования. Значение по умолчанию %s."
276
+
277
+ #: admin.actions.php:70
278
+ msgid "You have entered an invalid number of backups."
279
+ msgstr ""
280
+
281
+ #: admin.actions.php:79
282
+ #, php-format
283
+ msgid "%s is an invalid email address."
284
+ msgstr ""
285
+
286
+ #: admin.actions.php:249
287
+ #: functions/interface.functions.php:89
288
+ #: functions/interface.functions.php:99
289
+ #: functions/interface.functions.php:110
290
+ #: functions/interface.functions.php:120
291
+ #: functions/interface.functions.php:130
292
+ #: functions/interface.functions.php:140
293
+ #: functions/interface.functions.php:150
294
+ msgid "BackUpWordPress has detected a problem."
295
+ msgstr "BackUpWordPress обнаружил проблему."
296
+
297
+ #: admin.actions.php:249
298
+ #, php-format
299
+ 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."
300
+ msgstr ""
301
+
302
+ #: admin.menus.php:10
303
+ #: admin.menus.php:34
304
+ msgid "Backups"
305
+ msgstr "Резервные копии"
306
+
307
+ #: admin.menus.php:65
308
+ msgid "You are not using the latest stable version of BackUpWordPress"
309
+ msgstr "Ваша версия BackUpWordPress устарела."
310
+
311
+ #: admin.menus.php:65
312
+ #, php-format
313
+ msgid "The information below is for version %1$s. View the <code>readme.txt</code> file for help specific to version %2$s."
314
+ msgstr ""
315
+
316
+ #: admin.menus.php:75
317
+ msgid "FAQ"
318
+ msgstr ""
319
+
320
+ #: admin.menus.php:79
321
+ msgid "For more information:"
322
+ msgstr ""
323
+
324
+ #: admin.menus.php:81
325
+ msgid "Support Forums"
326
+ msgstr ""
327
+
328
+ #: admin.menus.php:82
329
+ msgid "Help with translation"
330
+ msgstr ""
331
+
332
+ #: plugin.php:47
333
+ msgid "BackUpWordPress requires PHP version 5.2.4 or greater."
334
+ msgstr ""
335
+
336
+ #: plugin.php:58
337
+ #, php-format
338
+ msgid "BackUpWordPress requires WordPress version %s."
339
+ msgstr "Для работы BackUpWordPress требуется Wordpress версии %s."
340
+
341
+ #: admin.status.php:9
342
+ #, php-format
343
+ msgid "Automatic backups are %s."
344
+ msgstr "Автоматическое резервное копирование %s."
345
+
346
+ #: admin.status.php:9
347
+ msgid "disabled"
348
+ msgstr "отключено"
349
+
350
+ #: admin.status.php:14
351
+ msgid "&amp;"
352
+ msgstr "и"
353
+
354
+ #: admin.status.php:32
355
+ #, php-format
356
+ msgid "Your %1$s will be automatically backed up %2$s. The next backup will occur at %3$s on %4$s and be saved to %5$s."
357
+ msgid_plural "Your %1$s will be automatically backed up %2$s. The next backup will occur at %3$s on %4$s and be saved to %5$s."
358
+ msgstr[0] ""
359
+ msgstr[1] ""
360
+ msgstr[2] ""
361
+
362
+ #: admin.status.php:39
363
+ #, php-format
364
+ msgid "It's currently %s"
365
+ msgstr ""
366
+
367
+ #: admin.status.php:47
368
+ #, php-format
369
+ msgid "Your site is %s. Backups will be compressed and should be smaller than this."
370
+ msgstr "Ваш сайт занимает %s. Резервные копии будут сжаты и займут меньше места. "
371
+
372
+ #: admin.status.php:47
373
+ msgid "Calculating Size..."
374
+ msgstr "Вычисление размера…"
375
+
376
+ #: admin.status.php:50
377
+ #, php-format
378
+ msgid "A copy of each backup will be emailed to %s."
379
+ msgstr "Каждая резервная копия будет отправляться на адрес %s."
380
+
381
+ #: admin.status.php:54
382
+ #, php-format
383
+ msgid "The following paths will be excluded from your backups %s."
384
+ msgstr "Эти файлы и папки будут исключены из резервных копий: %s"
385
+
386
+ #: hm-backup/hm-backup.php:532
387
+ msgid "The backup file was not created"
388
+ msgstr ""
389
+
390
+ #: hm-backup/hm-backup.php:603
391
+ msgid "The following files are unreadable and couldn't be backed up: "
392
+ msgstr ""
393
+
394
+ #: functions/interface.functions.php:25
395
+ msgid "Download"
396
+ msgstr "Скачать"
397
+
398
+ #: functions/interface.functions.php:26
399
+ msgid "Delete"
400
+ msgstr "Удалить"
401
+
402
+ #: functions/interface.functions.php:48
403
+ msgid "Settings saved."
404
+ msgstr ""
405
+
406
+ #: functions/interface.functions.php:67
407
+ #: functions/interface.functions.php:79
408
+ msgid "BackUpWordPress is almost ready."
409
+ msgstr "BackUpWordPress почти готов."
410
+
411
+ #: functions/interface.functions.php:67
412
+ #, php-format
413
+ 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."
414
+ msgstr "Папка резервных копий не может быть создана, т.&nbsp;к. папка %1$sне доступна для записи. Выполните %2$s или %3$s, или создайте папку вручную."
415
+
416
+ #: functions/interface.functions.php:79
417
+ #, php-format
418
+ msgid "Your backups directory isn't writable, run %1$s or %2$s or set the permissions yourself."
419
+ msgstr "Папка для резервных копий недоступна для записи. Выполните %1$s или %2$s, или установите права вручную."
420
+
421
+ #: functions/interface.functions.php:89
422
+ #, php-format
423
+ msgid "%1$s is running in %2$s. Please contact your host and ask them to disable %3$s."
424
+ msgstr "%1$s выполняется в %2$s. Пожалуйста, свяжитесь с администрацией своего хостинга и попросите отключить %3$s."
425
+
426
+ #: functions/interface.functions.php:89
427
+ msgid "http://php.net/manual/en/features.safe-mode.php"
428
+ msgstr "http://php.net/manual/ru/features.safe-mode.php"
429
+
430
+ #: functions/interface.functions.php:89
431
+ msgid "Safe Mode"
432
+ msgstr "Безопасный режим"
433
+
434
+ #: functions/interface.functions.php:99
435
+ #, php-format
436
+ msgid "You have both %1$s and %2$s defined so there isn't anything to back up."
437
+ msgstr "Вы запретили резервные копии и %1$s, и %2$s, так что делать нечего."
438
+
439
+ #: functions/interface.functions.php:110
440
+ #, php-format
441
+ msgid "The following email address is not valid: %s."
442
+ msgid_plural "The following email addresses are not valid: %s."
443
+ msgstr[0] ""
444
+ msgstr[1] ""
445
+ msgstr[2] ""
446
+
447
+ #: functions/interface.functions.php:120
448
+ msgid "The last backup email failed to send. It's likely that the file is too large."
449
+ msgstr ""
450
+
451
+ #: functions/interface.functions.php:130
452
+ #, php-format
453
+ msgid "Your custom backups directory %1$s doesn't exist and can't be created, your backups will be saved to %2$s instead."
454
+ msgstr "Заданная вами папка для резервных копий %1$s не существует и не может быть создана, поэтому они будут сохранены в %2$s."
455
+
456
+ #: functions/interface.functions.php:140
457
+ #, php-format
458
+ msgid "Your custom backups directory %1$s isn't writable, new backups will be saved to %2$s instead."
459
+ msgstr "Заданная вами папка для резервных копий %1$s недоступна для записи, поэтому они будут сохранены в %2$s."
460
+
461
+ #: functions/interface.functions.php:150
462
+ #, php-format
463
+ msgid "You have defined a custom exclude list but the following paths don't exist %s, are you sure you entered them correctly?"
464
+ msgstr "Вы задали список папок и файлов для исключения из резервной копии, но путь %s не существует. Вы уверены, что задали его правильно?"
465
+
466
+ #: functions/interface.functions.php:160
467
+ msgid "BackUpWordPress detected issues with your last backup."
468
+ msgstr ""
469
+
470
+ #: functions/backup.actions.php:12
471
+ msgid "Dumping database"
472
+ msgstr "Копирование базы данных"
473
+
474
+ #: functions/backup.actions.php:22
475
+ msgid "Creating zip archive"
476
+ msgstr "Создание zip-архива"
477
+
478
+ #: functions/backup.functions.php:19
479
+ msgid "Removing old backups"
480
+ msgstr "Удаление старых копий"
481
+
482
+ #: functions/backup.functions.php:147
483
+ #: functions/backup.functions.php:157
484
+ #, php-format
485
+ msgid "Backup of %s"
486
+ msgstr "Копирование %s"
487
+
488
+ #: functions/backup.functions.php:148
489
+ #, php-format
490
+ msgid ""
491
+ "BackUpWordPress has completed a backup of your site %1$s.\\n"
492
+ "\\n"
493
+ "The backup file should be attached to this email.\\n"
494
+ "\\n"
495
+ "You can also download the backup file by clicking the link below:\\n"
496
+ "\\n"
497
+ "%2$s\\n"
498
+ "\\n"
499
+ "Kind Regards\\n"
500
+ "\\n"
501
+ " The Happy BackUpWordPress Backup Emailing Robot"
502
+ msgstr ""
503
+ "BackUpWordpress закончил резервировать ваш сайт %1$s.\n"
504
+ "\n"
505
+ "Файл с резервной копией должен быть прикреплён к этому письму.\n"
506
+ "\n"
507
+ "Так же вы можете скачать его по данной ссылке:\n"
508
+ "%2$s\n"
509
+ "\n"
510
+ "С наилучшими пожеланиями,\n"
511
+ "\n"
512
+ "Почовый робот BackUpWordPress."
513
+
514
+ #: functions/backup.functions.php:158
515
+ #, php-format
516
+ msgid ""
517
+ "BackUpWordPress has completed a backup of your site %1$s.\\n"
518
+ "\\n"
519
+ "Unfortunately the backup file was too large to attach to this email.\\n"
520
+ "\\n"
521
+ "You can download the backup file by clicking the link below:\\n"
522
+ "\\n"
523
+ "%2$s\\n"
524
+ "\\n"
525
+ "Kind Regards\\n"
526
+ "\\n"
527
+ " The Happy BackUpWordPress Backup Emailing Robot"
528
+ msgstr ""
529
+ "BackUpWordpress закончил резервировать ваш сайт %1$s.\n"
530
+ "\n"
531
+ "К сожалению, файл резервной копии оказался слишком велик для прикрепления его к этому письму..\n"
532
+ "\n"
533
+ " Скачать его можно по данной ссылке:\n"
534
+ "\n"
535
+ "%2$s\n"
536
+ "\n"
537
+ "С наилучшими пожеланиями,\n"
538
+ "\n"
539
+ "Почовый робот BackUpWordPress."
540
+
541
+ #: functions/core.functions.php:339
542
+ #, php-format
543
+ msgid "This %s file ensures that other people cannot download your backup files."
544
+ msgstr ""
545
+
backupwordpress/languages/hmbkp-sr_SR.mo ADDED
Binary file
backupwordpress/languages/hmbkp-sr_SR.po ADDED
@@ -0,0 +1,524 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Translation of 1.6.8 in Serbian
2
+ # This file is distributed under the same license as the 1.6.8 package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: 1.6.8\n"
6
+ "Report-Msgid-Bugs-To: \n"
7
+ "POT-Creation-Date: 2012-08-14 14:48+0100\n"
8
+ "PO-Revision-Date: 2012-08-14 14:58+0100\n"
9
+ "Last-Translator: Flo Edelmann <florian-edelmann@online.de>\n"
10
+ "Language-Team: \n"
11
+ "Language: \n"
12
+ "MIME-Version: 1.0\n"
13
+ "Content-Type: text/plain; charset=UTF-8\n"
14
+ "Content-Transfer-Encoding: 8bit\n"
15
+ "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
16
+ "X-Generator: GlotPress/0.1\n"
17
+ "X-Poedit-Language: Serbian\n"
18
+ "X-Poedit-Country: SERBIA\n"
19
+ "X-Poedit-SourceCharset: utf-8\n"
20
+ "X-Poedit-KeywordsList: __;_e;_n:1,2\n"
21
+ "X-Poedit-Basepath: ..\n"
22
+ "X-Poedit-SearchPath-0: .\n"
23
+
24
+ #: admin.settings.php:3
25
+ #: admin.page.php:11
26
+ msgid "Settings"
27
+ msgstr "Podešavanja"
28
+
29
+ #: admin.settings.php:5
30
+ #, php-format
31
+ msgid "You can define %1$s in your %2$s to control some settings. A full list of %3$s can be found in the %4$s. Defined settings will not be editable below."
32
+ msgstr ""
33
+
34
+ #: admin.settings.php:5
35
+ #: admin.constants.php:3
36
+ #: admin.menus.php:76
37
+ msgid "Constants"
38
+ msgstr "Konstante"
39
+
40
+ #: admin.settings.php:5
41
+ msgid "help panel"
42
+ msgstr "Površina za pomoć"
43
+
44
+ #: admin.settings.php:16
45
+ msgid "Automatic Backups"
46
+ msgstr "Automatsko pravljenje rezervnih kopija"
47
+
48
+ #: admin.settings.php:22
49
+ msgid "Backup my site automatically."
50
+ msgstr "Napravi rezervnu kopiju automatski."
51
+
52
+ #: admin.settings.php:27
53
+ msgid "No automatic backups."
54
+ msgstr "Nema automatskih rezervnih kopija."
55
+
56
+ #: admin.settings.php:36
57
+ msgid "Frequency of backups"
58
+ msgstr "Učestalost pravljenja rezervnih kopija"
59
+
60
+ #: admin.settings.php:40
61
+ msgid "Automatic backups will occur"
62
+ msgstr "Automatsko pravljenje rezervnih kopija će biti odrađeno"
63
+
64
+ #: admin.settings.php:43
65
+ msgid "Daily"
66
+ msgstr "Dnevno"
67
+
68
+ #: admin.settings.php:44
69
+ msgid "Weekly"
70
+ msgstr "Nedeljno"
71
+
72
+ #: admin.settings.php:45
73
+ msgid "Fortnightly"
74
+ msgstr "Jednom u dve nedelje"
75
+
76
+ #: admin.settings.php:46
77
+ msgid "Monthly"
78
+ msgstr "Mesečno"
79
+
80
+ #: admin.settings.php:55
81
+ msgid "What to Backup"
82
+ msgstr "Šta ulazi u rezervnu kopiju"
83
+
84
+ #: admin.settings.php:59
85
+ msgid "Backup my"
86
+ msgstr "Napravi rezervnu kopiju mojih"
87
+
88
+ #: admin.settings.php:62
89
+ msgid "database &amp; files"
90
+ msgstr "baza podataka &amp; datoteke"
91
+
92
+ #: admin.settings.php:63
93
+ msgid "database only"
94
+ msgstr "samo bazu podataka"
95
+
96
+ #: admin.settings.php:64
97
+ msgid "files only"
98
+ msgstr "samo datoteke"
99
+
100
+ #: admin.settings.php:72
101
+ msgid "Number of backups"
102
+ msgstr "Broj rezervnih kopija"
103
+
104
+ #: admin.settings.php:73
105
+ #, php-format
106
+ msgid "The last %s backups will be stored on the server."
107
+ msgstr "Zadnjih %s rezervnih kopija će biti čuvano na serveru."
108
+
109
+ #: admin.settings.php:77
110
+ msgid "Email backups"
111
+ msgstr "Posalji rezervne kopije na email"
112
+
113
+ #: admin.settings.php:78
114
+ msgid "A copy of the backup file will be emailed to this address. Disabled if left blank."
115
+ msgstr "Rezervna kopija će biti poslata na ovu email adresu. Onemogućeno ukoliko ostavite prazno."
116
+
117
+ #: admin.settings.php:82
118
+ msgid "Excludes"
119
+ msgstr "Izuzetci"
120
+
121
+ #: admin.settings.php:85
122
+ msgid "A comma separated list of file and directory paths that you do <strong>not</strong> want to backup."
123
+ msgstr ""
124
+
125
+ #: admin.settings.php:86
126
+ #: admin.constants.php:8
127
+ #: admin.constants.php:11
128
+ #: admin.constants.php:14
129
+ #: admin.constants.php:17
130
+ #: admin.constants.php:20
131
+ #: admin.constants.php:23
132
+ #: admin.constants.php:26
133
+ #: admin.constants.php:29
134
+ #: admin.constants.php:32
135
+ #: admin.constants.php:35
136
+ #: admin.constants.php:38
137
+ #: admin.constants.php:41
138
+ msgid "e.g."
139
+ msgstr "npr"
140
+
141
+ #: admin.settings.php:94
142
+ msgid "Save Changes"
143
+ msgstr "Sačuvajte promene"
144
+
145
+ #: admin.backups-table.php:12
146
+ #, php-format
147
+ msgid "1 backup completed"
148
+ msgid_plural "%d backups completed"
149
+ msgstr[0] ""
150
+ msgstr[1] ""
151
+ msgstr[2] ""
152
+
153
+ #: admin.backups-table.php:13
154
+ msgid "Size"
155
+ msgstr "Veličina"
156
+
157
+ #: admin.backups-table.php:14
158
+ msgid "Actions"
159
+ msgstr "Akcije"
160
+
161
+ #: admin.backups-table.php:20
162
+ #, php-format
163
+ msgid "Only the most recent backup will be saved"
164
+ msgid_plural "The %d most recent backups will be saved"
165
+ msgstr[0] ""
166
+ msgstr[1] ""
167
+ msgstr[2] ""
168
+
169
+ #: admin.backups-table.php:21
170
+ #, php-format
171
+ msgid "Total %s"
172
+ msgstr "Ukupno %s"
173
+
174
+ #: admin.page.php:7
175
+ #: admin.menus.php:10
176
+ msgid "Manage Backups"
177
+ msgstr "Rad sa rezervnim kopijama."
178
+
179
+ #: admin.page.php:23
180
+ msgid "You need to fix the issues detailed above before BackUpWordPress can start."
181
+ msgstr "Morate srediti greške prikazane iznad pre nego što pokrenete BackUpWordPress."
182
+
183
+ #: admin.page.php:29
184
+ #, php-format
185
+ msgid "If you need help getting things working you are more than welcome to email us at %s and we'll do what we can to help."
186
+ msgstr "Ukoliko vam je potrebna pomoć pri podešavanju više ste nego dobrodošli da pošaljete email na %s a mi ćemo se potruditi da vam pomognemo."
187
+
188
+ #: admin.backup-button.php:3
189
+ msgid "cancel"
190
+ msgstr "otkaži"
191
+
192
+ #: admin.backup-button.php:7
193
+ msgid "Back Up Now"
194
+ msgstr "Napravite rezervnu kopiju"
195
+
196
+ #: admin.constants.php:3
197
+ #, php-format
198
+ 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."
199
+ msgstr "Možete %1$s bilo koju od sledećih %2$s u vašem %3$s da bi kontrolisali napredna podešavanja. %4$s. Definisani %5$s će biti istaknuti."
200
+
201
+ #: admin.constants.php:3
202
+ msgid "The Codex can help"
203
+ msgstr "Kodeks može pomoći"
204
+
205
+ #: admin.constants.php:8
206
+ #, php-format
207
+ msgid "The path to folder you would like to store your backup files in, defaults to %s."
208
+ msgstr "Putanja do direktorijuma u kome bi želeli da čuvate vaše rezervne datoteke, podrazumevano %s."
209
+
210
+ #: admin.constants.php:11
211
+ #, php-format
212
+ msgid "The path to your %1$s executable. Will be used for the %2$s part of the back up if available."
213
+ msgstr "Putanja do vaše %1$s izvršne. Biće korišćena za %2$s deo rezervne kopije ukoliko je moguće."
214
+
215
+ #: admin.constants.php:11
216
+ #: admin.constants.php:14
217
+ #: admin.constants.php:23
218
+ #: admin.constants.php:26
219
+ #: admin.status.php:14
220
+ #: admin.status.php:18
221
+ msgid "database"
222
+ msgstr "baza podataka"
223
+
224
+ #: admin.constants.php:14
225
+ #, fuzzy, php-format
226
+ msgid "The path to your %1$s executable. Will be used to zip up your %2$s and %3$s if available."
227
+ msgstr "Putanja do vaše %1$s izvršne. Biće korišćena za %2$s deo rezervne kopije ukoliko je moguće."
228
+
229
+ #: admin.constants.php:14
230
+ #: admin.constants.php:23
231
+ #: admin.constants.php:26
232
+ #: admin.status.php:14
233
+ #: admin.status.php:22
234
+ msgid "files"
235
+ msgstr "datoteke"
236
+
237
+ #: admin.constants.php:17
238
+ #, php-format
239
+ msgid "Completely disables the automatic back up. You can still back up using the \"Back Up Now\" button. Defaults to %s."
240
+ msgstr "Kompletno onemogućava automatsko kreiranje rezervnih kopija. Još uvek možete napraviti rezervnu kopiju korišćenjem dugmeta \"Napravi rezervnu kopiju\". Podrazumeva se %s."
241
+
242
+ #: admin.constants.php:20
243
+ #, php-format
244
+ msgid "Number of backups to keep, older backups will be deleted automatically when a new backup is completed. Defaults to %s."
245
+ msgstr ""
246
+
247
+ #: admin.constants.php:23
248
+ #: admin.constants.php:26
249
+ #, php-format
250
+ msgid "Backup %1$s only, your %2$s won't be backed up. Defaults to %3$s."
251
+ msgstr ""
252
+
253
+ #: admin.constants.php:29
254
+ #, php-format
255
+ msgid "The time that the daily back up should run. Defaults to %s."
256
+ msgstr ""
257
+
258
+ #: admin.constants.php:32
259
+ #, php-format
260
+ msgid "Attempt to email a copy of your backups. Value should be email address to send backups to. Defaults to %s."
261
+ msgstr ""
262
+
263
+ #: admin.constants.php:35
264
+ msgid "Comma separated list of files or directories to exclude, the backups directory is automatically excluded."
265
+ msgstr ""
266
+
267
+ #: admin.constants.php:38
268
+ #, php-format
269
+ msgid "The capability to use when calling %1$s. Defaults to %2$s."
270
+ msgstr ""
271
+
272
+ #: admin.constants.php:41
273
+ #, php-format
274
+ msgid "The root directory that is backed up. Defaults to %s."
275
+ msgstr ""
276
+
277
+ #: admin.actions.php:70
278
+ msgid "You have entered an invalid number of backups."
279
+ msgstr "Uneli ste nepravilan broj rezervnih kopija."
280
+
281
+ #: admin.actions.php:79
282
+ #, php-format
283
+ msgid "%s is an invalid email address."
284
+ msgstr "%s je nepravilna email adresa."
285
+
286
+ #: admin.actions.php:249
287
+ #: functions/interface.functions.php:89
288
+ #: functions/interface.functions.php:99
289
+ #: functions/interface.functions.php:110
290
+ #: functions/interface.functions.php:120
291
+ #: functions/interface.functions.php:130
292
+ #: functions/interface.functions.php:140
293
+ #: functions/interface.functions.php:150
294
+ msgid "BackUpWordPress has detected a problem."
295
+ msgstr "BackUpWordPress je detektovao problem."
296
+
297
+ #: admin.actions.php:249
298
+ #, php-format
299
+ 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."
300
+ msgstr "%1$s vraća %2$s odgovor koji može ukazivati na to da se zakazane operacije (cron jobs) ne izvršavaju pravilno. BackUpWordPress svoje zakazano pravljenje rezervnih kopija zasniva na zakazanim operacijama. Pogledajte %3$s za više detalja."
301
+
302
+ #: admin.menus.php:10
303
+ #: admin.menus.php:34
304
+ msgid "Backups"
305
+ msgstr "Rezervne kopije"
306
+
307
+ #: admin.menus.php:65
308
+ msgid "You are not using the latest stable version of BackUpWordPress"
309
+ msgstr "Ne koristite zadnju stabilnu verziju BackUpWordPress-a"
310
+
311
+ #: admin.menus.php:65
312
+ #, php-format
313
+ msgid "The information below is for version %1$s. View the <code>readme.txt</code> file for help specific to version %2$s."
314
+ msgstr ""
315
+
316
+ #: admin.menus.php:75
317
+ msgid "FAQ"
318
+ msgstr "Česta pitanja"
319
+
320
+ #: admin.menus.php:79
321
+ msgid "For more information:"
322
+ msgstr "Za više informacija:"
323
+
324
+ #: admin.menus.php:81
325
+ msgid "Support Forums"
326
+ msgstr "Forum za podršku"
327
+
328
+ #: admin.menus.php:82
329
+ msgid "Help with translation"
330
+ msgstr "Pomozite sa prevođenjem"
331
+
332
+ #: plugin.php:47
333
+ msgid "BackUpWordPress requires PHP version 5.2.4 or greater."
334
+ msgstr ""
335
+
336
+ #: plugin.php:58
337
+ #, php-format
338
+ msgid "BackUpWordPress requires WordPress version %s."
339
+ msgstr ""
340
+
341
+ #: admin.status.php:9
342
+ #, php-format
343
+ msgid "Automatic backups are %s."
344
+ msgstr "Automatske rezervne kopije su %s."
345
+
346
+ #: admin.status.php:9
347
+ msgid "disabled"
348
+ msgstr "onemogućeno"
349
+
350
+ #: admin.status.php:14
351
+ msgid "&amp;"
352
+ msgstr ""
353
+
354
+ #: admin.status.php:32
355
+ #, php-format
356
+ msgid "Your %1$s will be automatically backed up %2$s. The next backup will occur at %3$s on %4$s and be saved to %5$s."
357
+ msgid_plural "Your %1$s will be automatically backed up %2$s. The next backup will occur at %3$s on %4$s and be saved to %5$s."
358
+ msgstr[0] ""
359
+ msgstr[1] ""
360
+ msgstr[2] ""
361
+
362
+ #: admin.status.php:39
363
+ #, php-format
364
+ msgid "It's currently %s"
365
+ msgstr "Trenutno je %s"
366
+
367
+ #: admin.status.php:47
368
+ #, php-format
369
+ msgid "Your site is %s. Backups will be compressed and should be smaller than this."
370
+ msgstr "Vaš sajt je %s. Rezervna kopija će biti kompresovana i trebala bi biti manja od ovoga."
371
+
372
+ #: admin.status.php:47
373
+ msgid "Calculating Size..."
374
+ msgstr "Računanje veličine..."
375
+
376
+ #: admin.status.php:50
377
+ #, php-format
378
+ msgid "A copy of each backup will be emailed to %s."
379
+ msgstr "Kopija svake rezervne kopije će biti poslata emailom na %s."
380
+
381
+ #: admin.status.php:54
382
+ #, php-format
383
+ msgid "The following paths will be excluded from your backups %s."
384
+ msgstr "Sledeće putanje će biti izuzete iz vaših rezervnih kopija %s."
385
+
386
+ #: hm-backup/hm-backup.php:532
387
+ msgid "The backup file was not created"
388
+ msgstr ""
389
+
390
+ #: hm-backup/hm-backup.php:603
391
+ msgid "The following files are unreadable and couldn't be backed up: "
392
+ msgstr ""
393
+
394
+ #: functions/interface.functions.php:25
395
+ msgid "Download"
396
+ msgstr ""
397
+
398
+ #: functions/interface.functions.php:26
399
+ msgid "Delete"
400
+ msgstr "Obriši"
401
+
402
+ #: functions/interface.functions.php:48
403
+ msgid "Settings saved."
404
+ msgstr "Podešavanja sačuvana."
405
+
406
+ #: functions/interface.functions.php:67
407
+ #: functions/interface.functions.php:79
408
+ msgid "BackUpWordPress is almost ready."
409
+ msgstr "BackUpWordPress je skoro spreman."
410
+
411
+ #: functions/interface.functions.php:67
412
+ #, php-format
413
+ 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."
414
+ msgstr ""
415
+
416
+ #: functions/interface.functions.php:79
417
+ #, php-format
418
+ msgid "Your backups directory isn't writable, run %1$s or %2$s or set the permissions yourself."
419
+ msgstr ""
420
+
421
+ #: functions/interface.functions.php:89
422
+ #, php-format
423
+ msgid "%1$s is running in %2$s. Please contact your host and ask them to disable %3$s."
424
+ msgstr ""
425
+
426
+ #: functions/interface.functions.php:89
427
+ msgid "http://php.net/manual/en/features.safe-mode.php"
428
+ msgstr "http://php.net/manual/sr/features.safe-mode.php"
429
+
430
+ #: functions/interface.functions.php:89
431
+ msgid "Safe Mode"
432
+ msgstr "Садржај"
433
+
434
+ #: functions/interface.functions.php:99
435
+ #, php-format
436
+ msgid "You have both %1$s and %2$s defined so there isn't anything to back up."
437
+ msgstr ""
438
+
439
+ #: functions/interface.functions.php:110
440
+ #, php-format
441
+ msgid "The following email address is not valid: %s."
442
+ msgid_plural "The following email addresses are not valid: %s."
443
+ msgstr[0] ""
444
+ msgstr[1] ""
445
+ msgstr[2] ""
446
+
447
+ #: functions/interface.functions.php:120
448
+ msgid "The last backup email failed to send. It's likely that the file is too large."
449
+ msgstr ""
450
+
451
+ #: functions/interface.functions.php:130
452
+ #, php-format
453
+ msgid "Your custom backups directory %1$s doesn't exist and can't be created, your backups will be saved to %2$s instead."
454
+ msgstr ""
455
+
456
+ #: functions/interface.functions.php:140
457
+ #, php-format
458
+ msgid "Your custom backups directory %1$s isn't writable, new backups will be saved to %2$s instead."
459
+ msgstr ""
460
+
461
+ #: functions/interface.functions.php:150
462
+ #, php-format
463
+ msgid "You have defined a custom exclude list but the following paths don't exist %s, are you sure you entered them correctly?"
464
+ msgstr ""
465
+
466
+ #: functions/interface.functions.php:160
467
+ msgid "BackUpWordPress detected issues with your last backup."
468
+ msgstr ""
469
+
470
+ #: functions/backup.actions.php:12
471
+ msgid "Dumping database"
472
+ msgstr ""
473
+
474
+ #: functions/backup.actions.php:22
475
+ msgid "Creating zip archive"
476
+ msgstr "Kreiranje zip arhive"
477
+
478
+ #: functions/backup.functions.php:19
479
+ msgid "Removing old backups"
480
+ msgstr "Uklanjanje starih rezervnih kopija"
481
+
482
+ #: functions/backup.functions.php:147
483
+ #: functions/backup.functions.php:157
484
+ #, php-format
485
+ msgid "Backup of %s"
486
+ msgstr "Rezervna kopija od %s"
487
+
488
+ #: functions/backup.functions.php:148
489
+ #, php-format
490
+ msgid ""
491
+ "BackUpWordPress has completed a backup of your site %1$s.\\n"
492
+ "\\n"
493
+ "The backup file should be attached to this email.\\n"
494
+ "\\n"
495
+ "You can also download the backup file by clicking the link below:\\n"
496
+ "\\n"
497
+ "%2$s\\n"
498
+ "\\n"
499
+ "Kind Regards\\n"
500
+ "\\n"
501
+ " The Happy BackUpWordPress Backup Emailing Robot"
502
+ msgstr ""
503
+
504
+ #: functions/backup.functions.php:158
505
+ #, php-format
506
+ msgid ""
507
+ "BackUpWordPress has completed a backup of your site %1$s.\\n"
508
+ "\\n"
509
+ "Unfortunately the backup file was too large to attach to this email.\\n"
510
+ "\\n"
511
+ "You can download the backup file by clicking the link below:\\n"
512
+ "\\n"
513
+ "%2$s\\n"
514
+ "\\n"
515
+ "Kind Regards\\n"
516
+ "\\n"
517
+ " The Happy BackUpWordPress Backup Emailing Robot"
518
+ msgstr ""
519
+
520
+ #: functions/core.functions.php:339
521
+ #, php-format
522
+ msgid "This %s file ensures that other people cannot download your backup files."
523
+ msgstr "Ova %s datoteka osigurava da drugi ljudi ne mogu skinuti vaše rezervne kopije."
524
+
backupwordpress/plugin.php ADDED
@@ -0,0 +1,168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ Plugin Name: BackUpWordPress
5
+ Plugin URI: http://hmn.md/backupwordpress/
6
+ Description: Simple automated backups of your WordPress powered website. Once activated you'll find me under <strong>Tools &rarr; Backups</strong>.
7
+ Author: Human Made Limited
8
+ Version: 2.0.4
9
+ Author URI: http://hmn.md/
10
+ */
11
+
12
+ /* Copyright 2011 Human Made Limited (email : support@hmn.md)
13
+
14
+ This program is free software; you can redistribute it and/or modify
15
+ it under the terms of the GNU General Public License as published by
16
+ the Free Software Foundation; either version 2 of the License, or
17
+ (at your option) any later version.
18
+
19
+ This program is distributed in the hope that it will be useful,
20
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
21
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22
+ GNU General Public License for more details.
23
+
24
+ You should have received a copy of the GNU General Public License
25
+ along with this program; if not, write to the Free Software
26
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27
+ */
28
+
29
+ if ( ! defined( 'HMBKP_PLUGIN_SLUG' ) )
30
+ define( 'HMBKP_PLUGIN_SLUG', 'backupwordpress' );
31
+
32
+ if ( ! defined( 'HMBKP_PLUGIN_PATH' ) )
33
+ define( 'HMBKP_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
34
+
35
+ if ( ! defined( 'HMBKP_PLUGIN_URL' ) )
36
+ define( 'HMBKP_PLUGIN_URL', plugins_url( HMBKP_PLUGIN_SLUG ) );
37
+
38
+ if ( ! defined( 'HMBKP_ADMIN_URL' ) )
39
+ define( 'HMBKP_ADMIN_URL', add_query_arg( 'page', HMBKP_PLUGIN_SLUG, admin_url( 'tools.php' ) ) );
40
+
41
+ if ( ! defined( 'HMBKP_REQUIRED_WP_VERSION' ) )
42
+ define( 'HMBKP_REQUIRED_WP_VERSION', '3.3.3' );
43
+
44
+ // Max memory limit isn't defined in old versions of WordPress
45
+ if ( ! defined( 'WP_MAX_MEMORY_LIMIT' ) )
46
+ define( 'WP_MAX_MEMORY_LIMIT', '256M' );
47
+
48
+ // Don't activate on anything less than PHP 5.2.4
49
+ if ( version_compare( phpversion(), '5.2.4', '<' ) ) {
50
+
51
+ require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
52
+ deactivate_plugins( __FILE__ );
53
+
54
+ if ( isset( $_GET['action'] ) && ( $_GET['action'] == 'activate' || $_GET['action'] == 'error_scrape' ) )
55
+ die( __( 'BackUpWordPress requires PHP version 5.2.4 or greater.', 'hmbkp' ) );
56
+
57
+ }
58
+
59
+ // Don't activate on old versions of WordPress
60
+ if ( version_compare( get_bloginfo( 'version' ), HMBKP_REQUIRED_WP_VERSION, '<' ) ) {
61
+
62
+ require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
63
+ deactivate_plugins( __FILE__ );
64
+
65
+ if ( isset( $_GET['action'] ) && ( $_GET['action'] == 'activate' || $_GET['action'] == 'error_scrape' ) )
66
+ die( sprintf( __( 'BackUpWordPress requires WordPress version %s or greater.', 'hmbkp' ), HMBKP_REQUIRED_WP_VERSION ) );
67
+
68
+ }
69
+
70
+ // Load the admin menu
71
+ require_once( HMBKP_PLUGIN_PATH . '/admin/menu.php' );
72
+ require_once( HMBKP_PLUGIN_PATH . '/admin/actions.php' );
73
+
74
+ // Load hm-backup
75
+ if ( ! class_exists( 'HM_Backup' ) )
76
+ require_once( HMBKP_PLUGIN_PATH . '/hm-backup/hm-backup.php' );
77
+
78
+ // Load the schedules
79
+ require_once( HMBKP_PLUGIN_PATH . '/classes/schedule.php' );
80
+ require_once( HMBKP_PLUGIN_PATH . '/classes/schedules.php' );
81
+
82
+ // Load the core functions
83
+ require_once( HMBKP_PLUGIN_PATH . '/functions/core.php' );
84
+ require_once( HMBKP_PLUGIN_PATH . '/functions/interface.php' );
85
+
86
+ // Load Services
87
+ require_once( HMBKP_PLUGIN_PATH . '/classes/services.php' );
88
+
89
+ // Load the email service
90
+ require_once( HMBKP_PLUGIN_PATH . '/classes/email.php' );
91
+
92
+ // Load the wp cli command
93
+ if ( defined( 'WP_CLI' ) && WP_CLI )
94
+ include( HMBKP_PLUGIN_PATH . '/classes/wp-cli.php' );
95
+
96
+ // Set the tmp directory to the backup path
97
+ if ( ! defined( 'PCLZIP_TEMPORARY_DIR' ) )
98
+ define( 'PCLZIP_TEMPORARY_DIR', trailingslashit( hmbkp_path() ) );
99
+
100
+ // Hook in the activation and deactivation actions
101
+ add_action( 'activate_' . HMBKP_PLUGIN_SLUG . '/plugin.php', 'hmbkp_activate' );
102
+ add_action( 'deactivate_' . HMBKP_PLUGIN_SLUG . '/plugin.php', 'hmbkp_deactivate' );
103
+
104
+ if ( ! function_exists( 'hmbkp_init' ) ) :
105
+
106
+ /**
107
+ * Plugin setup
108
+ *
109
+ * @return null
110
+ */
111
+ function hmbkp_init() {
112
+
113
+ $plugin_data = get_plugin_data( __FILE__ );
114
+
115
+ // define the plugin version
116
+ define( 'HMBKP_VERSION', $plugin_data['Version'] );
117
+
118
+ // Load translations
119
+ load_plugin_textdomain( 'hmbkp', false, HMBKP_PLUGIN_SLUG . '/languages/' );
120
+
121
+ // Fire the update action
122
+ if ( HMBKP_VERSION != get_option( 'hmbkp_plugin_version' ) )
123
+ hmbkp_update();
124
+
125
+ // Load admin css and js
126
+ if ( isset( $_GET['page'] ) && $_GET['page'] == HMBKP_PLUGIN_SLUG ) {
127
+
128
+ wp_enqueue_script( 'hmbkp_fancybox', HMBKP_PLUGIN_URL . '/assets/fancyBox/source/jquery.fancybox.js', array( 'jquery' ), HMBKP_VERSION );
129
+ wp_enqueue_script( 'hmbkp', HMBKP_PLUGIN_URL . '/assets/hmbkp.js', array( 'jquery-ui-tabs', 'jquery-ui-widget', 'hmbkp_fancybox' ), HMBKP_VERSION );
130
+
131
+ wp_localize_script( 'hmbkp', 'objectL10n', array(
132
+ 'update' => __( 'Update', 'hmbkp' ),
133
+ 'cancel' => __( 'Cancel', 'hmbkp' ),
134
+ '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",
135
+ 'delete_backup' => __( 'Are you sure you want to delete this backup?', 'hmbkp' ) . "\n\n" . __( '\'Cancel\' to go back, \'OK\' to delete.', 'hmbkp' ) . "\n",
136
+ '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",
137
+ '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"
138
+ ) );
139
+
140
+ wp_enqueue_style( 'hmbkp_fancybox', HMBKP_PLUGIN_URL . '/assets/fancyBox/source/jquery.fancybox.css', false, HMBKP_VERSION );
141
+ wp_enqueue_style( 'hmbkp', HMBKP_PLUGIN_URL . '/assets/hmbkp.css', false, HMBKP_VERSION );
142
+
143
+ }
144
+
145
+ // Handle any advanced option changes
146
+ hmbkp_constant_changes();
147
+
148
+ }
149
+ add_action( 'admin_init', 'hmbkp_init' );
150
+
151
+ /**
152
+ * Function to run when the schedule cron fires
153
+ * @param array $args
154
+ */
155
+ function hmbkp_schedule_hook_run( $schedule_id ) {
156
+
157
+ $schedules = new HMBKP_Schedules();
158
+ $schedule = $schedules->get_schedule( $schedule_id );
159
+
160
+ if ( ! $schedule )
161
+ return;
162
+
163
+ $schedule->run();
164
+
165
+ }
166
+ add_action( 'hmbkp_schedule_hook', 'hmbkp_schedule_hook_run' );
167
+
168
+ endif;
backupwordpress/readme.txt ADDED
@@ -0,0 +1,391 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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.0.4
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/
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.0.4
107
+
108
+ * Revert the change to the way the plugin url and path were calculated as it caused regressions on some systems.
109
+
110
+ #### 2.0.3
111
+
112
+ * Fix issues with scheduled backups not firing in some cases.
113
+ * Better compatibility when the WP Remote plugin is active alongside BackUpWordPress.
114
+ * Catch and display more WP Cron errors.
115
+ * BackUpWordPress now fails to activate on WordPress 3.3.2 and below.
116
+ * Other minor fixes and improvements.
117
+
118
+ #### 2.0.2
119
+
120
+ * Only send backup failed emails if the backup actually failed.
121
+ * Turn off the generic "memory limit probably hit" message as it was showing for too many people.
122
+ * Fix a possible notice when the backup running filename is blank.
123
+ * Include the `wp_error` response in the cron check.
124
+
125
+ #### 2.0.1
126
+
127
+ * Fix fatal error on PHP 5.2.
128
+
129
+ #### 2.0
130
+
131
+ * Ability to have multiple schedules with separate settings & excludes per schedule.
132
+ * Ability to manage exclude rules and see exactly which files are included and excluded.
133
+ * Fix an issue with sites with an `open_basedir` restriction.
134
+ * Backups should now be much more reliable in low memory environments.
135
+ * Lots of other minor improvements and bug fixes.
136
+
137
+ #### 1.6.9
138
+
139
+ * Updated and improved translations across the board - props @elektronikLexikon.
140
+ * German translation - props @elektronikLexikon.
141
+ * New Basque translation - props Unai ZC.
142
+ * New Dutch translation - Anno De Vries.
143
+ * New Italian translation.
144
+ * Better support for when WordPress is installed in a sub directory - props @mattheu
145
+
146
+
147
+ #### 1.6.8
148
+
149
+ * French translation props Christophe - http://catarina.fr.
150
+ * Updated Spanish Translation props DD666 - https://github.com/radinamatic.
151
+ * Serbian translation props StefanRistic - https://github.com/StefanRistic.
152
+ * Lithuanian translation props Vincent G - http://www.Host1Free.com.
153
+ * Romanian translation.
154
+ * Fix conflict with WP Remote.
155
+ * Fix a minor issue where invalid email address's were still stored.
156
+ * The root path that is backed up can now be controlled by defining `HMBKP_ROOT`.
157
+
158
+ #### 1.6.7
159
+
160
+ * Fix issue with backups being listed in reverse chronological order.
161
+ * Fix issue with newest backup being deleted when you hit your max backups limit.
162
+ * It's now possible to have backups sent to multiple email address's by entering them as a comma separated list.
163
+ * Fix a bug which broke the ability to override the `mysqldump` path with `HMBKP_MYSQLDUMP_PATH`.
164
+ * Use `echo` rather than `pwd` when testing `shell_exec` as it's supported cross platform.
165
+ * Updated Spanish translation.
166
+ * Fix a minor spelling mistake.
167
+ * Speed up the manage backups page by caching the FAQ data for 24 hours.
168
+
169
+ #### 1.6.6
170
+
171
+ * Fix backup path issue with case sensitive filesystems.
172
+
173
+ #### 1.6.5
174
+
175
+ * Fix an issue with emailing backups that could cause the backup file to not be attached.
176
+ * Fix an issue that could cause the backup to be marked as running for ever if emailing the backup `FATAL` error'd.
177
+ * Never show the running backup in the list of backups.
178
+ * Show an error backup email failed to send.
179
+ * Fix possible notice when deleting a backup file which doesn't exist.
180
+ * Fix possible notice on older versions of `PHP` which don't define `E_DEPRECATED`.
181
+ * Make `HMBKP_SECURE_KEY` override-able.
182
+ * BackUpWordPress should now work when `ABSPATH` is `/`.
183
+
184
+ #### 1.6.4
185
+
186
+ * Don't show warning message as they cause to much panic.
187
+ * Move previous methods errors to warnings in fallback methods.
188
+ * Wrap `.htaccess` rewrite rules in if `mod_rewrite` check.
189
+ * Add link to new restore help article to FAQ.
190
+ * Fix issue that could cause "not using latest stable version" message to show when you were in-fact using the latest version.
191
+ * Bug fix in `zip command` check that could cause an incorrect `zip` path to be used.
192
+ * Detect and pass `MySQL` port to `mysqldump`.
193
+
194
+ #### 1.6.3
195
+
196
+ * Don't fail archive verification for errors in previous archive methods.
197
+ * Improved detection of the `zip` and `mysqldump` commands.
198
+ * Fix issues when `ABSPATH` is `/`.
199
+ * Remove reliance on `SECURE_AUTH_KEY` as it's often not defined.
200
+ * Use `warning()` not `error()` for issues reported by `zip`, `ZipArchive` & `PclZip`.
201
+ * Fix download zip on Windows when `ABSPATH` contains a trailing forward slash.
202
+ * Send backup email after backup completes so that fatal errors in email code don't stop the backup from completing.
203
+ * Add missing / to `PCLZIP_TEMPORARY_DIR` define.
204
+ * Catch and display errors during `mysqldump`.
205
+
206
+ #### 1.6.2
207
+
208
+ * Track `PHP` errors as backup warnings not errors.
209
+ * Only show warning message for `PHP` errors in BackUpWordPress files.
210
+ * Ability to dismiss the error / warning messages.
211
+ * Disable use of `PclZip` for full archive checking for now as it causes memory issues on some large sites.
212
+ * Don't delete "number of backups" setting on update.
213
+ * Better handling of multibyte characters in archive and database dump filenames.
214
+ * Mark backup as running and increase callback timeout to `500` when firing backup via ajax.
215
+ * Don't send backup email if backup failed.
216
+ * Filter out duplicate exclude rules.
217
+
218
+ #### 1.6.1
219
+
220
+ * Fix fatal error on PHP =< 5.3
221
+
222
+ #### 1.6
223
+
224
+ * Fixes issue with backups dir being included in backups on some Windows Servers.
225
+ * Consistent handling of symlinks across all archive methods (they are followed).
226
+ * Use .htaccess rewrite cond authentication to allow for secure http downloads of backup files.
227
+ * Track errors and warnings that happen during backup and expose them through admin.
228
+ * Fire manual backups using ajax instead of wp-cron, `HMBKP_DISABLE_MANUAL_BACKUP_CRON` is no longer needed and has been removed.
229
+ * Ability to cancel a running backup.
230
+ * Zip files are now integrity checked after every backup.
231
+ * More robust handling of failed / corrupt zips, backup process now fallsback through the various zip methods until one works.
232
+ * Use `mysql_query` instead of the depreciated `mysql_list_tables`.
233
+
234
+ #### 1.5.2
235
+
236
+ * Better handling of unreadable files in ZipArchive and the backup size calculation.
237
+ * Support for wp-cli, usage: `wp backup [--files_only] [--database_only] [--path<dir>] [--root<dir>] [--zip_command_path=<path>] [--mysqldump_command_path=<path>]`
238
+
239
+ #### 1.5.1
240
+
241
+ * Better detection of `zip` command.
242
+ * Don't delete user settings on update / deactivate.
243
+ * Use `ZipArchive` if `zip` is not available, still falls back to `PclZip` if neither `zip` nor `ZipArchive` are installed.
244
+ * Better exclude rule parsing, fixes lots of edge cases, excludes now pass all 52 unit tests.
245
+ * Improved the speed of the backup size calculation.
246
+
247
+ #### 1.5
248
+
249
+ * Re-written core backup engine should be more robust especially in edge case scenarios.
250
+ * 48 unit tests for the core backup engine, yay for unit tests.
251
+ * Remove some extraneous status information from the admin interface.
252
+ * Rename Advanced Options to Settings
253
+ * New `Constant` `HMBKP_CAPABILITY` to allow the default `add_menu_page` capability to be changed.
254
+ * Suppress possible filemtime warnings in some edge cases.
255
+ * 3.3 compatability.
256
+ * Set proper charset of MySQL backup, props valericus.
257
+ * Fix some inconsistencies between the estimated backup size and actual backup size when excluding files.
258
+
259
+ #### 1.4.1
260
+
261
+ * 1.4 was incorrectly marked as beta.
262
+
263
+ #### 1.4
264
+
265
+ * Most options can now be set on the backups page, all options can still be set by defining them as `Constants`.
266
+ * Russian translation, props valericus.
267
+ * All dates are now translatable.
268
+ * Fixed some strings which weren't translatable.
269
+ * New Constant `HMBKP_DISABLE_MANUAL_BACKUP_CRON` which enable you to disable the use of `wp_cron` for manual backups.
270
+ * Manual backups now work if `DISABLE_WP_CRON` is defined as `true`.
271
+
272
+ #### 1.3.2
273
+
274
+ * Spanish translation
275
+ * Bump PHP version check to 5.2.4
276
+ * Fallback to PHP mysqldump if shell_exec fails for any reason.
277
+ * Silently ignore unreadable files / folders
278
+ * Make sure binary data is properly exported when doing a mysqldump
279
+ * Use 303 instead of 302 when redirecting in the admin.
280
+ * Don't `set_time_limit` inside a loop
281
+ * Use WordPress 3.2 style buttons
282
+ * Don't pass an empty password to mysqldump
283
+
284
+ #### 1.3.1
285
+
286
+ * Check for PHP version. Deactivate plugin if running on PHP version 4.
287
+
288
+ #### 1.3
289
+
290
+ * Re-written back up engine, no longer copies everything to a tmp folder before zipping which should improve speed and reliability.
291
+ * 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.
292
+ * Full support for moving the backups directory, if you define a new backups directory then your existing backups will be moved to it.
293
+ * Work around issues caused by low MySQL `wait_timeout` setting.
294
+ * Add FAQ to readme.txt.
295
+ * Pull FAQ into the contextual help tab on the backups page.
296
+ * Block activation on old versions of WordPress.
297
+ * Stop guessing compressed backup file size, instead just show size of site uncompressed.
298
+ * Fix bug in `safe_mode` detection which could cause `Off` to act like `On`.
299
+ * Better name for the database dump file.
300
+ * Better name for the backup files.
301
+ * Improve styling for advanced options.
302
+ * Show examples for all advanced options.
303
+ * Language improvements.
304
+ * Layout tweaks.
305
+
306
+ #### 1.2
307
+
308
+ * Show live backup status in the back up now button when a back up is running.
309
+ * Show free disk space after total used by backups.
310
+ * Several langauge changes.
311
+ * Work around the 1 cron every 60 seconds limit.
312
+ * Store backup status in a 2 hour transient as a last ditch attempt to work around the "stuck on backup running" issue.
313
+ * Show a warning and disable backups when PHP is in Safe Mode, may try to work round issues and re-enable in the future.
314
+ * Highlight defined `Constants`.
315
+ * Show defaults for all `Constants`.
316
+ * Show a warning if both `HMBKP_FILES_ONLY` and `HMBKP_DATABASE_ONLY` are defined at the same time.
317
+ * Make sure options added in 1.1.4 are cleared on de-activate.
318
+ * Support `mysqldump on` Windows if it's available.
319
+ * New option to have each backup emailed to you on completion. Props @matheu for the contribution.
320
+ * Improved windows server support.
321
+
322
+ #### 1.1.4
323
+
324
+ * 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.
325
+ * Don't suppress `mysql_connect` errors in the mysqldump PHP fallback.
326
+ * One time highlight of the most recent completed backup when viewing the manage backups page after a successful backup.
327
+ * Fix a spelling error in the `shell_exec` disabled message.
328
+ * Store the BackUpWordPress version as a `Constant` rather than a `Variable`.
329
+ * Don't `(float)` the BackUpWordPress version number, fixes issues with minor versions numbers being truncated.
330
+ * Minor PHPDoc improvements.
331
+
332
+ #### 1.1.3
333
+
334
+ * 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.
335
+ * 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.
336
+
337
+ #### 1.1.2
338
+
339
+ * Fix a bug that stopped `HMBKP_DISABLE_AUTOMATIC_BACKUP` from working.
340
+
341
+ #### 1.1.1
342
+
343
+ * Fix a possible `max_execution_timeout` fatal error when attempting to calculate the path to `mysqldump`.
344
+ * Clear the running backup status and reset the calculated filesize on update.
345
+ * Show a link to the manage backups page in the plugin description.
346
+ * Other general fixes.
347
+
348
+ #### 1.1
349
+
350
+ * Remove the logging facility as it provided little benefit and complicated the code, your existing logs will be deleted on update.
351
+ * Expose the various `Constants` that can be defined to change advanced settings.
352
+ * Added the ability to disable the automatic backups completely `define( 'HMBKP_DISABLE_AUTOMATIC_BACKUP', true );`.
353
+ * Added the ability to switch to file only or database only backups `define( 'HMBKP_FILES_ONLY', true );` Or `define( 'HMBKP_DATABASE_ONLY', true );`.
354
+ * Added the ability to define how many old backups should be kept `define( 'HMBKP_MAX_BACKUPS', 20 );`
355
+ * Added the ability to define the time that the daily backup should run `define( 'HMBKP_DAILY_SCHEDULE_TIME', '16:30' );`
356
+ * Tweaks to the backups page layout.
357
+ * General bug fixes and improvements.
358
+
359
+ #### 1.0.5
360
+
361
+ * Don't ajax load estimated backup size if it's already been calculated.
362
+ * Fix time in backup complete log message.
363
+ * Don't mark backup as running until cron has been called, will fix issues with backup showing as running even if cron never fired.
364
+ * Show number of backups saved message.
365
+ * Add a link to the backups page to the plugin action links.
366
+
367
+ #### 1.0.4
368
+
369
+ Don't throw PHP Warnings when `shell_exec` is disabled
370
+
371
+ #### 1.0.3
372
+
373
+ Minor bug fix release.
374
+
375
+ * Suppress `filesize()` warnings when calculating backup size.
376
+ * Plugin should now work when symlinked.
377
+ * Remove all options on deactivate, you should now be able to deactivate then activate to fix issues with settings etc. becoming corrupt.
378
+ * Call setup_defaults for users who update from backupwordpress 0.4.5 so they get new settings.
379
+ * Don't ajax ping running backup status quite so often.
380
+
381
+ #### 1.0.1 & 1.0.2
382
+
383
+ Fix some silly 1.0 bugs
384
+
385
+ #### 1.0
386
+
387
+ 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)
388
+
389
+ #### Previous
390
+
391
+ Version 0.4.5 and previous were developed by [wpdprx](http://profiles.wordpress.org/users/wpdprx/)
plugin.php CHANGED
@@ -2,8 +2,8 @@
2
 
3
  /*
4
  Plugin Name: WP Remote
5
- Description: Manage your WordPress site with <a href="https://wpremote.com/">WP Remote</a>. Deactivate to clear your API Key.
6
- Version: 2.3.1
7
  Author: Human Made Limited
8
  Author URI: http://hmn.md/
9
  */
@@ -28,6 +28,9 @@ Author URI: http://hmn.md/
28
  define( 'WPRP_PLUGIN_SLUG', 'wpremote' );
29
  define( 'WPRP_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
30
 
 
 
 
31
  // Don't activate on anything less than PHP 5.2.4
32
  if ( version_compare( phpversion(), '5.2.4', '<' ) ) {
33
 
@@ -39,11 +42,41 @@ if ( version_compare( phpversion(), '5.2.4', '<' ) ) {
39
 
40
  }
41
 
42
- require_once( WPRP_PLUGIN_PATH .'/wprp.admin.php' );
43
 
44
  // Backups require 3.1
45
- if ( version_compare( get_bloginfo( 'version' ), '3.1', '>=' ) && ! class_exists( 'WPR_HM_Backup' ) )
46
- require( WPRP_PLUGIN_PATH . '/hm-backup/hm-backup.php' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
 
48
  // Don't include when doing a core update
49
  if ( empty( $_GET['action'] ) || $_GET['action'] != 'do-core-upgrade' ) :
@@ -131,7 +164,6 @@ function wprp_catch_api_call() {
131
  if ( empty( $_GET['wpr_api_key'] ) || ! urldecode( $_GET['wpr_api_key'] ) || ! isset( $_GET['actions'] ) )
132
  return;
133
 
134
- require_once( WPRP_PLUGIN_PATH . '/wprp.backups.php' );
135
  require_once( WPRP_PLUGIN_PATH . '/wprp.plugins.php' );
136
  require_once( WPRP_PLUGIN_PATH . '/wprp.themes.php' );
137
 
@@ -212,4 +244,13 @@ function _wpr_set_filesystem_credentials( $credentials ) {
212
 
213
  return $_credentials;
214
  }
215
- add_filter( 'request_filesystem_credentials', '_wpr_set_filesystem_credentials' );
 
 
 
 
 
 
 
 
 
2
 
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
7
  Author: Human Made Limited
8
  Author URI: http://hmn.md/
9
  */
28
  define( 'WPRP_PLUGIN_SLUG', 'wpremote' );
29
  define( 'WPRP_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
30
 
31
+ if ( ! defined( 'WPR_API_URL' ) )
32
+ define( 'WPR_API_URL', 'https://wpremote.com/api/json/' );
33
+
34
  // Don't activate on anything less than PHP 5.2.4
35
  if ( version_compare( phpversion(), '5.2.4', '<' ) ) {
36
 
42
 
43
  }
44
 
45
+ require_once( WPRP_PLUGIN_PATH . '/wprp.admin.php' );
46
 
47
  // Backups require 3.1
48
+ if ( version_compare( get_bloginfo( 'version' ), '3.1', '>=' ) ) {
49
+
50
+ // deactivate backupwordpress
51
+ if ( defined( 'HMBKP_PLUGIN_PATH' ) ) {
52
+
53
+ $plugin_file = dirname( plugin_dir_path( HMBKP_PLUGIN_PATH ) ) . 'plugin.php';
54
+
55
+ deactivate_plugins( array( 'backupwordpress/plugin.php' ), true );
56
+
57
+ function wprp_backupwordpress_deactivated_notice() {
58
+
59
+ echo '<div class="updated fade"><p><strong>The BackUpWordPress Plugin has been de-activated</strong> The WP Remote Plugin includes BackUpWordPress.</p></div>';
60
+
61
+ }
62
+ add_action( 'admin_notices', 'wprp_backupwordpress_deactivated_notice' );
63
+
64
+ } else {
65
+
66
+ define( 'HMBKP_PLUGIN_PATH', trailingslashit( WPRP_PLUGIN_PATH ) . 'backupwordpress' );
67
+ define( 'HMBKP_PLUGIN_URL', trailingslashit( plugins_url( WPRP_PLUGIN_SLUG ) ) . 'backupwordpress' );
68
+
69
+ require( WPRP_PLUGIN_PATH . '/backupwordpress/plugin.php' );
70
+
71
+ require_once( WPRP_PLUGIN_PATH . '/wprp.backups.php' );
72
+
73
+ }
74
+
75
+ // unhook default schedules from being created
76
+ remove_action( 'admin_init', 'hmbkp_setup_default_schedules' );
77
+ remove_filter( 'all_plugins', 'hmbkp_plugin_row', 10 );
78
+ remove_filter( 'plugin_action_links', 'hmbkp_plugin_action_link', 10, 2 );
79
+ }
80
 
81
  // Don't include when doing a core update
82
  if ( empty( $_GET['action'] ) || $_GET['action'] != 'do-core-upgrade' ) :
164
  if ( empty( $_GET['wpr_api_key'] ) || ! urldecode( $_GET['wpr_api_key'] ) || ! isset( $_GET['actions'] ) )
165
  return;
166
 
 
167
  require_once( WPRP_PLUGIN_PATH . '/wprp.plugins.php' );
168
  require_once( WPRP_PLUGIN_PATH . '/wprp.themes.php' );
169
 
244
 
245
  return $_credentials;
246
  }
247
+ add_filter( 'request_filesystem_credentials', '_wpr_set_filesystem_credentials' );
248
+
249
+ // we need the calculate filesize to work on no priv too
250
+ add_action( 'wp_ajax_nopriv_wprp_calculate_backup_size', 'wprp_ajax_calculate_backup_size' );
251
+
252
+ function wprp_ajax_calculate_backup_size() {
253
+ require_once( WPRP_PLUGIN_PATH . '/wprp.backups.php' );
254
+ WPRP_Backups::getInstance()->calculateEstimatedSize();
255
+ exit;
256
+ }
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.3.1
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,6 +31,12 @@ You can email us at support@wpremote.com for support.
31
 
32
  == Changelog ==
33
 
 
 
 
 
 
 
34
  #### 2.3.1
35
 
36
  * PHP 5.2.4 compat.
3
  Tags: wpremote, remote administration, multiple wordpress
4
  Requires at least: 2.9
5
  Tested up to: 3.5
6
+ Stable tag: 2.4
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.4
35
+
36
+ * Backups are now powered by BackUpWordPress.
37
+ * The BackUpWordPress Plugin can no longer be run alongside WP Remote.
38
+ * Emphasise that you can deactivate the plugin to clear your API key.
39
+
40
  #### 2.3.1
41
 
42
  * PHP 5.2.4 compat.
wprp.admin.php CHANGED
@@ -30,7 +30,7 @@ function wprp_add_api_key_admin_notice() { ?>
30
 
31
  <input style="margin: -4px 5px; vertical-align: text-bottom; line-height: 13px; font-size: 12px;" type="text" class="code regular-text" id="wpr_api_key" name="wpr_api_key" />
32
 
33
- <input style="vertical-align: text-bottom; margin: -3px 0; line-height: 12px;" type="submit" value="Save API Key" class="button-primary" />
34
 
35
  </p>
36
 
@@ -78,4 +78,17 @@ 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' );
 
 
 
 
 
 
 
 
 
 
 
 
 
30
 
31
  <input style="margin: -4px 5px; vertical-align: text-bottom; line-height: 13px; font-size: 12px;" type="text" class="code regular-text" id="wpr_api_key" name="wpr_api_key" />
32
 
33
+ <input style="margin: -6px 0 -3px; line-height: 12px; height: 12px;" type="submit" value="Save API Key" class="button-primary" />
34
 
35
  </p>
36
 
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
+ if ( isset( $submenu['tools.php'][16] ) && $submenu['tools.php'][16][2] === 'backupwordpress' )
92
+ unset( $submenu['tools.php'][16] );
93
+ }
94
+ add_action( 'admin_menu', 'wprp_remove_backupwordpress_from_admin_menu', 11 );
wprp.api.php CHANGED
@@ -100,7 +100,9 @@ foreach( $actions as $action => $value ) {
100
  case 'delete_backup' :
101
  case 'supports_backups' :
102
  case 'get_backup' :
103
-
 
 
104
  $actions[$action] = _wprp_backups_api_call( $action );
105
 
106
  break;
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;
wprp.backups.php CHANGED
@@ -1,5 +1,205 @@
1
  <?php
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  /**
4
  * Handle the backups API calls
5
  *
@@ -8,9 +208,6 @@
8
  */
9
  function _wprp_backups_api_call( $action ) {
10
 
11
- if ( ! class_exists( 'WPR_HM_Backup' ) )
12
- return new WP_Error( 'Backups module not present' );
13
-
14
  switch( $action ) :
15
 
16
  // TODO in the future we should do some check here to make sure they do support backups
@@ -18,154 +215,40 @@ function _wprp_backups_api_call( $action ) {
18
  return true;
19
 
20
  case 'do_backup' :
21
-
22
- @ignore_user_abort( true );
23
-
24
- $backup = new WPR_HM_Backup();
25
- $upload_dir = wp_upload_dir();
26
-
27
- // Store the backup file in the uploads dir
28
- $backup->set_path( $upload_dir['basedir'] . '/_wpremote_backups' );
29
-
30
- $running_file = $backup->get_path() . '/.backup_running';
31
- $index_php = $backup->get_path() . '/index.php';
32
-
33
- // Set a random backup filename
34
- $backup->set_archive_filename( md5( time() ) . '.zip' );
35
-
36
- // delete the backups folder to cleanup old backups
37
- _wprp_backups_rmdirtree( $backup->get_path() );
38
-
39
- if ( ! @mkdir( $backup->get_path() ) )
40
- return new WP_Error( 'unable-to-create-backups-directory', 'Unable to write the .backup_running file - check your permissions on wp-content/uploads' );
41
-
42
 
43
- // Write an index.php file so stop directory listing
44
- if ( ! $handle = @fopen( $index_php, 'w' ) )
45
- return new WP_Error( 'unable-to-write-index-php-file' );
46
-
47
- fwrite( $handle, '' );
48
-
49
- fclose( $handle );
50
-
51
- if ( ! file_exists( $index_php ) )
52
- return new WP_Error( 'index-php-file-was-not-created' );
53
-
54
- // Write the backup runing file for tracking...
55
- if ( ! $handle = @fopen( $running_file, 'w' ) )
56
- return new WP_Error( 'unable-to-write-backup-running-file' );
57
-
58
- fwrite( $handle, $backup->get_archive_filename() );
59
-
60
- fclose( $handle );
61
-
62
- if ( ! file_exists( $running_file ) )
63
- return new WP_Error( 'backup-running-file-was-not-created' );
64
-
65
- // Excludes
66
- if ( ! empty( $_REQUEST['backup_excludes'] ) ) {
67
-
68
- $excludes = array_map( 'urldecode', (array) $_REQUEST['backup_excludes'] );
69
- $backup->set_excludes( $excludes, true );
70
- }
71
-
72
- if ( function_exists( 'hmbkp_path' ) )
73
- $backup->set_excludes( array( hmbkp_path() ), true );
74
-
75
- $backup->backup();
76
-
77
- unlink( $backup->get_path() . '/.backup_completed' );
78
- unlink( $backup->get_path() . '/.backup_running' );
79
-
80
- // Write the backup runing file for tracking...
81
- $completed_file = $backup->get_path() . '/.backup_completed';
82
-
83
- if ( ! $handle = @fopen( $completed_file, 'w' ) )
84
- return new WP_Error( 'unable-to-write-backup-completed-file' );
85
-
86
- if ( $backup->get_errors() || ( $backup->get_warnings() && ! file_exists( $backup->get_archive_filepath() ) ) ) {
87
-
88
- $errors = array_merge( $backup->get_errors(), $backup->get_warnings() );
89
- fwrite( $handle, json_encode( $errors ) );
90
-
91
- } else {
92
-
93
- fwrite( $handle, 'file:' . $backup->get_archive_filename() );
94
- }
95
-
96
- fclose( $handle );
97
-
98
- return true;
99
 
100
  case 'get_backup' :
101
-
102
- $upload_dir = wp_upload_dir();
103
-
104
- // Store the backup file in the uploads dir
105
- $path = $upload_dir['basedir'] . '/_wpremote_backups';
106
- $url = $upload_dir['baseurl'] . '/_wpremote_backups';
107
-
108
- if ( ! is_dir( $path ) )
109
- return new WP_Error( 'backups-dir-does-not-exist' );
110
-
111
- if ( file_exists( $path . '/.backup_running' ) )
112
- return new WP_Error( 'backup-running' );
113
-
114
- if ( ! file_exists( $path . '/.backup_completed' ) )
115
- return new WP_Error( 'backup-not-started' );
116
-
117
- $file = file_get_contents( $path . '/.backup_completed' );
118
-
119
- if ( strpos( $file, 'file:' ) === 0 )
120
- return $url . '/' . substr( $file, 5 );
121
-
122
- // must have errored, return errors in a WP_Error
123
- return new WP_Error( 'backup-failed', json_decode( $file ) );
124
 
125
  case 'delete_backup' :
126
 
127
- $upload_dir = wp_upload_dir();
128
-
129
- _wprp_backups_rmdirtree( $upload_dir['basedir'] . '/_wpremote_backups' );
130
-
 
 
 
 
 
 
131
  break;
132
 
133
  endswitch;
134
 
135
  }
136
 
137
- function _wprp_backups_rmdirtree( $dir ) {
138
-
139
- if ( is_file( $dir ) )
140
- unlink( $dir );
141
-
142
- if ( ! is_dir( $dir ) )
143
- return false;
144
-
145
- $files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $dir ), RecursiveIteratorIterator::CHILD_FIRST, RecursiveIteratorIterator::CATCH_GET_CHILD );
146
-
147
- foreach ( $files as $file ) {
148
-
149
- if ( $file->isDir() )
150
- @rmdir( $file->getPathname() );
151
-
152
- else
153
- @unlink( $file->getPathname() );
154
-
155
- }
156
-
157
- return @rmdir( $dir );
158
-
159
- }
160
 
161
  function _wprp_get_backups_info() {
162
- if ( ! class_exists( 'WPR_HM_Backup' ) )
163
- return;
164
 
165
- $hm_backup = new WPR_HM_Backup();
 
166
  $info = array(
167
- 'mysqldump_path' => $hm_backup->get_mysqldump_command_path(),
168
- 'zip_path' => $hm_backup->get_zip_command_path()
 
169
  );
170
 
171
  return $info;
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
+ /**
37
+ * Get the backup once it has run, will return status running as a WP Error
38
+ *
39
+ * @return WP_Error|string
40
+ */
41
+ public function getBackup() {
42
+
43
+ $schedule = $this->getManualBackupSchedule();
44
+
45
+ if ( $status = $schedule->get_status() )
46
+ return new WP_Error( 'error-status', $status );
47
+
48
+ $backup = reset( $schedule->get_backups() );
49
+
50
+ if ( file_exists( $backup ) )
51
+ return str_replace( WP_CONTENT_DIR, WP_CONTENT_URL, $backup );
52
+
53
+ return new WP_Error( 'backup-failed', 'No backup was found' );
54
+ }
55
+
56
+ public function cleanBackup( $schedule ) {
57
+
58
+ $schedules = new HMBKP_Schedules();
59
+ $schedule = $schedules->get_schedule( $schedule );
60
+
61
+ $backup = reset( $schedule->get_backups() );
62
+
63
+ if ( file_exists( $backup ) )
64
+ unlink( $backup );
65
+ }
66
+
67
+ public function getEstimatedSize() {
68
+
69
+ if ( $size = get_transient( 'hmbkp_schedule_manual_filesize' ) )
70
+ return HMBKP_Scheduled_Backup::human_filesize( $size, null, '%01u %s' );
71
+
72
+ // we dont know the size yet, fire off a remote request to get it for later
73
+ // it can take some time so we have a small timeout then return "Calculating"
74
+ wp_remote_get(
75
+ $url = add_query_arg( array( 'action' => 'wprp_calculate_backup_size', 'backup_excludes' => $this->getManualBackupSchedule()->get_excludes() ), admin_url( 'admin-ajax.php' ) ),
76
+ array( 'timeout' => 0.1, 'sslverify' => false )
77
+ );
78
+
79
+ return 'Calculating';
80
+
81
+ }
82
+
83
+ public function calculateEstimatedSize() {
84
+ $this->getManualBackupSchedule()->get_filesize();
85
+ }
86
+
87
+ /**
88
+ * Enabled automatic backups for this install
89
+ *
90
+ * @param array $options { 'id' => string, type' => 'complete|files|database', 'reoccurance' => 'daily|...', 'excludes' => array() }
91
+ */
92
+ public function addSchedule( $options = array() ) {
93
+
94
+ $schedules = new HMBKP_Schedules();
95
+
96
+ if ( $schedules->get_schedule( $options['id'] ) )
97
+ return;
98
+
99
+ $schedule = new HMBKP_Scheduled_Backup( $options['id'] );
100
+ $schedule->set_type( $options['type'] );
101
+ $schedule->set_excludes( $options['excludes'], true );
102
+ $schedule->set_max_backups( 1 );
103
+
104
+ if ( $options['start_date'] )
105
+ $schedule->set_schedule_start_time( $options['start_date'] );
106
+
107
+ $schedule->set_reoccurrence( $options['reoccurance'] );
108
+
109
+ $schedule->save();
110
+ }
111
+
112
+ /**
113
+ * Remove a schedule
114
+ *
115
+ * @param int $id
116
+ */
117
+ public function removeSchedule( $id ) {
118
+ $schedules = new HMBKP_Schedules();
119
+
120
+ if ( ! $schedules->get_schedule( $id ) )
121
+ return;
122
+
123
+ $schedules->get_schedule( $id )->cancel();
124
+ }
125
+
126
+ /**
127
+ * Get an array of all the backup schedules
128
+ *
129
+ * @return array : array( 'id' => int, 'next_run_date' => int )
130
+ */
131
+ public function getSchedules() {
132
+
133
+ $schedules = new HMBKP_Schedules();
134
+ $array = array();
135
+
136
+ foreach ( $schedules->get_schedules() as $schedule )
137
+ $array[] = array( 'id' => $schedule->get_id(), 'next_run_date' => $schedule->get_next_occurrence() );
138
+
139
+ return $array;
140
+ }
141
+
142
+ /**
143
+ * Get the manual backup schedule from BackupWordPress
144
+ * @return HMBKP_Scheduled_Backup
145
+ */
146
+ private function getManualBackupSchedule() {
147
+
148
+ $schedule = new HMBKP_Scheduled_Backup( 'manual' );
149
+ $schedule->set_type( 'complete' );
150
+ $schedule->set_max_backups( 1 );
151
+
152
+ // Excludes
153
+ if ( ! empty( $_REQUEST['backup_excludes'] ) ) {
154
+
155
+ $excludes = array_map( 'urldecode', (array) $_REQUEST['backup_excludes'] );
156
+ $schedule->set_excludes( $excludes, true );
157
+ }
158
+
159
+ return $schedule;
160
+ }
161
+ }
162
+
163
+ class WPRP_Backup_Service extends HMBKP_Service {
164
+
165
+ /**
166
+ * Fire the email notification on the hmbkp_backup_complete
167
+ *
168
+ * @see HM_Backup::do_action
169
+ * @param string $action The action received from the backup
170
+ * @return void
171
+ */
172
+ public function action( $action ) {
173
+
174
+ if ( $action == 'hmbkp_backup_complete' && strpos( $this->schedule->get_id(), 'wpremote' ) !== false ) {
175
+
176
+ $file = $this->schedule->get_archive_filepath();
177
+ $file_url = str_replace( WP_CONTENT_DIR, WP_CONTENT_URL, $file );
178
+ $api_url = WPR_API_URL . 'backups/upload';
179
+
180
+ $args = array(
181
+ 'api_key' => get_option( 'wpr_api_key' ),
182
+ 'backup_url'=> $file_url,
183
+ 'domain' => get_bloginfo( 'url' )
184
+ );
185
+
186
+ wp_remote_post( $api_url, array( 'timeout' => 60, 'body' => $args ) );
187
+ }
188
+ }
189
+
190
+ /**
191
+ * Abstract methods must be implemented
192
+ */
193
+ public function form() {}
194
+
195
+ public function field() {}
196
+
197
+ public function update( &$new_data, $old_data ) {}
198
+
199
+ public function display() {}
200
+ }
201
+ HMBKP_Services::register( __FILE__, 'WPRP_Backup_Service' );
202
+
203
  /**
204
  * Handle the backups API calls
205
  *
208
  */
209
  function _wprp_backups_api_call( $action ) {
210
 
 
 
 
211
  switch( $action ) :
212
 
213
  // TODO in the future we should do some check here to make sure they do support backups
215
  return true;
216
 
217
  case 'do_backup' :
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
218
 
219
+ return WPRP_Backups::getInstance()->doBackup();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
220
 
221
  case 'get_backup' :
222
+
223
+ return WPRP_Backups::getInstance()->getBackup();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
224
 
225
  case 'delete_backup' :
226
 
227
+ return WPRP_Backups::getInstance()->cleanBackup( $_GET['schedule_id']);
228
+
229
+ case 'add_backup_schedule' :
230
+ return WPRP_Backups::getInstance()->addSchedule( $_GET );
231
+
232
+ case 'remove_backup_schedule' :
233
+ return WPRP_Backups::getInstance()->removeSchedule( $_GET['id'] );
234
+
235
+ case 'get_backup_schedules' :
236
+ return WPRP_Backups::getInstance()->getSchedules();
237
  break;
238
 
239
  endswitch;
240
 
241
  }
242
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
243
 
244
  function _wprp_get_backups_info() {
 
 
245
 
246
+ $hm_backup = new HM_Backup();
247
+
248
  $info = array(
249
+ 'mysqldump_path' => $hm_backup->get_mysqldump_command_path(),
250
+ 'zip_path' => $hm_backup->get_zip_command_path(),
251
+ 'estimated_size' => WPRP_Backups::getInstance()->getEstimatedSize()
252
  );
253
 
254
  return $info;