Version Description
= After an upgrade from version 2 =
Please check all settings after the update:
- Dropbox authentication must be done again
- SugarSync authentication must be done again
- S3 Settings
- Google Storage is now in S3
- Check all your passwords
Download this release
Release Info
Developer | danielhuesken |
Plugin | BackWPup – WordPress Backup Plugin |
Version | 3.1.4 |
Comparing to | |
See all releases |
Code changes from version 3.1.3 to 3.1.4
- backwpup.php +2 -2
- inc/class-create-archive.php +673 -664
- inc/class-destination-dropbox.php +792 -791
- inc/class-destination-s3-v1.php +596 -596
- inc/class-destination-s3.php +680 -680
- inc/class-job.php +38 -8
- inc/class-jobtype-dbdump.php +1 -1
- inc/class-jobtype-wpexp.php +719 -719
- inc/class-jobtype-wpplugin.php +1 -1
- inc/class-page-about.php +715 -715
- inc/class-page-editjob.php +8 -7
- inc/class-page-jobs.php +716 -716
- inc/class-page-settings.php +457 -457
- inc/class-wp-cli.php +1 -4
- languages/backwpup-de_DE.po +6109 -6109
- languages/backwpup-ja.mo +0 -0
- languages/backwpup-ja.po +15 -15
- license.txt +0 -674
- readme.md +0 -59
- readme.txt +9 -4
- screenshot-1.png +0 -0
- screenshot-2.png +0 -0
- screenshot-3.png +0 -0
- screenshot-4.png +0 -0
- screenshot-5.png +0 -0
- uninstall.php +42 -42
- vendor/Aws/Common/Aws.php +105 -105
- vendor/Aws/Common/Client/AbstractClient.php +272 -272
- vendor/Aws/Common/Client/ClientBuilder.php +467 -467
- vendor/Aws/Common/Command/AwsQueryVisitor.php +117 -117
- vendor/Aws/Common/Credentials/Credentials.php +337 -337
- vendor/Aws/Common/Credentials/NullCredentials.php +68 -68
- vendor/Aws/Common/Enum/Region.php +63 -63
- vendor/Aws/Common/Facade/Facade.php +67 -67
- vendor/Aws/Common/Hash/HashUtils.php +76 -76
- vendor/Aws/Common/Model/MultipartUpload/AbstractUploadBuilder.php +148 -148
- vendor/Aws/Common/Resources/aws-config.php +272 -272
- vendor/Aws/Common/Resources/public-endpoints.php +67 -67
- vendor/Aws/Common/RulesEndpointProvider.php +67 -67
- vendor/Aws/Common/Signature/AbstractSignature.php +44 -44
- vendor/Aws/Common/Signature/SignatureInterface.php +30 -52
backwpup.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
* Description: WordPress Backup Plugin
|
6 |
* Author: Inpsyde GmbH
|
7 |
* Author URI: http://inpsyde.com
|
8 |
-
* Version: 3.1.
|
9 |
* Text Domain: backwpup
|
10 |
* Domain Path: /languages/
|
11 |
* Network: true
|
@@ -98,7 +98,7 @@ if ( ! class_exists( 'BackWPup' ) ) {
|
|
98 |
//deactivation hook
|
99 |
register_deactivation_hook( __FILE__, array( 'BackWPup_Install', 'deactivate' ) );
|
100 |
//Admin bar
|
101 |
-
if ( is_admin_bar_showing()
|
102 |
add_action( 'init', array( 'BackWPup_Adminbar', 'get_instance' ) );
|
103 |
}
|
104 |
//only in backend
|
5 |
* Description: WordPress Backup Plugin
|
6 |
* Author: Inpsyde GmbH
|
7 |
* Author URI: http://inpsyde.com
|
8 |
+
* Version: 3.1.4
|
9 |
* Text Domain: backwpup
|
10 |
* Domain Path: /languages/
|
11 |
* Network: true
|
98 |
//deactivation hook
|
99 |
register_deactivation_hook( __FILE__, array( 'BackWPup_Install', 'deactivate' ) );
|
100 |
//Admin bar
|
101 |
+
if ( is_admin_bar_showing() ) {
|
102 |
add_action( 'init', array( 'BackWPup_Adminbar', 'get_instance' ) );
|
103 |
}
|
104 |
//only in backend
|
inc/class-create-archive.php
CHANGED
@@ -1,664 +1,673 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Class for creating File Archives
|
4 |
-
*/
|
5 |
-
class BackWPup_Create_Archive {
|
6 |
-
|
7 |
-
/**
|
8 |
-
* Achieve file with full path
|
9 |
-
*
|
10 |
-
* @var string
|
11 |
-
*/
|
12 |
-
private $file = '';
|
13 |
-
|
14 |
-
/**
|
15 |
-
* Compression method
|
16 |
-
*
|
17 |
-
* @var string Method off compression Methods are ZipArchive, PclZip, Tar, TarGz, TarBz2, gz, bz2
|
18 |
-
*/
|
19 |
-
private $method = '';
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Open handel for files.
|
23 |
-
*/
|
24 |
-
private $filehandel = '';
|
25 |
-
|
26 |
-
/**
|
27 |
-
* class handel for ZipArchive.
|
28 |
-
*
|
29 |
-
* @var ZipArchive
|
30 |
-
*/
|
31 |
-
private $ziparchive = NULL;
|
32 |
-
|
33 |
-
/**
|
34 |
-
* class handel for PclZip.
|
35 |
-
*
|
36 |
-
* @var PclZip
|
37 |
-
*/
|
38 |
-
private $pclzip = NULL;
|
39 |
-
|
40 |
-
/**
|
41 |
-
* class handel for PclZip.
|
42 |
-
*
|
43 |
-
* @var array()
|
44 |
-
*/
|
45 |
-
private $pclzip_file_list = array();
|
46 |
-
|
47 |
-
/**
|
48 |
-
* Saved encoding will restored on __destruct
|
49 |
-
*
|
50 |
-
* @var string
|
51 |
-
*/
|
52 |
-
private $previous_encoding = '';
|
53 |
-
|
54 |
-
/**
|
55 |
-
* File cont off added files to handel somethings that depends on it
|
56 |
-
*
|
57 |
-
* @var int number of files added
|
58 |
-
*/
|
59 |
-
private $file_count = 0;
|
60 |
-
|
61 |
-
/**
|
62 |
-
* Set archive Parameter
|
63 |
-
*
|
64 |
-
* @param $file string File with full path of the archive
|
65 |
-
* @throws BackWPup_Create_Archive_Exception
|
66 |
-
*/
|
67 |
-
public function __construct( $file ) {
|
68 |
-
|
69 |
-
//check param
|
70 |
-
if ( empty( $file ) ) {
|
71 |
-
throw new BackWPup_Create_Archive_Exception( __( 'The file name of an archive cannot be empty.', 'backwpup' ) );
|
72 |
-
}
|
73 |
-
|
74 |
-
//set file
|
75 |
-
$this->file = trim( $file );
|
76 |
-
|
77 |
-
//check folder can used
|
78 |
-
if ( ! is_dir( dirname( $this->file ) ) ||! is_writable( dirname( $this->file ) ) ) {
|
79 |
-
throw new BackWPup_Create_Archive_Exception( sprintf( _x( 'Folder %s for archive not found','%s = Folder name', 'backwpup' ), dirname( $this->file ) ) );
|
80 |
-
}
|
81 |
-
|
82 |
-
//set and check method and get open handle
|
83 |
-
if ( strtolower( substr( $this->file, -7 ) ) == '.tar.gz' ) {
|
84 |
-
if ( ! function_exists( 'gzencode' ) ) {
|
85 |
-
throw new BackWPup_Create_Archive_Exception( __( 'Functions for gz compression not available', 'backwpup' ) );
|
86 |
-
}
|
87 |
-
$this->method = 'TarGz';
|
88 |
-
$this->filehandel = fopen( $this->file, 'ab' );
|
89 |
-
}
|
90 |
-
elseif ( strtolower( substr( $this->file, -8 ) ) == '.tar.bz2' ) {
|
91 |
-
if ( ! function_exists( 'bzcompress' ) ) {
|
92 |
-
throw new BackWPup_Create_Archive_Exception( __( 'Functions for bz2 compression not available', 'backwpup' ) );
|
93 |
-
}
|
94 |
-
$this->method = 'TarBz2';
|
95 |
-
$this->filehandel = fopen( $this->file, 'ab' );
|
96 |
-
}
|
97 |
-
elseif ( strtolower( substr( $this->file, -4 ) ) == '.tar' ) {
|
98 |
-
$this->method = 'Tar';
|
99 |
-
$this->filehandel = fopen( $this->file, 'ab');
|
100 |
-
}
|
101 |
-
elseif ( strtolower( substr( $this->file, -4 ) ) == '.zip' ) {
|
102 |
-
$this->method = get_site_option( 'backwpup_cfg_jobziparchivemethod');
|
103 |
-
//check and set method
|
104 |
-
if ( empty( $this->method ) || ( $this->method != 'ZipArchive' && $this->method != 'PclZip' ) ) {
|
105 |
-
$this->method = 'ZipArchive';
|
106 |
-
}
|
107 |
-
if ( ! class_exists( 'ZipArchive' ) ) {
|
108 |
-
$this->method = 'PclZip';
|
109 |
-
}
|
110 |
-
//open classes
|
111 |
-
if ( $this->get_method() == 'ZipArchive' ) {
|
112 |
-
$this->ziparchive = new ZipArchive();
|
113 |
-
$ziparchive_open = $this->ziparchive->open( $this->file, ZipArchive::CREATE );
|
114 |
-
if ( $ziparchive_open !== TRUE ) {
|
115 |
-
$this->ziparchive_status();
|
116 |
-
throw new BackWPup_Create_Archive_Exception( sprintf( _x( 'Cannot create zip archive: %d','ZipArchive open() result', 'backwpup' ), $ziparchive_open ) );
|
117 |
-
}
|
118 |
-
}
|
119 |
-
if ( $this->get_method() == 'PclZip' && ! function_exists( 'gzencode' ) ) {
|
120 |
-
throw new BackWPup_Create_Archive_Exception( __( 'Functions for gz compression not available', 'backwpup' ) );
|
121 |
-
}
|
122 |
-
if( $this->get_method() == 'PclZip' ) {
|
123 |
-
$this->method = 'PclZip';
|
124 |
-
if ( ini_get( 'mbstring.func_overload' ) && function_exists( 'mb_internal_encoding' ) ) {
|
125 |
-
$this->previous_encoding = mb_internal_encoding();
|
126 |
-
mb_internal_encoding( 'ISO-8859-1' );
|
127 |
-
}
|
128 |
-
if ( ! defined('PCLZIP_TEMPORARY_DIR') ) {
|
129 |
-
define( 'PCLZIP_TEMPORARY_DIR', BackWPup::get_plugin_data( 'TEMP' ) );
|
130 |
-
}
|
131 |
-
require_once ABSPATH . 'wp-admin/includes/class-pclzip.php';
|
132 |
-
$this->pclzip = new PclZip( $this->file );
|
133 |
-
}
|
134 |
-
}
|
135 |
-
elseif ( strtolower( substr( $this->file, -3 ) ) == '.gz' ) {
|
136 |
-
if ( ! function_exists( 'gzencode' ) )
|
137 |
-
throw new BackWPup_Create_Archive_Exception( __( 'Functions for gz compression not available', 'backwpup' ) );
|
138 |
-
$this->method = 'gz';
|
139 |
-
$this->filehandel = fopen( 'compress.zlib://' . $this->file, 'wb');
|
140 |
-
}
|
141 |
-
elseif ( strtolower( substr( $this->file, -4 ) ) == '.bz2' ) {
|
142 |
-
if ( ! function_exists( 'bzcompress' ) ) {
|
143 |
-
throw new BackWPup_Create_Archive_Exception( __( 'Functions for bz2 compression not available', 'backwpup' ) );
|
144 |
-
}
|
145 |
-
$this->method = 'bz2';
|
146 |
-
$this->filehandel = fopen( 'compress.bzip2://' . $this->file, 'w');
|
147 |
-
}
|
148 |
-
else {
|
149 |
-
throw new BackWPup_Create_Archive_Exception( sprintf( _x( 'Method to archive file %s not detected','%s = file name', 'backwpup' ), basename( $this->file ) ) );
|
150 |
-
}
|
151 |
-
|
152 |
-
//check file handle
|
153 |
-
if ( ! empty( $this->filehandel ) && ! is_resource( $this->filehandel ) ) {
|
154 |
-
throw new BackWPup_Create_Archive_Exception( __( 'Cannot open archive file', 'backwpup' ) );
|
155 |
-
}
|
156 |
-
|
157 |
-
}
|
158 |
-
|
159 |
-
|
160 |
-
/**
|
161 |
-
* Closes open archive on shutdown.
|
162 |
-
*/
|
163 |
-
public function __destruct() {
|
164 |
-
|
165 |
-
//set encoding back
|
166 |
-
if ( ! empty( $this->previous_encoding ) ) {
|
167 |
-
mb_internal_encoding( $this->previous_encoding );
|
168 |
-
}
|
169 |
-
|
170 |
-
//close PclZip Class
|
171 |
-
if ( is_object( $this->pclzip ) ) {
|
172 |
-
if ( count( $this->pclzip_file_list ) > 0 ) {
|
173 |
-
if ( 0 == $this->pclzip->add( $this->pclzip_file_list ) ) {
|
174 |
-
trigger_error( sprintf( __( 'PclZip archive add error: %s', 'backwpup' ), $this->pclzip->errorInfo( TRUE ) ), E_USER_ERROR );
|
175 |
-
}
|
176 |
-
}
|
177 |
-
unset( $this->pclzip );
|
178 |
-
}
|
179 |
-
|
180 |
-
//close ZipArchive Class
|
181 |
-
if ( is_object( $this->ziparchive ) ) {
|
182 |
-
$this->
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
*
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
*
|
233 |
-
*
|
234 |
-
* @
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
case '
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
if (
|
330 |
-
|
331 |
-
return FALSE;
|
332 |
-
}
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
trigger_error( sprintf( __( 'Cannot add "%s" to zip archive!', 'backwpup' ), $name_in_archive ), E_USER_ERROR );
|
339 |
-
return FALSE;
|
340 |
-
} else {
|
341 |
-
$
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
}
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
return FALSE;
|
385 |
-
}
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
case '
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
break;
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
$filename =
|
456 |
-
$filename_prefix =
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
if (
|
462 |
-
|
463 |
-
}
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
$
|
480 |
-
|
481 |
-
if (
|
482 |
-
$
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
}
|
487 |
-
//
|
488 |
-
$
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
"
|
500 |
-
$
|
501 |
-
$
|
502 |
-
"", //
|
503 |
-
"", //
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
$
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
$tar_filename =
|
567 |
-
$tar_filename_prefix =
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
if (
|
573 |
-
|
574 |
-
}
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
//
|
588 |
-
$
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
"
|
600 |
-
$
|
601 |
-
$
|
602 |
-
"", //
|
603 |
-
"", //
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
$
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
$
|
647 |
-
}
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
}
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Class for creating File Archives
|
4 |
+
*/
|
5 |
+
class BackWPup_Create_Archive {
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Achieve file with full path
|
9 |
+
*
|
10 |
+
* @var string
|
11 |
+
*/
|
12 |
+
private $file = '';
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Compression method
|
16 |
+
*
|
17 |
+
* @var string Method off compression Methods are ZipArchive, PclZip, Tar, TarGz, TarBz2, gz, bz2
|
18 |
+
*/
|
19 |
+
private $method = '';
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Open handel for files.
|
23 |
+
*/
|
24 |
+
private $filehandel = '';
|
25 |
+
|
26 |
+
/**
|
27 |
+
* class handel for ZipArchive.
|
28 |
+
*
|
29 |
+
* @var ZipArchive
|
30 |
+
*/
|
31 |
+
private $ziparchive = NULL;
|
32 |
+
|
33 |
+
/**
|
34 |
+
* class handel for PclZip.
|
35 |
+
*
|
36 |
+
* @var PclZip
|
37 |
+
*/
|
38 |
+
private $pclzip = NULL;
|
39 |
+
|
40 |
+
/**
|
41 |
+
* class handel for PclZip.
|
42 |
+
*
|
43 |
+
* @var array()
|
44 |
+
*/
|
45 |
+
private $pclzip_file_list = array();
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Saved encoding will restored on __destruct
|
49 |
+
*
|
50 |
+
* @var string
|
51 |
+
*/
|
52 |
+
private $previous_encoding = '';
|
53 |
+
|
54 |
+
/**
|
55 |
+
* File cont off added files to handel somethings that depends on it
|
56 |
+
*
|
57 |
+
* @var int number of files added
|
58 |
+
*/
|
59 |
+
private $file_count = 0;
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Set archive Parameter
|
63 |
+
*
|
64 |
+
* @param $file string File with full path of the archive
|
65 |
+
* @throws BackWPup_Create_Archive_Exception
|
66 |
+
*/
|
67 |
+
public function __construct( $file ) {
|
68 |
+
|
69 |
+
//check param
|
70 |
+
if ( empty( $file ) ) {
|
71 |
+
throw new BackWPup_Create_Archive_Exception( __( 'The file name of an archive cannot be empty.', 'backwpup' ) );
|
72 |
+
}
|
73 |
+
|
74 |
+
//set file
|
75 |
+
$this->file = trim( $file );
|
76 |
+
|
77 |
+
//check folder can used
|
78 |
+
if ( ! is_dir( dirname( $this->file ) ) ||! is_writable( dirname( $this->file ) ) ) {
|
79 |
+
throw new BackWPup_Create_Archive_Exception( sprintf( _x( 'Folder %s for archive not found','%s = Folder name', 'backwpup' ), dirname( $this->file ) ) );
|
80 |
+
}
|
81 |
+
|
82 |
+
//set and check method and get open handle
|
83 |
+
if ( strtolower( substr( $this->file, -7 ) ) == '.tar.gz' ) {
|
84 |
+
if ( ! function_exists( 'gzencode' ) ) {
|
85 |
+
throw new BackWPup_Create_Archive_Exception( __( 'Functions for gz compression not available', 'backwpup' ) );
|
86 |
+
}
|
87 |
+
$this->method = 'TarGz';
|
88 |
+
$this->filehandel = fopen( $this->file, 'ab' );
|
89 |
+
}
|
90 |
+
elseif ( strtolower( substr( $this->file, -8 ) ) == '.tar.bz2' ) {
|
91 |
+
if ( ! function_exists( 'bzcompress' ) ) {
|
92 |
+
throw new BackWPup_Create_Archive_Exception( __( 'Functions for bz2 compression not available', 'backwpup' ) );
|
93 |
+
}
|
94 |
+
$this->method = 'TarBz2';
|
95 |
+
$this->filehandel = fopen( $this->file, 'ab' );
|
96 |
+
}
|
97 |
+
elseif ( strtolower( substr( $this->file, -4 ) ) == '.tar' ) {
|
98 |
+
$this->method = 'Tar';
|
99 |
+
$this->filehandel = fopen( $this->file, 'ab');
|
100 |
+
}
|
101 |
+
elseif ( strtolower( substr( $this->file, -4 ) ) == '.zip' ) {
|
102 |
+
$this->method = get_site_option( 'backwpup_cfg_jobziparchivemethod');
|
103 |
+
//check and set method
|
104 |
+
if ( empty( $this->method ) || ( $this->method != 'ZipArchive' && $this->method != 'PclZip' ) ) {
|
105 |
+
$this->method = 'ZipArchive';
|
106 |
+
}
|
107 |
+
if ( ! class_exists( 'ZipArchive' ) ) {
|
108 |
+
$this->method = 'PclZip';
|
109 |
+
}
|
110 |
+
//open classes
|
111 |
+
if ( $this->get_method() == 'ZipArchive' ) {
|
112 |
+
$this->ziparchive = new ZipArchive();
|
113 |
+
$ziparchive_open = $this->ziparchive->open( $this->file, ZipArchive::CREATE );
|
114 |
+
if ( $ziparchive_open !== TRUE ) {
|
115 |
+
$this->ziparchive_status();
|
116 |
+
throw new BackWPup_Create_Archive_Exception( sprintf( _x( 'Cannot create zip archive: %d','ZipArchive open() result', 'backwpup' ), $ziparchive_open ) );
|
117 |
+
}
|
118 |
+
}
|
119 |
+
if ( $this->get_method() == 'PclZip' && ! function_exists( 'gzencode' ) ) {
|
120 |
+
throw new BackWPup_Create_Archive_Exception( __( 'Functions for gz compression not available', 'backwpup' ) );
|
121 |
+
}
|
122 |
+
if( $this->get_method() == 'PclZip' ) {
|
123 |
+
$this->method = 'PclZip';
|
124 |
+
if ( ini_get( 'mbstring.func_overload' ) && function_exists( 'mb_internal_encoding' ) ) {
|
125 |
+
$this->previous_encoding = mb_internal_encoding();
|
126 |
+
mb_internal_encoding( 'ISO-8859-1' );
|
127 |
+
}
|
128 |
+
if ( ! defined('PCLZIP_TEMPORARY_DIR') ) {
|
129 |
+
define( 'PCLZIP_TEMPORARY_DIR', BackWPup::get_plugin_data( 'TEMP' ) );
|
130 |
+
}
|
131 |
+
require_once ABSPATH . 'wp-admin/includes/class-pclzip.php';
|
132 |
+
$this->pclzip = new PclZip( $this->file );
|
133 |
+
}
|
134 |
+
}
|
135 |
+
elseif ( strtolower( substr( $this->file, -3 ) ) == '.gz' ) {
|
136 |
+
if ( ! function_exists( 'gzencode' ) )
|
137 |
+
throw new BackWPup_Create_Archive_Exception( __( 'Functions for gz compression not available', 'backwpup' ) );
|
138 |
+
$this->method = 'gz';
|
139 |
+
$this->filehandel = fopen( 'compress.zlib://' . $this->file, 'wb');
|
140 |
+
}
|
141 |
+
elseif ( strtolower( substr( $this->file, -4 ) ) == '.bz2' ) {
|
142 |
+
if ( ! function_exists( 'bzcompress' ) ) {
|
143 |
+
throw new BackWPup_Create_Archive_Exception( __( 'Functions for bz2 compression not available', 'backwpup' ) );
|
144 |
+
}
|
145 |
+
$this->method = 'bz2';
|
146 |
+
$this->filehandel = fopen( 'compress.bzip2://' . $this->file, 'w');
|
147 |
+
}
|
148 |
+
else {
|
149 |
+
throw new BackWPup_Create_Archive_Exception( sprintf( _x( 'Method to archive file %s not detected','%s = file name', 'backwpup' ), basename( $this->file ) ) );
|
150 |
+
}
|
151 |
+
|
152 |
+
//check file handle
|
153 |
+
if ( ! empty( $this->filehandel ) && ! is_resource( $this->filehandel ) ) {
|
154 |
+
throw new BackWPup_Create_Archive_Exception( __( 'Cannot open archive file', 'backwpup' ) );
|
155 |
+
}
|
156 |
+
|
157 |
+
}
|
158 |
+
|
159 |
+
|
160 |
+
/**
|
161 |
+
* Closes open archive on shutdown.
|
162 |
+
*/
|
163 |
+
public function __destruct() {
|
164 |
+
|
165 |
+
//set encoding back
|
166 |
+
if ( ! empty( $this->previous_encoding ) ) {
|
167 |
+
mb_internal_encoding( $this->previous_encoding );
|
168 |
+
}
|
169 |
+
|
170 |
+
//close PclZip Class
|
171 |
+
if ( is_object( $this->pclzip ) ) {
|
172 |
+
if ( count( $this->pclzip_file_list ) > 0 ) {
|
173 |
+
if ( 0 == $this->pclzip->add( $this->pclzip_file_list ) ) {
|
174 |
+
trigger_error( sprintf( __( 'PclZip archive add error: %s', 'backwpup' ), $this->pclzip->errorInfo( TRUE ) ), E_USER_ERROR );
|
175 |
+
}
|
176 |
+
}
|
177 |
+
unset( $this->pclzip );
|
178 |
+
}
|
179 |
+
|
180 |
+
//close ZipArchive Class
|
181 |
+
if ( is_object( $this->ziparchive ) ) {
|
182 |
+
if ( ! $this->ziparchive->close() ) {
|
183 |
+
sleep( 1 );
|
184 |
+
if ( ! $this->ziparchive->close() ) {
|
185 |
+
sleep( 1 );
|
186 |
+
if ( ! $this->ziparchive->close() ) {
|
187 |
+
trigger_error( __( 'ZIP archive cannot be closed correctly.', 'backwpup' ), E_USER_ERROR );
|
188 |
+
}
|
189 |
+
}
|
190 |
+
}
|
191 |
+
$this->ziparchive = NULL;
|
192 |
+
}
|
193 |
+
|
194 |
+
//close file if open
|
195 |
+
if ( is_resource( $this->filehandel ) ) {
|
196 |
+
fclose( $this->filehandel );
|
197 |
+
}
|
198 |
+
}
|
199 |
+
|
200 |
+
/*
|
201 |
+
* Closing the archive
|
202 |
+
*/
|
203 |
+
public function close() {
|
204 |
+
|
205 |
+
//write tar file end
|
206 |
+
if ( in_array( $this->get_method(), array( 'Tar', 'TarGz', 'TarBz2' ) ) ) {
|
207 |
+
$footer = pack( "a1024", "" );
|
208 |
+
if ( $this->method == 'TarGz' ) {
|
209 |
+
$footer = gzencode( $footer );
|
210 |
+
}
|
211 |
+
if ( $this->method == 'TarBz2' ) {
|
212 |
+
$footer = bzcompress( $footer );
|
213 |
+
}
|
214 |
+
fwrite( $this->filehandel, $footer );
|
215 |
+
}
|
216 |
+
}
|
217 |
+
|
218 |
+
/**
|
219 |
+
* Get method that the archive uses
|
220 |
+
*
|
221 |
+
* @return string of compression method
|
222 |
+
*/
|
223 |
+
public function get_method() {
|
224 |
+
|
225 |
+
return $this->method;
|
226 |
+
}
|
227 |
+
|
228 |
+
|
229 |
+
/**
|
230 |
+
* Adds a file to Archive
|
231 |
+
*
|
232 |
+
* @param $file_name string
|
233 |
+
* @param $name_in_archive string
|
234 |
+
* @return bool Add worked or not
|
235 |
+
*/
|
236 |
+
public function add_file( $file_name, $name_in_archive = '' ) {
|
237 |
+
|
238 |
+
$file_name = trim( $file_name );
|
239 |
+
|
240 |
+
//check param
|
241 |
+
if ( empty( $file_name ) ) {
|
242 |
+
trigger_error( __( 'File name cannot be empty', 'backwpup' ), E_USER_WARNING );
|
243 |
+
return FALSE;
|
244 |
+
}
|
245 |
+
|
246 |
+
if ( version_compare( PHP_VERSION, '5.3', '>=' ) ) {
|
247 |
+
clearstatcache( TRUE, $file_name );
|
248 |
+
}
|
249 |
+
|
250 |
+
if ( ! is_readable( $file_name ) ) {
|
251 |
+
trigger_error( sprintf( _x( 'File %s does not exist or is not readable', 'File to add to archive', 'backwpup' ), $file_name ), E_USER_WARNING );
|
252 |
+
return TRUE;
|
253 |
+
}
|
254 |
+
|
255 |
+
if ( empty( $name_in_archive ) )
|
256 |
+
$name_in_archive = $file_name;
|
257 |
+
|
258 |
+
//remove reserved chars
|
259 |
+
$name_in_archive = str_replace( array("?", "[", "]", "\\", "=", "<", ">", ":", ";", ",", "'", "\"", "&", "$", "#", "*", "(", ")", "|", "~", "`", "!", "{", "}", chr(0)) , '', $name_in_archive );
|
260 |
+
|
261 |
+
switch ( $this->get_method() ) {
|
262 |
+
case 'gz':
|
263 |
+
if ( $this->file_count > 0 ) {
|
264 |
+
trigger_error( __( 'This archive method can only add one file', 'backwpup' ), E_USER_WARNING );
|
265 |
+
return FALSE;
|
266 |
+
}
|
267 |
+
//add file to archive
|
268 |
+
if ( ! ( $fd = fopen( $file_name, 'rb' ) ) ) {
|
269 |
+
trigger_error( sprintf( __( 'Cannot open source file %s to archive', 'backwpup' ), $file_name ), E_USER_WARNING );
|
270 |
+
return FALSE;
|
271 |
+
}
|
272 |
+
while ( ! feof( $fd ) ) {
|
273 |
+
fwrite( $this->filehandel, fread( $fd, 8192 ) );
|
274 |
+
}
|
275 |
+
fclose( $fd );
|
276 |
+
$this->file_count++;
|
277 |
+
break;
|
278 |
+
case 'bz':
|
279 |
+
if ( $this->file_count > 0 ) {
|
280 |
+
trigger_error( __( 'This archive method can only add one file', 'backwpup' ), E_USER_WARNING );
|
281 |
+
return FALSE;
|
282 |
+
}
|
283 |
+
//add file to archive
|
284 |
+
if ( ! ( $fd = fopen( $file_name, 'rb' ) ) ) {
|
285 |
+
trigger_error( sprintf( __( 'Cannot open source file %s to archive', 'backwpup' ), $file_name ), E_USER_WARNING );
|
286 |
+
return FALSE;
|
287 |
+
}
|
288 |
+
while ( ! feof( $fd ) ) {
|
289 |
+
fwrite( $this->filehandel, bzcompress( fread( $fd, 8192 ) ) );
|
290 |
+
}
|
291 |
+
fclose( $fd );
|
292 |
+
$this->file_count++;
|
293 |
+
break;
|
294 |
+
case 'Tar':
|
295 |
+
case 'TarGz':
|
296 |
+
case 'TarBz2':
|
297 |
+
return $this->tar_file( $file_name, $name_in_archive );
|
298 |
+
break;
|
299 |
+
case 'ZipArchive':
|
300 |
+
$file_size = abs( (int) filesize( $file_name ) );
|
301 |
+
//check if entry already in archive and delete it if it not in full size
|
302 |
+
if ( $zip_file_stat = $this->ziparchive->statName( $name_in_archive ) ) {
|
303 |
+
if ( $zip_file_stat[ 'size' ] != $file_size ) {
|
304 |
+
$this->ziparchive->deleteName( $name_in_archive );
|
305 |
+
//reopen on deletion
|
306 |
+
$this->file_count = 21;
|
307 |
+
} else {
|
308 |
+
//file already complete in archive
|
309 |
+
return TRUE;
|
310 |
+
}
|
311 |
+
}
|
312 |
+
//close and reopen, all added files are open on fs
|
313 |
+
if ( $this->file_count > 20 ) { //35 works with PHP 5.2.4 on win
|
314 |
+
if ( ! $this->ziparchive->close() ) {
|
315 |
+
sleep( 1 );
|
316 |
+
if ( ! $this->ziparchive->close() ) {
|
317 |
+
sleep( 1 );
|
318 |
+
if ( ! $this->ziparchive->close() ) {
|
319 |
+
trigger_error(__( 'ZipArchive can not closed correctly', 'backwpup' ), E_USER_ERROR );
|
320 |
+
}
|
321 |
+
}
|
322 |
+
}
|
323 |
+
$this->ziparchive = NULL;
|
324 |
+
if ( ! $this->check_archive_filesize() ) {
|
325 |
+
return FALSE;
|
326 |
+
}
|
327 |
+
$this->ziparchive = new ZipArchive();
|
328 |
+
$ziparchive_open = $this->ziparchive->open( $this->file, ZipArchive::CREATE );
|
329 |
+
if ( $ziparchive_open !== TRUE ) {
|
330 |
+
$this->ziparchive_status();
|
331 |
+
return FALSE;
|
332 |
+
}
|
333 |
+
$this->file_count = 0;
|
334 |
+
}
|
335 |
+
if ( $file_size < ( 1024 * 1024 * 2 ) ) {
|
336 |
+
if ( ! $this->ziparchive->addFromString( $name_in_archive, file_get_contents( $file_name ) ) ) {
|
337 |
+
$this->ziparchive_status();
|
338 |
+
trigger_error( sprintf( __( 'Cannot add "%s" to zip archive!', 'backwpup' ), $name_in_archive ), E_USER_ERROR );
|
339 |
+
return FALSE;
|
340 |
+
} else {
|
341 |
+
$file_factor = round( $file_size / ( 1024 * 1024 ), 4 ) * 2;
|
342 |
+
$this->file_count = $this->file_count + $file_factor;
|
343 |
+
}
|
344 |
+
} else {
|
345 |
+
if ( ! $this->ziparchive->addFile( $file_name, $name_in_archive ) ) {
|
346 |
+
$this->ziparchive_status();
|
347 |
+
trigger_error( sprintf( __( 'Cannot add "%s" to zip archive!', 'backwpup' ), $name_in_archive ), E_USER_ERROR );
|
348 |
+
return FALSE;
|
349 |
+
} else {
|
350 |
+
$this->file_count++;
|
351 |
+
}
|
352 |
+
}
|
353 |
+
break;
|
354 |
+
case 'PclZip':
|
355 |
+
$this->pclzip_file_list[] = array( PCLZIP_ATT_FILE_NAME => $file_name, PCLZIP_ATT_FILE_NEW_FULL_NAME => $name_in_archive );
|
356 |
+
if ( count( $this->pclzip_file_list ) >= 100 ) {
|
357 |
+
if ( 0 == $this->pclzip->add( $this->pclzip_file_list ) ) {
|
358 |
+
trigger_error( sprintf( __( 'PclZip archive add error: %s', 'backwpup' ), $this->pclzip->errorInfo( TRUE ) ), E_USER_ERROR );
|
359 |
+
return FALSE;
|
360 |
+
}
|
361 |
+
$this->pclzip_file_list = array();
|
362 |
+
}
|
363 |
+
break;
|
364 |
+
}
|
365 |
+
|
366 |
+
return TRUE;
|
367 |
+
}
|
368 |
+
|
369 |
+
/**
|
370 |
+
* Add a empty Folder to archive
|
371 |
+
*
|
372 |
+
* @param $folder_name string Name of folder to add to archive
|
373 |
+
* @param string $name_in_archive
|
374 |
+
* @throws BackWPup_Create_Archive_Exception
|
375 |
+
* @return bool
|
376 |
+
*/
|
377 |
+
public function add_empty_folder( $folder_name, $name_in_archive = '' ) {
|
378 |
+
|
379 |
+
$folder_name = trim( $folder_name );
|
380 |
+
|
381 |
+
//check param
|
382 |
+
if ( empty( $folder_name ) ) {
|
383 |
+
trigger_error( __( 'Folder name cannot be empty', 'backwpup' ), E_USER_WARNING );
|
384 |
+
return FALSE;
|
385 |
+
}
|
386 |
+
|
387 |
+
if ( ! is_dir( $folder_name ) || ! is_readable( $folder_name ) ) {
|
388 |
+
trigger_error( sprintf( _x( 'Folder %s does not exist or is not readable', 'Folder path to add to archive', 'backwpup' ), $folder_name ), E_USER_WARNING );
|
389 |
+
return TRUE;
|
390 |
+
}
|
391 |
+
|
392 |
+
if ( empty( $name_in_archive ) ) {
|
393 |
+
return FALSE;
|
394 |
+
}
|
395 |
+
|
396 |
+
//remove reserved chars
|
397 |
+
$name_in_archive = str_replace( array("?", "[", "]", "\\", "=", "<", ">", ":", ";", ",", "'", "\"", "&", "$", "#", "*", "(", ")", "|", "~", "`", "!", "{", "}", chr(0)) , '', $name_in_archive );
|
398 |
+
|
399 |
+
switch ( $this->get_method() ) {
|
400 |
+
case 'gz':
|
401 |
+
trigger_error( __( 'This archive method can only add one file', 'backwpup' ), E_USER_ERROR );
|
402 |
+
return FALSE;
|
403 |
+
break;
|
404 |
+
case 'bz':
|
405 |
+
trigger_error( __( 'This archive method can only add one file', 'backwpup' ), E_USER_ERROR );
|
406 |
+
return FALSE;
|
407 |
+
break;
|
408 |
+
case 'Tar':
|
409 |
+
case 'TarGz':
|
410 |
+
case 'TarBz2':
|
411 |
+
if ( ! $this->tar_empty_folder( $folder_name, $name_in_archive ) );
|
412 |
+
return FALSE;
|
413 |
+
break;
|
414 |
+
case 'ZipArchive':
|
415 |
+
if ( ! $this->ziparchive->addEmptyDir( $name_in_archive ) ) {
|
416 |
+
trigger_error( sprintf( __( 'Cannot add "%s" to zip archive!', 'backwpup' ), $name_in_archive ), E_USER_WARNING );
|
417 |
+
return FALSE;
|
418 |
+
}
|
419 |
+
break;
|
420 |
+
case 'PclZip':
|
421 |
+
return TRUE;
|
422 |
+
break;
|
423 |
+
}
|
424 |
+
|
425 |
+
return TRUE;
|
426 |
+
}
|
427 |
+
|
428 |
+
/**
|
429 |
+
* Output status of ZipArchive
|
430 |
+
*
|
431 |
+
* @return bool
|
432 |
+
*/
|
433 |
+
private function ziparchive_status() {
|
434 |
+
|
435 |
+
if ( $this->ziparchive->status == 0 )
|
436 |
+
return TRUE;
|
437 |
+
|
438 |
+
trigger_error( sprintf( _x( 'ZipArchive returns status: %s','Text of ZipArchive status Message', 'backwpup' ), $this->ziparchive->getStatusString() ), E_USER_ERROR );
|
439 |
+
return FALSE;
|
440 |
+
}
|
441 |
+
|
442 |
+
/**
|
443 |
+
* Tar a file to archive
|
444 |
+
*/
|
445 |
+
private function tar_file( $file_name, $name_in_archive ) {
|
446 |
+
|
447 |
+
if ( ! $this->check_archive_filesize( $file_name ) ) {
|
448 |
+
return FALSE;
|
449 |
+
}
|
450 |
+
|
451 |
+
$chunk_size = 1024 * 1024 * 4;
|
452 |
+
|
453 |
+
//split filename larger than 100 chars
|
454 |
+
if ( strlen( $name_in_archive ) <= 100 ) {
|
455 |
+
$filename = $name_in_archive;
|
456 |
+
$filename_prefix = "";
|
457 |
+
}
|
458 |
+
else {
|
459 |
+
$filename_offset = strlen( $name_in_archive ) - 100;
|
460 |
+
$split_pos = strpos( $name_in_archive, '/', $filename_offset );
|
461 |
+
if ( $split_pos === FALSE ) {
|
462 |
+
$split_pos = strrpos( $name_in_archive, '/' );
|
463 |
+
}
|
464 |
+
$filename = substr( $name_in_archive, $split_pos + 1 );
|
465 |
+
$filename_prefix = substr( $name_in_archive, 0, $split_pos );
|
466 |
+
if ( strlen( $filename ) > 100 ) {
|
467 |
+
$filename = substr( $filename, -100 );
|
468 |
+
trigger_error( sprintf( __( 'File name "%1$s" is too long to be saved correctly in %2$s archive!', 'backwpup' ), $name_in_archive, $this->get_method() ), E_USER_WARNING );
|
469 |
+
}
|
470 |
+
if ( strlen( $filename_prefix ) > 155 ) {
|
471 |
+
trigger_error( sprintf( __( 'File path "%1$s" is too long to be saved correctly in %2$s archive!', 'backwpup' ), $name_in_archive, $this->get_method() ), E_USER_WARNING );
|
472 |
+
}
|
473 |
+
}
|
474 |
+
//get file stat
|
475 |
+
$file_stat = stat( $file_name );
|
476 |
+
if ( ! $file_stat ) {
|
477 |
+
return TRUE;
|
478 |
+
}
|
479 |
+
$file_stat[ 'size' ] = abs( (int) $file_stat[ 'size' ] );
|
480 |
+
//open file
|
481 |
+
if ( $file_stat[ 'size' ] > 0 ) {
|
482 |
+
if ( ! ( $fd = fopen( $file_name, 'rb' ) ) ) {
|
483 |
+
trigger_error( sprintf( __( 'Cannot open source file %s for archiving', 'backwpup' ), $file_name ), E_USER_WARNING );
|
484 |
+
return TRUE;
|
485 |
+
}
|
486 |
+
}
|
487 |
+
//Set file user/group name if linux
|
488 |
+
$fileowner = __( "Unknown", "backwpup" );
|
489 |
+
$filegroup = __( "Unknown", "backwpup" );
|
490 |
+
if ( function_exists( 'posix_getpwuid' ) ) {
|
491 |
+
$info = posix_getpwuid( $file_stat[ 'uid' ] );
|
492 |
+
$fileowner = $info[ 'name' ];
|
493 |
+
$info = posix_getgrgid( $file_stat[ 'gid' ] );
|
494 |
+
$filegroup = $info[ 'name' ];
|
495 |
+
}
|
496 |
+
// Generate the TAR header for this file
|
497 |
+
$chunk = pack( "a100a8a8a8a12a12a8a1a100a6a2a32a32a8a8a155a12",
|
498 |
+
$filename, //name of file 100
|
499 |
+
sprintf( "%07o", $file_stat[ 'mode' ] ), //file mode 8
|
500 |
+
sprintf( "%07o", $file_stat[ 'uid' ] ), //owner user ID 8
|
501 |
+
sprintf( "%07o", $file_stat[ 'gid' ] ), //owner group ID 8
|
502 |
+
sprintf( "%011o", $file_stat[ 'size' ] ), //length of file in bytes 12
|
503 |
+
sprintf( "%011o", $file_stat[ 'mtime' ] ), //modify time of file 12
|
504 |
+
" ", //checksum for header 8
|
505 |
+
0, //type of file 0 or null = File, 5=Dir
|
506 |
+
"", //name of linked file 100
|
507 |
+
"ustar", //USTAR indicator 6
|
508 |
+
"00", //USTAR version 2
|
509 |
+
$fileowner, //owner user name 32
|
510 |
+
$filegroup, //owner group name 32
|
511 |
+
"", //device major number 8
|
512 |
+
"", //device minor number 8
|
513 |
+
$filename_prefix, //prefix for file name 155
|
514 |
+
"" ); //fill block 12
|
515 |
+
|
516 |
+
// Computes the unsigned Checksum of a file's header
|
517 |
+
$checksum = 0;
|
518 |
+
for ( $i = 0; $i < 512; $i ++ ) {
|
519 |
+
$checksum += ord( substr( $chunk, $i, 1 ) );
|
520 |
+
}
|
521 |
+
|
522 |
+
$checksum = pack( "a8", sprintf( "%07o", $checksum ) );
|
523 |
+
$chunk = substr_replace( $chunk, $checksum, 148, 8 );
|
524 |
+
|
525 |
+
if ( isset( $fd ) && is_resource( $fd ) ) {
|
526 |
+
// read/write files in 512 bite Blocks
|
527 |
+
while ( ( $content = fread( $fd, 512 ) ) != '' ) {
|
528 |
+
$chunk .= pack( "a512", $content );
|
529 |
+
if ( strlen( $chunk ) >= $chunk_size ) {
|
530 |
+
if ( $this->method == 'TarGz' ) {
|
531 |
+
$chunk = gzencode( $chunk );
|
532 |
+
}
|
533 |
+
if ( $this->method == 'TarBz2' ) {
|
534 |
+
$chunk = bzcompress( $chunk );
|
535 |
+
}
|
536 |
+
fwrite( $this->filehandel, $chunk );
|
537 |
+
$chunk = '';
|
538 |
+
}
|
539 |
+
}
|
540 |
+
fclose( $fd );
|
541 |
+
}
|
542 |
+
|
543 |
+
if ( ! empty( $chunk ) ) {
|
544 |
+
if ( $this->method == 'TarGz' ) {
|
545 |
+
$chunk = gzencode( $chunk );
|
546 |
+
}
|
547 |
+
if ( $this->method == 'TarBz2' ) {
|
548 |
+
$chunk = bzcompress( $chunk );
|
549 |
+
}
|
550 |
+
fwrite( $this->filehandel, $chunk );
|
551 |
+
}
|
552 |
+
|
553 |
+
return TRUE;
|
554 |
+
}
|
555 |
+
|
556 |
+
|
557 |
+
/**
|
558 |
+
* Tar a empty Folder to archive
|
559 |
+
*/
|
560 |
+
private function tar_empty_folder( $folder_name, $name_in_archive ) {
|
561 |
+
|
562 |
+
$name_in_archive = trailingslashit( $name_in_archive );
|
563 |
+
|
564 |
+
//split filename larger than 100 chars
|
565 |
+
if ( strlen( $name_in_archive ) <= 100 ) {
|
566 |
+
$tar_filename = $name_in_archive;
|
567 |
+
$tar_filename_prefix = "";
|
568 |
+
}
|
569 |
+
else {
|
570 |
+
$filename_offset = strlen( $name_in_archive ) - 100;
|
571 |
+
$split_pos = strpos( $name_in_archive, '/', $filename_offset );
|
572 |
+
if ( $split_pos === FALSE ) {
|
573 |
+
$split_pos = strrpos( untrailingslashit( $name_in_archive ), '/' );
|
574 |
+
}
|
575 |
+
$tar_filename = substr( $name_in_archive, $split_pos + 1 );
|
576 |
+
$tar_filename_prefix = substr( $name_in_archive, 0, $split_pos );
|
577 |
+
if ( strlen( $tar_filename ) > 100 ) {
|
578 |
+
$tar_filename = substr( $tar_filename, - 100 );
|
579 |
+
trigger_error( sprintf( __( 'Folder name "%1$s" is too long to be saved correctly in %2$s archive!', 'backwpup' ), $name_in_archive, $this->get_method() ), E_USER_WARNING );
|
580 |
+
}
|
581 |
+
if ( strlen( $tar_filename_prefix ) > 155 ) {
|
582 |
+
trigger_error( sprintf( __( 'Folder path "%1$s" is too long to be saved correctly in %2$s archive!', 'backwpup' ), $name_in_archive, $this->get_method() ), E_USER_WARNING );
|
583 |
+
}
|
584 |
+
}
|
585 |
+
//get file stat
|
586 |
+
$file_stat = @stat( $folder_name );
|
587 |
+
//Set file user/group name if linux
|
588 |
+
$fileowner = __( "Unknown", "backwpup" );
|
589 |
+
$filegroup = __( "Unknown", "backwpup" );
|
590 |
+
if ( function_exists( 'posix_getpwuid' ) ) {
|
591 |
+
$info = posix_getpwuid( $file_stat[ 'uid' ] );
|
592 |
+
$fileowner = $info[ 'name' ];
|
593 |
+
$info = posix_getgrgid( $file_stat[ 'gid' ] );
|
594 |
+
$filegroup = $info[ 'name' ];
|
595 |
+
}
|
596 |
+
// Generate the TAR header for this file
|
597 |
+
$header = pack( "a100a8a8a8a12a12a8a1a100a6a2a32a32a8a8a155a12",
|
598 |
+
$tar_filename, //name of file 100
|
599 |
+
sprintf( "%07o", $file_stat[ 'mode' ] ), //file mode 8
|
600 |
+
sprintf( "%07o", $file_stat[ 'uid' ] ), //owner user ID 8
|
601 |
+
sprintf( "%07o", $file_stat[ 'gid' ] ), //owner group ID 8
|
602 |
+
sprintf( "%011o", 0 ), //length of file in bytes 12
|
603 |
+
sprintf( "%011o", $file_stat[ 'mtime' ] ), //modify time of file 12
|
604 |
+
" ", //checksum for header 8
|
605 |
+
5, //type of file 0 or null = File, 5=Dir
|
606 |
+
"", //name of linked file 100
|
607 |
+
"ustar", //USTAR indicator 6
|
608 |
+
"00", //USTAR version 2
|
609 |
+
$fileowner, //owner user name 32
|
610 |
+
$filegroup, //owner group name 32
|
611 |
+
"", //device major number 8
|
612 |
+
"", //device minor number 8
|
613 |
+
$tar_filename_prefix, //prefix for file name 155
|
614 |
+
"" ); //fill block 12
|
615 |
+
|
616 |
+
// Computes the unsigned Checksum of a file's header
|
617 |
+
$checksum = 0;
|
618 |
+
for ( $i = 0; $i < 512; $i ++ ) {
|
619 |
+
$checksum += ord( substr( $header, $i, 1 ) );
|
620 |
+
}
|
621 |
+
|
622 |
+
$checksum = pack( "a8", sprintf( "%07o", $checksum ) );
|
623 |
+
$header = substr_replace( $header, $checksum, 148, 8 );
|
624 |
+
//write header
|
625 |
+
if ( $this->method == 'TarGz' ) {
|
626 |
+
$header = gzencode( $header );
|
627 |
+
}
|
628 |
+
if ( $this->method == 'TarBz2' ) {
|
629 |
+
$header = bzcompress( $header );
|
630 |
+
}
|
631 |
+
fwrite( $this->filehandel, $header );
|
632 |
+
|
633 |
+
return TRUE;
|
634 |
+
}
|
635 |
+
|
636 |
+
/**
|
637 |
+
* @param string $file_to_add
|
638 |
+
*
|
639 |
+
* @return bool
|
640 |
+
*/
|
641 |
+
private function check_archive_filesize( $file_to_add = '' ) {
|
642 |
+
|
643 |
+
$two_gb_in_bytes = 2147483647;
|
644 |
+
|
645 |
+
if ( ! empty( $file_to_add ) ) {
|
646 |
+
$file_to_add_size = abs( (int) filesize( $file_to_add ) );
|
647 |
+
} else {
|
648 |
+
$file_to_add_size = 0;
|
649 |
+
}
|
650 |
+
|
651 |
+
if ( is_resource( $this->filehandel ) ) {
|
652 |
+
$stats = fstat( $this->filehandel );
|
653 |
+
$archive_size = $stats[ 'size' ];
|
654 |
+
} else {
|
655 |
+
$archive_size = filesize( $this->file );
|
656 |
+
}
|
657 |
+
|
658 |
+
$archive_size = $archive_size + $file_to_add_size;
|
659 |
+
if ( $archive_size > $two_gb_in_bytes ) {
|
660 |
+
trigger_error( sprintf( __( 'If %s will be added to your backup archive, the archive will be too large for many file systems (over 2GB). You might want to consider splitting the backup job in multiple jobs with less files each.', 'backwpup' ), $file_to_add ), E_USER_ERROR );
|
661 |
+
|
662 |
+
return FALSE;
|
663 |
+
}
|
664 |
+
|
665 |
+
return TRUE;
|
666 |
+
}
|
667 |
+
|
668 |
+
}
|
669 |
+
|
670 |
+
/**
|
671 |
+
* Exception Handler
|
672 |
+
*/
|
673 |
+
class BackWPup_Create_Archive_Exception extends Exception { }
|
inc/class-destination-dropbox.php
CHANGED
@@ -1,791 +1,792 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Documentation: https://www.dropbox.com/developers/reference/api
|
4 |
-
*/
|
5 |
-
class BackWPup_Destination_Dropbox extends BackWPup_Destinations {
|
6 |
-
|
7 |
-
/**
|
8 |
-
* @var $backwpup_job_object BackWPup_Job
|
9 |
-
*/
|
10 |
-
public static $backwpup_job_object = NULL;
|
11 |
-
|
12 |
-
/**
|
13 |
-
* @return array
|
14 |
-
*/
|
15 |
-
public function option_defaults() {
|
16 |
-
|
17 |
-
return array( 'dropboxtoken' => array(), 'dropboxroot' => 'sandbox', 'dropboxmaxbackups' => 15, 'dropboxsyncnodelete' => TRUE, 'dropboxdir' => trailingslashit( sanitize_file_name( get_bloginfo( 'name' ) ) ) );
|
18 |
-
}
|
19 |
-
|
20 |
-
|
21 |
-
/**
|
22 |
-
* @param $jobid
|
23 |
-
*/
|
24 |
-
public function edit_tab( $jobid ) {
|
25 |
-
|
26 |
-
if ( ! empty( $_GET[ 'deleteauth' ] ) && $_GET[ 'deleteauth' ] == 1 ) {
|
27 |
-
//disable token on dropbox
|
28 |
-
try {
|
29 |
-
$dropbox = new BackWPup_Destination_Dropbox_API( BackWPup_Option::get( $jobid, 'dropboxroot' ) );
|
30 |
-
if ( BackWPup_Option::get( $jobid, 'dropboxsecret' ) )
|
31 |
-
$dropbox->setOAuthTokens( array( 'access_token' => BackWPup_Option::get( $jobid, 'dropboxtoken' ), 'oauth_token_secret' => BackWPup_Encryption::decrypt( BackWPup_Option::get( $jobid, 'dropboxsecret' ) ) ) );
|
32 |
-
else
|
33 |
-
$dropbox->setOAuthTokens( BackWPup_Option::get( $jobid, 'dropboxtoken' ) );
|
34 |
-
$dropbox->disable_access_token();
|
35 |
-
} catch ( Exception $e ) {
|
36 |
-
echo '<div id="message" class="error"><p>' . sprintf( __( 'Dropbox API: %s', 'backwpup' ), $e->getMessage() ) . '</p></div>';
|
37 |
-
}
|
38 |
-
BackWPup_Option::update( $jobid, 'dropboxtoken', array() );
|
39 |
-
BackWPup_Option::update( $jobid, 'dropboxroot', 'sandbox' );
|
40 |
-
BackWPup_Option::delete( $jobid, 'dropboxsecret' );
|
41 |
-
}
|
42 |
-
|
43 |
-
$dropbox = new BackWPup_Destination_Dropbox_API( 'dropbox' );
|
44 |
-
$dropbox_auth_url = $dropbox->oAuthAuthorize();
|
45 |
-
$dropbox = new BackWPup_Destination_Dropbox_API( 'sandbox' );
|
46 |
-
$sandbox_auth_url = $dropbox->oAuthAuthorize();
|
47 |
-
|
48 |
-
$dropboxtoken = BackWPup_Option::get( $jobid, 'dropboxtoken' );
|
49 |
-
?>
|
50 |
-
|
51 |
-
<h3 class="title"><?php _e( 'Login', 'backwpup' ); ?></h3>
|
52 |
-
<p></p>
|
53 |
-
<table class="form-table">
|
54 |
-
<tr>
|
55 |
-
<th scope="row"><?php _e( 'Authentication', 'backwpup' ); ?></th>
|
56 |
-
<td><?php if ( empty( $dropboxtoken[ 'access_token' ] ) ) { ?>
|
57 |
-
<span style="color:red;"><?php _e( 'Not authenticated!', 'backwpup' ); ?></span><br /> <br />
|
58 |
-
<a class="button secondary" href="http://db.tt/8irM1vQ0"><?php _e( 'Create Account', 'backwpup' ); ?></a>
|
59 |
-
<?php } else { ?>
|
60 |
-
<span style="color:green;"><?php _e( 'Authenticated!', 'backwpup' ); ?></span><br /> <br />
|
61 |
-
<a class="button secondary" href="<?php echo network_admin_url( 'admin.php' ) . '?page=backwpupeditjob&deleteauth=1&jobid=' . $jobid .'&tab=dest-dropbox&_wpnonce=' . wp_create_nonce( 'edit-job' ); ?>" title="<?php _e( 'Delete Dropbox Authentication', 'backwpup' ); ?>"><?php _e( 'Delete Dropbox Authentication', 'backwpup' ); ?></a>
|
62 |
-
<?php } ?>
|
63 |
-
</td>
|
64 |
-
</tr>
|
65 |
-
|
66 |
-
<?php if ( empty( $dropboxtoken[ 'access_token' ] ) ) { ?>
|
67 |
-
<tr>
|
68 |
-
<th scope="row"><label for="id_sandbox_code"><?php _e( 'App Access to Dropbox', 'backwpup' ); ?></label></th>
|
69 |
-
<td>
|
70 |
-
<input id="id_sandbox_code" name="sandbox_code" type="text" value="" class="regular-text code help-tip" title="<?php esc_attr_e( 'A dedicated folder named BackWPup will be created inside of the Apps folder in your Dropbox. BackWPup will get read and write access to that folder only. You can specify a subfolder as your backup destination for this job in the destination field below.', 'backwpup' ); ?>" />
|
71 |
-
<a class="button secondary" href="<?php echo $sandbox_auth_url;?>" target="_blank"><?php _e( 'Get Dropbox App auth code', 'backwpup' ); ?></a>
|
72 |
-
<p><em><?php _e( 'Allows restricted access to Apps/BackWPup folder only.', 'backwpup' ); ?></em></p>
|
73 |
-
</td>
|
74 |
-
</tr>
|
75 |
-
<tr>
|
76 |
-
<th></th>
|
77 |
-
<td><?php _e( '— OR —', 'backwpup' ); ?></td>
|
78 |
-
</tr>
|
79 |
-
<tr>
|
80 |
-
<th scope="row"><label for="id_dropbbox_code"><?php _e( 'Full Access to Dropbox', 'backwpup' ); ?></label></th>
|
81 |
-
<td>
|
82 |
-
<input id="id_dropbbox_code" name="dropbbox_code" type="text" value="" class="regular-text code help-tip" title="<?php _e( 'BackWPup will have full read and write access to your entire Dropbox. You can specify your backup destination wherever you want, just be aware that ANY files or folders inside of your Dropbox can be overridden or deleted by BackWPup.', 'backwpup' ); ?>" />
|
83 |
-
<a class="button secondary" href="<?php echo $dropbox_auth_url;?>" target="_blank"><?php _e( 'Get full Dropbox auth code ', 'backwpup' ); ?></a>
|
84 |
-
<p><em><?php _e( 'Allows full access to your entire Dropbox.', 'backwpup' ); ?></em></p>
|
85 |
-
</td>
|
86 |
-
</tr>
|
87 |
-
<?php } ?>
|
88 |
-
</table>
|
89 |
-
|
90 |
-
|
91 |
-
<h3 class="title"><?php _e( 'Backup settings', 'backwpup' ); ?></h3>
|
92 |
-
<p></p>
|
93 |
-
<table class="form-table">
|
94 |
-
<tr>
|
95 |
-
<th scope="row"><label for="iddropboxdir"><?php _e( 'Destination Folder', 'backwpup' ); ?></label></th>
|
96 |
-
<td>
|
97 |
-
<input id="iddropboxdir" name="dropboxdir" type="text" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 'dropboxdir' ) ); ?>" class="regular-text help-tip" title="<?php esc_attr_e( 'Specify a subfolder where your backup archives will be stored. If you use the App option from above, this folder will be created inside of Apps/BackWPup. Otherwise it will be created at the root of your Dropbox. Already exisiting folders with the same name will not be overriden.', 'backwpup' ); ?>" />
|
98 |
-
<p><em><?php _e( 'Folder inside your Dropbox where your backup archives will be stored.', 'theme_hamburg_textdomain' );?></em></p>
|
99 |
-
</td>
|
100 |
-
</tr>
|
101 |
-
<tr>
|
102 |
-
<th scope="row"><?php _e( 'File Deletion', 'backwpup' ); ?></th>
|
103 |
-
<td>
|
104 |
-
<?php
|
105 |
-
if ( BackWPup_Option::get( $jobid, 'backuptype' ) == 'archive' ) {
|
106 |
-
?>
|
107 |
-
<label for="iddropboxmaxbackups"><input id="iddropboxmaxbackups" name="dropboxmaxbackups" title="<?php esc_attr_e( 'Older files will be deleted first. 0 = no files will be deleted.', 'backwpup' ); ?>" type="text" size="3" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 'dropboxmaxbackups' ) );?>" class="small-text help-tip" />
|
108 |
-
<em><?php _e( 'Number of files to keep in folder.', 'backwpup' ); ?></em></label>
|
109 |
-
<?php } else { ?>
|
110 |
-
<label for="iddropboxsyncnodelete" ><input class="checkbox" value="1"
|
111 |
-
type="checkbox" <?php checked( BackWPup_Option::get( $jobid, 'dropboxsyncnodelete' ), TRUE ); ?>
|
112 |
-
name="dropboxsyncnodelete" id="iddropboxsyncnodelete" /> <?php _e( 'Do not delete files while syncing to destination!', 'backwpup' ); ?></label>
|
113 |
-
<?php } ?>
|
114 |
-
</td>
|
115 |
-
</tr>
|
116 |
-
</table>
|
117 |
-
|
118 |
-
<?php
|
119 |
-
}
|
120 |
-
|
121 |
-
/**
|
122 |
-
* @param $jobid
|
123 |
-
* @return string|void
|
124 |
-
*/
|
125 |
-
public function edit_form_post_save( $jobid ) {
|
126 |
-
|
127 |
-
// get auth
|
128 |
-
if ( ! empty( $_POST[ 'sandbox_code' ] ) ) {
|
129 |
-
try {
|
130 |
-
$dropbox = new BackWPup_Destination_Dropbox_API( 'sandbox' );
|
131 |
-
$dropboxtoken = $dropbox->oAuthToken( $_POST[ 'sandbox_code' ] );
|
132 |
-
BackWPup_Option::update( $jobid, 'dropboxtoken', $dropboxtoken );
|
133 |
-
BackWPup_Option::update( $jobid, 'dropboxroot', 'sandbox' );
|
134 |
-
} catch ( Exception $e ) {
|
135 |
-
BackWPup_Admin::message( 'DROPBOX: ' . $e->getMessage(), TRUE );
|
136 |
-
}
|
137 |
-
}
|
138 |
-
|
139 |
-
if ( ! empty( $_POST[ 'dropbbox_code' ] ) ) {
|
140 |
-
try {
|
141 |
-
$dropbox = new BackWPup_Destination_Dropbox_API( 'dropbox' );
|
142 |
-
$dropboxtoken = $dropbox->oAuthToken( $_POST[ 'dropbbox_code' ] );
|
143 |
-
BackWPup_Option::update( $jobid, 'dropboxtoken', $dropboxtoken );
|
144 |
-
BackWPup_Option::update( $jobid, 'dropboxroot', 'dropbox' );
|
145 |
-
} catch ( Exception $e ) {
|
146 |
-
BackWPup_Admin::message( 'DROPBOX: ' . $e->getMessage(), TRUE );
|
147 |
-
}
|
148 |
-
}
|
149 |
-
|
150 |
-
BackWPup_Option::update( $jobid, 'dropboxsyncnodelete', ( isset( $_POST[ 'dropboxsyncnodelete' ] ) && $_POST[ 'dropboxsyncnodelete' ] == 1 ) ? TRUE : FALSE );
|
151 |
-
BackWPup_Option::update( $jobid, 'dropboxmaxbackups', isset( $_POST[ 'dropboxmaxbackups' ] ) ? (int)$_POST[ 'dropboxmaxbackups' ] : 0 );
|
152 |
-
|
153 |
-
$_POST[ 'dropboxdir' ] = trailingslashit( str_replace( '//', '/', str_replace( '\\', '/', trim( stripslashes( $_POST[ 'dropboxdir' ] ) ) ) ) );
|
154 |
-
if ( substr( $_POST[ 'dropboxdir' ], 0, 1 ) == '/' )
|
155 |
-
$_POST[ 'dropboxdir' ] = substr( $_POST[ 'dropboxdir' ], 1 );
|
156 |
-
if ( $_POST[ 'dropboxdir' ] == '/' )
|
157 |
-
$_POST[ 'dropboxdir' ] = '';
|
158 |
-
BackWPup_Option::update( $jobid, 'dropboxdir', $_POST[ 'dropboxdir' ] );
|
159 |
-
|
160 |
-
}
|
161 |
-
|
162 |
-
/**
|
163 |
-
* @param $jobdest
|
164 |
-
* @param $backupfile
|
165 |
-
*/
|
166 |
-
public function file_delete( $jobdest, $backupfile ) {
|
167 |
-
|
168 |
-
$files = get_site_transient( 'backwpup_' . strtolower( $jobdest ) );
|
169 |
-
list( $jobid, $dest ) = explode( '_', $jobdest );
|
170 |
-
|
171 |
-
if ( BackWPup_Option::get( $jobid, 'dropboxtoken' ) && BackWPup_Option::get( $jobid, 'dropboxsecret' ) ) {
|
172 |
-
try {
|
173 |
-
$dropbox = new BackWPup_Destination_Dropbox_API( BackWPup_Option::get( $jobid, 'dropboxroot' ) );
|
174 |
-
$dropbox->setOAuthTokens( BackWPup_Option::get( $jobid, 'dropboxtoken' ) );
|
175 |
-
$dropbox->fileopsDelete( $backupfile );
|
176 |
-
//update file list
|
177 |
-
foreach ( $files as $key => $file ) {
|
178 |
-
if ( is_array( $file ) && $file[ 'file' ] == $backupfile )
|
179 |
-
unset( $files[ $key ] );
|
180 |
-
}
|
181 |
-
unset( $dropbox );
|
182 |
-
}
|
183 |
-
catch ( Exception $e ) {
|
184 |
-
BackWPup_Admin::message( 'DROPBOX: ' . $e->getMessage(), TRUE );
|
185 |
-
}
|
186 |
-
}
|
187 |
-
set_site_transient( 'backwpup_' . strtolower( $jobdest ), $files, 60 * 60 * 24 * 7 );
|
188 |
-
}
|
189 |
-
|
190 |
-
/**
|
191 |
-
* @param $jobid
|
192 |
-
* @param $get_file
|
193 |
-
*/
|
194 |
-
public function file_download( $jobid, $get_file ) {
|
195 |
-
|
196 |
-
try {
|
197 |
-
$dropbox = new BackWPup_Destination_Dropbox_API( BackWPup_Option::get( $jobid, 'dropboxroot' ) );
|
198 |
-
$dropbox->setOAuthTokens( BackWPup_Option::get( $jobid, 'dropboxtoken' ) );
|
199 |
-
$media = $dropbox->media( $get_file );
|
200 |
-
if ( ! empty( $media[ 'url' ] ) )
|
201 |
-
header( "Location: " . $media[ 'url' ] );
|
202 |
-
die();
|
203 |
-
}
|
204 |
-
catch ( Exception $e ) {
|
205 |
-
die( $e->getMessage() );
|
206 |
-
}
|
207 |
-
}
|
208 |
-
|
209 |
-
/**
|
210 |
-
* @param $jobdest
|
211 |
-
* @return mixed
|
212 |
-
*/
|
213 |
-
public function file_get_list( $jobdest ) {
|
214 |
-
return get_site_transient( 'BackWPup_' . $jobdest );
|
215 |
-
}
|
216 |
-
|
217 |
-
/**
|
218 |
-
* @param $job_object
|
219 |
-
* @return bool
|
220 |
-
*/
|
221 |
-
public function job_run_archive( &$job_object ) {
|
222 |
-
|
223 |
-
$job_object->substeps_todo = 2 + $job_object->backup_filesize;
|
224 |
-
if ( $job_object->steps_data[ $job_object->step_working ]['SAVE_STEP_TRY'] != $job_object->steps_data[ $job_object->step_working ][ 'STEP_TRY' ] )
|
225 |
-
$job_object->log( sprintf( __( '%d. Try to send backup file to Dropbox …', 'backwpup' ), $job_object->steps_data[ $job_object->step_working ][ 'STEP_TRY' ] ), E_USER_NOTICE );
|
226 |
-
|
227 |
-
try {
|
228 |
-
$dropbox = new BackWPup_Destination_Dropbox_API( $job_object->job[ 'dropboxroot' ] );
|
229 |
-
// cahnge oauth1 to oauth2 token
|
230 |
-
if ( ! empty( $job_object->job[ 'dropboxsecret' ] ) && empty( $job_object->job[ 'dropboxtoken' ][ 'access_token' ] ) ) {
|
231 |
-
$dropbox->setOAuthTokens( array( 'access_token' => $job_object->job[ 'dropboxtoken' ], 'oauth_token_secret' => BackWPup_Encryption::decrypt( $job_object->job[ 'dropboxsecret' ] ) ) );
|
232 |
-
$job_object->job[ 'dropboxtoken' ] = $dropbox->token_from_oauth1();
|
233 |
-
BackWPup_Option::update( $job_object->job[ 'jobid' ], 'dropboxtoken', $job_object->job[ 'dropboxtoken' ] );
|
234 |
-
BackWPup_Option::delete( $job_object->job[ 'jobid' ], 'dropboxsecret' );
|
235 |
-
}
|
236 |
-
// set the tokens
|
237 |
-
$dropbox->setOAuthTokens( $job_object->job[ 'dropboxtoken' ] );
|
238 |
-
|
239 |
-
//get account info
|
240 |
-
if ( $job_object->steps_data[ $job_object->step_working ]['SAVE_STEP_TRY'] != $job_object->steps_data[ $job_object->step_working ][ 'STEP_TRY' ] ) {
|
241 |
-
$info = $dropbox->accountInfo();
|
242 |
-
if ( ! empty( $info[ 'uid' ] ) ) {
|
243 |
-
$job_object->log( sprintf( __( 'Authenticated with Dropbox of user %s', 'backwpup' ), $info[ 'display_name' ] . ' (' . $info[ 'email' ] . ')' ), E_USER_NOTICE );
|
244 |
-
//Quota
|
245 |
-
$dropboxfreespase = $info[ 'quota_info' ][ 'quota' ] - $info[ 'quota_info' ][ 'shared' ] - $info[ 'quota_info' ][ 'normal' ];
|
246 |
-
$job_object->log( sprintf( __( '%s available on your Dropbox', 'backwpup' ), size_format( $dropboxfreespase, 2 ) ), E_USER_NOTICE );
|
247 |
-
} else {
|
248 |
-
$job_object->log( __( 'Not Authenticated with Dropbox!', 'backwpup' ), E_USER_ERROR );
|
249 |
-
return FALSE;
|
250 |
-
}
|
251 |
-
$job_object->log( __( 'Uploading to Dropbox …', 'backwpup' ), E_USER_NOTICE );
|
252 |
-
}
|
253 |
-
|
254 |
-
// put the file
|
255 |
-
self::$backwpup_job_object = &$job_object;
|
256 |
-
|
257 |
-
if ( $job_object->substeps_done < $job_object->backup_filesize ) { //only if upload not complete
|
258 |
-
$response = $dropbox->upload( $job_object->backup_folder . $job_object->backup_file, $job_object->job[ 'dropboxdir' ] . $job_object->backup_file );
|
259 |
-
if ( $response[ 'bytes' ] == $job_object->backup_filesize ) {
|
260 |
-
if ( ! empty( $job_object->job[ 'jobid' ] ) )
|
261 |
-
BackWPup_Option::update( $job_object->job[ 'jobid' ], 'lastbackupdownloadurl', network_admin_url( 'admin.php' ) . '?page=backwpupbackups&action=downloaddropbox&file=' . ltrim( $response[ 'path' ], '/' ) . '&jobid=' . $job_object->job[ 'jobid' ] );
|
262 |
-
$job_object->substeps_done = 1 + $job_object->backup_filesize;
|
263 |
-
$job_object->log( sprintf( __( 'Backup transferred to %s', 'backwpup' ), 'https://api-content.dropbox.com/1/files/' . $job_object->job[ 'dropboxroot' ] . $response[ 'path' ] ), E_USER_NOTICE );
|
264 |
-
}
|
265 |
-
else {
|
266 |
-
if ( $response[ 'bytes' ] != $job_object->backup_filesize )
|
267 |
-
$job_object->log( __( 'Uploaded file size and local file size don\'t match.', 'backwpup' ), E_USER_ERROR );
|
268 |
-
else
|
269 |
-
$job_object->log(
|
270 |
-
sprintf(
|
271 |
-
__( 'Error transfering backup to %s.', 'backwpup' ) . ' ' . $response[ 'error' ],
|
272 |
-
__( 'Dropbox', 'backwpup' )
|
273 |
-
), E_USER_ERROR );
|
274 |
-
|
275 |
-
return FALSE;
|
276 |
-
}
|
277 |
-
}
|
278 |
-
|
279 |
-
|
280 |
-
$backupfilelist = array();
|
281 |
-
$filecounter = 0;
|
282 |
-
$files = array();
|
283 |
-
$metadata = $dropbox->metadata( $job_object->job[ 'dropboxdir' ] );
|
284 |
-
if ( is_array( $metadata ) ) {
|
285 |
-
foreach ( $metadata[ 'contents' ] as $data ) {
|
286 |
-
if ( $data[ 'is_dir' ] != TRUE ) {
|
287 |
-
$file = basename( $data[ 'path' ] );
|
288 |
-
if ( $job_object->is_backup_archive( $file ) )
|
289 |
-
$backupfilelist[ strtotime( $data[ 'modified' ] ) ] = $file;
|
290 |
-
|
291 |
-
$files[ $filecounter ][ '
|
292 |
-
$files[ $filecounter ][ '
|
293 |
-
$files[ $filecounter ][ '
|
294 |
-
$files[ $filecounter ][ '
|
295 |
-
$files[ $filecounter ][ '
|
296 |
-
$filecounter
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
$
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
* @
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
*
|
377 |
-
*
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
*
|
384 |
-
*
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
* @
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
$this->
|
408 |
-
$this->
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
$this->
|
413 |
-
$this->
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
* @
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
* @param
|
459 |
-
* @param
|
460 |
-
* @
|
461 |
-
* @
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
$
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
* @param
|
484 |
-
* @param
|
485 |
-
* @
|
486 |
-
* @
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
$
|
515 |
-
$
|
516 |
-
$
|
517 |
-
|
518 |
-
|
519 |
-
$backwpup_job_object->steps_data[ $backwpup_job_object->step_working ][ '
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
* @param
|
549 |
-
* @
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
* @param
|
565 |
-
* @param
|
566 |
-
* @param
|
567 |
-
* @
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
'
|
576 |
-
'
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
* @
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
* @
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
'
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
'
|
618 |
-
'
|
619 |
-
'
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
* @param
|
628 |
-
* @param
|
629 |
-
* @param string $
|
630 |
-
* @param
|
631 |
-
*
|
632 |
-
*
|
633 |
-
* @
|
634 |
-
* @
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
curl_setopt( $ch,
|
653 |
-
curl_setopt( $ch,
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
curl_setopt( $ch,
|
658 |
-
$
|
659 |
-
$
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
curl_setopt( $ch,
|
669 |
-
|
670 |
-
|
671 |
-
curl_setopt( $ch,
|
672 |
-
$
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
'ECDHE-RSA-
|
677 |
-
'ECDHE-RSA-
|
678 |
-
'ECDHE-RSA-
|
679 |
-
'ECDHE-RSA-
|
680 |
-
'ECDHE-RSA-
|
681 |
-
'ECDHE-RSA-
|
682 |
-
'
|
683 |
-
'DHE-RSA-
|
684 |
-
'DHE-RSA-
|
685 |
-
'DHE-RSA-
|
686 |
-
'DHE-RSA-
|
687 |
-
'DHE-RSA-
|
688 |
-
'
|
689 |
-
'
|
690 |
-
'
|
691 |
-
'
|
692 |
-
'
|
693 |
-
'
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
curl_setopt( $ch,
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
$
|
707 |
-
|
708 |
-
|
709 |
-
|
710 |
-
|
711 |
-
|
712 |
-
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
|
717 |
-
|
718 |
-
|
719 |
-
|
720 |
-
|
721 |
-
|
722 |
-
|
723 |
-
|
724 |
-
|
725 |
-
|
726 |
-
|
727 |
-
|
728 |
-
|
729 |
-
|
730 |
-
|
731 |
-
|
732 |
-
|
733 |
-
|
734 |
-
|
735 |
-
|
736 |
-
|
737 |
-
|
738 |
-
|
739 |
-
|
740 |
-
|
741 |
-
|
742 |
-
|
743 |
-
|
744 |
-
|
745 |
-
|
746 |
-
|
747 |
-
|
748 |
-
elseif (
|
749 |
-
elseif (
|
750 |
-
elseif ( $status[ 'http_code' ] ==
|
751 |
-
elseif ( $status[ 'http_code' ] ==
|
752 |
-
elseif ( $status[ 'http_code' ] ==
|
753 |
-
elseif ( $status[ 'http_code' ] ==
|
754 |
-
elseif ( $status[ 'http_code' ] ==
|
755 |
-
elseif ( $status[ 'http_code' ] ==
|
756 |
-
elseif ( $status[ 'http_code' ] ==
|
757 |
-
elseif ( $status[ 'http_code' ] ==
|
758 |
-
elseif ( $status[ 'http_code' ] ==
|
759 |
-
elseif ( $status[ 'http_code' ] ==
|
760 |
-
|
761 |
-
|
762 |
-
|
763 |
-
|
764 |
-
|
765 |
-
|
766 |
-
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
-
*
|
775 |
-
*
|
776 |
-
|
777 |
-
|
778 |
-
|
779 |
-
|
780 |
-
$path =
|
781 |
-
|
782 |
-
|
783 |
-
|
784 |
-
}
|
785 |
-
|
786 |
-
|
787 |
-
|
788 |
-
|
789 |
-
|
790 |
-
|
791 |
-
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Documentation: https://www.dropbox.com/developers/reference/api
|
4 |
+
*/
|
5 |
+
class BackWPup_Destination_Dropbox extends BackWPup_Destinations {
|
6 |
+
|
7 |
+
/**
|
8 |
+
* @var $backwpup_job_object BackWPup_Job
|
9 |
+
*/
|
10 |
+
public static $backwpup_job_object = NULL;
|
11 |
+
|
12 |
+
/**
|
13 |
+
* @return array
|
14 |
+
*/
|
15 |
+
public function option_defaults() {
|
16 |
+
|
17 |
+
return array( 'dropboxtoken' => array(), 'dropboxroot' => 'sandbox', 'dropboxmaxbackups' => 15, 'dropboxsyncnodelete' => TRUE, 'dropboxdir' => trailingslashit( sanitize_file_name( get_bloginfo( 'name' ) ) ) );
|
18 |
+
}
|
19 |
+
|
20 |
+
|
21 |
+
/**
|
22 |
+
* @param $jobid
|
23 |
+
*/
|
24 |
+
public function edit_tab( $jobid ) {
|
25 |
+
|
26 |
+
if ( ! empty( $_GET[ 'deleteauth' ] ) && $_GET[ 'deleteauth' ] == 1 ) {
|
27 |
+
//disable token on dropbox
|
28 |
+
try {
|
29 |
+
$dropbox = new BackWPup_Destination_Dropbox_API( BackWPup_Option::get( $jobid, 'dropboxroot' ) );
|
30 |
+
if ( BackWPup_Option::get( $jobid, 'dropboxsecret' ) )
|
31 |
+
$dropbox->setOAuthTokens( array( 'access_token' => BackWPup_Option::get( $jobid, 'dropboxtoken' ), 'oauth_token_secret' => BackWPup_Encryption::decrypt( BackWPup_Option::get( $jobid, 'dropboxsecret' ) ) ) );
|
32 |
+
else
|
33 |
+
$dropbox->setOAuthTokens( BackWPup_Option::get( $jobid, 'dropboxtoken' ) );
|
34 |
+
$dropbox->disable_access_token();
|
35 |
+
} catch ( Exception $e ) {
|
36 |
+
echo '<div id="message" class="error"><p>' . sprintf( __( 'Dropbox API: %s', 'backwpup' ), $e->getMessage() ) . '</p></div>';
|
37 |
+
}
|
38 |
+
BackWPup_Option::update( $jobid, 'dropboxtoken', array() );
|
39 |
+
BackWPup_Option::update( $jobid, 'dropboxroot', 'sandbox' );
|
40 |
+
BackWPup_Option::delete( $jobid, 'dropboxsecret' );
|
41 |
+
}
|
42 |
+
|
43 |
+
$dropbox = new BackWPup_Destination_Dropbox_API( 'dropbox' );
|
44 |
+
$dropbox_auth_url = $dropbox->oAuthAuthorize();
|
45 |
+
$dropbox = new BackWPup_Destination_Dropbox_API( 'sandbox' );
|
46 |
+
$sandbox_auth_url = $dropbox->oAuthAuthorize();
|
47 |
+
|
48 |
+
$dropboxtoken = BackWPup_Option::get( $jobid, 'dropboxtoken' );
|
49 |
+
?>
|
50 |
+
|
51 |
+
<h3 class="title"><?php _e( 'Login', 'backwpup' ); ?></h3>
|
52 |
+
<p></p>
|
53 |
+
<table class="form-table">
|
54 |
+
<tr>
|
55 |
+
<th scope="row"><?php _e( 'Authentication', 'backwpup' ); ?></th>
|
56 |
+
<td><?php if ( empty( $dropboxtoken[ 'access_token' ] ) ) { ?>
|
57 |
+
<span style="color:red;"><?php _e( 'Not authenticated!', 'backwpup' ); ?></span><br /> <br />
|
58 |
+
<a class="button secondary" href="http://db.tt/8irM1vQ0"><?php _e( 'Create Account', 'backwpup' ); ?></a>
|
59 |
+
<?php } else { ?>
|
60 |
+
<span style="color:green;"><?php _e( 'Authenticated!', 'backwpup' ); ?></span><br /> <br />
|
61 |
+
<a class="button secondary" href="<?php echo network_admin_url( 'admin.php' ) . '?page=backwpupeditjob&deleteauth=1&jobid=' . $jobid .'&tab=dest-dropbox&_wpnonce=' . wp_create_nonce( 'edit-job' ); ?>" title="<?php _e( 'Delete Dropbox Authentication', 'backwpup' ); ?>"><?php _e( 'Delete Dropbox Authentication', 'backwpup' ); ?></a>
|
62 |
+
<?php } ?>
|
63 |
+
</td>
|
64 |
+
</tr>
|
65 |
+
|
66 |
+
<?php if ( empty( $dropboxtoken[ 'access_token' ] ) ) { ?>
|
67 |
+
<tr>
|
68 |
+
<th scope="row"><label for="id_sandbox_code"><?php _e( 'App Access to Dropbox', 'backwpup' ); ?></label></th>
|
69 |
+
<td>
|
70 |
+
<input id="id_sandbox_code" name="sandbox_code" type="text" value="" class="regular-text code help-tip" title="<?php esc_attr_e( 'A dedicated folder named BackWPup will be created inside of the Apps folder in your Dropbox. BackWPup will get read and write access to that folder only. You can specify a subfolder as your backup destination for this job in the destination field below.', 'backwpup' ); ?>" />
|
71 |
+
<a class="button secondary" href="<?php echo $sandbox_auth_url;?>" target="_blank"><?php _e( 'Get Dropbox App auth code', 'backwpup' ); ?></a>
|
72 |
+
<p><em><?php _e( 'Allows restricted access to Apps/BackWPup folder only.', 'backwpup' ); ?></em></p>
|
73 |
+
</td>
|
74 |
+
</tr>
|
75 |
+
<tr>
|
76 |
+
<th></th>
|
77 |
+
<td><?php _e( '— OR —', 'backwpup' ); ?></td>
|
78 |
+
</tr>
|
79 |
+
<tr>
|
80 |
+
<th scope="row"><label for="id_dropbbox_code"><?php _e( 'Full Access to Dropbox', 'backwpup' ); ?></label></th>
|
81 |
+
<td>
|
82 |
+
<input id="id_dropbbox_code" name="dropbbox_code" type="text" value="" class="regular-text code help-tip" title="<?php _e( 'BackWPup will have full read and write access to your entire Dropbox. You can specify your backup destination wherever you want, just be aware that ANY files or folders inside of your Dropbox can be overridden or deleted by BackWPup.', 'backwpup' ); ?>" />
|
83 |
+
<a class="button secondary" href="<?php echo $dropbox_auth_url;?>" target="_blank"><?php _e( 'Get full Dropbox auth code ', 'backwpup' ); ?></a>
|
84 |
+
<p><em><?php _e( 'Allows full access to your entire Dropbox.', 'backwpup' ); ?></em></p>
|
85 |
+
</td>
|
86 |
+
</tr>
|
87 |
+
<?php } ?>
|
88 |
+
</table>
|
89 |
+
|
90 |
+
|
91 |
+
<h3 class="title"><?php _e( 'Backup settings', 'backwpup' ); ?></h3>
|
92 |
+
<p></p>
|
93 |
+
<table class="form-table">
|
94 |
+
<tr>
|
95 |
+
<th scope="row"><label for="iddropboxdir"><?php _e( 'Destination Folder', 'backwpup' ); ?></label></th>
|
96 |
+
<td>
|
97 |
+
<input id="iddropboxdir" name="dropboxdir" type="text" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 'dropboxdir' ) ); ?>" class="regular-text help-tip" title="<?php esc_attr_e( 'Specify a subfolder where your backup archives will be stored. If you use the App option from above, this folder will be created inside of Apps/BackWPup. Otherwise it will be created at the root of your Dropbox. Already exisiting folders with the same name will not be overriden.', 'backwpup' ); ?>" />
|
98 |
+
<p><em><?php _e( 'Folder inside your Dropbox where your backup archives will be stored.', 'theme_hamburg_textdomain' );?></em></p>
|
99 |
+
</td>
|
100 |
+
</tr>
|
101 |
+
<tr>
|
102 |
+
<th scope="row"><?php _e( 'File Deletion', 'backwpup' ); ?></th>
|
103 |
+
<td>
|
104 |
+
<?php
|
105 |
+
if ( BackWPup_Option::get( $jobid, 'backuptype' ) == 'archive' ) {
|
106 |
+
?>
|
107 |
+
<label for="iddropboxmaxbackups"><input id="iddropboxmaxbackups" name="dropboxmaxbackups" title="<?php esc_attr_e( 'Older files will be deleted first. 0 = no files will be deleted.', 'backwpup' ); ?>" type="text" size="3" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 'dropboxmaxbackups' ) );?>" class="small-text help-tip" />
|
108 |
+
<em><?php _e( 'Number of files to keep in folder.', 'backwpup' ); ?></em></label>
|
109 |
+
<?php } else { ?>
|
110 |
+
<label for="iddropboxsyncnodelete" ><input class="checkbox" value="1"
|
111 |
+
type="checkbox" <?php checked( BackWPup_Option::get( $jobid, 'dropboxsyncnodelete' ), TRUE ); ?>
|
112 |
+
name="dropboxsyncnodelete" id="iddropboxsyncnodelete" /> <?php _e( 'Do not delete files while syncing to destination!', 'backwpup' ); ?></label>
|
113 |
+
<?php } ?>
|
114 |
+
</td>
|
115 |
+
</tr>
|
116 |
+
</table>
|
117 |
+
|
118 |
+
<?php
|
119 |
+
}
|
120 |
+
|
121 |
+
/**
|
122 |
+
* @param $jobid
|
123 |
+
* @return string|void
|
124 |
+
*/
|
125 |
+
public function edit_form_post_save( $jobid ) {
|
126 |
+
|
127 |
+
// get auth
|
128 |
+
if ( ! empty( $_POST[ 'sandbox_code' ] ) ) {
|
129 |
+
try {
|
130 |
+
$dropbox = new BackWPup_Destination_Dropbox_API( 'sandbox' );
|
131 |
+
$dropboxtoken = $dropbox->oAuthToken( $_POST[ 'sandbox_code' ] );
|
132 |
+
BackWPup_Option::update( $jobid, 'dropboxtoken', $dropboxtoken );
|
133 |
+
BackWPup_Option::update( $jobid, 'dropboxroot', 'sandbox' );
|
134 |
+
} catch ( Exception $e ) {
|
135 |
+
BackWPup_Admin::message( 'DROPBOX: ' . $e->getMessage(), TRUE );
|
136 |
+
}
|
137 |
+
}
|
138 |
+
|
139 |
+
if ( ! empty( $_POST[ 'dropbbox_code' ] ) ) {
|
140 |
+
try {
|
141 |
+
$dropbox = new BackWPup_Destination_Dropbox_API( 'dropbox' );
|
142 |
+
$dropboxtoken = $dropbox->oAuthToken( $_POST[ 'dropbbox_code' ] );
|
143 |
+
BackWPup_Option::update( $jobid, 'dropboxtoken', $dropboxtoken );
|
144 |
+
BackWPup_Option::update( $jobid, 'dropboxroot', 'dropbox' );
|
145 |
+
} catch ( Exception $e ) {
|
146 |
+
BackWPup_Admin::message( 'DROPBOX: ' . $e->getMessage(), TRUE );
|
147 |
+
}
|
148 |
+
}
|
149 |
+
|
150 |
+
BackWPup_Option::update( $jobid, 'dropboxsyncnodelete', ( isset( $_POST[ 'dropboxsyncnodelete' ] ) && $_POST[ 'dropboxsyncnodelete' ] == 1 ) ? TRUE : FALSE );
|
151 |
+
BackWPup_Option::update( $jobid, 'dropboxmaxbackups', isset( $_POST[ 'dropboxmaxbackups' ] ) ? (int)$_POST[ 'dropboxmaxbackups' ] : 0 );
|
152 |
+
|
153 |
+
$_POST[ 'dropboxdir' ] = trailingslashit( str_replace( '//', '/', str_replace( '\\', '/', trim( stripslashes( $_POST[ 'dropboxdir' ] ) ) ) ) );
|
154 |
+
if ( substr( $_POST[ 'dropboxdir' ], 0, 1 ) == '/' )
|
155 |
+
$_POST[ 'dropboxdir' ] = substr( $_POST[ 'dropboxdir' ], 1 );
|
156 |
+
if ( $_POST[ 'dropboxdir' ] == '/' )
|
157 |
+
$_POST[ 'dropboxdir' ] = '';
|
158 |
+
BackWPup_Option::update( $jobid, 'dropboxdir', $_POST[ 'dropboxdir' ] );
|
159 |
+
|
160 |
+
}
|
161 |
+
|
162 |
+
/**
|
163 |
+
* @param $jobdest
|
164 |
+
* @param $backupfile
|
165 |
+
*/
|
166 |
+
public function file_delete( $jobdest, $backupfile ) {
|
167 |
+
|
168 |
+
$files = get_site_transient( 'backwpup_' . strtolower( $jobdest ) );
|
169 |
+
list( $jobid, $dest ) = explode( '_', $jobdest );
|
170 |
+
|
171 |
+
if ( BackWPup_Option::get( $jobid, 'dropboxtoken' ) && BackWPup_Option::get( $jobid, 'dropboxsecret' ) ) {
|
172 |
+
try {
|
173 |
+
$dropbox = new BackWPup_Destination_Dropbox_API( BackWPup_Option::get( $jobid, 'dropboxroot' ) );
|
174 |
+
$dropbox->setOAuthTokens( BackWPup_Option::get( $jobid, 'dropboxtoken' ) );
|
175 |
+
$dropbox->fileopsDelete( $backupfile );
|
176 |
+
//update file list
|
177 |
+
foreach ( $files as $key => $file ) {
|
178 |
+
if ( is_array( $file ) && $file[ 'file' ] == $backupfile )
|
179 |
+
unset( $files[ $key ] );
|
180 |
+
}
|
181 |
+
unset( $dropbox );
|
182 |
+
}
|
183 |
+
catch ( Exception $e ) {
|
184 |
+
BackWPup_Admin::message( 'DROPBOX: ' . $e->getMessage(), TRUE );
|
185 |
+
}
|
186 |
+
}
|
187 |
+
set_site_transient( 'backwpup_' . strtolower( $jobdest ), $files, 60 * 60 * 24 * 7 );
|
188 |
+
}
|
189 |
+
|
190 |
+
/**
|
191 |
+
* @param $jobid
|
192 |
+
* @param $get_file
|
193 |
+
*/
|
194 |
+
public function file_download( $jobid, $get_file ) {
|
195 |
+
|
196 |
+
try {
|
197 |
+
$dropbox = new BackWPup_Destination_Dropbox_API( BackWPup_Option::get( $jobid, 'dropboxroot' ) );
|
198 |
+
$dropbox->setOAuthTokens( BackWPup_Option::get( $jobid, 'dropboxtoken' ) );
|
199 |
+
$media = $dropbox->media( $get_file );
|
200 |
+
if ( ! empty( $media[ 'url' ] ) )
|
201 |
+
header( "Location: " . $media[ 'url' ] );
|
202 |
+
die();
|
203 |
+
}
|
204 |
+
catch ( Exception $e ) {
|
205 |
+
die( $e->getMessage() );
|
206 |
+
}
|
207 |
+
}
|
208 |
+
|
209 |
+
/**
|
210 |
+
* @param $jobdest
|
211 |
+
* @return mixed
|
212 |
+
*/
|
213 |
+
public function file_get_list( $jobdest ) {
|
214 |
+
return get_site_transient( 'BackWPup_' . $jobdest );
|
215 |
+
}
|
216 |
+
|
217 |
+
/**
|
218 |
+
* @param $job_object
|
219 |
+
* @return bool
|
220 |
+
*/
|
221 |
+
public function job_run_archive( &$job_object ) {
|
222 |
+
|
223 |
+
$job_object->substeps_todo = 2 + $job_object->backup_filesize;
|
224 |
+
if ( $job_object->steps_data[ $job_object->step_working ]['SAVE_STEP_TRY'] != $job_object->steps_data[ $job_object->step_working ][ 'STEP_TRY' ] )
|
225 |
+
$job_object->log( sprintf( __( '%d. Try to send backup file to Dropbox …', 'backwpup' ), $job_object->steps_data[ $job_object->step_working ][ 'STEP_TRY' ] ), E_USER_NOTICE );
|
226 |
+
|
227 |
+
try {
|
228 |
+
$dropbox = new BackWPup_Destination_Dropbox_API( $job_object->job[ 'dropboxroot' ] );
|
229 |
+
// cahnge oauth1 to oauth2 token
|
230 |
+
if ( ! empty( $job_object->job[ 'dropboxsecret' ] ) && empty( $job_object->job[ 'dropboxtoken' ][ 'access_token' ] ) ) {
|
231 |
+
$dropbox->setOAuthTokens( array( 'access_token' => $job_object->job[ 'dropboxtoken' ], 'oauth_token_secret' => BackWPup_Encryption::decrypt( $job_object->job[ 'dropboxsecret' ] ) ) );
|
232 |
+
$job_object->job[ 'dropboxtoken' ] = $dropbox->token_from_oauth1();
|
233 |
+
BackWPup_Option::update( $job_object->job[ 'jobid' ], 'dropboxtoken', $job_object->job[ 'dropboxtoken' ] );
|
234 |
+
BackWPup_Option::delete( $job_object->job[ 'jobid' ], 'dropboxsecret' );
|
235 |
+
}
|
236 |
+
// set the tokens
|
237 |
+
$dropbox->setOAuthTokens( $job_object->job[ 'dropboxtoken' ] );
|
238 |
+
|
239 |
+
//get account info
|
240 |
+
if ( $job_object->steps_data[ $job_object->step_working ]['SAVE_STEP_TRY'] != $job_object->steps_data[ $job_object->step_working ][ 'STEP_TRY' ] ) {
|
241 |
+
$info = $dropbox->accountInfo();
|
242 |
+
if ( ! empty( $info[ 'uid' ] ) ) {
|
243 |
+
$job_object->log( sprintf( __( 'Authenticated with Dropbox of user %s', 'backwpup' ), $info[ 'display_name' ] . ' (' . $info[ 'email' ] . ')' ), E_USER_NOTICE );
|
244 |
+
//Quota
|
245 |
+
$dropboxfreespase = $info[ 'quota_info' ][ 'quota' ] - $info[ 'quota_info' ][ 'shared' ] - $info[ 'quota_info' ][ 'normal' ];
|
246 |
+
$job_object->log( sprintf( __( '%s available on your Dropbox', 'backwpup' ), size_format( $dropboxfreespase, 2 ) ), E_USER_NOTICE );
|
247 |
+
} else {
|
248 |
+
$job_object->log( __( 'Not Authenticated with Dropbox!', 'backwpup' ), E_USER_ERROR );
|
249 |
+
return FALSE;
|
250 |
+
}
|
251 |
+
$job_object->log( __( 'Uploading to Dropbox …', 'backwpup' ), E_USER_NOTICE );
|
252 |
+
}
|
253 |
+
|
254 |
+
// put the file
|
255 |
+
self::$backwpup_job_object = &$job_object;
|
256 |
+
|
257 |
+
if ( $job_object->substeps_done < $job_object->backup_filesize ) { //only if upload not complete
|
258 |
+
$response = $dropbox->upload( $job_object->backup_folder . $job_object->backup_file, $job_object->job[ 'dropboxdir' ] . $job_object->backup_file );
|
259 |
+
if ( $response[ 'bytes' ] == $job_object->backup_filesize ) {
|
260 |
+
if ( ! empty( $job_object->job[ 'jobid' ] ) )
|
261 |
+
BackWPup_Option::update( $job_object->job[ 'jobid' ], 'lastbackupdownloadurl', network_admin_url( 'admin.php' ) . '?page=backwpupbackups&action=downloaddropbox&file=' . ltrim( $response[ 'path' ], '/' ) . '&jobid=' . $job_object->job[ 'jobid' ] );
|
262 |
+
$job_object->substeps_done = 1 + $job_object->backup_filesize;
|
263 |
+
$job_object->log( sprintf( __( 'Backup transferred to %s', 'backwpup' ), 'https://api-content.dropbox.com/1/files/' . $job_object->job[ 'dropboxroot' ] . $response[ 'path' ] ), E_USER_NOTICE );
|
264 |
+
}
|
265 |
+
else {
|
266 |
+
if ( $response[ 'bytes' ] != $job_object->backup_filesize )
|
267 |
+
$job_object->log( __( 'Uploaded file size and local file size don\'t match.', 'backwpup' ), E_USER_ERROR );
|
268 |
+
else
|
269 |
+
$job_object->log(
|
270 |
+
sprintf(
|
271 |
+
__( 'Error transfering backup to %s.', 'backwpup' ) . ' ' . $response[ 'error' ],
|
272 |
+
__( 'Dropbox', 'backwpup' )
|
273 |
+
), E_USER_ERROR );
|
274 |
+
|
275 |
+
return FALSE;
|
276 |
+
}
|
277 |
+
}
|
278 |
+
|
279 |
+
|
280 |
+
$backupfilelist = array();
|
281 |
+
$filecounter = 0;
|
282 |
+
$files = array();
|
283 |
+
$metadata = $dropbox->metadata( $job_object->job[ 'dropboxdir' ] );
|
284 |
+
if ( is_array( $metadata ) ) {
|
285 |
+
foreach ( $metadata[ 'contents' ] as $data ) {
|
286 |
+
if ( $data[ 'is_dir' ] != TRUE ) {
|
287 |
+
$file = basename( $data[ 'path' ] );
|
288 |
+
if ( $job_object->is_backup_archive( $file ) ) {
|
289 |
+
$backupfilelist[ strtotime( $data[ 'modified' ] ) ] = $file;
|
290 |
+
}
|
291 |
+
$files[ $filecounter ][ 'folder' ] = "https://api-content.dropbox.com/1/files/" . $job_object->job[ 'dropboxroot' ] . dirname( $data[ 'path' ] ) . "/";
|
292 |
+
$files[ $filecounter ][ 'file' ] = $data[ 'path' ];
|
293 |
+
$files[ $filecounter ][ 'filename' ] = basename( $data[ 'path' ] );
|
294 |
+
$files[ $filecounter ][ 'downloadurl' ] = network_admin_url( 'admin.php' ) . '?page=backwpupbackups&action=downloaddropbox&file=' . $data[ 'path' ] . '&jobid=' . $job_object->job[ 'jobid' ];
|
295 |
+
$files[ $filecounter ][ 'filesize' ] = $data[ 'bytes' ];
|
296 |
+
$files[ $filecounter ][ 'time' ] = strtotime( $data[ 'modified' ] ) + ( get_option( 'gmt_offset' ) * 3600 );
|
297 |
+
$filecounter ++;
|
298 |
+
}
|
299 |
+
}
|
300 |
+
}
|
301 |
+
if ( $job_object->job[ 'dropboxmaxbackups' ] > 0 && is_object( $dropbox ) ) { //Delete old backups
|
302 |
+
if ( count( $backupfilelist ) > $job_object->job[ 'dropboxmaxbackups' ] ) {
|
303 |
+
ksort( $backupfilelist );
|
304 |
+
$numdeltefiles = 0;
|
305 |
+
while ( $file = array_shift( $backupfilelist ) ) {
|
306 |
+
if ( count( $backupfilelist ) < $job_object->job[ 'dropboxmaxbackups' ] )
|
307 |
+
break;
|
308 |
+
$response = $dropbox->fileopsDelete( $job_object->job[ 'dropboxdir' ] . $file ); //delete files on Cloud
|
309 |
+
if ( $response[ 'is_deleted' ] == 'true' ) {
|
310 |
+
foreach ( $files as $key => $filedata ) {
|
311 |
+
if ( $filedata[ 'file' ] == '/' .$job_object->job[ 'dropboxdir' ] . $file )
|
312 |
+
unset( $files[ $key ] );
|
313 |
+
}
|
314 |
+
$numdeltefiles ++;
|
315 |
+
}
|
316 |
+
else
|
317 |
+
$job_object->log( sprintf( __( 'Error while deleting file from Dropbox: %s', 'backwpup' ), $file ), E_USER_ERROR );
|
318 |
+
}
|
319 |
+
if ( $numdeltefiles > 0 )
|
320 |
+
$job_object->log( sprintf( _n( 'One file deleted from Dropbox', '%d files deleted on Dropbox', $numdeltefiles, 'backwpup' ), $numdeltefiles ), E_USER_NOTICE );
|
321 |
+
}
|
322 |
+
}
|
323 |
+
set_site_transient( 'backwpup_' . $job_object->job[ 'jobid' ] . '_dropbox', $files, 60 * 60 * 24 * 7 );
|
324 |
+
}
|
325 |
+
catch ( Exception $e ) {
|
326 |
+
$job_object->log( E_USER_ERROR, sprintf( __( 'Dropbox API: %s', 'backwpup' ), htmlentities( $e->getMessage() ) ), $e->getFile(), $e->getLine() );
|
327 |
+
|
328 |
+
return FALSE;
|
329 |
+
}
|
330 |
+
$job_object->substeps_done ++;
|
331 |
+
|
332 |
+
return TRUE;
|
333 |
+
}
|
334 |
+
|
335 |
+
/**
|
336 |
+
* @param $job_object
|
337 |
+
* @return bool
|
338 |
+
*/
|
339 |
+
public function can_run( $job_object ) {
|
340 |
+
|
341 |
+
if ( empty( $job_object->job[ 'dropboxtoken' ] ) )
|
342 |
+
return FALSE;
|
343 |
+
|
344 |
+
return TRUE;
|
345 |
+
}
|
346 |
+
|
347 |
+
}
|
348 |
+
|
349 |
+
|
350 |
+
/**
|
351 |
+
*
|
352 |
+
*/
|
353 |
+
final class BackWPup_Destination_Dropbox_API {
|
354 |
+
|
355 |
+
/**
|
356 |
+
*
|
357 |
+
*/
|
358 |
+
const API_URL = 'https://api.dropbox.com/';
|
359 |
+
|
360 |
+
/**
|
361 |
+
*
|
362 |
+
*/
|
363 |
+
const API_CONTENT_URL = 'https://api-content.dropbox.com/';
|
364 |
+
|
365 |
+
/**
|
366 |
+
*
|
367 |
+
*/
|
368 |
+
const API_WWW_URL = 'https://www.dropbox.com/';
|
369 |
+
|
370 |
+
/**
|
371 |
+
*
|
372 |
+
*/
|
373 |
+
const API_VERSION_URL = '1/';
|
374 |
+
|
375 |
+
/**
|
376 |
+
* dropbox vars
|
377 |
+
*
|
378 |
+
* @var string
|
379 |
+
*/
|
380 |
+
private $root = 'sandbox';
|
381 |
+
|
382 |
+
/**
|
383 |
+
* oAuth vars
|
384 |
+
*
|
385 |
+
* @var string
|
386 |
+
*/
|
387 |
+
private $oauth_app_key = '';
|
388 |
+
|
389 |
+
/**
|
390 |
+
* @var string
|
391 |
+
*/
|
392 |
+
private $oauth_app_secret = '';
|
393 |
+
/**
|
394 |
+
* @var string
|
395 |
+
*/
|
396 |
+
private $oauth_token = '';
|
397 |
+
|
398 |
+
|
399 |
+
|
400 |
+
/**
|
401 |
+
* @param string $boxtype
|
402 |
+
* @throws BackWPup_Destination_Dropbox_API_Exception
|
403 |
+
*/
|
404 |
+
public function __construct( $boxtype = 'dropbox' ) {
|
405 |
+
|
406 |
+
if ( $boxtype == 'dropbox' ) {
|
407 |
+
$this->oauth_app_key = get_site_option( 'backwpup_cfg_dropboxappkey', base64_decode( "dHZkcjk1MnRhZnM1NmZ2" ) );
|
408 |
+
$this->oauth_app_secret = BackWPup_Encryption::decrypt( get_site_option( 'backwpup_cfg_dropboxappsecret', base64_decode( "OWV2bDR5MHJvZ2RlYmx1" ) ) );
|
409 |
+
$this->root = 'dropbox';
|
410 |
+
}
|
411 |
+
else {
|
412 |
+
$this->oauth_app_key = get_site_option( 'backwpup_cfg_dropboxsandboxappkey', base64_decode( "cHVrZmp1a3JoZHR5OTFk" ) );
|
413 |
+
$this->oauth_app_secret = BackWPup_Encryption::decrypt( get_site_option( 'backwpup_cfg_dropboxsandboxappsecret', base64_decode( "eGNoYzhxdTk5eHE0eWdq" ) ) );
|
414 |
+
$this->root = 'sandbox';
|
415 |
+
}
|
416 |
+
|
417 |
+
if ( empty( $this->oauth_app_key ) || empty( $this->oauth_app_secret ) )
|
418 |
+
throw new BackWPup_Destination_Dropbox_API_Exception( "No App key or App Secret specified." );
|
419 |
+
}
|
420 |
+
|
421 |
+
/**
|
422 |
+
* @param $token
|
423 |
+
* @throws BackWPup_Destination_Dropbox_API_Exception
|
424 |
+
*/
|
425 |
+
public function setOAuthTokens( $token ) {
|
426 |
+
|
427 |
+
if ( empty( $token[ 'access_token' ] ) )
|
428 |
+
throw new BackWPup_Destination_Dropbox_API_Exception( "No oAuth token specified." );
|
429 |
+
|
430 |
+
$this->oauth_token = $token;
|
431 |
+
}
|
432 |
+
|
433 |
+
public function token_from_oauth1( ) {
|
434 |
+
|
435 |
+
$url = self::API_URL . self::API_VERSION_URL . 'oauth2/token_from_oauth1';
|
436 |
+
|
437 |
+
return $this->request( $url, array(), 'POST' );
|
438 |
+
}
|
439 |
+
|
440 |
+
/**
|
441 |
+
* @return array|mixed|string
|
442 |
+
*/
|
443 |
+
public function accountInfo() {
|
444 |
+
|
445 |
+
$url = self::API_URL . self::API_VERSION_URL . 'account/info';
|
446 |
+
|
447 |
+
return $this->request( $url );
|
448 |
+
}
|
449 |
+
|
450 |
+
public function disable_access_token() {
|
451 |
+
|
452 |
+
$url = self::API_URL . self::API_VERSION_URL . 'disable_access_token';
|
453 |
+
|
454 |
+
return $this->request( $url, array(), 'POST' );
|
455 |
+
}
|
456 |
+
|
457 |
+
/**
|
458 |
+
* @param $file
|
459 |
+
* @param string $path
|
460 |
+
* @param bool $overwrite
|
461 |
+
* @return array|mixed|string
|
462 |
+
* @throws BackWPup_Destination_Dropbox_API_Exception
|
463 |
+
*/
|
464 |
+
public function upload( $file, $path = '', $overwrite = TRUE ) {
|
465 |
+
|
466 |
+
$file = str_replace( "\\", "/", $file );
|
467 |
+
|
468 |
+
if ( ! is_readable( $file ) )
|
469 |
+
throw new BackWPup_Destination_Dropbox_API_Exception( "Error: File \"$file\" is not readable or doesn't exist." );
|
470 |
+
|
471 |
+
if ( filesize( $file ) < 5242880 ) { //chunk transfer on bigger uploads
|
472 |
+
$url = self::API_CONTENT_URL . self::API_VERSION_URL . 'files_put/' . $this->root . '/' . $this->encode_path( $path );
|
473 |
+
$output = $this->request( $url, array( 'overwrite' => ( $overwrite ) ? 'true' : 'false' ), 'PUT', file_get_contents( $file ) );
|
474 |
+
}
|
475 |
+
else {
|
476 |
+
$output = $this->chunked_upload( $file, $path, $overwrite );
|
477 |
+
}
|
478 |
+
|
479 |
+
return $output;
|
480 |
+
}
|
481 |
+
|
482 |
+
/**
|
483 |
+
* @param $file
|
484 |
+
* @param string $path
|
485 |
+
* @param bool $overwrite
|
486 |
+
* @return array|mixed|string
|
487 |
+
* @throws BackWPup_Destination_Dropbox_API_Exception
|
488 |
+
*/
|
489 |
+
public function chunked_upload( $file, $path = '', $overwrite = TRUE ) {
|
490 |
+
|
491 |
+
$backwpup_job_object = BackWPup_Destination_Dropbox::$backwpup_job_object;
|
492 |
+
|
493 |
+
$file = str_replace( "\\", "/", $file );
|
494 |
+
|
495 |
+
if ( ! is_readable( $file ) )
|
496 |
+
throw new BackWPup_Destination_Dropbox_API_Exception( "Error: File \"$file\" is not readable or doesn't exist." );
|
497 |
+
|
498 |
+
$chunk_size = 4194304; //4194304 = 4MB
|
499 |
+
|
500 |
+
$file_handel = fopen( $file, 'rb' );
|
501 |
+
if ( ! is_resource( $file_handel ) )
|
502 |
+
throw new BackWPup_Destination_Dropbox_API_Exception( "Can not open source file for transfer." );
|
503 |
+
|
504 |
+
if ( ! isset( $backwpup_job_object->steps_data[ $backwpup_job_object->step_working ][ 'uploadid' ] ) )
|
505 |
+
$backwpup_job_object->steps_data[ $backwpup_job_object->step_working ][ 'uploadid' ] = NULL;
|
506 |
+
if ( ! isset( $backwpup_job_object->steps_data[ $backwpup_job_object->step_working ][ 'offset' ] ) )
|
507 |
+
$backwpup_job_object->steps_data[ $backwpup_job_object->step_working ][ 'offset' ] = 0;
|
508 |
+
|
509 |
+
//seek to current position
|
510 |
+
if ( $backwpup_job_object->steps_data[ $backwpup_job_object->step_working ][ 'offset' ] > 0 )
|
511 |
+
fseek( $file_handel, $backwpup_job_object->steps_data[ $backwpup_job_object->step_working ][ 'offset' ] );
|
512 |
+
|
513 |
+
while ( $data = fread( $file_handel, $chunk_size ) ) {
|
514 |
+
$chunk_upload_start = microtime( TRUE );
|
515 |
+
$url = self::API_CONTENT_URL . self::API_VERSION_URL . 'chunked_upload';
|
516 |
+
$output = $this->request( $url, array( 'upload_id' => $backwpup_job_object->steps_data[ $backwpup_job_object->step_working ][ 'uploadid' ], 'offset' => $backwpup_job_object->steps_data[ $backwpup_job_object->step_working ][ 'offset' ] ), 'PUT', $data );
|
517 |
+
$chunk_upload_time = microtime( TRUE ) - $chunk_upload_start;
|
518 |
+
//args for next chunk
|
519 |
+
$backwpup_job_object->steps_data[ $backwpup_job_object->step_working ][ 'offset' ] = $output[ 'offset' ];
|
520 |
+
$backwpup_job_object->steps_data[ $backwpup_job_object->step_working ][ 'uploadid' ] = $output[ 'upload_id' ];
|
521 |
+
if ( $backwpup_job_object->job[ 'backuptype' ] == 'archive' ) {
|
522 |
+
$backwpup_job_object->substeps_done = $backwpup_job_object->steps_data[ $backwpup_job_object->step_working ][ 'offset' ];
|
523 |
+
if ( strlen( $data ) == $chunk_size ) {
|
524 |
+
$time_remaining = $backwpup_job_object->do_restart_time();
|
525 |
+
//calc next chunk
|
526 |
+
if ( $time_remaining < $chunk_upload_time ) {
|
527 |
+
$chunk_size = floor ( $chunk_size / $chunk_upload_time * ( $time_remaining - 3 ) );
|
528 |
+
if ( $chunk_size < 0 )
|
529 |
+
$chunk_size = 1024;
|
530 |
+
if ( $chunk_size > 4194304 )
|
531 |
+
$chunk_size = 4194304;
|
532 |
+
}
|
533 |
+
}
|
534 |
+
}
|
535 |
+
$backwpup_job_object->update_working_data();
|
536 |
+
//correct position
|
537 |
+
fseek( $file_handel, $backwpup_job_object->steps_data[ $backwpup_job_object->step_working ][ 'offset' ] );
|
538 |
+
}
|
539 |
+
|
540 |
+
fclose( $file_handel );
|
541 |
+
|
542 |
+
$url = self::API_CONTENT_URL . self::API_VERSION_URL . 'commit_chunked_upload/' . $this->root . '/' . $this->encode_path( $path );
|
543 |
+
|
544 |
+
return $this->request( $url, array( 'overwrite' => ( $overwrite ) ? 'true' : 'false', 'upload_id' => $backwpup_job_object->steps_data[ $backwpup_job_object->step_working ][ 'uploadid' ] ), 'POST' );
|
545 |
+
}
|
546 |
+
|
547 |
+
/**
|
548 |
+
* @param $path
|
549 |
+
* @param bool $echo
|
550 |
+
* @return string
|
551 |
+
*/
|
552 |
+
public function download( $path, $echo = FALSE ) {
|
553 |
+
|
554 |
+
$url = self::API_CONTENT_URL . self::API_VERSION_URL . 'files/' . $this->root . '/' . $path;
|
555 |
+
if ( ! $echo )
|
556 |
+
return $this->request( $url );
|
557 |
+
else {
|
558 |
+
$this->request( $url, NULL, 'GET', '', TRUE );
|
559 |
+
return '';
|
560 |
+
}
|
561 |
+
}
|
562 |
+
|
563 |
+
/**
|
564 |
+
* @param string $path
|
565 |
+
* @param bool $listContents
|
566 |
+
* @param int $fileLimit
|
567 |
+
* @param string $hash
|
568 |
+
* @return array|mixed|string
|
569 |
+
*/
|
570 |
+
public function metadata( $path = '', $listContents = TRUE, $fileLimit = 10000, $hash = '' ) {
|
571 |
+
|
572 |
+
$url = self::API_URL . self::API_VERSION_URL . 'metadata/' . $this->root . '/' . $this->encode_path( $path );
|
573 |
+
|
574 |
+
return $this->request( $url, array(
|
575 |
+
'list' => ( $listContents ) ? 'true' : 'false',
|
576 |
+
'hash' => ( $hash ) ? $hash : '',
|
577 |
+
'file_limit' => $fileLimit
|
578 |
+
) );
|
579 |
+
}
|
580 |
+
|
581 |
+
/**
|
582 |
+
* @param string $path
|
583 |
+
* @return array|mixed|string
|
584 |
+
*/
|
585 |
+
public function media( $path = '' ) {
|
586 |
+
|
587 |
+
$url = self::API_URL . self::API_VERSION_URL . 'media/' . $this->root . '/' . $path;
|
588 |
+
|
589 |
+
return $this->request( $url );
|
590 |
+
}
|
591 |
+
|
592 |
+
/**
|
593 |
+
* @param $path
|
594 |
+
* @return array|mixed|string
|
595 |
+
*/
|
596 |
+
public function fileopsDelete( $path ) {
|
597 |
+
|
598 |
+
$url = self::API_URL . self::API_VERSION_URL . 'fileops/delete';
|
599 |
+
|
600 |
+
return $this->request( $url, array(
|
601 |
+
'path' => '/' . $path,
|
602 |
+
'root' => $this->root
|
603 |
+
) );
|
604 |
+
}
|
605 |
+
|
606 |
+
public function oAuthAuthorize( ) {
|
607 |
+
|
608 |
+
return self::API_WWW_URL . self::API_VERSION_URL . 'oauth2/authorize?response_type=code&client_id=' . $this->oauth_app_key;
|
609 |
+
}
|
610 |
+
|
611 |
+
|
612 |
+
public function oAuthToken( $code ) {
|
613 |
+
|
614 |
+
$url = self::API_URL . self::API_VERSION_URL . 'oauth2/token';
|
615 |
+
|
616 |
+
return $this->request( $url, array(
|
617 |
+
'code' => trim( $code ),
|
618 |
+
'grant_type' => 'authorization_code',
|
619 |
+
'client_id' => $this->oauth_app_key,
|
620 |
+
'client_secret' => $this->oauth_app_secret
|
621 |
+
), 'POST' );
|
622 |
+
|
623 |
+
}
|
624 |
+
|
625 |
+
|
626 |
+
/**
|
627 |
+
* @param $url
|
628 |
+
* @param array $args
|
629 |
+
* @param string $method
|
630 |
+
* @param string $data
|
631 |
+
* @param bool $echo
|
632 |
+
*
|
633 |
+
* @throws BackWPup_Destination_Dropbox_API_Exception
|
634 |
+
* @internal param null $file
|
635 |
+
* @return array|mixed|string
|
636 |
+
*/
|
637 |
+
private function request( $url, $args = array(), $method = 'GET', $data = '', $echo = FALSE ) {
|
638 |
+
|
639 |
+
/* Header*/
|
640 |
+
// oAuth 2
|
641 |
+
if ( ! empty( $this->oauth_token[ 'access_token' ] ) && ! empty( $this->oauth_token[ 'token_type' ] ) && strtolower( $this->oauth_token[ 'token_type' ] ) == 'bearer' )
|
642 |
+
$headers[ ] = 'Authorization: Bearer ' . $this->oauth_token[ 'access_token' ] ;
|
643 |
+
// oAuth 1
|
644 |
+
elseif ( ! empty( $this->oauth_token[ 'access_token' ] ) && ! empty( $this->oauth_token[ 'oauth_token_secret' ] ) )
|
645 |
+
$headers[ ] = 'Authorization: OAuth oauth_version="1.0", oauth_signature_method="PLAINTEXT", oauth_consumer_key="' . $this->oauth_app_key . '", oauth_token="' . $this->oauth_token[ 'access_token' ] . '", oauth_signature="' . $this->oauth_app_secret . '&' . $this->oauth_token[ 'oauth_token_secret' ] . '"';
|
646 |
+
|
647 |
+
$headers[ ] = 'Expect:';
|
648 |
+
|
649 |
+
/* Build cURL Request */
|
650 |
+
$ch = curl_init();
|
651 |
+
if ( $method == 'POST' ) {
|
652 |
+
curl_setopt( $ch, CURLOPT_POST, TRUE );
|
653 |
+
curl_setopt( $ch, CURLOPT_POSTFIELDS, $args );
|
654 |
+
curl_setopt( $ch, CURLOPT_URL, $url );
|
655 |
+
}
|
656 |
+
elseif ( $method == 'PUT' ) {
|
657 |
+
curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'PUT' );
|
658 |
+
curl_setopt( $ch, CURLOPT_POSTFIELDS, $data );
|
659 |
+
$headers[ ] = 'Content-Type: application/octet-stream';
|
660 |
+
$args = ( is_array( $args ) ) ? '?' . http_build_query( $args, '', '&' ) : $args;
|
661 |
+
curl_setopt( $ch, CURLOPT_URL, $url . $args );
|
662 |
+
}
|
663 |
+
else {
|
664 |
+
curl_setopt( $ch, CURLOPT_BINARYTRANSFER, TRUE );
|
665 |
+
$args = ( is_array( $args ) ) ? '?' . http_build_query( $args, '', '&' ) : $args;
|
666 |
+
curl_setopt( $ch, CURLOPT_URL, $url . $args );
|
667 |
+
}
|
668 |
+
curl_setopt( $ch, CURLOPT_USERAGENT, BackWPup::get_plugin_data( 'User-Agent' ) );
|
669 |
+
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, TRUE );
|
670 |
+
if ( BackWPup::get_plugin_data( 'cacert' ) ) {
|
671 |
+
curl_setopt( $ch, CURLOPT_SSLVERSION, 1 );
|
672 |
+
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, TRUE );
|
673 |
+
$curl_version = curl_version();
|
674 |
+
if ( strstr( $curl_version[ 'ssl_version' ], 'NSS/' ) === FALSE ) {
|
675 |
+
curl_setopt( $ch, CURLOPT_SSL_CIPHER_LIST,
|
676 |
+
'ECDHE-RSA-AES256-GCM-SHA384:'.
|
677 |
+
'ECDHE-RSA-AES128-GCM-SHA256:'.
|
678 |
+
'ECDHE-RSA-AES256-SHA384:'.
|
679 |
+
'ECDHE-RSA-AES128-SHA256:'.
|
680 |
+
'ECDHE-RSA-AES256-SHA:'.
|
681 |
+
'ECDHE-RSA-AES128-SHA:'.
|
682 |
+
'ECDHE-RSA-RC4-SHA:'.
|
683 |
+
'DHE-RSA-AES256-GCM-SHA384:'.
|
684 |
+
'DHE-RSA-AES128-GCM-SHA256:'.
|
685 |
+
'DHE-RSA-AES256-SHA256:'.
|
686 |
+
'DHE-RSA-AES128-SHA256:'.
|
687 |
+
'DHE-RSA-AES256-SHA:'.
|
688 |
+
'DHE-RSA-AES128-SHA:'.
|
689 |
+
'AES256-GCM-SHA384:'.
|
690 |
+
'AES128-GCM-SHA256:'.
|
691 |
+
'AES256-SHA256:'.
|
692 |
+
'AES128-SHA256:'.
|
693 |
+
'AES256-SHA:'.
|
694 |
+
'AES128-SHA'
|
695 |
+
);
|
696 |
+
}
|
697 |
+
if ( defined( 'CURLOPT_PROTOCOLS' ) )
|
698 |
+
curl_setopt( $ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS );
|
699 |
+
if ( defined( 'CURLOPT_REDIR_PROTOCOLS' ) )
|
700 |
+
curl_setopt( $ch, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTPS );
|
701 |
+
curl_setopt( $ch, CURLOPT_CAINFO, BackWPup::get_plugin_data( 'cacert' ) );
|
702 |
+
curl_setopt( $ch, CURLOPT_CAPATH, dirname( BackWPup::get_plugin_data( 'cacert' ) ) );
|
703 |
+
} else {
|
704 |
+
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
|
705 |
+
}
|
706 |
+
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
|
707 |
+
$output = '';
|
708 |
+
if ( $echo ) {
|
709 |
+
echo curl_exec( $ch );
|
710 |
+
}
|
711 |
+
else {
|
712 |
+
curl_setopt( $ch, CURLOPT_HEADER, TRUE );
|
713 |
+
if ( 0 == curl_errno( $ch ) ) {
|
714 |
+
$responce = explode( "\r\n\r\n", curl_exec( $ch ), 2 );
|
715 |
+
if ( ! empty( $responce[ 1 ] ) )
|
716 |
+
$output = json_decode( $responce[ 1 ], TRUE );
|
717 |
+
}
|
718 |
+
}
|
719 |
+
$status = curl_getinfo( $ch );
|
720 |
+
if ( isset( $datafilefd ) && is_resource( $datafilefd ) )
|
721 |
+
fclose( $datafilefd );
|
722 |
+
|
723 |
+
if ( $status[ 'http_code' ] == 503 ) {
|
724 |
+
$wait = 0;
|
725 |
+
if ( preg_match( "/retry-after:(.*?)\r/i", $responce[ 0 ], $matches ) )
|
726 |
+
$wait = trim( $matches[ 1 ] );
|
727 |
+
//only wait if we get a retry-after header.
|
728 |
+
if ( ! empty( $wait ) ) {
|
729 |
+
trigger_error( sprintf( '(503) Your app is making too many requests and is being rate limited. Error 503 can be triggered on a per-app or per-user basis. Wait for %d seconds.', $wait ), E_USER_WARNING );
|
730 |
+
sleep( $wait );
|
731 |
+
} else {
|
732 |
+
throw new BackWPup_Destination_Dropbox_API_Exception( '(503) This indicates a transient server error.' );
|
733 |
+
}
|
734 |
+
//redo request
|
735 |
+
return $this->request( $url, $args, $method, $data, $echo );
|
736 |
+
}
|
737 |
+
elseif ( $status[ 'http_code' ] == 400 && $method == 'PUT' ) { //correct offset on chunk uploads
|
738 |
+
trigger_error( '(' . $status[ 'http_code' ] . ') False offset will corrected', E_USER_NOTICE );
|
739 |
+
return $output;
|
740 |
+
}
|
741 |
+
elseif ( $status[ 'http_code' ] == 404 && ! empty( $output[ 'error' ] )) {
|
742 |
+
trigger_error( '(' . $status[ 'http_code' ] . ') ' . $output[ 'error' ], E_USER_WARNING );
|
743 |
+
|
744 |
+
return FALSE;
|
745 |
+
}
|
746 |
+
elseif ( isset( $output[ 'error' ] ) || $status[ 'http_code' ] >= 300 || $status[ 'http_code' ] < 200 || curl_errno( $ch ) > 0 ) {
|
747 |
+
if ( isset( $output[ 'error' ] ) && is_string( $output[ 'error' ] ) ) $message = '(' . $status[ 'http_code' ] . ') ' . $output[ 'error' ];
|
748 |
+
elseif ( isset( $output[ 'error' ][ 'hash' ] ) && $output[ 'error' ][ 'hash' ] != '' ) $message = (string)'(' . $status[ 'http_code' ] . ') ' . $output[ 'error' ][ 'hash' ];
|
749 |
+
elseif ( 0 != curl_errno( $ch ) ) $message = '(' . curl_errno( $ch ) . ') ' . curl_error( $ch );
|
750 |
+
elseif ( $status[ 'http_code' ] == 304 ) $message = '(304) Folder contents have not changed (relies on hash parameter).';
|
751 |
+
elseif ( $status[ 'http_code' ] == 400 ) $message = '(400) Bad input parameter: ' . strip_tags( $responce[ 1 ] );
|
752 |
+
elseif ( $status[ 'http_code' ] == 401 ) $message = '(401) Bad or expired token. This can happen if the user or Dropbox revoked or expired an access token. To fix, you should re-authenticate the user.';
|
753 |
+
elseif ( $status[ 'http_code' ] == 403 ) $message = '(403) Bad OAuth request (wrong consumer key, bad nonce, expired timestamp...). Unfortunately, re-authenticating the user won\'t help here.';
|
754 |
+
elseif ( $status[ 'http_code' ] == 404 ) $message = '(404) File or folder not found at the specified path.';
|
755 |
+
elseif ( $status[ 'http_code' ] == 405 ) $message = '(405) Request method not expected (generally should be GET or POST).';
|
756 |
+
elseif ( $status[ 'http_code' ] == 406 ) $message = '(406) There are too many file entries to return.';
|
757 |
+
elseif ( $status[ 'http_code' ] == 411 ) $message = '(411) Missing Content-Length header (this endpoint doesn\'t support HTTP chunked transfer encoding).';
|
758 |
+
elseif ( $status[ 'http_code' ] == 415 ) $message = '(415) The image is invalid and cannot be converted to a thumbnail.';
|
759 |
+
elseif ( $status[ 'http_code' ] == 429 ) $message = '(429) Your app is making too many requests and is being rate limited. 429s can trigger on a per-app or per-user basis.';
|
760 |
+
elseif ( $status[ 'http_code' ] == 507 ) $message = '(507) User is over Dropbox storage quota.';
|
761 |
+
else $message = '(' . $status[ 'http_code' ] . ') Invalid response.';
|
762 |
+
throw new BackWPup_Destination_Dropbox_API_Exception( $message );
|
763 |
+
}
|
764 |
+
else {
|
765 |
+
curl_close( $ch );
|
766 |
+
if ( ! is_array( $output ) )
|
767 |
+
return $responce[ 1 ];
|
768 |
+
else
|
769 |
+
return $output;
|
770 |
+
}
|
771 |
+
}
|
772 |
+
|
773 |
+
/**
|
774 |
+
* @param $path
|
775 |
+
*
|
776 |
+
* @return mixed
|
777 |
+
*/
|
778 |
+
private function encode_path( $path ) {
|
779 |
+
|
780 |
+
$path = preg_replace( '#/+#', '/', trim( $path, '/' ) );
|
781 |
+
$path = str_replace( '%2F', '/', rawurlencode( $path ) );
|
782 |
+
|
783 |
+
return $path;
|
784 |
+
}
|
785 |
+
}
|
786 |
+
|
787 |
+
/**
|
788 |
+
*
|
789 |
+
*/
|
790 |
+
class BackWPup_Destination_Dropbox_API_Exception extends Exception {
|
791 |
+
|
792 |
+
}
|
inc/class-destination-s3-v1.php
CHANGED
@@ -1,596 +1,596 @@
|
|
1 |
-
<?php
|
2 |
-
// Amazon S3 SDK v1.6.2
|
3 |
-
// http://aws.amazon.com/de/sdkforphp/
|
4 |
-
// https://github.com/amazonwebservices/aws-sdk-for-php
|
5 |
-
if ( ! defined( 'E_USER_DEPRECATED') )
|
6 |
-
define( 'E_USER_DEPRECATED', 16384 );
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Documentation: http://docs.amazonwebservices.com/aws-sdk-php-2/latest/class-Aws.S3.S3Client.html
|
10 |
-
*/
|
11 |
-
class BackWPup_Destination_S3_V1 extends BackWPup_Destinations {
|
12 |
-
|
13 |
-
/**
|
14 |
-
* @param $s3region
|
15 |
-
* @param string $s3base_url
|
16 |
-
* @return string
|
17 |
-
*/
|
18 |
-
protected function get_s3_base_url( $s3region, $s3base_url = '' ) {
|
19 |
-
|
20 |
-
if ( ! empty( $s3base_url ) )
|
21 |
-
return $s3base_url;
|
22 |
-
|
23 |
-
switch ( $s3region ) {
|
24 |
-
case 'us-east-1':
|
25 |
-
return 'https://s3.amazonaws.com';
|
26 |
-
case 'us-west-1':
|
27 |
-
return 'https://s3-us-west-1.amazonaws.com';
|
28 |
-
case 'us-west-2':
|
29 |
-
return 'https://s3-us-west-2.amazonaws.com';
|
30 |
-
case 'eu-west-1':
|
31 |
-
return 'https://s3-eu-west-1.amazonaws.com';
|
32 |
-
case 'eu-central-1':
|
33 |
-
return 'https://s3-eu-central-1.amazonaws.com';
|
34 |
-
case 'ap-northeast-1':
|
35 |
-
return 'https://s3-ap-northeast-1.amazonaws.com';
|
36 |
-
case 'ap-southeast-1':
|
37 |
-
return 'https://s3-ap-southeast-1.amazonaws.com';
|
38 |
-
case 'ap-southeast-2':
|
39 |
-
return 'https://s3-ap-southeast-2.amazonaws.com';
|
40 |
-
case 'sa-east-1':
|
41 |
-
return 'https://s3-sa-east-1.amazonaws.com';
|
42 |
-
case 'cn-north-1':
|
43 |
-
return 'https://cn-north-1.amazonaws.com';
|
44 |
-
case 'google-storage':
|
45 |
-
return 'https://storage.googleapis.com';
|
46 |
-
case 'dreamhost':
|
47 |
-
return 'https://objects.dreamhost.com';
|
48 |
-
case 'greenqloud':
|
49 |
-
return 'http://s.greenqloud.com';
|
50 |
-
default:
|
51 |
-
return '';
|
52 |
-
}
|
53 |
-
|
54 |
-
}
|
55 |
-
|
56 |
-
/**
|
57 |
-
* @return array
|
58 |
-
*/
|
59 |
-
public function option_defaults() {
|
60 |
-
|
61 |
-
return array( 's3accesskey' => '', 's3secretkey' => '', 's3bucket' => '', 's3region' => 'us-east-1', 's3base_url' => '', 's3ssencrypt' => '', 's3storageclass' => '', 's3dir' => trailingslashit( sanitize_file_name( get_bloginfo( 'name' ) ) ), 's3maxbackups' => 15, 's3syncnodelete' => TRUE );
|
62 |
-
}
|
63 |
-
|
64 |
-
|
65 |
-
/**
|
66 |
-
* @param $jobid
|
67 |
-
*/
|
68 |
-
public function edit_tab( $jobid ) {
|
69 |
-
|
70 |
-
?>
|
71 |
-
<h3 class="title"><?php _e( 'S3 Service', 'backwpup' ) ?></h3>
|
72 |
-
<p></p>
|
73 |
-
<table class="form-table">
|
74 |
-
<tr>
|
75 |
-
<th scope="row"><label for="s3region"><?php _e( 'Select a S3 service', 'backwpup' ) ?></label></th>
|
76 |
-
<td>
|
77 |
-
<select name="s3region" id="s3region" title="<?php _e( 'Amazon S3 Region', 'backwpup' ); ?>">
|
78 |
-
<option value="us-east-1" <?php selected( 'us-east-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: US Standard', 'backwpup' ); ?></option>
|
79 |
-
<option value="us-west-1" <?php selected( 'us-west-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: US West (Northern California)', 'backwpup' ); ?></option>
|
80 |
-
<option value="us-west-2" <?php selected( 'us-west-2', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: US West (Oregon)', 'backwpup' ); ?></option>
|
81 |
-
<option value="eu-west-1" <?php selected( 'eu-west-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: EU (Ireland)', 'backwpup' ); ?></option>
|
82 |
-
<option value="eu-central-1" <?php selected( 'eu-central-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: EU (Germany)', 'backwpup' ); ?></option>
|
83 |
-
<option value="ap-northeast-1" <?php selected( 'ap-northeast-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: Asia Pacific (Tokyo)', 'backwpup' ); ?></option>
|
84 |
-
<option value="ap-southeast-1" <?php selected( 'ap-southeast-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: Asia Pacific (Singapore)', 'backwpup' ); ?></option>
|
85 |
-
<option value="ap-southeast-2" <?php selected( 'ap-southeast-2', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: Asia Pacific (Sydney)', 'backwpup' ); ?></option>
|
86 |
-
<option value="sa-east-1" <?php selected( 'sa-east-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: South America (Sao Paulo)', 'backwpup' ); ?></option>
|
87 |
-
<option value="cn-north-1" <?php selected( 'cn-north-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: China (Beijing)', 'backwpup' ); ?></option>
|
88 |
-
<option value="google-storage" <?php selected( 'google-storage', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Google Storage (Interoperable Access)', 'backwpup' ); ?></option>
|
89 |
-
<option value="dreamhost" <?php selected( 'dreamhost', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Dream Host Cloud Storage', 'backwpup' ); ?></option>
|
90 |
-
<option value="greenqloud" <?php selected( 'greenqloud', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'GreenQloud Storage Qloud', 'backwpup' ); ?></option>
|
91 |
-
</select>
|
92 |
-
</td>
|
93 |
-
</tr>
|
94 |
-
<tr>
|
95 |
-
<th scope="row"><label for="s3base_url"><?php _e( 'Or a S3 Server URL', 'backwpup' ) ?></label></th>
|
96 |
-
<td>
|
97 |
-
<input id="s3base_url" name="s3base_url" type="text" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3base_url' ) );?>" class="regular-text" autocomplete="off" />
|
98 |
-
</td>
|
99 |
-
</tr>
|
100 |
-
</table>
|
101 |
-
|
102 |
-
<h3 class="title"><?php _e( 'S3 Access Keys', 'backwpup' ); ?></h3>
|
103 |
-
<p></p>
|
104 |
-
<table class="form-table">
|
105 |
-
<tr>
|
106 |
-
<th scope="row"><label for="s3accesskey"><?php _e( 'Access Key', 'backwpup' ); ?></label></th>
|
107 |
-
<td>
|
108 |
-
<input id="s3accesskey" name="s3accesskey" type="text"
|
109 |
-
value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3accesskey' ) );?>" class="regular-text" autocomplete="off" />
|
110 |
-
</td>
|
111 |
-
</tr>
|
112 |
-
<tr>
|
113 |
-
<th scope="row"><label for="s3secretkey"><?php _e( 'Secret Key', 'backwpup' ); ?></label></th>
|
114 |
-
<td>
|
115 |
-
<input id="s3secretkey" name="s3secretkey" type="password"
|
116 |
-
value="<?php echo esc_attr( BackWPup_Encryption::decrypt( BackWPup_Option::get( $jobid, 's3secretkey' ) ) ); ?>" class="regular-text" autocomplete="off" />
|
117 |
-
</td>
|
118 |
-
</tr>
|
119 |
-
</table>
|
120 |
-
|
121 |
-
<h3 class="title"><?php _e( 'S3 Bucket', 'backwpup' ); ?></h3>
|
122 |
-
<p></p>
|
123 |
-
<table class="form-table">
|
124 |
-
<tr>
|
125 |
-
<th scope="row"><label for="s3bucketselected"><?php _e( 'Bucket selection', 'backwpup' ); ?></label></th>
|
126 |
-
<td>
|
127 |
-
<input id="s3bucketselected" name="s3bucketselected" type="hidden" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3bucket' ) ); ?>" />
|
128 |
-
<?php if ( BackWPup_Option::get( $jobid, 's3accesskey' ) && BackWPup_Option::get( $jobid, 's3secretkey' ) ) $this->edit_ajax( array(
|
129 |
-
's3accesskey' => BackWPup_Option::get( $jobid, 's3accesskey' ),
|
130 |
-
's3secretkey' => BackWPup_Encryption::decrypt(BackWPup_Option::get( $jobid, 's3secretkey' ) ),
|
131 |
-
's3bucketselected' => BackWPup_Option::get( $jobid, 's3bucket' ),
|
132 |
-
's3base_url' => BackWPup_Option::get( $jobid, 's3base_url' ),
|
133 |
-
's3region' => BackWPup_Option::get( $jobid, 's3region' )
|
134 |
-
) ); ?>
|
135 |
-
</td>
|
136 |
-
</tr>
|
137 |
-
<tr>
|
138 |
-
<th scope="row"><label for="s3newbucket"><?php _e( 'Create a new bucket', 'backwpup' ); ?></label></th>
|
139 |
-
<td>
|
140 |
-
<input id="s3newbucket" name="s3newbucket" type="text" value="" class="small-text" autocomplete="off" />
|
141 |
-
</td>
|
142 |
-
</tr>
|
143 |
-
</table>
|
144 |
-
|
145 |
-
<h3 class="title"><?php _e( 'S3 Backup settings', 'backwpup' ); ?></h3>
|
146 |
-
<p></p>
|
147 |
-
<table class="form-table">
|
148 |
-
<tr>
|
149 |
-
<th scope="row"><label for="ids3dir"><?php _e( 'Folder in bucket', 'backwpup' ); ?></label></th>
|
150 |
-
<td>
|
151 |
-
<input id="ids3dir" name="s3dir" type="text" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3dir' ) ); ?>" class="regular-text" />
|
152 |
-
</td>
|
153 |
-
</tr>
|
154 |
-
<tr>
|
155 |
-
<th scope="row"><?php _e( 'File deletion', 'backwpup' ); ?></th>
|
156 |
-
<td>
|
157 |
-
<?php
|
158 |
-
if ( BackWPup_Option::get( $jobid, 'backuptype' ) == 'archive' ) {
|
159 |
-
?>
|
160 |
-
<label for="ids3maxbackups"><input id="ids3maxbackups" name="s3maxbackups" type="text" size="3" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3maxbackups' ) ); ?>" class="small-text help-tip" title="<?php esc_attr_e( 'Oldest files will be deleted first. 0 = no deletion', 'backwpup' ); ?>" />
|
161 |
-
<?php _e( 'Number of files to keep in folder.', 'backwpup' ); ?></label>
|
162 |
-
<?php } else { ?>
|
163 |
-
<label for="ids3syncnodelete"><input class="checkbox" value="1"
|
164 |
-
type="checkbox" <?php checked( BackWPup_Option::get( $jobid, 's3syncnodelete' ), TRUE ); ?>
|
165 |
-
name="s3syncnodelete" id="ids3syncnodelete" /> <?php _e( 'Do not delete files while syncing to destination!', 'backwpup' ); ?></label>
|
166 |
-
<?php } ?>
|
167 |
-
</td>
|
168 |
-
</tr>
|
169 |
-
</table>
|
170 |
-
|
171 |
-
<h3 class="title"><?php _e( 'Amazon specific settings', 'backwpup' ); ?></h3>
|
172 |
-
<p></p>
|
173 |
-
<table class="form-table">
|
174 |
-
<tr>
|
175 |
-
<th scope="row"><label for="ids3storageclass"><?php _e( 'Amazon: Storage Class', 'backwpup' ); ?></label></th>
|
176 |
-
<td>
|
177 |
-
<select name="s3storageclass" id="ids3storageclass" title="<?php _e( 'Amazon: Storage Class', 'backwpup' ); ?>">
|
178 |
-
<option value="" <?php selected( 'us-east-1', BackWPup_Option::get( $jobid, 's3storageclass' ), TRUE ) ?>><?php _e( 'none', 'backwpup' ); ?></option>
|
179 |
-
<option value="REDUCED_REDUNDANCY" <?php selected( 'REDUCED_REDUNDANCY', BackWPup_Option::get( $jobid, 's3storageclass' ), TRUE ) ?>><?php _e( 'Reduced Redundancy', 'backwpup' ); ?></option>
|
180 |
-
</select>
|
181 |
-
</td>
|
182 |
-
</tr>
|
183 |
-
<tr>
|
184 |
-
<th scope="row"><label for="ids3ssencrypt"><?php _e( 'Server side encryption', 'backwpup' ); ?></label></th>
|
185 |
-
<td>
|
186 |
-
<input class="checkbox" value="AES256"
|
187 |
-
type="checkbox" <?php checked( BackWPup_Option::get( $jobid, 's3ssencrypt' ), 'AES256' ); ?>
|
188 |
-
name="s3ssencrypt" id="ids3ssencrypt" /> <?php _e( 'Save files encrypted (AES256) on server.', 'backwpup' ); ?>
|
189 |
-
</td>
|
190 |
-
</tr>
|
191 |
-
</table>
|
192 |
-
|
193 |
-
<?php
|
194 |
-
}
|
195 |
-
|
196 |
-
|
197 |
-
/**
|
198 |
-
* @param $jobid
|
199 |
-
* @return string
|
200 |
-
*/
|
201 |
-
public function edit_form_post_save( $jobid ) {
|
202 |
-
|
203 |
-
BackWPup_Option::update( $jobid, 's3accesskey', isset( $_POST[ 's3accesskey' ] ) ? $_POST[ 's3accesskey' ] : '' );
|
204 |
-
BackWPup_Option::update( $jobid, 's3secretkey', isset( $_POST[ 's3secretkey' ] ) ? BackWPup_Encryption::encrypt( $_POST[ 's3secretkey' ] ) : '' );
|
205 |
-
BackWPup_Option::update( $jobid, 's3base_url', isset( $_POST[ 's3base_url' ] ) ? esc_url_raw( $_POST[ 's3base_url' ] ) : '' );
|
206 |
-
BackWPup_Option::update( $jobid, 's3region', isset( $_POST[ 's3region' ] ) ? $_POST[ 's3region' ] : '' );
|
207 |
-
BackWPup_Option::update( $jobid, 's3storageclass', isset( $_POST[ 's3storageclass' ] ) ? $_POST[ 's3storageclass' ] : '' );
|
208 |
-
BackWPup_Option::update( $jobid, 's3ssencrypt', ( isset( $_POST[ 's3ssencrypt' ] ) && $_POST[ 's3ssencrypt' ] == 'AES256' ) ? 'AES256' : '' );
|
209 |
-
BackWPup_Option::update( $jobid, 's3bucket', isset( $_POST[ 's3bucket' ] ) ? $_POST[ 's3bucket' ] : '' );
|
210 |
-
|
211 |
-
$_POST[ 's3dir' ] = trailingslashit( str_replace( '//', '/', str_replace( '\\', '/', trim( stripslashes( $_POST[ 's3dir' ] ) ) ) ) );
|
212 |
-
if ( substr( $_POST[ 's3dir' ], 0, 1 ) == '/' )
|
213 |
-
$_POST[ 's3dir' ] = substr( $_POST[ 's3dir' ], 1 );
|
214 |
-
if ( $_POST[ 's3dir' ] == '/' )
|
215 |
-
$_POST[ 's3dir' ] = '';
|
216 |
-
BackWPup_Option::update( $jobid, 's3dir', $_POST[ 's3dir' ] );
|
217 |
-
|
218 |
-
BackWPup_Option::update( $jobid, 's3maxbackups', isset( $_POST[ 's3maxbackups' ] ) ? (int)$_POST[ 's3maxbackups' ] : 0 );
|
219 |
-
BackWPup_Option::update( $jobid, 's3syncnodelete', ( isset( $_POST[ 's3syncnodelete' ] ) && $_POST[ 's3syncnodelete' ] == 1 ) ? TRUE : FALSE );
|
220 |
-
BackWPup_Option::update( $jobid, 's3multipart', ( isset( $_POST[ 's3multipart' ] ) && $_POST[ 's3multipart' ] == 1 ) ? TRUE : FALSE );
|
221 |
-
|
222 |
-
//create new bucket
|
223 |
-
if ( !empty( $_POST[ 's3newbucket' ] ) ) {
|
224 |
-
try {
|
225 |
-
$s3 = new AmazonS3( array( 'key' => $_POST[ 's3accesskey' ],
|
226 |
-
'secret' => BackWPup_Encryption::decrypt( $_POST[ 's3secretkey' ] ),
|
227 |
-
'certificate_authority' => TRUE ) );
|
228 |
-
$base_url = $this->get_s3_base_url( $_POST[ 's3region' ], $_POST[ 's3base_url' ] );
|
229 |
-
if ( stristr( $base_url, 'amazonaws.com' ) ) {
|
230 |
-
$s3->set_region( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
231 |
-
} else {
|
232 |
-
$s3->set_hostname( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
233 |
-
$s3->allow_hostname_override( FALSE );
|
234 |
-
if ( substr( $base_url, -1 ) == '/')
|
235 |
-
$s3->enable_path_style( TRUE );
|
236 |
-
}
|
237 |
-
if ( stristr( $base_url, 'http://' ) )
|
238 |
-
$s3->disable_ssl();
|
239 |
-
|
240 |
-
// set bucket creation region
|
241 |
-
if ( $_POST[ 's3region' ] == 'google-storage' || $_POST[ 's3region' ] == 'hosteurope' )
|
242 |
-
$region = 'EU';
|
243 |
-
else
|
244 |
-
$region = str_replace( array( 'http://', 'https://' ), '', $base_url );
|
245 |
-
|
246 |
-
$bucket = $s3->create_bucket( $_POST[ 's3newbucket' ], $region, 'private' );
|
247 |
-
|
248 |
-
if ( $bucket->status == 200 )
|
249 |
-
BackWPup_Admin::message( sprintf( __( 'Bucket %1$s created.','backwpup'), $_POST[ 's3newbucket' ] ) );
|
250 |
-
else
|
251 |
-
BackWPup_Admin::message( sprintf( __( 'Bucket %s could not be created.','backwpup'), $_POST[ 's3newbucket' ] ), TRUE );
|
252 |
-
|
253 |
-
}
|
254 |
-
catch ( Exception $e ) {
|
255 |
-
BackWPup_Admin::message( $e->getMessage(), TRUE );
|
256 |
-
}
|
257 |
-
BackWPup_Option::update( $jobid, 's3bucket', $_POST[ 's3newbucket' ] );
|
258 |
-
}
|
259 |
-
}
|
260 |
-
|
261 |
-
/**
|
262 |
-
* @param $jobdest
|
263 |
-
* @param $backupfile
|
264 |
-
*/
|
265 |
-
public function file_delete( $jobdest, $backupfile ) {
|
266 |
-
|
267 |
-
$files = get_site_transient( 'backwpup_'. strtolower( $jobdest ), array() );
|
268 |
-
list( $jobid, $dest ) = explode( '_', $jobdest );
|
269 |
-
|
270 |
-
if ( BackWPup_Option::get( $jobid, 's3accesskey' ) && BackWPup_Option::get( $jobid, 's3secretkey' ) && BackWPup_Option::get( $jobid, 's3bucket' ) ) {
|
271 |
-
try {
|
272 |
-
$s3 = new AmazonS3( array( 'key' => BackWPup_Option::get( $jobid, 's3accesskey' ),
|
273 |
-
'secret' => BackWPup_Encryption::decrypt( BackWPup_Option::get( $jobid, 's3secretkey' ) ),
|
274 |
-
'certificate_authority' => TRUE ) );
|
275 |
-
$base_url = $this->get_s3_base_url( BackWPup_Option::get( $jobid, 's3region' ), BackWPup_Option::get( $jobid, 's3base_url' ) );
|
276 |
-
if ( stristr( $base_url, 'amazonaws.com' ) ) {
|
277 |
-
$s3->set_region( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
278 |
-
} else {
|
279 |
-
$s3->set_hostname( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
280 |
-
$s3->allow_hostname_override( FALSE );
|
281 |
-
if ( substr( $base_url, -1 ) == '/')
|
282 |
-
$s3->enable_path_style( TRUE );
|
283 |
-
}
|
284 |
-
if ( stristr( $base_url, 'http://' ) )
|
285 |
-
$s3->disable_ssl();
|
286 |
-
|
287 |
-
$s3->delete_object( BackWPup_Option::get( $jobid, 's3bucket' ), $backupfile );
|
288 |
-
//update file list
|
289 |
-
foreach ( $files as $key => $file ) {
|
290 |
-
if ( is_array( $file ) && $file[ 'file' ] == $backupfile )
|
291 |
-
unset( $files[ $key ] );
|
292 |
-
}
|
293 |
-
unset( $s3 );
|
294 |
-
}
|
295 |
-
catch ( Exception $e ) {
|
296 |
-
BackWPup_Admin::message( sprintf( __('S3 Service API: %s','backwpup'), $e->getMessage() ), TRUE );
|
297 |
-
}
|
298 |
-
}
|
299 |
-
|
300 |
-
set_site_transient( 'backwpup_'. strtolower( $jobdest ), $files, 60 * 60 * 24 * 7 );
|
301 |
-
}
|
302 |
-
|
303 |
-
/**
|
304 |
-
* @param $jobid
|
305 |
-
* @param $get_file
|
306 |
-
*/
|
307 |
-
public function file_download( $jobid, $get_file ) {
|
308 |
-
|
309 |
-
try {
|
310 |
-
$s3 = new AmazonS3( array( 'key' => BackWPup_Option::get( $jobid, 's3accesskey' ),
|
311 |
-
'secret' => BackWPup_Encryption::decrypt( BackWPup_Option::get( $jobid, 's3secretkey' ) ),
|
312 |
-
'certificate_authority' => TRUE ) );
|
313 |
-
$base_url = $this->get_s3_base_url( BackWPup_Option::get( $jobid, 's3region' ), BackWPup_Option::get( $jobid, 's3base_url' ) );
|
314 |
-
if ( stristr( $base_url, 'amazonaws.com' ) ) {
|
315 |
-
$s3->set_region( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
316 |
-
} else {
|
317 |
-
$s3->set_hostname( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
318 |
-
$s3->allow_hostname_override( FALSE );
|
319 |
-
if ( substr( $base_url, -1 ) == '/')
|
320 |
-
$s3->enable_path_style( TRUE );
|
321 |
-
}
|
322 |
-
if ( stristr( $base_url, 'http://' ) )
|
323 |
-
$s3->disable_ssl();
|
324 |
-
|
325 |
-
$s3file = $s3->get_object( BackWPup_Option::get( $jobid, 's3bucket' ), $get_file );
|
326 |
-
}
|
327 |
-
catch ( Exception $e ) {
|
328 |
-
die( $e->getMessage() );
|
329 |
-
}
|
330 |
-
|
331 |
-
if ( $s3file->status==200 ) {
|
332 |
-
header( "Pragma: public" );
|
333 |
-
header( "Expires: 0" );
|
334 |
-
header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
|
335 |
-
header( "Content-Type: application/octet-stream" );
|
336 |
-
header( "Content-Disposition: attachment; filename=" . basename( $get_file ) . ";" );
|
337 |
-
header( "Content-Transfer-Encoding: binary" );
|
338 |
-
header( "Content-Length: " . $s3file->header->_info->size_download );
|
339 |
-
@set_time_limit( 300 );
|
340 |
-
echo $s3file->body;
|
341 |
-
die();
|
342 |
-
}
|
343 |
-
}
|
344 |
-
|
345 |
-
/**
|
346 |
-
* @param $jobdest
|
347 |
-
* @return mixed
|
348 |
-
*/
|
349 |
-
public function file_get_list( $jobdest ) {
|
350 |
-
|
351 |
-
return get_site_transient( 'backwpup_' . strtolower( $jobdest ) );
|
352 |
-
}
|
353 |
-
|
354 |
-
/**
|
355 |
-
* @param $job_object
|
356 |
-
* @return bool
|
357 |
-
*/
|
358 |
-
public function job_run_archive( &$job_object ) {
|
359 |
-
|
360 |
-
$job_object->substeps_todo = 2 + $job_object->backup_filesize;
|
361 |
-
$job_object->log( sprintf( __( '%d. Trying to send backup file to S3 Service …', 'backwpup' ), $job_object->steps_data[ $job_object->step_working ][ 'STEP_TRY' ] ), E_USER_NOTICE );
|
362 |
-
|
363 |
-
try {
|
364 |
-
|
365 |
-
$s3 = new AmazonS3( array( 'key' => $job_object->job[ 's3accesskey' ],
|
366 |
-
'secret' => BackWPup_Encryption::decrypt( $job_object->job[ 's3secretkey' ] ),
|
367 |
-
'certificate_authority' => TRUE ) );
|
368 |
-
$base_url = $this->get_s3_base_url( $job_object->job[ 's3region' ], $job_object->job[ 's3base_url' ] );
|
369 |
-
if ( stristr( $base_url, 'amazonaws.com' ) ) {
|
370 |
-
$s3->set_region( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
371 |
-
} else {
|
372 |
-
$s3->set_hostname( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
373 |
-
$s3->allow_hostname_override( FALSE );
|
374 |
-
if ( substr( $base_url, -1 ) == '/')
|
375 |
-
$s3->enable_path_style( TRUE );
|
376 |
-
}
|
377 |
-
if ( stristr( $base_url, 'http://' ) )
|
378 |
-
$s3->disable_ssl();
|
379 |
-
|
380 |
-
|
381 |
-
if ( $s3->if_bucket_exists( $job_object->job[ 's3bucket' ] ) ) {
|
382 |
-
$job_object->log( sprintf( __( 'Connected to S3 Bucket "%1$s" in %2$s', 'backwpup' ), $job_object->job[ 's3bucket' ], $base_url ), E_USER_NOTICE );
|
383 |
-
}
|
384 |
-
else {
|
385 |
-
$job_object->log( sprintf( __( 'S3 Bucket "%s" does not exist!', 'backwpup' ), $job_object->job[ 's3bucket' ] ), E_USER_ERROR );
|
386 |
-
|
387 |
-
return TRUE;
|
388 |
-
}
|
389 |
-
|
390 |
-
//transfer file to S3
|
391 |
-
$job_object->log( __( 'Starting upload to S3 Service …', 'backwpup' ), E_USER_NOTICE );
|
392 |
-
|
393 |
-
//Transfer Backup to S3
|
394 |
-
if ( $job_object->job[ 's3storageclass' ] == 'REDUCED_REDUNDANCY' ) //set reduced redundancy or not
|
395 |
-
$storage=AmazonS3::STORAGE_REDUCED;
|
396 |
-
else
|
397 |
-
$storage=AmazonS3::STORAGE_STANDARD;
|
398 |
-
|
399 |
-
if ( empty( $job_object->job[ 's3ssencrypt' ] ) )
|
400 |
-
$job_object->job[ 's3ssencrypt' ] = NULL;
|
401 |
-
|
402 |
-
//set progress bar
|
403 |
-
$s3->register_streaming_read_callback( array( $job_object, 'curl_read_callback' ) );
|
404 |
-
|
405 |
-
$result = $s3->create_object( $job_object->job[ 's3bucket' ], $job_object->job[ 's3dir' ] . $job_object->backup_file, array( 'fileUpload' => $job_object->backup_folder . $job_object->backup_file, 'acl' => AmazonS3::ACL_PRIVATE, 'storage' => $storage, 'encryption' => $job_object->job[ 's3ssencrypt' ] ) );
|
406 |
-
|
407 |
-
if ( $result->status >= 200 and $result->status < 300 ) {
|
408 |
-
$job_object->substeps_done = 1 + $job_object->backup_filesize;
|
409 |
-
$job_object->log( sprintf( __( 'Backup transferred to %s.', 'backwpup' ), $this->get_s3_base_url( $job_object->job[ 's3region' ], $job_object->job[ 's3base_url' ] ). '/' .$job_object->job[ 's3bucket' ] . '/' . $job_object->job[ 's3dir' ] . $job_object->backup_file ), E_USER_NOTICE );
|
410 |
-
if ( ! empty( $job_object->job[ 'jobid' ] ) )
|
411 |
-
BackWPup_Option::update( $job_object->job[ 'jobid' ], 'lastbackupdownloadurl', network_admin_url( 'admin.php' ) . '?page=backwpupbackups&action=downloads3&file=' . $job_object->job[ 's3dir' ] . $job_object->backup_file . '&jobid=' . $job_object->job[ 'jobid' ] );
|
412 |
-
}
|
413 |
-
else {
|
414 |
-
$job_object->log( sprintf( __( 'Cannot transfer backup to S3! (%1$d) %2$s', 'backwpup' ), $result->status, $result->body ), E_USER_ERROR );
|
415 |
-
}
|
416 |
-
}
|
417 |
-
catch ( Exception $e ) {
|
418 |
-
$job_object->log( E_USER_ERROR, sprintf( __( 'S3 Service API: %s', 'backwpup' ), htmlentities( $e->getMessage() ) ), $e->getFile(), $e->getLine() );
|
419 |
-
|
420 |
-
return FALSE;
|
421 |
-
}
|
422 |
-
|
423 |
-
try {
|
424 |
-
$backupfilelist = array();
|
425 |
-
$filecounter = 0;
|
426 |
-
$files = array();
|
427 |
-
$objects = $s3->list_objects( $job_object->job[ 's3bucket' ], array( 'prefix' => $job_object->job[ 's3dir' ] ) );
|
428 |
-
if ( is_object( $objects ) ) {
|
429 |
-
foreach ( $objects->body->Contents as $object ) {
|
430 |
-
$file = basename( (string) $object->Key );
|
431 |
-
$changetime = strtotime( (string) $object->LastModified ) + ( get_option( 'gmt_offset' ) * 3600 );
|
432 |
-
if ( $job_object->is_backup_archive( $file ) )
|
433 |
-
$backupfilelist[ $changetime ] = $file;
|
434 |
-
$files[ $filecounter ][ 'folder' ] = $this->get_s3_base_url( $job_object->job[ 's3region' ], $job_object->job[ 's3base_url' ] ). '/' .$job_object->job[ 's3bucket' ] . '/' . dirname( (string) $object->Key );
|
435 |
-
$files[ $filecounter ][ 'file' ] = (string) $object->Key;
|
436 |
-
$files[ $filecounter ][ 'filename' ] = basename( $object->Key );
|
437 |
-
$files[ $filecounter ][ 'downloadurl' ] = network_admin_url( 'admin.php' ) . '?page=backwpupbackups&action=downloads3&file=' . (string) $object->Key . '&jobid=' . $job_object->job[ 'jobid' ];
|
438 |
-
$files[ $filecounter ][ 'filesize' ] = (int) $object->Size;
|
439 |
-
$files[ $filecounter ][ 'time' ] = $changetime;
|
440 |
-
$filecounter ++;
|
441 |
-
}
|
442 |
-
}
|
443 |
-
if ( $job_object->job[ 's3maxbackups' ] > 0 && is_object( $s3 ) ) { //Delete old backups
|
444 |
-
if ( count( $backupfilelist ) > $job_object->job[ 's3maxbackups' ] ) {
|
445 |
-
ksort( $backupfilelist );
|
446 |
-
$numdeltefiles = 0;
|
447 |
-
while ( $file = array_shift( $backupfilelist ) ) {
|
448 |
-
if ( count( $backupfilelist ) < $job_object->job[ 's3maxbackups' ] )
|
449 |
-
break;
|
450 |
-
//delete files on S3
|
451 |
-
$delete_s3 = $s3->delete_object( $job_object->job[ 's3bucket' ], $job_object->job[ 's3dir' ] . $file );
|
452 |
-
if ($delete_s3 ) {
|
453 |
-
foreach ( $files as $key => $filedata ) {
|
454 |
-
if ( $filedata[ 'file' ] == $job_object->job[ 's3dir' ] . $file )
|
455 |
-
unset( $files[ $key ] );
|
456 |
-
}
|
457 |
-
$numdeltefiles ++;
|
458 |
-
} else {
|
459 |
-
$job_object->log( sprintf( __( 'Cannot delete backup from %s.', 'backwpup' ), $this->get_s3_base_url( $job_object->job[ 's3region' ], $job_object->job[ 's3base_url' ] ). '/' .$job_object->job[ 's3bucket' ] . '/' . $job_object->job[ 's3dir' ] . $file ), E_USER_ERROR );
|
460 |
-
}
|
461 |
-
}
|
462 |
-
if ( $numdeltefiles > 0 )
|
463 |
-
$job_object->log( sprintf( _n( 'One file deleted on S3 Bucket.', '%d files deleted on S3 Bucket', $numdeltefiles, 'backwpup' ), $numdeltefiles ), E_USER_NOTICE );
|
464 |
-
}
|
465 |
-
}
|
466 |
-
set_site_transient( 'backwpup_' . $job_object->job[ 'jobid' ] . '_s3', $files, 60 * 60 * 24 * 7 );
|
467 |
-
}
|
468 |
-
catch ( Exception $e ) {
|
469 |
-
$job_object->log( E_USER_ERROR, sprintf( __( 'S3 Service API: %s', 'backwpup' ), htmlentities( $e->getMessage() ) ), $e->getFile(), $e->getLine() );
|
470 |
-
|
471 |
-
return FALSE;
|
472 |
-
}
|
473 |
-
$job_object->substeps_done = 2 + $job_object->backup_filesize;
|
474 |
-
|
475 |
-
return TRUE;
|
476 |
-
}
|
477 |
-
|
478 |
-
|
479 |
-
/**
|
480 |
-
* @param $job_object
|
481 |
-
* @return bool
|
482 |
-
*/
|
483 |
-
public function can_run( $job_object ) {
|
484 |
-
|
485 |
-
if ( empty( $job_object->job[ 's3accesskey' ] ) )
|
486 |
-
return FALSE;
|
487 |
-
|
488 |
-
if ( empty( $job_object->job[ 's3secretkey' ] ) )
|
489 |
-
return FALSE;
|
490 |
-
|
491 |
-
if ( empty( $job_object->job[ 's3bucket' ] ) )
|
492 |
-
return FALSE;
|
493 |
-
|
494 |
-
return TRUE;
|
495 |
-
}
|
496 |
-
|
497 |
-
/**
|
498 |
-
*
|
499 |
-
*/
|
500 |
-
public function edit_inline_js() {
|
501 |
-
//<script type="text/javascript">
|
502 |
-
?>
|
503 |
-
function awsgetbucket() {
|
504 |
-
var data = {
|
505 |
-
action: 'backwpup_dest_s3',
|
506 |
-
s3accesskey: $('input[name="s3accesskey"]').val(),
|
507 |
-
s3secretkey: $('input[name="s3secretkey"]').val(),
|
508 |
-
s3bucketselected: $('input[name="s3bucketselected"]').val(),
|
509 |
-
s3base_url: $('input[name="s3base_url"]').val(),
|
510 |
-
s3region: $('#s3region').val(),
|
511 |
-
_ajax_nonce: $('#backwpupajaxnonce').val()
|
512 |
-
};
|
513 |
-
$.post(ajaxurl, data, function(response) {
|
514 |
-
$('#s3bucketerror').remove();
|
515 |
-
$('#s3bucket').remove();
|
516 |
-
$('#s3bucketselected').after(response);
|
517 |
-
});
|
518 |
-
}
|
519 |
-
$('input[name="s3accesskey"]').change(function() {awsgetbucket();});
|
520 |
-
$('input[name="s3secretkey"]').change(function() {awsgetbucket();});
|
521 |
-
$('input[name="s3base_url"]').change(function() {awsgetbucket();});
|
522 |
-
$('#s3region').change(function() {awsgetbucket();});
|
523 |
-
<?php
|
524 |
-
}
|
525 |
-
|
526 |
-
/**
|
527 |
-
* @param string $args
|
528 |
-
*/
|
529 |
-
public function edit_ajax( $args = '' ) {
|
530 |
-
|
531 |
-
$error = '';
|
532 |
-
|
533 |
-
if ( is_array( $args ) ) {
|
534 |
-
$ajax = FALSE;
|
535 |
-
}
|
536 |
-
else {
|
537 |
-
if ( ! current_user_can( 'backwpup_jobs_edit' ) )
|
538 |
-
wp_die( -1 );
|
539 |
-
check_ajax_referer( 'backwpup_ajax_nonce' );
|
540 |
-
$args[ 's3accesskey' ] = $_POST[ 's3accesskey' ];
|
541 |
-
$args[ 's3secretkey' ] = $_POST[ 's3secretkey' ];
|
542 |
-
$args[ 's3bucketselected' ] = $_POST[ 's3bucketselected' ];
|
543 |
-
$args[ 's3base_url' ] = $_POST[ 's3base_url' ];
|
544 |
-
$args[ 's3region' ] = $_POST[ 's3region' ];
|
545 |
-
$ajax = TRUE;
|
546 |
-
}
|
547 |
-
echo '<span id="s3bucketerror" style="color:red;">';
|
548 |
-
|
549 |
-
if ( ! empty( $args[ 's3accesskey' ] ) && ! empty( $args[ 's3secretkey' ] ) ) {
|
550 |
-
try {
|
551 |
-
$s3 = new AmazonS3( array( 'key' => $args[ 's3accesskey' ],
|
552 |
-
'secret' => BackWPup_Encryption::decrypt( $args[ 's3secretkey' ] ),
|
553 |
-
'certificate_authority' => TRUE ) );
|
554 |
-
$base_url = $this->get_s3_base_url( $args[ 's3region' ], $args[ 's3base_url' ] );
|
555 |
-
if ( stristr( $base_url, 'amazonaws.com' ) ) {
|
556 |
-
$s3->set_region( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
557 |
-
} else {
|
558 |
-
$s3->set_hostname( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
559 |
-
$s3->allow_hostname_override( FALSE );
|
560 |
-
if ( substr( $base_url, -1 ) == '/')
|
561 |
-
$s3->enable_path_style( TRUE );
|
562 |
-
}
|
563 |
-
if ( stristr( $base_url, 'http://' ) )
|
564 |
-
$s3->disable_ssl();
|
565 |
-
|
566 |
-
$buckets = $s3->list_buckets();
|
567 |
-
}
|
568 |
-
catch ( Exception $e ) {
|
569 |
-
$error = $e->getMessage();
|
570 |
-
}
|
571 |
-
}
|
572 |
-
|
573 |
-
if ( empty( $args[ 's3accesskey' ] ) )
|
574 |
-
_e( 'Missing access key!', 'backwpup' );
|
575 |
-
elseif ( empty( $args[ 's3secretkey' ] ) )
|
576 |
-
_e( 'Missing secret access key!', 'backwpup' );
|
577 |
-
elseif ( ! empty( $error ) && $error == 'Access Denied' )
|
578 |
-
echo '<input type="text" name="s3bucket" id="s3bucket" value="' . esc_attr( $args[ 's3bucketselected' ] ) . '" >';
|
579 |
-
elseif ( ! empty( $error ) )
|
580 |
-
echo esc_html( $error );
|
581 |
-
elseif ( ! isset( $buckets ) || count( $buckets->body->Buckets->Bucket ) < 1 )
|
582 |
-
_e( 'No bucket found!', 'backwpup' );
|
583 |
-
echo '</span>';
|
584 |
-
|
585 |
-
if ( ! empty( $buckets->body->Buckets->Bucket ) ) {
|
586 |
-
echo '<select name="s3bucket" id="s3bucket">';
|
587 |
-
foreach ( $buckets->body->Buckets->Bucket as $bucket ) {
|
588 |
-
echo "<option " . selected( $args[ 's3bucketselected' ], esc_attr( $bucket->Name ), FALSE ) . ">" . esc_attr( $bucket->Name ) . "</option>";
|
589 |
-
}
|
590 |
-
echo '</select>';
|
591 |
-
}
|
592 |
-
|
593 |
-
if ( $ajax )
|
594 |
-
die();
|
595 |
-
}
|
596 |
-
}
|
1 |
+
<?php
|
2 |
+
// Amazon S3 SDK v1.6.2
|
3 |
+
// http://aws.amazon.com/de/sdkforphp/
|
4 |
+
// https://github.com/amazonwebservices/aws-sdk-for-php
|
5 |
+
if ( ! defined( 'E_USER_DEPRECATED') )
|
6 |
+
define( 'E_USER_DEPRECATED', 16384 );
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Documentation: http://docs.amazonwebservices.com/aws-sdk-php-2/latest/class-Aws.S3.S3Client.html
|
10 |
+
*/
|
11 |
+
class BackWPup_Destination_S3_V1 extends BackWPup_Destinations {
|
12 |
+
|
13 |
+
/**
|
14 |
+
* @param $s3region
|
15 |
+
* @param string $s3base_url
|
16 |
+
* @return string
|
17 |
+
*/
|
18 |
+
protected function get_s3_base_url( $s3region, $s3base_url = '' ) {
|
19 |
+
|
20 |
+
if ( ! empty( $s3base_url ) )
|
21 |
+
return $s3base_url;
|
22 |
+
|
23 |
+
switch ( $s3region ) {
|
24 |
+
case 'us-east-1':
|
25 |
+
return 'https://s3.amazonaws.com';
|
26 |
+
case 'us-west-1':
|
27 |
+
return 'https://s3-us-west-1.amazonaws.com';
|
28 |
+
case 'us-west-2':
|
29 |
+
return 'https://s3-us-west-2.amazonaws.com';
|
30 |
+
case 'eu-west-1':
|
31 |
+
return 'https://s3-eu-west-1.amazonaws.com';
|
32 |
+
case 'eu-central-1':
|
33 |
+
return 'https://s3-eu-central-1.amazonaws.com';
|
34 |
+
case 'ap-northeast-1':
|
35 |
+
return 'https://s3-ap-northeast-1.amazonaws.com';
|
36 |
+
case 'ap-southeast-1':
|
37 |
+
return 'https://s3-ap-southeast-1.amazonaws.com';
|
38 |
+
case 'ap-southeast-2':
|
39 |
+
return 'https://s3-ap-southeast-2.amazonaws.com';
|
40 |
+
case 'sa-east-1':
|
41 |
+
return 'https://s3-sa-east-1.amazonaws.com';
|
42 |
+
case 'cn-north-1':
|
43 |
+
return 'https://cn-north-1.amazonaws.com';
|
44 |
+
case 'google-storage':
|
45 |
+
return 'https://storage.googleapis.com';
|
46 |
+
case 'dreamhost':
|
47 |
+
return 'https://objects.dreamhost.com';
|
48 |
+
case 'greenqloud':
|
49 |
+
return 'http://s.greenqloud.com';
|
50 |
+
default:
|
51 |
+
return '';
|
52 |
+
}
|
53 |
+
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* @return array
|
58 |
+
*/
|
59 |
+
public function option_defaults() {
|
60 |
+
|
61 |
+
return array( 's3accesskey' => '', 's3secretkey' => '', 's3bucket' => '', 's3region' => 'us-east-1', 's3base_url' => '', 's3ssencrypt' => '', 's3storageclass' => '', 's3dir' => trailingslashit( sanitize_file_name( get_bloginfo( 'name' ) ) ), 's3maxbackups' => 15, 's3syncnodelete' => TRUE );
|
62 |
+
}
|
63 |
+
|
64 |
+
|
65 |
+
/**
|
66 |
+
* @param $jobid
|
67 |
+
*/
|
68 |
+
public function edit_tab( $jobid ) {
|
69 |
+
|
70 |
+
?>
|
71 |
+
<h3 class="title"><?php _e( 'S3 Service', 'backwpup' ) ?></h3>
|
72 |
+
<p></p>
|
73 |
+
<table class="form-table">
|
74 |
+
<tr>
|
75 |
+
<th scope="row"><label for="s3region"><?php _e( 'Select a S3 service', 'backwpup' ) ?></label></th>
|
76 |
+
<td>
|
77 |
+
<select name="s3region" id="s3region" title="<?php _e( 'Amazon S3 Region', 'backwpup' ); ?>">
|
78 |
+
<option value="us-east-1" <?php selected( 'us-east-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: US Standard', 'backwpup' ); ?></option>
|
79 |
+
<option value="us-west-1" <?php selected( 'us-west-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: US West (Northern California)', 'backwpup' ); ?></option>
|
80 |
+
<option value="us-west-2" <?php selected( 'us-west-2', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: US West (Oregon)', 'backwpup' ); ?></option>
|
81 |
+
<option value="eu-west-1" <?php selected( 'eu-west-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: EU (Ireland)', 'backwpup' ); ?></option>
|
82 |
+
<option value="eu-central-1" <?php selected( 'eu-central-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: EU (Germany)', 'backwpup' ); ?></option>
|
83 |
+
<option value="ap-northeast-1" <?php selected( 'ap-northeast-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: Asia Pacific (Tokyo)', 'backwpup' ); ?></option>
|
84 |
+
<option value="ap-southeast-1" <?php selected( 'ap-southeast-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: Asia Pacific (Singapore)', 'backwpup' ); ?></option>
|
85 |
+
<option value="ap-southeast-2" <?php selected( 'ap-southeast-2', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: Asia Pacific (Sydney)', 'backwpup' ); ?></option>
|
86 |
+
<option value="sa-east-1" <?php selected( 'sa-east-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: South America (Sao Paulo)', 'backwpup' ); ?></option>
|
87 |
+
<option value="cn-north-1" <?php selected( 'cn-north-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: China (Beijing)', 'backwpup' ); ?></option>
|
88 |
+
<option value="google-storage" <?php selected( 'google-storage', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Google Storage (Interoperable Access)', 'backwpup' ); ?></option>
|
89 |
+
<option value="dreamhost" <?php selected( 'dreamhost', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Dream Host Cloud Storage', 'backwpup' ); ?></option>
|
90 |
+
<option value="greenqloud" <?php selected( 'greenqloud', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'GreenQloud Storage Qloud', 'backwpup' ); ?></option>
|
91 |
+
</select>
|
92 |
+
</td>
|
93 |
+
</tr>
|
94 |
+
<tr>
|
95 |
+
<th scope="row"><label for="s3base_url"><?php _e( 'Or a S3 Server URL', 'backwpup' ) ?></label></th>
|
96 |
+
<td>
|
97 |
+
<input id="s3base_url" name="s3base_url" type="text" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3base_url' ) );?>" class="regular-text" autocomplete="off" />
|
98 |
+
</td>
|
99 |
+
</tr>
|
100 |
+
</table>
|
101 |
+
|
102 |
+
<h3 class="title"><?php _e( 'S3 Access Keys', 'backwpup' ); ?></h3>
|
103 |
+
<p></p>
|
104 |
+
<table class="form-table">
|
105 |
+
<tr>
|
106 |
+
<th scope="row"><label for="s3accesskey"><?php _e( 'Access Key', 'backwpup' ); ?></label></th>
|
107 |
+
<td>
|
108 |
+
<input id="s3accesskey" name="s3accesskey" type="text"
|
109 |
+
value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3accesskey' ) );?>" class="regular-text" autocomplete="off" />
|
110 |
+
</td>
|
111 |
+
</tr>
|
112 |
+
<tr>
|
113 |
+
<th scope="row"><label for="s3secretkey"><?php _e( 'Secret Key', 'backwpup' ); ?></label></th>
|
114 |
+
<td>
|
115 |
+
<input id="s3secretkey" name="s3secretkey" type="password"
|
116 |
+
value="<?php echo esc_attr( BackWPup_Encryption::decrypt( BackWPup_Option::get( $jobid, 's3secretkey' ) ) ); ?>" class="regular-text" autocomplete="off" />
|
117 |
+
</td>
|
118 |
+
</tr>
|
119 |
+
</table>
|
120 |
+
|
121 |
+
<h3 class="title"><?php _e( 'S3 Bucket', 'backwpup' ); ?></h3>
|
122 |
+
<p></p>
|
123 |
+
<table class="form-table">
|
124 |
+
<tr>
|
125 |
+
<th scope="row"><label for="s3bucketselected"><?php _e( 'Bucket selection', 'backwpup' ); ?></label></th>
|
126 |
+
<td>
|
127 |
+
<input id="s3bucketselected" name="s3bucketselected" type="hidden" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3bucket' ) ); ?>" />
|
128 |
+
<?php if ( BackWPup_Option::get( $jobid, 's3accesskey' ) && BackWPup_Option::get( $jobid, 's3secretkey' ) ) $this->edit_ajax( array(
|
129 |
+
's3accesskey' => BackWPup_Option::get( $jobid, 's3accesskey' ),
|
130 |
+
's3secretkey' => BackWPup_Encryption::decrypt(BackWPup_Option::get( $jobid, 's3secretkey' ) ),
|
131 |
+
's3bucketselected' => BackWPup_Option::get( $jobid, 's3bucket' ),
|
132 |
+
's3base_url' => BackWPup_Option::get( $jobid, 's3base_url' ),
|
133 |
+
's3region' => BackWPup_Option::get( $jobid, 's3region' )
|
134 |
+
) ); ?>
|
135 |
+
</td>
|
136 |
+
</tr>
|
137 |
+
<tr>
|
138 |
+
<th scope="row"><label for="s3newbucket"><?php _e( 'Create a new bucket', 'backwpup' ); ?></label></th>
|
139 |
+
<td>
|
140 |
+
<input id="s3newbucket" name="s3newbucket" type="text" value="" class="small-text" autocomplete="off" />
|
141 |
+
</td>
|
142 |
+
</tr>
|
143 |
+
</table>
|
144 |
+
|
145 |
+
<h3 class="title"><?php _e( 'S3 Backup settings', 'backwpup' ); ?></h3>
|
146 |
+
<p></p>
|
147 |
+
<table class="form-table">
|
148 |
+
<tr>
|
149 |
+
<th scope="row"><label for="ids3dir"><?php _e( 'Folder in bucket', 'backwpup' ); ?></label></th>
|
150 |
+
<td>
|
151 |
+
<input id="ids3dir" name="s3dir" type="text" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3dir' ) ); ?>" class="regular-text" />
|
152 |
+
</td>
|
153 |
+
</tr>
|
154 |
+
<tr>
|
155 |
+
<th scope="row"><?php _e( 'File deletion', 'backwpup' ); ?></th>
|
156 |
+
<td>
|
157 |
+
<?php
|
158 |
+
if ( BackWPup_Option::get( $jobid, 'backuptype' ) == 'archive' ) {
|
159 |
+
?>
|
160 |
+
<label for="ids3maxbackups"><input id="ids3maxbackups" name="s3maxbackups" type="text" size="3" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3maxbackups' ) ); ?>" class="small-text help-tip" title="<?php esc_attr_e( 'Oldest files will be deleted first. 0 = no deletion', 'backwpup' ); ?>" />
|
161 |
+
<?php _e( 'Number of files to keep in folder.', 'backwpup' ); ?></label>
|
162 |
+
<?php } else { ?>
|
163 |
+
<label for="ids3syncnodelete"><input class="checkbox" value="1"
|
164 |
+
type="checkbox" <?php checked( BackWPup_Option::get( $jobid, 's3syncnodelete' ), TRUE ); ?>
|
165 |
+
name="s3syncnodelete" id="ids3syncnodelete" /> <?php _e( 'Do not delete files while syncing to destination!', 'backwpup' ); ?></label>
|
166 |
+
<?php } ?>
|
167 |
+
</td>
|
168 |
+
</tr>
|
169 |
+
</table>
|
170 |
+
|
171 |
+
<h3 class="title"><?php _e( 'Amazon specific settings', 'backwpup' ); ?></h3>
|
172 |
+
<p></p>
|
173 |
+
<table class="form-table">
|
174 |
+
<tr>
|
175 |
+
<th scope="row"><label for="ids3storageclass"><?php _e( 'Amazon: Storage Class', 'backwpup' ); ?></label></th>
|
176 |
+
<td>
|
177 |
+
<select name="s3storageclass" id="ids3storageclass" title="<?php _e( 'Amazon: Storage Class', 'backwpup' ); ?>">
|
178 |
+
<option value="" <?php selected( 'us-east-1', BackWPup_Option::get( $jobid, 's3storageclass' ), TRUE ) ?>><?php _e( 'none', 'backwpup' ); ?></option>
|
179 |
+
<option value="REDUCED_REDUNDANCY" <?php selected( 'REDUCED_REDUNDANCY', BackWPup_Option::get( $jobid, 's3storageclass' ), TRUE ) ?>><?php _e( 'Reduced Redundancy', 'backwpup' ); ?></option>
|
180 |
+
</select>
|
181 |
+
</td>
|
182 |
+
</tr>
|
183 |
+
<tr>
|
184 |
+
<th scope="row"><label for="ids3ssencrypt"><?php _e( 'Server side encryption', 'backwpup' ); ?></label></th>
|
185 |
+
<td>
|
186 |
+
<input class="checkbox" value="AES256"
|
187 |
+
type="checkbox" <?php checked( BackWPup_Option::get( $jobid, 's3ssencrypt' ), 'AES256' ); ?>
|
188 |
+
name="s3ssencrypt" id="ids3ssencrypt" /> <?php _e( 'Save files encrypted (AES256) on server.', 'backwpup' ); ?>
|
189 |
+
</td>
|
190 |
+
</tr>
|
191 |
+
</table>
|
192 |
+
|
193 |
+
<?php
|
194 |
+
}
|
195 |
+
|
196 |
+
|
197 |
+
/**
|
198 |
+
* @param $jobid
|
199 |
+
* @return string
|
200 |
+
*/
|
201 |
+
public function edit_form_post_save( $jobid ) {
|
202 |
+
|
203 |
+
BackWPup_Option::update( $jobid, 's3accesskey', isset( $_POST[ 's3accesskey' ] ) ? $_POST[ 's3accesskey' ] : '' );
|
204 |
+
BackWPup_Option::update( $jobid, 's3secretkey', isset( $_POST[ 's3secretkey' ] ) ? BackWPup_Encryption::encrypt( $_POST[ 's3secretkey' ] ) : '' );
|
205 |
+
BackWPup_Option::update( $jobid, 's3base_url', isset( $_POST[ 's3base_url' ] ) ? esc_url_raw( $_POST[ 's3base_url' ] ) : '' );
|
206 |
+
BackWPup_Option::update( $jobid, 's3region', isset( $_POST[ 's3region' ] ) ? $_POST[ 's3region' ] : '' );
|
207 |
+
BackWPup_Option::update( $jobid, 's3storageclass', isset( $_POST[ 's3storageclass' ] ) ? $_POST[ 's3storageclass' ] : '' );
|
208 |
+
BackWPup_Option::update( $jobid, 's3ssencrypt', ( isset( $_POST[ 's3ssencrypt' ] ) && $_POST[ 's3ssencrypt' ] == 'AES256' ) ? 'AES256' : '' );
|
209 |
+
BackWPup_Option::update( $jobid, 's3bucket', isset( $_POST[ 's3bucket' ] ) ? $_POST[ 's3bucket' ] : '' );
|
210 |
+
|
211 |
+
$_POST[ 's3dir' ] = trailingslashit( str_replace( '//', '/', str_replace( '\\', '/', trim( stripslashes( $_POST[ 's3dir' ] ) ) ) ) );
|
212 |
+
if ( substr( $_POST[ 's3dir' ], 0, 1 ) == '/' )
|
213 |
+
$_POST[ 's3dir' ] = substr( $_POST[ 's3dir' ], 1 );
|
214 |
+
if ( $_POST[ 's3dir' ] == '/' )
|
215 |
+
$_POST[ 's3dir' ] = '';
|
216 |
+
BackWPup_Option::update( $jobid, 's3dir', $_POST[ 's3dir' ] );
|
217 |
+
|
218 |
+
BackWPup_Option::update( $jobid, 's3maxbackups', isset( $_POST[ 's3maxbackups' ] ) ? (int)$_POST[ 's3maxbackups' ] : 0 );
|
219 |
+
BackWPup_Option::update( $jobid, 's3syncnodelete', ( isset( $_POST[ 's3syncnodelete' ] ) && $_POST[ 's3syncnodelete' ] == 1 ) ? TRUE : FALSE );
|
220 |
+
BackWPup_Option::update( $jobid, 's3multipart', ( isset( $_POST[ 's3multipart' ] ) && $_POST[ 's3multipart' ] == 1 ) ? TRUE : FALSE );
|
221 |
+
|
222 |
+
//create new bucket
|
223 |
+
if ( !empty( $_POST[ 's3newbucket' ] ) ) {
|
224 |
+
try {
|
225 |
+
$s3 = new AmazonS3( array( 'key' => $_POST[ 's3accesskey' ],
|
226 |
+
'secret' => BackWPup_Encryption::decrypt( $_POST[ 's3secretkey' ] ),
|
227 |
+
'certificate_authority' => TRUE ) );
|
228 |
+
$base_url = $this->get_s3_base_url( $_POST[ 's3region' ], $_POST[ 's3base_url' ] );
|
229 |
+
if ( stristr( $base_url, 'amazonaws.com' ) ) {
|
230 |
+
$s3->set_region( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
231 |
+
} else {
|
232 |
+
$s3->set_hostname( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
233 |
+
$s3->allow_hostname_override( FALSE );
|
234 |
+
if ( substr( $base_url, -1 ) == '/')
|
235 |
+
$s3->enable_path_style( TRUE );
|
236 |
+
}
|
237 |
+
if ( stristr( $base_url, 'http://' ) )
|
238 |
+
$s3->disable_ssl();
|
239 |
+
|
240 |
+
// set bucket creation region
|
241 |
+
if ( $_POST[ 's3region' ] == 'google-storage' || $_POST[ 's3region' ] == 'hosteurope' )
|
242 |
+
$region = 'EU';
|
243 |
+
else
|
244 |
+
$region = str_replace( array( 'http://', 'https://' ), '', $base_url );
|
245 |
+
|
246 |
+
$bucket = $s3->create_bucket( $_POST[ 's3newbucket' ], $region, 'private' );
|
247 |
+
|
248 |
+
if ( $bucket->status == 200 )
|
249 |
+
BackWPup_Admin::message( sprintf( __( 'Bucket %1$s created.','backwpup'), $_POST[ 's3newbucket' ] ) );
|
250 |
+
else
|
251 |
+
BackWPup_Admin::message( sprintf( __( 'Bucket %s could not be created.','backwpup'), $_POST[ 's3newbucket' ] ), TRUE );
|
252 |
+
|
253 |
+
}
|
254 |
+
catch ( Exception $e ) {
|
255 |
+
BackWPup_Admin::message( $e->getMessage(), TRUE );
|
256 |
+
}
|
257 |
+
BackWPup_Option::update( $jobid, 's3bucket', $_POST[ 's3newbucket' ] );
|
258 |
+
}
|
259 |
+
}
|
260 |
+
|
261 |
+
/**
|
262 |
+
* @param $jobdest
|
263 |
+
* @param $backupfile
|
264 |
+
*/
|
265 |
+
public function file_delete( $jobdest, $backupfile ) {
|
266 |
+
|
267 |
+
$files = get_site_transient( 'backwpup_'. strtolower( $jobdest ), array() );
|
268 |
+
list( $jobid, $dest ) = explode( '_', $jobdest );
|
269 |
+
|
270 |
+
if ( BackWPup_Option::get( $jobid, 's3accesskey' ) && BackWPup_Option::get( $jobid, 's3secretkey' ) && BackWPup_Option::get( $jobid, 's3bucket' ) ) {
|
271 |
+
try {
|
272 |
+
$s3 = new AmazonS3( array( 'key' => BackWPup_Option::get( $jobid, 's3accesskey' ),
|
273 |
+
'secret' => BackWPup_Encryption::decrypt( BackWPup_Option::get( $jobid, 's3secretkey' ) ),
|
274 |
+
'certificate_authority' => TRUE ) );
|
275 |
+
$base_url = $this->get_s3_base_url( BackWPup_Option::get( $jobid, 's3region' ), BackWPup_Option::get( $jobid, 's3base_url' ) );
|
276 |
+
if ( stristr( $base_url, 'amazonaws.com' ) ) {
|
277 |
+
$s3->set_region( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
278 |
+
} else {
|
279 |
+
$s3->set_hostname( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
280 |
+
$s3->allow_hostname_override( FALSE );
|
281 |
+
if ( substr( $base_url, -1 ) == '/')
|
282 |
+
$s3->enable_path_style( TRUE );
|
283 |
+
}
|
284 |
+
if ( stristr( $base_url, 'http://' ) )
|
285 |
+
$s3->disable_ssl();
|
286 |
+
|
287 |
+
$s3->delete_object( BackWPup_Option::get( $jobid, 's3bucket' ), $backupfile );
|
288 |
+
//update file list
|
289 |
+
foreach ( $files as $key => $file ) {
|
290 |
+
if ( is_array( $file ) && $file[ 'file' ] == $backupfile )
|
291 |
+
unset( $files[ $key ] );
|
292 |
+
}
|
293 |
+
unset( $s3 );
|
294 |
+
}
|
295 |
+
catch ( Exception $e ) {
|
296 |
+
BackWPup_Admin::message( sprintf( __('S3 Service API: %s','backwpup'), $e->getMessage() ), TRUE );
|
297 |
+
}
|
298 |
+
}
|
299 |
+
|
300 |
+
set_site_transient( 'backwpup_'. strtolower( $jobdest ), $files, 60 * 60 * 24 * 7 );
|
301 |
+
}
|
302 |
+
|
303 |
+
/**
|
304 |
+
* @param $jobid
|
305 |
+
* @param $get_file
|
306 |
+
*/
|
307 |
+
public function file_download( $jobid, $get_file ) {
|
308 |
+
|
309 |
+
try {
|
310 |
+
$s3 = new AmazonS3( array( 'key' => BackWPup_Option::get( $jobid, 's3accesskey' ),
|
311 |
+
'secret' => BackWPup_Encryption::decrypt( BackWPup_Option::get( $jobid, 's3secretkey' ) ),
|
312 |
+
'certificate_authority' => TRUE ) );
|
313 |
+
$base_url = $this->get_s3_base_url( BackWPup_Option::get( $jobid, 's3region' ), BackWPup_Option::get( $jobid, 's3base_url' ) );
|
314 |
+
if ( stristr( $base_url, 'amazonaws.com' ) ) {
|
315 |
+
$s3->set_region( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
316 |
+
} else {
|
317 |
+
$s3->set_hostname( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
318 |
+
$s3->allow_hostname_override( FALSE );
|
319 |
+
if ( substr( $base_url, -1 ) == '/')
|
320 |
+
$s3->enable_path_style( TRUE );
|
321 |
+
}
|
322 |
+
if ( stristr( $base_url, 'http://' ) )
|
323 |
+
$s3->disable_ssl();
|
324 |
+
|
325 |
+
$s3file = $s3->get_object( BackWPup_Option::get( $jobid, 's3bucket' ), $get_file );
|
326 |
+
}
|
327 |
+
catch ( Exception $e ) {
|
328 |
+
die( $e->getMessage() );
|
329 |
+
}
|
330 |
+
|
331 |
+
if ( $s3file->status==200 ) {
|
332 |
+
header( "Pragma: public" );
|
333 |
+
header( "Expires: 0" );
|
334 |
+
header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
|
335 |
+
header( "Content-Type: application/octet-stream" );
|
336 |
+
header( "Content-Disposition: attachment; filename=" . basename( $get_file ) . ";" );
|
337 |
+
header( "Content-Transfer-Encoding: binary" );
|
338 |
+
header( "Content-Length: " . $s3file->header->_info->size_download );
|
339 |
+
@set_time_limit( 300 );
|
340 |
+
echo $s3file->body;
|
341 |
+
die();
|
342 |
+
}
|
343 |
+
}
|
344 |
+
|
345 |
+
/**
|
346 |
+
* @param $jobdest
|
347 |
+
* @return mixed
|
348 |
+
*/
|
349 |
+
public function file_get_list( $jobdest ) {
|
350 |
+
|
351 |
+
return get_site_transient( 'backwpup_' . strtolower( $jobdest ) );
|
352 |
+
}
|
353 |
+
|
354 |
+
/**
|
355 |
+
* @param $job_object
|
356 |
+
* @return bool
|
357 |
+
*/
|
358 |
+
public function job_run_archive( &$job_object ) {
|
359 |
+
|
360 |
+
$job_object->substeps_todo = 2 + $job_object->backup_filesize;
|
361 |
+
$job_object->log( sprintf( __( '%d. Trying to send backup file to S3 Service …', 'backwpup' ), $job_object->steps_data[ $job_object->step_working ][ 'STEP_TRY' ] ), E_USER_NOTICE );
|
362 |
+
|
363 |
+
try {
|
364 |
+
|
365 |
+
$s3 = new AmazonS3( array( 'key' => $job_object->job[ 's3accesskey' ],
|
366 |
+
'secret' => BackWPup_Encryption::decrypt( $job_object->job[ 's3secretkey' ] ),
|
367 |
+
'certificate_authority' => TRUE ) );
|
368 |
+
$base_url = $this->get_s3_base_url( $job_object->job[ 's3region' ], $job_object->job[ 's3base_url' ] );
|
369 |
+
if ( stristr( $base_url, 'amazonaws.com' ) ) {
|
370 |
+
$s3->set_region( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
371 |
+
} else {
|
372 |
+
$s3->set_hostname( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
373 |
+
$s3->allow_hostname_override( FALSE );
|
374 |
+
if ( substr( $base_url, -1 ) == '/')
|
375 |
+
$s3->enable_path_style( TRUE );
|
376 |
+
}
|
377 |
+
if ( stristr( $base_url, 'http://' ) )
|
378 |
+
$s3->disable_ssl();
|
379 |
+
|
380 |
+
|
381 |
+
if ( $s3->if_bucket_exists( $job_object->job[ 's3bucket' ] ) ) {
|
382 |
+
$job_object->log( sprintf( __( 'Connected to S3 Bucket "%1$s" in %2$s', 'backwpup' ), $job_object->job[ 's3bucket' ], $base_url ), E_USER_NOTICE );
|
383 |
+
}
|
384 |
+
else {
|
385 |
+
$job_object->log( sprintf( __( 'S3 Bucket "%s" does not exist!', 'backwpup' ), $job_object->job[ 's3bucket' ] ), E_USER_ERROR );
|
386 |
+
|
387 |
+
return TRUE;
|
388 |
+
}
|
389 |
+
|
390 |
+
//transfer file to S3
|
391 |
+
$job_object->log( __( 'Starting upload to S3 Service …', 'backwpup' ), E_USER_NOTICE );
|
392 |
+
|
393 |
+
//Transfer Backup to S3
|
394 |
+
if ( $job_object->job[ 's3storageclass' ] == 'REDUCED_REDUNDANCY' ) //set reduced redundancy or not
|
395 |
+
$storage=AmazonS3::STORAGE_REDUCED;
|
396 |
+
else
|
397 |
+
$storage=AmazonS3::STORAGE_STANDARD;
|
398 |
+
|
399 |
+
if ( empty( $job_object->job[ 's3ssencrypt' ] ) )
|
400 |
+
$job_object->job[ 's3ssencrypt' ] = NULL;
|
401 |
+
|
402 |
+
//set progress bar
|
403 |
+
$s3->register_streaming_read_callback( array( $job_object, 'curl_read_callback' ) );
|
404 |
+
|
405 |
+
$result = $s3->create_object( $job_object->job[ 's3bucket' ], $job_object->job[ 's3dir' ] . $job_object->backup_file, array( 'fileUpload' => $job_object->backup_folder . $job_object->backup_file, 'acl' => AmazonS3::ACL_PRIVATE, 'storage' => $storage, 'encryption' => $job_object->job[ 's3ssencrypt' ] ) );
|
406 |
+
|
407 |
+
if ( $result->status >= 200 and $result->status < 300 ) {
|
408 |
+
$job_object->substeps_done = 1 + $job_object->backup_filesize;
|
409 |
+
$job_object->log( sprintf( __( 'Backup transferred to %s.', 'backwpup' ), $this->get_s3_base_url( $job_object->job[ 's3region' ], $job_object->job[ 's3base_url' ] ). '/' .$job_object->job[ 's3bucket' ] . '/' . $job_object->job[ 's3dir' ] . $job_object->backup_file ), E_USER_NOTICE );
|
410 |
+
if ( ! empty( $job_object->job[ 'jobid' ] ) )
|
411 |
+
BackWPup_Option::update( $job_object->job[ 'jobid' ], 'lastbackupdownloadurl', network_admin_url( 'admin.php' ) . '?page=backwpupbackups&action=downloads3&file=' . $job_object->job[ 's3dir' ] . $job_object->backup_file . '&jobid=' . $job_object->job[ 'jobid' ] );
|
412 |
+
}
|
413 |
+
else {
|
414 |
+
$job_object->log( sprintf( __( 'Cannot transfer backup to S3! (%1$d) %2$s', 'backwpup' ), $result->status, $result->body ), E_USER_ERROR );
|
415 |
+
}
|
416 |
+
}
|
417 |
+
catch ( Exception $e ) {
|
418 |
+
$job_object->log( E_USER_ERROR, sprintf( __( 'S3 Service API: %s', 'backwpup' ), htmlentities( $e->getMessage() ) ), $e->getFile(), $e->getLine() );
|
419 |
+
|
420 |
+
return FALSE;
|
421 |
+
}
|
422 |
+
|
423 |
+
try {
|
424 |
+
$backupfilelist = array();
|
425 |
+
$filecounter = 0;
|
426 |
+
$files = array();
|
427 |
+
$objects = $s3->list_objects( $job_object->job[ 's3bucket' ], array( 'prefix' => $job_object->job[ 's3dir' ] ) );
|
428 |
+
if ( is_object( $objects ) ) {
|
429 |
+
foreach ( $objects->body->Contents as $object ) {
|
430 |
+
$file = basename( (string) $object->Key );
|
431 |
+
$changetime = strtotime( (string) $object->LastModified ) + ( get_option( 'gmt_offset' ) * 3600 );
|
432 |
+
if ( $job_object->is_backup_archive( $file ) )
|
433 |
+
$backupfilelist[ $changetime ] = $file;
|
434 |
+
$files[ $filecounter ][ 'folder' ] = $this->get_s3_base_url( $job_object->job[ 's3region' ], $job_object->job[ 's3base_url' ] ). '/' .$job_object->job[ 's3bucket' ] . '/' . dirname( (string) $object->Key );
|
435 |
+
$files[ $filecounter ][ 'file' ] = (string) $object->Key;
|
436 |
+
$files[ $filecounter ][ 'filename' ] = basename( $object->Key );
|
437 |
+
$files[ $filecounter ][ 'downloadurl' ] = network_admin_url( 'admin.php' ) . '?page=backwpupbackups&action=downloads3&file=' . (string) $object->Key . '&jobid=' . $job_object->job[ 'jobid' ];
|
438 |
+
$files[ $filecounter ][ 'filesize' ] = (int) $object->Size;
|
439 |
+
$files[ $filecounter ][ 'time' ] = $changetime;
|
440 |
+
$filecounter ++;
|
441 |
+
}
|
442 |
+
}
|
443 |
+
if ( $job_object->job[ 's3maxbackups' ] > 0 && is_object( $s3 ) ) { //Delete old backups
|
444 |
+
if ( count( $backupfilelist ) > $job_object->job[ 's3maxbackups' ] ) {
|
445 |
+
ksort( $backupfilelist );
|
446 |
+
$numdeltefiles = 0;
|
447 |
+
while ( $file = array_shift( $backupfilelist ) ) {
|
448 |
+
if ( count( $backupfilelist ) < $job_object->job[ 's3maxbackups' ] )
|
449 |
+
break;
|
450 |
+
//delete files on S3
|
451 |
+
$delete_s3 = $s3->delete_object( $job_object->job[ 's3bucket' ], $job_object->job[ 's3dir' ] . $file );
|
452 |
+
if ($delete_s3 ) {
|
453 |
+
foreach ( $files as $key => $filedata ) {
|
454 |
+
if ( $filedata[ 'file' ] == $job_object->job[ 's3dir' ] . $file )
|
455 |
+
unset( $files[ $key ] );
|
456 |
+
}
|
457 |
+
$numdeltefiles ++;
|
458 |
+
} else {
|
459 |
+
$job_object->log( sprintf( __( 'Cannot delete backup from %s.', 'backwpup' ), $this->get_s3_base_url( $job_object->job[ 's3region' ], $job_object->job[ 's3base_url' ] ). '/' .$job_object->job[ 's3bucket' ] . '/' . $job_object->job[ 's3dir' ] . $file ), E_USER_ERROR );
|
460 |
+
}
|
461 |
+
}
|
462 |
+
if ( $numdeltefiles > 0 )
|
463 |
+
$job_object->log( sprintf( _n( 'One file deleted on S3 Bucket.', '%d files deleted on S3 Bucket', $numdeltefiles, 'backwpup' ), $numdeltefiles ), E_USER_NOTICE );
|
464 |
+
}
|
465 |
+
}
|
466 |
+
set_site_transient( 'backwpup_' . $job_object->job[ 'jobid' ] . '_s3', $files, 60 * 60 * 24 * 7 );
|
467 |
+
}
|
468 |
+
catch ( Exception $e ) {
|
469 |
+
$job_object->log( E_USER_ERROR, sprintf( __( 'S3 Service API: %s', 'backwpup' ), htmlentities( $e->getMessage() ) ), $e->getFile(), $e->getLine() );
|
470 |
+
|
471 |
+
return FALSE;
|
472 |
+
}
|
473 |
+
$job_object->substeps_done = 2 + $job_object->backup_filesize;
|
474 |
+
|
475 |
+
return TRUE;
|
476 |
+
}
|
477 |
+
|
478 |
+
|
479 |
+
/**
|
480 |
+
* @param $job_object
|
481 |
+
* @return bool
|
482 |
+
*/
|
483 |
+
public function can_run( $job_object ) {
|
484 |
+
|
485 |
+
if ( empty( $job_object->job[ 's3accesskey' ] ) )
|
486 |
+
return FALSE;
|
487 |
+
|
488 |
+
if ( empty( $job_object->job[ 's3secretkey' ] ) )
|
489 |
+
return FALSE;
|
490 |
+
|
491 |
+
if ( empty( $job_object->job[ 's3bucket' ] ) )
|
492 |
+
return FALSE;
|
493 |
+
|
494 |
+
return TRUE;
|
495 |
+
}
|
496 |
+
|
497 |
+
/**
|
498 |
+
*
|
499 |
+
*/
|
500 |
+
public function edit_inline_js() {
|
501 |
+
//<script type="text/javascript">
|
502 |
+
?>
|
503 |
+
function awsgetbucket() {
|
504 |
+
var data = {
|
505 |
+
action: 'backwpup_dest_s3',
|
506 |
+
s3accesskey: $('input[name="s3accesskey"]').val(),
|
507 |
+
s3secretkey: $('input[name="s3secretkey"]').val(),
|
508 |
+
s3bucketselected: $('input[name="s3bucketselected"]').val(),
|
509 |
+
s3base_url: $('input[name="s3base_url"]').val(),
|
510 |
+
s3region: $('#s3region').val(),
|
511 |
+
_ajax_nonce: $('#backwpupajaxnonce').val()
|
512 |
+
};
|
513 |
+
$.post(ajaxurl, data, function(response) {
|
514 |
+
$('#s3bucketerror').remove();
|
515 |
+
$('#s3bucket').remove();
|
516 |
+
$('#s3bucketselected').after(response);
|
517 |
+
});
|
518 |
+
}
|
519 |
+
$('input[name="s3accesskey"]').change(function() {awsgetbucket();});
|
520 |
+
$('input[name="s3secretkey"]').change(function() {awsgetbucket();});
|
521 |
+
$('input[name="s3base_url"]').change(function() {awsgetbucket();});
|
522 |
+
$('#s3region').change(function() {awsgetbucket();});
|
523 |
+
<?php
|
524 |
+
}
|
525 |
+
|
526 |
+
/**
|
527 |
+
* @param string $args
|
528 |
+
*/
|
529 |
+
public function edit_ajax( $args = '' ) {
|
530 |
+
|
531 |
+
$error = '';
|
532 |
+
|
533 |
+
if ( is_array( $args ) ) {
|
534 |
+
$ajax = FALSE;
|
535 |
+
}
|
536 |
+
else {
|
537 |
+
if ( ! current_user_can( 'backwpup_jobs_edit' ) )
|
538 |
+
wp_die( -1 );
|
539 |
+
check_ajax_referer( 'backwpup_ajax_nonce' );
|
540 |
+
$args[ 's3accesskey' ] = $_POST[ 's3accesskey' ];
|
541 |
+
$args[ 's3secretkey' ] = $_POST[ 's3secretkey' ];
|
542 |
+
$args[ 's3bucketselected' ] = $_POST[ 's3bucketselected' ];
|
543 |
+
$args[ 's3base_url' ] = $_POST[ 's3base_url' ];
|
544 |
+
$args[ 's3region' ] = $_POST[ 's3region' ];
|
545 |
+
$ajax = TRUE;
|
546 |
+
}
|
547 |
+
echo '<span id="s3bucketerror" style="color:red;">';
|
548 |
+
|
549 |
+
if ( ! empty( $args[ 's3accesskey' ] ) && ! empty( $args[ 's3secretkey' ] ) ) {
|
550 |
+
try {
|
551 |
+
$s3 = new AmazonS3( array( 'key' => $args[ 's3accesskey' ],
|
552 |
+
'secret' => BackWPup_Encryption::decrypt( $args[ 's3secretkey' ] ),
|
553 |
+
'certificate_authority' => TRUE ) );
|
554 |
+
$base_url = $this->get_s3_base_url( $args[ 's3region' ], $args[ 's3base_url' ] );
|
555 |
+
if ( stristr( $base_url, 'amazonaws.com' ) ) {
|
556 |
+
$s3->set_region( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
557 |
+
} else {
|
558 |
+
$s3->set_hostname( str_replace( array( 'http://', 'https://' ), '', $base_url ) );
|
559 |
+
$s3->allow_hostname_override( FALSE );
|
560 |
+
if ( substr( $base_url, -1 ) == '/')
|
561 |
+
$s3->enable_path_style( TRUE );
|
562 |
+
}
|
563 |
+
if ( stristr( $base_url, 'http://' ) )
|
564 |
+
$s3->disable_ssl();
|
565 |
+
|
566 |
+
$buckets = $s3->list_buckets();
|
567 |
+
}
|
568 |
+
catch ( Exception $e ) {
|
569 |
+
$error = $e->getMessage();
|
570 |
+
}
|
571 |
+
}
|
572 |
+
|
573 |
+
if ( empty( $args[ 's3accesskey' ] ) )
|
574 |
+
_e( 'Missing access key!', 'backwpup' );
|
575 |
+
elseif ( empty( $args[ 's3secretkey' ] ) )
|
576 |
+
_e( 'Missing secret access key!', 'backwpup' );
|
577 |
+
elseif ( ! empty( $error ) && $error == 'Access Denied' )
|
578 |
+
echo '<input type="text" name="s3bucket" id="s3bucket" value="' . esc_attr( $args[ 's3bucketselected' ] ) . '" >';
|
579 |
+
elseif ( ! empty( $error ) )
|
580 |
+
echo esc_html( $error );
|
581 |
+
elseif ( ! isset( $buckets ) || count( $buckets->body->Buckets->Bucket ) < 1 )
|
582 |
+
_e( 'No bucket found!', 'backwpup' );
|
583 |
+
echo '</span>';
|
584 |
+
|
585 |
+
if ( ! empty( $buckets->body->Buckets->Bucket ) ) {
|
586 |
+
echo '<select name="s3bucket" id="s3bucket">';
|
587 |
+
foreach ( $buckets->body->Buckets->Bucket as $bucket ) {
|
588 |
+
echo "<option " . selected( $args[ 's3bucketselected' ], esc_attr( $bucket->Name ), FALSE ) . ">" . esc_attr( $bucket->Name ) . "</option>";
|
589 |
+
}
|
590 |
+
echo '</select>';
|
591 |
+
}
|
592 |
+
|
593 |
+
if ( $ajax )
|
594 |
+
die();
|
595 |
+
}
|
596 |
+
}
|
inc/class-destination-s3.php
CHANGED
@@ -1,680 +1,680 @@
|
|
1 |
-
<?php
|
2 |
-
// Amazon S3 SDK v2.6.1
|
3 |
-
// http://aws.amazon.com/de/sdkforphp2/
|
4 |
-
// https://github.com/aws/aws-sdk-php
|
5 |
-
|
6 |
-
/**
|
7 |
-
* Documentation: http://docs.amazonwebservices.com/aws-sdk-php-2/latest/class-Aws.S3.S3Client.html
|
8 |
-
*/
|
9 |
-
class BackWPup_Destination_S3 extends BackWPup_Destinations {
|
10 |
-
|
11 |
-
|
12 |
-
/**
|
13 |
-
* @param $s3region
|
14 |
-
* @param string $s3base_url
|
15 |
-
* @return string
|
16 |
-
*/
|
17 |
-
protected function get_s3_base_url( $s3region, $s3base_url = '' ) {
|
18 |
-
|
19 |
-
if ( ! empty( $s3base_url ) )
|
20 |
-
return $s3base_url;
|
21 |
-
|
22 |
-
switch ( $s3region ) {
|
23 |
-
case 'us-east-1':
|
24 |
-
return 'https://s3.amazonaws.com';
|
25 |
-
case 'us-west-1':
|
26 |
-
return 'https://s3-us-west-1.amazonaws.com';
|
27 |
-
case 'us-west-2':
|
28 |
-
return 'https://s3-us-west-2.amazonaws.com';
|
29 |
-
case 'eu-west-1':
|
30 |
-
return 'https://s3-eu-west-1.amazonaws.com';
|
31 |
-
case 'eu-central-1':
|
32 |
-
return 'https://s3-eu-central-1.amazonaws.com';
|
33 |
-
case 'ap-northeast-1':
|
34 |
-
return 'https://s3-ap-northeast-1.amazonaws.com';
|
35 |
-
case 'ap-southeast-1':
|
36 |
-
return 'https://s3-ap-southeast-1.amazonaws.com';
|
37 |
-
case 'ap-southeast-2':
|
38 |
-
return 'https://s3-ap-southeast-2.amazonaws.com';
|
39 |
-
case 'sa-east-1':
|
40 |
-
return 'https://s3-sa-east-1.amazonaws.com';
|
41 |
-
case 'cn-north-1':
|
42 |
-
return 'https:/cn-north-1.amazonaws.com';
|
43 |
-
case 'google-storage':
|
44 |
-
return 'https://storage.googleapis.com';
|
45 |
-
case 'dreamhost':
|
46 |
-
return 'https://objects.dreamhost.com';
|
47 |
-
case 'greenqloud':
|
48 |
-
return 'http://s.greenqloud.com';
|
49 |
-
default:
|
50 |
-
return '';
|
51 |
-
}
|
52 |
-
|
53 |
-
}
|
54 |
-
|
55 |
-
/**
|
56 |
-
* @return array
|
57 |
-
*/
|
58 |
-
public function option_defaults() {
|
59 |
-
|
60 |
-
return array( 's3accesskey' => '', 's3secretkey' => '', 's3bucket' => '', 's3region' => 'us-east-1', 's3base_url' => '', 's3ssencrypt' => '', 's3storageclass' => '', 's3dir' => trailingslashit( sanitize_file_name( get_bloginfo( 'name' ) ) ), 's3maxbackups' => 15, 's3syncnodelete' => TRUE, 's3multipart' => TRUE );
|
61 |
-
}
|
62 |
-
|
63 |
-
|
64 |
-
/**
|
65 |
-
* @param $jobid
|
66 |
-
*/
|
67 |
-
public function edit_tab( $jobid ) {
|
68 |
-
|
69 |
-
?>
|
70 |
-
<h3 class="title"><?php _e( 'S3 Service', 'backwpup' ) ?></h3>
|
71 |
-
<p></p>
|
72 |
-
<table class="form-table">
|
73 |
-
<tr>
|
74 |
-
<th scope="row"><label for="s3region"><?php _e( 'Select a S3 service', 'backwpup' ) ?></label></th>
|
75 |
-
<td>
|
76 |
-
<select name="s3region" id="s3region" title="<?php _e( 'Amazon S3 Region', 'backwpup' ); ?>">
|
77 |
-
<option value="us-east-1" <?php selected( 'us-east-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: US Standard', 'backwpup' ); ?></option>
|
78 |
-
<option value="us-west-1" <?php selected( 'us-west-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: US West (Northern California)', 'backwpup' ); ?></option>
|
79 |
-
<option value="us-west-2" <?php selected( 'us-west-2', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: US West (Oregon)', 'backwpup' ); ?></option>
|
80 |
-
<option value="eu-west-1" <?php selected( 'eu-west-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: EU (Ireland)', 'backwpup' ); ?></option>
|
81 |
-
<option value="eu-central-1" <?php selected( 'eu-central-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: EU (Germany)', 'backwpup' ); ?></option>
|
82 |
-
<option value="ap-northeast-1" <?php selected( 'ap-northeast-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: Asia Pacific (Tokyo)', 'backwpup' ); ?></option>
|
83 |
-
<option value="ap-southeast-1" <?php selected( 'ap-southeast-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: Asia Pacific (Singapore)', 'backwpup' ); ?></option>
|
84 |
-
<option value="ap-southeast-2" <?php selected( 'ap-southeast-2', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: Asia Pacific (Sydney)', 'backwpup' ); ?></option>
|
85 |
-
<option value="sa-east-1" <?php selected( 'sa-east-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: South America (Sao Paulo)', 'backwpup' ); ?></option>
|
86 |
-
<option value="cn-north-1" <?php selected( 'cn-north-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: China (Beijing)', 'backwpup' ); ?></option>
|
87 |
-
<option value="google-storage" <?php selected( 'google-storage', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Google Storage (Interoperable Access)', 'backwpup' ); ?></option>
|
88 |
-
<option value="dreamhost" <?php selected( 'dreamhost', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Dream Host Cloud Storage', 'backwpup' ); ?></option>
|
89 |
-
<option value="greenqloud" <?php selected( 'greenqloud', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'GreenQloud Storage Qloud', 'backwpup' ); ?></option>
|
90 |
-
</select>
|
91 |
-
</td>
|
92 |
-
</tr>
|
93 |
-
<tr>
|
94 |
-
<th scope="row"><label for="s3base_url"><?php _e( 'Or a S3 Server URL', 'backwpup' ) ?></label></th>
|
95 |
-
<td>
|
96 |
-
<input id="s3base_url" name="s3base_url" type="text" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3base_url' ) );?>" class="regular-text" autocomplete="off" />
|
97 |
-
</td>
|
98 |
-
</tr>
|
99 |
-
</table>
|
100 |
-
|
101 |
-
<h3 class="title"><?php _e( 'S3 Access Keys', 'backwpup' ); ?></h3>
|
102 |
-
<p></p>
|
103 |
-
<table class="form-table">
|
104 |
-
<tr>
|
105 |
-
<th scope="row"><label for="s3accesskey"><?php _e( 'Access Key', 'backwpup' ); ?></label></th>
|
106 |
-
<td>
|
107 |
-
<input id="s3accesskey" name="s3accesskey" type="text"
|
108 |
-
value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3accesskey' ) );?>" class="regular-text" autocomplete="off" />
|
109 |
-
</td>
|
110 |
-
</tr>
|
111 |
-
<tr>
|
112 |
-
<th scope="row"><label for="s3secretkey"><?php _e( 'Secret Key', 'backwpup' ); ?></label></th>
|
113 |
-
<td>
|
114 |
-
<input id="s3secretkey" name="s3secretkey" type="password"
|
115 |
-
value="<?php echo esc_attr( BackWPup_Encryption::decrypt( BackWPup_Option::get( $jobid, 's3secretkey' ) ) ); ?>" class="regular-text" autocomplete="off" />
|
116 |
-
</td>
|
117 |
-
</tr>
|
118 |
-
</table>
|
119 |
-
|
120 |
-
<h3 class="title"><?php _e( 'S3 Bucket', 'backwpup' ); ?></h3>
|
121 |
-
<p></p>
|
122 |
-
<table class="form-table">
|
123 |
-
<tr>
|
124 |
-
<th scope="row"><label for="s3bucketselected"><?php _e( 'Bucket selection', 'backwpup' ); ?></label></th>
|
125 |
-
<td>
|
126 |
-
<input id="s3bucketselected" name="s3bucketselected" type="hidden" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3bucket' ) ); ?>" />
|
127 |
-
<?php if ( BackWPup_Option::get( $jobid, 's3accesskey' ) && BackWPup_Option::get( $jobid, 's3secretkey' ) ) $this->edit_ajax( array(
|
128 |
-
's3accesskey' => BackWPup_Option::get( $jobid, 's3accesskey' ),
|
129 |
-
's3secretkey' => BackWPup_Encryption::decrypt(BackWPup_Option::get( $jobid, 's3secretkey' ) ),
|
130 |
-
's3bucketselected' => BackWPup_Option::get( $jobid, 's3bucket' ),
|
131 |
-
's3base_url' => BackWPup_Option::get( $jobid, 's3base_url' ),
|
132 |
-
's3region' => BackWPup_Option::get( $jobid, 's3region' )
|
133 |
-
) ); ?>
|
134 |
-
</td>
|
135 |
-
</tr>
|
136 |
-
<tr>
|
137 |
-
<th scope="row"><label for="s3newbucket"><?php _e( 'Create a new bucket', 'backwpup' ); ?></label></th>
|
138 |
-
<td>
|
139 |
-
<input id="s3newbucket" name="s3newbucket" type="text" value="" class="small-text" autocomplete="off" />
|
140 |
-
</td>
|
141 |
-
</tr>
|
142 |
-
</table>
|
143 |
-
|
144 |
-
<h3 class="title"><?php _e( 'S3 Backup settings', 'backwpup' ); ?></h3>
|
145 |
-
<p></p>
|
146 |
-
<table class="form-table">
|
147 |
-
<tr>
|
148 |
-
<th scope="row"><label for="ids3dir"><?php _e( 'Folder in bucket', 'backwpup' ); ?></label></th>
|
149 |
-
<td>
|
150 |
-
<input id="ids3dir" name="s3dir" type="text" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3dir' ) ); ?>" class="regular-text" />
|
151 |
-
</td>
|
152 |
-
</tr>
|
153 |
-
<tr>
|
154 |
-
<th scope="row"><?php _e( 'File deletion', 'backwpup' ); ?></th>
|
155 |
-
<td>
|
156 |
-
<?php
|
157 |
-
if ( BackWPup_Option::get( $jobid, 'backuptype' ) == 'archive' ) {
|
158 |
-
?>
|
159 |
-
<label for="ids3maxbackups"><input id="ids3maxbackups" name="s3maxbackups" type="text" size="3" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3maxbackups' ) ); ?>" class="small-text help-tip" title="<?php esc_attr_e( 'Oldest files will be deleted first. 0 = no deletion', 'backwpup' ); ?>" />
|
160 |
-
<?php _e( 'Number of files to keep in folder.', 'backwpup' ); ?></label>
|
161 |
-
<?php } else { ?>
|
162 |
-
<label for="ids3syncnodelete"><input class="checkbox" value="1"
|
163 |
-
type="checkbox" <?php checked( BackWPup_Option::get( $jobid, 's3syncnodelete' ), TRUE ); ?>
|
164 |
-
name="s3syncnodelete" id="ids3syncnodelete" /> <?php _e( 'Do not delete files while syncing to destination!', 'backwpup' ); ?></label>
|
165 |
-
<?php } ?>
|
166 |
-
</td>
|
167 |
-
</tr>
|
168 |
-
<?php if ( BackWPup_Option::get( $jobid, 'backuptype' ) == 'archive' ) { ?>
|
169 |
-
<tr>
|
170 |
-
<th scope="row"><?php _e( 'Multipart Upload', 'backwpup' ); ?></th>
|
171 |
-
<td>
|
172 |
-
<label for="ids3multipart"><input class="checkbox help-tip" value="1" title="<?php esc_attr_e( 'Multipart splits file into multiple chunks while uploading. This is necessary for displaying the upload process and to transfer bigger files. Works without a problem on Amazon. Other services might have issues.', 'backwpup'); ?>"
|
173 |
-
type="checkbox" <?php checked( BackWPup_Option::get( $jobid, 's3multipart' ), TRUE ); ?>
|
174 |
-
name="s3multipart" id="ids3multipart" /> <?php _e( 'Use multipart upload for uploading a file', 'backwpup' ); ?></label>
|
175 |
-
</td>
|
176 |
-
</tr>
|
177 |
-
<?php } ?>
|
178 |
-
</table>
|
179 |
-
|
180 |
-
<h3 class="title"><?php _e( 'Amazon specific settings', 'backwpup' ); ?></h3>
|
181 |
-
<p></p>
|
182 |
-
<table class="form-table">
|
183 |
-
<tr>
|
184 |
-
<th scope="row"><label for="ids3storageclass"><?php _e( 'Amazon: Storage Class', 'backwpup' ); ?></label></th>
|
185 |
-
<td>
|
186 |
-
<select name="s3storageclass" id="ids3storageclass" title="<?php _e( 'Amazon: Storage Class', 'backwpup' ); ?>">
|
187 |
-
<option value="" <?php selected( 'us-east-1', BackWPup_Option::get( $jobid, 's3storageclass' ), TRUE ) ?>><?php _e( 'none', 'backwpup' ); ?></option>
|
188 |
-
<option value="REDUCED_REDUNDANCY" <?php selected( 'REDUCED_REDUNDANCY', BackWPup_Option::get( $jobid, 's3storageclass' ), TRUE ) ?>><?php _e( 'Reduced Redundancy', 'backwpup' ); ?></option>
|
189 |
-
</select>
|
190 |
-
</td>
|
191 |
-
</tr>
|
192 |
-
<tr>
|
193 |
-
<th scope="row"><label for="ids3ssencrypt"><?php _e( 'Server side encryption', 'backwpup' ); ?></label></th>
|
194 |
-
<td>
|
195 |
-
<input class="checkbox" value="AES256"
|
196 |
-
type="checkbox" <?php checked( BackWPup_Option::get( $jobid, 's3ssencrypt' ), 'AES256' ); ?>
|
197 |
-
name="s3ssencrypt" id="ids3ssencrypt" /> <?php _e( 'Save files encrypted (AES256) on server.', 'backwpup' ); ?>
|
198 |
-
</td>
|
199 |
-
</tr>
|
200 |
-
</table>
|
201 |
-
|
202 |
-
<?php
|
203 |
-
}
|
204 |
-
|
205 |
-
|
206 |
-
/**
|
207 |
-
* @param $jobid
|
208 |
-
* @return string
|
209 |
-
*/
|
210 |
-
public function edit_form_post_save( $jobid ) {
|
211 |
-
|
212 |
-
BackWPup_Option::update( $jobid, 's3accesskey', isset( $_POST[ 's3accesskey' ] ) ? $_POST[ 's3accesskey' ] : '' );
|
213 |
-
BackWPup_Option::update( $jobid, 's3secretkey', isset( $_POST[ 's3secretkey' ] ) ? BackWPup_Encryption::encrypt( $_POST[ 's3secretkey' ] ) : '' );
|
214 |
-
BackWPup_Option::update( $jobid, 's3base_url', isset( $_POST[ 's3base_url' ] ) ? esc_url_raw( $_POST[ 's3base_url' ] ) : '' );
|
215 |
-
BackWPup_Option::update( $jobid, 's3region', isset( $_POST[ 's3region' ] ) ? $_POST[ 's3region' ] : '' );
|
216 |
-
BackWPup_Option::update( $jobid, 's3storageclass', isset( $_POST[ 's3storageclass' ] ) ? $_POST[ 's3storageclass' ] : '' );
|
217 |
-
BackWPup_Option::update( $jobid, 's3ssencrypt', ( isset( $_POST[ 's3ssencrypt' ] ) && $_POST[ 's3ssencrypt' ] == 'AES256' ) ? 'AES256' : '' );
|
218 |
-
BackWPup_Option::update( $jobid, 's3bucket', isset( $_POST[ 's3bucket' ] ) ? $_POST[ 's3bucket' ] : '' );
|
219 |
-
|
220 |
-
$_POST[ 's3dir' ] = trailingslashit( str_replace( '//', '/', str_replace( '\\', '/', trim( stripslashes( $_POST[ 's3dir' ] ) ) ) ) );
|
221 |
-
if ( substr( $_POST[ 's3dir' ], 0, 1 ) == '/' )
|
222 |
-
$_POST[ 's3dir' ] = substr( $_POST[ 's3dir' ], 1 );
|
223 |
-
if ( $_POST[ 's3dir' ] == '/' )
|
224 |
-
$_POST[ 's3dir' ] = '';
|
225 |
-
BackWPup_Option::update( $jobid, 's3dir', $_POST[ 's3dir' ] );
|
226 |
-
|
227 |
-
BackWPup_Option::update( $jobid, 's3maxbackups', isset( $_POST[ 's3maxbackups' ] ) ? (int)$_POST[ 's3maxbackups' ] : 0 );
|
228 |
-
BackWPup_Option::update( $jobid, 's3syncnodelete', ( isset( $_POST[ 's3syncnodelete' ] ) && $_POST[ 's3syncnodelete' ] == 1 ) ? TRUE : FALSE );
|
229 |
-
BackWPup_Option::update( $jobid, 's3multipart', ( isset( $_POST[ 's3multipart' ] ) && $_POST[ 's3multipart' ] == 1 ) ? TRUE : FALSE );
|
230 |
-
|
231 |
-
//create new bucket
|
232 |
-
if ( !empty( $_POST[ 's3newbucket' ] ) ) {
|
233 |
-
try {
|
234 |
-
$s3 = Aws\S3\S3Client::factory( array( 'key' => $_POST[ 's3accesskey' ],
|
235 |
-
'secret' => $_POST[ 's3secretkey' ],
|
236 |
-
'region' => $_POST[ 's3region' ],
|
237 |
-
'base_url' => $this->get_s3_base_url( $_POST[ 's3region' ], $_POST[ 's3base_url' ]),
|
238 |
-
'scheme' => 'https',
|
239 |
-
'ssl.certificate_authority' => BackWPup::get_plugin_data( 'cacert' ) ) );
|
240 |
-
// set bucket creation region
|
241 |
-
if ( $_POST[ 's3region' ] == 'google-storage' || $_POST[ 's3region' ] == 'hosteurope' )
|
242 |
-
$region = 'EU';
|
243 |
-
else
|
244 |
-
$region = $_POST[ 's3region' ];
|
245 |
-
|
246 |
-
if ($s3->isValidBucketName( $_POST[ 's3newbucket' ] ) ) {
|
247 |
-
$bucket = $s3->createBucket( array(
|
248 |
-
'Bucket' => $_POST[ 's3newbucket' ] ,
|
249 |
-
'LocationConstraint' => $region
|
250 |
-
) );
|
251 |
-
$s3->waitUntil('bucket_exists', $_POST[ 's3newbucket' ]);
|
252 |
-
if ( $bucket->get( 'Location' ) )
|
253 |
-
BackWPup_Admin::message( sprintf( __( 'Bucket %1$s created in %2$s.','backwpup'), $_POST[ 's3newbucket' ], $bucket->get( 'Location' ) ) );
|
254 |
-
else
|
255 |
-
BackWPup_Admin::message( sprintf( __( 'Bucket %s could not be created.','backwpup'), $_POST[ 's3newbucket' ] ), TRUE );
|
256 |
-
} else {
|
257 |
-
BackWPup_Admin::message( sprintf( __( ' %s is not a valid bucket name.','backwpup'), $_POST[ 's3newbucket' ] ), TRUE );
|
258 |
-
}
|
259 |
-
}
|
260 |
-
catch ( Aws\S3\Exception\S3Exception $e ) {
|
261 |
-
BackWPup_Admin::message( $e->getMessage(), TRUE );
|
262 |
-
}
|
263 |
-
BackWPup_Option::update( $jobid, 's3bucket', $_POST[ 's3newbucket' ] );
|
264 |
-
}
|
265 |
-
}
|
266 |
-
|
267 |
-
/**
|
268 |
-
* @param $jobdest
|
269 |
-
* @param $backupfile
|
270 |
-
*/
|
271 |
-
public function file_delete( $jobdest, $backupfile ) {
|
272 |
-
|
273 |
-
$files = get_site_transient( 'backwpup_'. strtolower( $jobdest ), array() );
|
274 |
-
list( $jobid, $dest ) = explode( '_', $jobdest );
|
275 |
-
|
276 |
-
if ( BackWPup_Option::get( $jobid, 's3accesskey' ) && BackWPup_Option::get( $jobid, 's3secretkey' ) && BackWPup_Option::get( $jobid, 's3bucket' ) ) {
|
277 |
-
try {
|
278 |
-
$s3 = Aws\S3\S3Client::factory( array( 'key' => BackWPup_Option::get( $jobid, 's3accesskey' ),
|
279 |
-
'secret' => BackWPup_Encryption::decrypt( BackWPup_Option::get( $jobid, 's3secretkey' ) ),
|
280 |
-
'region' => BackWPup_Option::get( $jobid, 's3region' ),
|
281 |
-
'base_url' => $this->get_s3_base_url( BackWPup_Option::get( $jobid, 's3region' ), BackWPup_Option::get( $jobid, 's3base_url' ) ),
|
282 |
-
'scheme' => 'https',
|
283 |
-
'ssl.certificate_authority' => BackWPup::get_plugin_data( 'cacert' ) ) );
|
284 |
-
|
285 |
-
$s3->deleteObject( array(
|
286 |
-
'Bucket' => BackWPup_Option::get( $jobid, 's3bucket' ),
|
287 |
-
'Key' => $backupfile
|
288 |
-
) );
|
289 |
-
//update file list
|
290 |
-
foreach ( $files as $key => $file ) {
|
291 |
-
if ( is_array( $file ) && $file[ 'file' ] == $backupfile )
|
292 |
-
unset( $files[ $key ] );
|
293 |
-
}
|
294 |
-
unset( $s3 );
|
295 |
-
}
|
296 |
-
catch ( Exception $e ) {
|
297 |
-
BackWPup_Admin::message( sprintf( __('S3 Service API: %s','backwpup'), $e->getMessage() ), TRUE );
|
298 |
-
}
|
299 |
-
}
|
300 |
-
|
301 |
-
set_site_transient( 'backwpup_'. strtolower( $jobdest ), $files, 60 * 60 * 24 * 7 );
|
302 |
-
}
|
303 |
-
|
304 |
-
/**
|
305 |
-
* @param $jobid
|
306 |
-
* @param $get_file
|
307 |
-
*/
|
308 |
-
public function file_download( $jobid, $get_file ) {
|
309 |
-
|
310 |
-
try {
|
311 |
-
$s3 = Aws\S3\S3Client::factory( array( 'key' => BackWPup_Option::get( $jobid, 's3accesskey' ),
|
312 |
-
'secret' => BackWPup_Encryption::decrypt( BackWPup_Option::get( $jobid, 's3secretkey' ) ),
|
313 |
-
'region' => BackWPup_Option::get( $jobid, 's3region' ),
|
314 |
-
'base_url' => $this->get_s3_base_url( BackWPup_Option::get( $jobid, 's3region' ), BackWPup_Option::get( $jobid, 's3base_url' ) ),
|
315 |
-
'scheme' => 'https',
|
316 |
-
'ssl.certificate_authority' => BackWPup::get_plugin_data( 'cacert' ) ) );
|
317 |
-
|
318 |
-
$s3file = $s3->getObject( array(
|
319 |
-
'Bucket' => BackWPup_Option::get( $jobid, 's3bucket' ),
|
320 |
-
'Key' => $get_file ) );
|
321 |
-
}
|
322 |
-
catch ( Exception $e ) {
|
323 |
-
die( $e->getMessage() );
|
324 |
-
}
|
325 |
-
|
326 |
-
if ( $s3file[ 'ContentLength' ] > 0 && ! empty( $s3file[ 'ContentType' ] ) ) {
|
327 |
-
header( "Pragma: public" );
|
328 |
-
header( "Expires: 0" );
|
329 |
-
header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );;
|
330 |
-
header( "Content-Type: application/octet-stream" );
|
331 |
-
header( "Content-Disposition: attachment; filename=" . basename( $get_file ) . ";" );
|
332 |
-
header( "Content-Transfer-Encoding: binary" );
|
333 |
-
header( "Content-Length: " . $s3file[ 'ContentLength' ] );
|
334 |
-
@set_time_limit( 300 );
|
335 |
-
$body = $s3file->get( 'Body' );
|
336 |
-
$body->rewind();
|
337 |
-
while ( $filedata = $body->read( 1024 ) ) {
|
338 |
-
echo $filedata;
|
339 |
-
}
|
340 |
-
die();
|
341 |
-
}
|
342 |
-
}
|
343 |
-
|
344 |
-
/**
|
345 |
-
* @param $jobdest
|
346 |
-
* @return mixed
|
347 |
-
*/
|
348 |
-
public function file_get_list( $jobdest ) {
|
349 |
-
|
350 |
-
return get_site_transient( 'backwpup_' . strtolower( $jobdest ) );
|
351 |
-
}
|
352 |
-
|
353 |
-
/**
|
354 |
-
* @param $job_object
|
355 |
-
* @return bool
|
356 |
-
*/
|
357 |
-
public function job_run_archive( &$job_object ) {
|
358 |
-
|
359 |
-
$job_object->substeps_todo = 2 + $job_object->backup_filesize;
|
360 |
-
if ( $job_object->steps_data[ $job_object->step_working ]['SAVE_STEP_TRY'] != $job_object->steps_data[ $job_object->step_working ][ 'STEP_TRY' ] )
|
361 |
-
$job_object->log( sprintf( __( '%d. Trying to send backup file to S3 Service …', 'backwpup' ), $job_object->steps_data[ $job_object->step_working ][ 'STEP_TRY' ] ), E_USER_NOTICE );
|
362 |
-
|
363 |
-
try {
|
364 |
-
$s3 = Aws\S3\S3Client::factory( array( 'key' => $job_object->job[ 's3accesskey' ],
|
365 |
-
'secret' => BackWPup_Encryption::decrypt( $job_object->job[ 's3secretkey' ] ),
|
366 |
-
'region' => $job_object->job[ 's3region' ],
|
367 |
-
'base_url' => $this->get_s3_base_url( $job_object->job[ 's3region' ], $job_object->job[ 's3base_url' ] ),
|
368 |
-
'scheme' => 'https',
|
369 |
-
'ssl.certificate_authority' => BackWPup::get_plugin_data( 'cacert' ) ) );
|
370 |
-
|
371 |
-
if ( $job_object->steps_data[ $job_object->step_working ]['SAVE_STEP_TRY'] != $job_object->steps_data[ $job_object->step_working ][ 'STEP_TRY' ] && $job_object->substeps_done < $job_object->backup_filesize ) {
|
372 |
-
if ( $s3->doesBucketExist( $job_object->job[ 's3bucket' ] ) ) {
|
373 |
-
$bucketregion = $s3->getBucketLocation( array( 'Bucket' => $job_object->job[ 's3bucket' ] ) );
|
374 |
-
$job_object->log( sprintf( __( 'Connected to S3 Bucket "%1$s" in %2$s', 'backwpup' ), $job_object->job[ 's3bucket' ], $bucketregion->get( 'Location' ) ), E_USER_NOTICE );
|
375 |
-
}
|
376 |
-
else {
|
377 |
-
$job_object->log( sprintf( __( 'S3 Bucket "%s" does not exist!', 'backwpup' ), $job_object->job[ 's3bucket' ] ), E_USER_ERROR );
|
378 |
-
|
379 |
-
return TRUE;
|
380 |
-
}
|
381 |
-
|
382 |
-
if ( $job_object->job[ 's3multipart' ] && empty( $job_object->steps_data[ $job_object->step_working ][ 'UploadId' ] ) ) {
|
383 |
-
//Check for aboded Multipart Uploads
|
384 |
-
$job_object->log( __( 'Checking for not aborted multipart Uploads …', 'backwpup' ) );
|
385 |
-
$multipart_uploads = $s3->listMultipartUploads( array( 'Bucket' => $job_object->job[ 's3bucket' ], 'Prefix' => $job_object->job[ 's3dir' ] ) );
|
386 |
-
$uploads = $multipart_uploads->get( 'Uploads' );
|
387 |
-
if ( ! empty( $uploads ) ) {
|
388 |
-
foreach( $uploads as $upload ) {
|
389 |
-
$s3->abortMultipartUpload( array( 'Bucket' => $job_object->job[ 's3bucket' ], 'Key' => $upload[ 'Key' ], 'UploadId' => $upload[ 'UploadId' ] ) );
|
390 |
-
$job_object->log( sprintf( __( 'Upload for %s aborted.', 'backwpup' ), $upload[ 'Key' ] ) );
|
391 |
-
}
|
392 |
-
}
|
393 |
-
}
|
394 |
-
|
395 |
-
//transfer file to S3
|
396 |
-
$job_object->log( __( 'Starting upload to S3 Service …', 'backwpup' ) );
|
397 |
-
}
|
398 |
-
|
399 |
-
|
400 |
-
if ( ! $job_object->job[ 's3multipart' ] ) {
|
401 |
-
//Prepare Upload
|
402 |
-
$create_args = array();
|
403 |
-
$create_args[ 'Bucket' ] = $job_object->job[ 's3bucket' ];
|
404 |
-
$create_args[ 'ACL' ] = 'private';
|
405 |
-
if ( ! empty( $job_object->job[ 's3ssencrypt' ] ) )
|
406 |
-
$create_args[ 'ServerSideEncryption' ] = $job_object->job[ 's3ssencrypt' ]; //AES256
|
407 |
-
if ( ! empty( $job_object->job[ 's3storageclass' ] ) ) //REDUCED_REDUNDANCY
|
408 |
-
$create_args[ 'StorageClass' ] = $job_object->job[ 's3storageclass' ];
|
409 |
-
$create_args[ 'Metadata' ] = array( 'BackupTime' => date_i18n( 'Y-m-d H:i:s', $job_object->start_time ) );
|
410 |
-
|
411 |
-
$create_args[ 'Body' ] = fopen( $job_object->backup_folder . $job_object->backup_file, 'r' );
|
412 |
-
$create_args[ 'Key' ] = $job_object->job[ 's3dir' ] . $job_object->backup_file;
|
413 |
-
$create_args[ 'ContentType' ] = $job_object->get_mime_type( $job_object->backup_folder . $job_object->backup_file );
|
414 |
-
|
415 |
-
try {
|
416 |
-
$s3->putObject( $create_args );
|
417 |
-
} catch ( Aws\Common\Exception\MultipartUploadException $e ) {
|
418 |
-
$job_object->log( E_USER_ERROR, sprintf( __( 'S3 Service API: %s', 'backwpup' ), htmlentities( $e->getMessage() ) ), $e->getFile(), $e->getLine() );
|
419 |
-
|
420 |
-
return FALSE;
|
421 |
-
}
|
422 |
-
} else {
|
423 |
-
//Prepare Upload
|
424 |
-
$job_object->steps_data[ $job_object->step_working ][ 'file_handel' ] = fopen( $job_object->backup_folder . $job_object->backup_file, 'rb' );
|
425 |
-
fseek( $job_object->steps_data[ $job_object->step_working ][ 'file_handel' ], $job_object->substeps_done );
|
426 |
-
|
427 |
-
try {
|
428 |
-
|
429 |
-
if ( empty ( $job_object->steps_data[ $job_object->step_working ][ 'UploadId' ] ) ) {
|
430 |
-
$args = array( 'ACL' => 'private',
|
431 |
-
'Bucket' => $job_object->job[ 's3bucket' ],
|
432 |
-
'ContentType' => $job_object->get_mime_type( $job_object->backup_folder . $job_object->backup_file ),
|
433 |
-
'Key' => $job_object->job[ 's3dir' ] . $job_object->backup_file );
|
434 |
-
if ( !empty( $job_object->job[ 's3ssencrypt' ] ) )
|
435 |
-
$args[ 'ServerSideEncryption' ] = $job_object->job[ 's3ssencrypt' ];
|
436 |
-
if ( !empty( $job_object->job[ 's3storageclass' ] ) )
|
437 |
-
$args[ 'StorageClass' ] = empty( $job_object->job[ 's3storageclass' ] ) ? 'STANDARD' : 'REDUCED_REDUNDANCY';
|
438 |
-
|
439 |
-
$upload = $s3->createMultipartUpload( $args );
|
440 |
-
|
441 |
-
$job_object->steps_data[ $job_object->step_working ][ 'UploadId' ] = $upload->get( 'UploadId' );
|
442 |
-
$job_object->steps_data[ $job_object->step_working ][ 'Parts' ] = array();
|
443 |
-
$job_object->steps_data[ $job_object->step_working ][ 'Part' ] = 1;
|
444 |
-
}
|
445 |
-
|
446 |
-
while ( ! feof( $job_object->steps_data[ $job_object->step_working ][ 'file_handel' ] ) ) {
|
447 |
-
$chunk_upload_start = microtime( TRUE );
|
448 |
-
$part_data = fread( $job_object->steps_data[ $job_object->step_working ][ 'file_handel' ], 1048576 * 5 ); //5MB Minimum part size
|
449 |
-
$part = $s3->uploadPart( array( 'Bucket' => $job_object->job[ 's3bucket' ],
|
450 |
-
'UploadId' => $job_object->steps_data[ $job_object->step_working ][ 'UploadId' ],
|
451 |
-
'Key' => $job_object->job[ 's3dir' ] . $job_object->backup_file,
|
452 |
-
'PartNumber' => $job_object->steps_data[ $job_object->step_working ][ 'Part' ],
|
453 |
-
'Body' => $part_data ) );
|
454 |
-
$chunk_upload_time = microtime( TRUE ) - $chunk_upload_start;
|
455 |
-
$job_object->substeps_done = $job_object->substeps_done + strlen( $part_data );
|
456 |
-
$job_object->steps_data[ $job_object->step_working ][ 'Parts' ][] = array( 'ETag' => $part->get( 'ETag' ),
|
457 |
-
'PartNumber' => $job_object->steps_data[ $job_object->step_working ][ 'Part' ] );
|
458 |
-
$job_object->steps_data[ $job_object->step_working ][ 'Part' ]++;
|
459 |
-
$time_remaining = $job_object->do_restart_time();
|
460 |
-
if ( $time_remaining < $chunk_upload_time )
|
461 |
-
$job_object->do_restart_time( TRUE );
|
462 |
-
$job_object->update_working_data();
|
463 |
-
}
|
464 |
-
|
465 |
-
$s3->completeMultipartUpload( array( 'Bucket' => $job_object->job[ 's3bucket' ],
|
466 |
-
'UploadId' => $job_object->steps_data[ $job_object->step_working ][ 'UploadId' ],
|
467 |
-
'Key' => $job_object->job[ 's3dir' ] . $job_object->backup_file,
|
468 |
-
'Parts' => $job_object->steps_data[ $job_object->step_working ][ 'Parts' ] ) );
|
469 |
-
|
470 |
-
} catch ( Exception $e ) {
|
471 |
-
$job_object->log( E_USER_ERROR, sprintf( __( 'S3 Service API: %s', 'backwpup' ), htmlentities( $e->getMessage() ) ), $e->getFile(), $e->getLine() );
|
472 |
-
if ( ! empty( $job_object->steps_data[ $job_object->step_working ][ 'uploadId' ] ) )
|
473 |
-
$s3->abortMultipartUpload( array( 'Bucket' => $job_object->job[ 's3bucket' ],
|
474 |
-
'UploadId' => $job_object->steps_data[ $job_object->step_working ][ 'uploadId' ],
|
475 |
-
'Key' => $job_object->job[ 's3dir' ] . $job_object->backup_file ) );
|
476 |
-
unset( $job_object->steps_data[ $job_object->step_working ][ 'UploadId' ] );
|
477 |
-
unset( $job_object->steps_data[ $job_object->step_working ][ 'Parts' ] );
|
478 |
-
unset( $job_object->steps_data[ $job_object->step_working ][ 'Part' ] );
|
479 |
-
$job_object->substeps_done = 0;
|
480 |
-
if ( is_resource( $job_object->steps_data[ $job_object->step_working ][ 'file_handel' ] ) )
|
481 |
-
fclose( $job_object->steps_data[ $job_object->step_working ][ 'file_handel' ] );
|
482 |
-
return FALSE;
|
483 |
-
}
|
484 |
-
fclose( $job_object->steps_data[ $job_object->step_working ][ 'file_handel' ] );
|
485 |
-
}
|
486 |
-
|
487 |
-
$result = $s3->headObject( array( 'Bucket' => $job_object->job[ 's3bucket' ],
|
488 |
-
'Key' => $job_object->job[ 's3dir' ] . $job_object->backup_file) );
|
489 |
-
|
490 |
-
if ( $result->get( 'ContentLength' ) == filesize( $job_object->backup_folder . $job_object->backup_file ) ) {
|
491 |
-
$job_object->substeps_done = 1 + $job_object->backup_filesize;
|
492 |
-
$job_object->log( sprintf( __( 'Backup transferred to %s.', 'backwpup' ), $this->get_s3_base_url( $job_object->job[ 's3region' ], $job_object->job[ 's3base_url' ] ). '/' .$job_object->job[ 's3bucket' ] . '/' . $job_object->job[ 's3dir' ] . $job_object->backup_file ), E_USER_NOTICE );
|
493 |
-
if ( ! empty( $job_object->job[ 'jobid' ] ) )
|
494 |
-
BackWPup_Option::update( $job_object->job[ 'jobid' ], 'lastbackupdownloadurl', network_admin_url( 'admin.php' ) . '?page=backwpupbackups&action=downloads3&file=' . $job_object->job[ 's3dir' ] . $job_object->backup_file . '&jobid=' . $job_object->job[ 'jobid' ] );
|
495 |
-
}
|
496 |
-
else {
|
497 |
-
$job_object->log( sprintf( __( 'Cannot transfer backup to S3! (%1$d) %2$s', 'backwpup' ), $result->get( "status" ), $result->get( "Message" ) ), E_USER_ERROR );
|
498 |
-
}
|
499 |
-
}
|
500 |
-
catch ( Exception $e ) {
|
501 |
-
$job_object->log( E_USER_ERROR, sprintf( __( 'S3 Service API: %s', 'backwpup' ), htmlentities( $e->getMessage() ) ), $e->getFile(), $e->getLine() );
|
502 |
-
|
503 |
-
return FALSE;
|
504 |
-
}
|
505 |
-
|
506 |
-
try {
|
507 |
-
$backupfilelist = array();
|
508 |
-
$filecounter = 0;
|
509 |
-
$files = array();
|
510 |
-
$args = array(
|
511 |
-
'Bucket' => $job_object->job[ 's3bucket' ],
|
512 |
-
'Prefix' => (string) $job_object->job[ 's3dir' ]
|
513 |
-
);
|
514 |
-
$objects = $s3->getIterator('ListObjects', $args );
|
515 |
-
if ( is_object( $objects ) ) {
|
516 |
-
foreach ( $objects as $object ) {
|
517 |
-
$file = basename( $object[ 'Key' ] );
|
518 |
-
$changetime = strtotime( $object[ 'LastModified' ] ) + ( get_option( 'gmt_offset' ) * 3600 );
|
519 |
-
if ( $job_object->is_backup_archive( $file ) )
|
520 |
-
$backupfilelist[ $changetime ] = $file;
|
521 |
-
$files[ $filecounter ][ 'folder' ] = $this->get_s3_base_url( $job_object->job[ 's3region' ], $job_object->job[ 's3base_url' ] ). '/' .$job_object->job[ 's3bucket' ] . '/' . dirname( $object[ 'Key' ] );
|
522 |
-
$files[ $filecounter ][ 'file' ] = $object[ 'Key' ];
|
523 |
-
$files[ $filecounter ][ 'filename' ] = basename( $object[ 'Key' ] );
|
524 |
-
if ( ! empty( $object[ 'StorageClass' ] ) )
|
525 |
-
$files[ $filecounter ][ 'info' ] = sprintf( __('Storage Class: %s', 'backwpup' ), $object[ 'StorageClass' ] );
|
526 |
-
$files[ $filecounter ][ 'downloadurl' ] = network_admin_url( 'admin.php' ) . '?page=backwpupbackups&action=downloads3&file=' . $object[ 'Key' ] . '&jobid=' . $job_object->job[ 'jobid' ];
|
527 |
-
$files[ $filecounter ][ 'filesize' ] = $object[ 'Size' ];
|
528 |
-
$files[ $filecounter ][ 'time' ] = $changetime;
|
529 |
-
$filecounter ++;
|
530 |
-
}
|
531 |
-
}
|
532 |
-
if ( $job_object->job[ 's3maxbackups' ] > 0 && is_object( $s3 ) ) { //Delete old backups
|
533 |
-
if ( count( $backupfilelist ) > $job_object->job[ 's3maxbackups' ] ) {
|
534 |
-
ksort( $backupfilelist );
|
535 |
-
$numdeltefiles = 0;
|
536 |
-
while ( $file = array_shift( $backupfilelist ) ) {
|
537 |
-
if ( count( $backupfilelist ) < $job_object->job[ 's3maxbackups' ] )
|
538 |
-
break;
|
539 |
-
//delete files on S3
|
540 |
-
$args = array(
|
541 |
-
'Bucket' => $job_object->job[ 's3bucket' ],
|
542 |
-
'Key' => $job_object->job[ 's3dir' ] . $file
|
543 |
-
);
|
544 |
-
if ( $s3->deleteObject( $args ) ) {
|
545 |
-
foreach ( $files as $key => $filedata ) {
|
546 |
-
if ( $filedata[ 'file' ] == $job_object->job[ 's3dir' ] . $file )
|
547 |
-
unset( $files[ $key ] );
|
548 |
-
}
|
549 |
-
$numdeltefiles ++;
|
550 |
-
} else {
|
551 |
-
$job_object->log( sprintf( __( 'Cannot delete backup from %s.', 'backwpup' ), $this->get_s3_base_url( $job_object->job[ 's3region' ], $job_object->job[ 's3base_url' ] ). '/' .$job_object->job[ 's3bucket' ] . '/' . $job_object->job[ 's3dir' ] . $file ), E_USER_ERROR );
|
552 |
-
}
|
553 |
-
}
|
554 |
-
if ( $numdeltefiles > 0 )
|
555 |
-
$job_object->log( sprintf( _n( 'One file deleted on S3 Bucket.', '%d files deleted on S3 Bucket', $numdeltefiles, 'backwpup' ), $numdeltefiles ), E_USER_NOTICE );
|
556 |
-
}
|
557 |
-
}
|
558 |
-
set_site_transient( 'backwpup_' . $job_object->job[ 'jobid' ] . '_s3', $files, 60 * 60 * 24 * 7 );
|
559 |
-
}
|
560 |
-
catch ( Exception $e ) {
|
561 |
-
$job_object->log( E_USER_ERROR, sprintf( __( 'S3 Service API: %s', 'backwpup' ), htmlentities( $e->getMessage() ) ), $e->getFile(), $e->getLine() );
|
562 |
-
|
563 |
-
return FALSE;
|
564 |
-
}
|
565 |
-
$job_object->substeps_done = 2 + $job_object->backup_filesize;
|
566 |
-
|
567 |
-
return TRUE;
|
568 |
-
}
|
569 |
-
|
570 |
-
|
571 |
-
/**
|
572 |
-
* @param $job_object
|
573 |
-
* @return bool
|
574 |
-
*/
|
575 |
-
public function can_run( $job_object ) {
|
576 |
-
|
577 |
-
if ( empty( $job_object->job[ 's3accesskey' ] ) )
|
578 |
-
return FALSE;
|
579 |
-
|
580 |
-
if ( empty( $job_object->job[ 's3secretkey' ] ) )
|
581 |
-
return FALSE;
|
582 |
-
|
583 |
-
if ( empty( $job_object->job[ 's3bucket' ] ) )
|
584 |
-
return FALSE;
|
585 |
-
|
586 |
-
return TRUE;
|
587 |
-
}
|
588 |
-
|
589 |
-
/**
|
590 |
-
*
|
591 |
-
*/
|
592 |
-
public function edit_inline_js() {
|
593 |
-
//<script type="text/javascript">
|
594 |
-
?>
|
595 |
-
function awsgetbucket() {
|
596 |
-
var data = {
|
597 |
-
action: 'backwpup_dest_s3',
|
598 |
-
s3accesskey: $('input[name="s3accesskey"]').val(),
|
599 |
-
s3secretkey: $('input[name="s3secretkey"]').val(),
|
600 |
-
s3bucketselected: $('input[name="s3bucketselected"]').val(),
|
601 |
-
s3base_url: $('input[name="s3base_url"]').val(),
|
602 |
-
s3region: $('#s3region').val(),
|
603 |
-
_ajax_nonce: $('#backwpupajaxnonce').val()
|
604 |
-
};
|
605 |
-
$.post(ajaxurl, data, function(response) {
|
606 |
-
$('#s3bucketerror').remove();
|
607 |
-
$('#s3bucket').remove();
|
608 |
-
$('#s3bucketselected').after(response);
|
609 |
-
});
|
610 |
-
}
|
611 |
-
$('input[name="s3accesskey"]').change(function() {awsgetbucket();});
|
612 |
-
$('input[name="s3secretkey"]').change(function() {awsgetbucket();});
|
613 |
-
$('input[name="s3base_url"]').change(function() {awsgetbucket();});
|
614 |
-
$('#s3region').change(function() {awsgetbucket();});
|
615 |
-
<?php
|
616 |
-
}
|
617 |
-
|
618 |
-
/**
|
619 |
-
* @param string $args
|
620 |
-
*/
|
621 |
-
public function edit_ajax( $args = '' ) {
|
622 |
-
|
623 |
-
$error = '';
|
624 |
-
|
625 |
-
if ( is_array( $args ) ) {
|
626 |
-
$ajax = FALSE;
|
627 |
-
}
|
628 |
-
else {
|
629 |
-
if ( ! current_user_can( 'backwpup_jobs_edit' ) )
|
630 |
-
wp_die( -1 );
|
631 |
-
check_ajax_referer( 'backwpup_ajax_nonce' );
|
632 |
-
$args[ 's3accesskey' ] = $_POST[ 's3accesskey' ];
|
633 |
-
$args[ 's3secretkey' ] = $_POST[ 's3secretkey' ];
|
634 |
-
$args[ 's3bucketselected' ] = $_POST[ 's3bucketselected' ];
|
635 |
-
$args[ 's3base_url' ] = $_POST[ 's3base_url' ];
|
636 |
-
$args[ 's3region' ] = $_POST[ 's3region' ];
|
637 |
-
$ajax = TRUE;
|
638 |
-
}
|
639 |
-
echo '<span id="s3bucketerror" style="color:red;">';
|
640 |
-
|
641 |
-
if ( ! empty( $args[ 's3accesskey' ] ) && ! empty( $args[ 's3secretkey' ] ) ) {
|
642 |
-
try {
|
643 |
-
$s3 = Aws\S3\S3Client::factory( array( 'key' => $args[ 's3accesskey' ],
|
644 |
-
'secret' => BackWPup_Encryption::decrypt( $args[ 's3secretkey' ] ),
|
645 |
-
'region' => $args[ 's3region' ],
|
646 |
-
'base_url' => $this->get_s3_base_url( $args[ 's3region' ], $args[ 's3base_url' ]),
|
647 |
-
'scheme' => 'https',
|
648 |
-
'ssl.certificate_authority' => BackWPup::get_plugin_data( 'cacert' ) ) );
|
649 |
-
|
650 |
-
$buckets = $s3->listBuckets();
|
651 |
-
}
|
652 |
-
catch ( Exception $e ) {
|
653 |
-
$error = $e->getMessage();
|
654 |
-
}
|
655 |
-
}
|
656 |
-
|
657 |
-
if ( empty( $args[ 's3accesskey' ] ) )
|
658 |
-
_e( 'Missing access key!', 'backwpup' );
|
659 |
-
elseif ( empty( $args[ 's3secretkey' ] ) )
|
660 |
-
_e( 'Missing secret access key!', 'backwpup' );
|
661 |
-
elseif ( ! empty( $error ) && $error == 'Access Denied' )
|
662 |
-
echo '<input type="text" name="s3bucket" id="s3bucket" value="' . esc_attr( $args[ 's3bucketselected' ] ) . '" >';
|
663 |
-
elseif ( ! empty( $error ) )
|
664 |
-
echo esc_html( $error );
|
665 |
-
elseif ( ! isset( $buckets ) || count( $buckets['Buckets'] ) < 1 )
|
666 |
-
_e( 'No bucket found!', 'backwpup' );
|
667 |
-
echo '</span>';
|
668 |
-
|
669 |
-
if ( !empty( $buckets['Buckets'] ) ) {
|
670 |
-
echo '<select name="s3bucket" id="s3bucket">';
|
671 |
-
foreach ( $buckets['Buckets'] as $bucket ) {
|
672 |
-
echo "<option " . selected( $args[ 's3bucketselected' ], esc_attr( $bucket['Name'] ), FALSE ) . ">" . esc_attr( $bucket['Name'] ) . "</option>";
|
673 |
-
}
|
674 |
-
echo '</select>';
|
675 |
-
}
|
676 |
-
|
677 |
-
if ( $ajax )
|
678 |
-
die();
|
679 |
-
}
|
680 |
-
}
|
1 |
+
<?php
|
2 |
+
// Amazon S3 SDK v2.6.1
|
3 |
+
// http://aws.amazon.com/de/sdkforphp2/
|
4 |
+
// https://github.com/aws/aws-sdk-php
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Documentation: http://docs.amazonwebservices.com/aws-sdk-php-2/latest/class-Aws.S3.S3Client.html
|
8 |
+
*/
|
9 |
+
class BackWPup_Destination_S3 extends BackWPup_Destinations {
|
10 |
+
|
11 |
+
|
12 |
+
/**
|
13 |
+
* @param $s3region
|
14 |
+
* @param string $s3base_url
|
15 |
+
* @return string
|
16 |
+
*/
|
17 |
+
protected function get_s3_base_url( $s3region, $s3base_url = '' ) {
|
18 |
+
|
19 |
+
if ( ! empty( $s3base_url ) )
|
20 |
+
return $s3base_url;
|
21 |
+
|
22 |
+
switch ( $s3region ) {
|
23 |
+
case 'us-east-1':
|
24 |
+
return 'https://s3.amazonaws.com';
|
25 |
+
case 'us-west-1':
|
26 |
+
return 'https://s3-us-west-1.amazonaws.com';
|
27 |
+
case 'us-west-2':
|
28 |
+
return 'https://s3-us-west-2.amazonaws.com';
|
29 |
+
case 'eu-west-1':
|
30 |
+
return 'https://s3-eu-west-1.amazonaws.com';
|
31 |
+
case 'eu-central-1':
|
32 |
+
return 'https://s3-eu-central-1.amazonaws.com';
|
33 |
+
case 'ap-northeast-1':
|
34 |
+
return 'https://s3-ap-northeast-1.amazonaws.com';
|
35 |
+
case 'ap-southeast-1':
|
36 |
+
return 'https://s3-ap-southeast-1.amazonaws.com';
|
37 |
+
case 'ap-southeast-2':
|
38 |
+
return 'https://s3-ap-southeast-2.amazonaws.com';
|
39 |
+
case 'sa-east-1':
|
40 |
+
return 'https://s3-sa-east-1.amazonaws.com';
|
41 |
+
case 'cn-north-1':
|
42 |
+
return 'https:/cn-north-1.amazonaws.com';
|
43 |
+
case 'google-storage':
|
44 |
+
return 'https://storage.googleapis.com';
|
45 |
+
case 'dreamhost':
|
46 |
+
return 'https://objects.dreamhost.com';
|
47 |
+
case 'greenqloud':
|
48 |
+
return 'http://s.greenqloud.com';
|
49 |
+
default:
|
50 |
+
return '';
|
51 |
+
}
|
52 |
+
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* @return array
|
57 |
+
*/
|
58 |
+
public function option_defaults() {
|
59 |
+
|
60 |
+
return array( 's3accesskey' => '', 's3secretkey' => '', 's3bucket' => '', 's3region' => 'us-east-1', 's3base_url' => '', 's3ssencrypt' => '', 's3storageclass' => '', 's3dir' => trailingslashit( sanitize_file_name( get_bloginfo( 'name' ) ) ), 's3maxbackups' => 15, 's3syncnodelete' => TRUE, 's3multipart' => TRUE );
|
61 |
+
}
|
62 |
+
|
63 |
+
|
64 |
+
/**
|
65 |
+
* @param $jobid
|
66 |
+
*/
|
67 |
+
public function edit_tab( $jobid ) {
|
68 |
+
|
69 |
+
?>
|
70 |
+
<h3 class="title"><?php _e( 'S3 Service', 'backwpup' ) ?></h3>
|
71 |
+
<p></p>
|
72 |
+
<table class="form-table">
|
73 |
+
<tr>
|
74 |
+
<th scope="row"><label for="s3region"><?php _e( 'Select a S3 service', 'backwpup' ) ?></label></th>
|
75 |
+
<td>
|
76 |
+
<select name="s3region" id="s3region" title="<?php _e( 'Amazon S3 Region', 'backwpup' ); ?>">
|
77 |
+
<option value="us-east-1" <?php selected( 'us-east-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: US Standard', 'backwpup' ); ?></option>
|
78 |
+
<option value="us-west-1" <?php selected( 'us-west-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: US West (Northern California)', 'backwpup' ); ?></option>
|
79 |
+
<option value="us-west-2" <?php selected( 'us-west-2', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: US West (Oregon)', 'backwpup' ); ?></option>
|
80 |
+
<option value="eu-west-1" <?php selected( 'eu-west-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: EU (Ireland)', 'backwpup' ); ?></option>
|
81 |
+
<option value="eu-central-1" <?php selected( 'eu-central-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: EU (Germany)', 'backwpup' ); ?></option>
|
82 |
+
<option value="ap-northeast-1" <?php selected( 'ap-northeast-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: Asia Pacific (Tokyo)', 'backwpup' ); ?></option>
|
83 |
+
<option value="ap-southeast-1" <?php selected( 'ap-southeast-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: Asia Pacific (Singapore)', 'backwpup' ); ?></option>
|
84 |
+
<option value="ap-southeast-2" <?php selected( 'ap-southeast-2', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: Asia Pacific (Sydney)', 'backwpup' ); ?></option>
|
85 |
+
<option value="sa-east-1" <?php selected( 'sa-east-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: South America (Sao Paulo)', 'backwpup' ); ?></option>
|
86 |
+
<option value="cn-north-1" <?php selected( 'cn-north-1', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Amazon S3: China (Beijing)', 'backwpup' ); ?></option>
|
87 |
+
<option value="google-storage" <?php selected( 'google-storage', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Google Storage (Interoperable Access)', 'backwpup' ); ?></option>
|
88 |
+
<option value="dreamhost" <?php selected( 'dreamhost', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'Dream Host Cloud Storage', 'backwpup' ); ?></option>
|
89 |
+
<option value="greenqloud" <?php selected( 'greenqloud', BackWPup_Option::get( $jobid, 's3region' ), TRUE ) ?>><?php _e( 'GreenQloud Storage Qloud', 'backwpup' ); ?></option>
|
90 |
+
</select>
|
91 |
+
</td>
|
92 |
+
</tr>
|
93 |
+
<tr>
|
94 |
+
<th scope="row"><label for="s3base_url"><?php _e( 'Or a S3 Server URL', 'backwpup' ) ?></label></th>
|
95 |
+
<td>
|
96 |
+
<input id="s3base_url" name="s3base_url" type="text" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3base_url' ) );?>" class="regular-text" autocomplete="off" />
|
97 |
+
</td>
|
98 |
+
</tr>
|
99 |
+
</table>
|
100 |
+
|
101 |
+
<h3 class="title"><?php _e( 'S3 Access Keys', 'backwpup' ); ?></h3>
|
102 |
+
<p></p>
|
103 |
+
<table class="form-table">
|
104 |
+
<tr>
|
105 |
+
<th scope="row"><label for="s3accesskey"><?php _e( 'Access Key', 'backwpup' ); ?></label></th>
|
106 |
+
<td>
|
107 |
+
<input id="s3accesskey" name="s3accesskey" type="text"
|
108 |
+
value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3accesskey' ) );?>" class="regular-text" autocomplete="off" />
|
109 |
+
</td>
|
110 |
+
</tr>
|
111 |
+
<tr>
|
112 |
+
<th scope="row"><label for="s3secretkey"><?php _e( 'Secret Key', 'backwpup' ); ?></label></th>
|
113 |
+
<td>
|
114 |
+
<input id="s3secretkey" name="s3secretkey" type="password"
|
115 |
+
value="<?php echo esc_attr( BackWPup_Encryption::decrypt( BackWPup_Option::get( $jobid, 's3secretkey' ) ) ); ?>" class="regular-text" autocomplete="off" />
|
116 |
+
</td>
|
117 |
+
</tr>
|
118 |
+
</table>
|
119 |
+
|
120 |
+
<h3 class="title"><?php _e( 'S3 Bucket', 'backwpup' ); ?></h3>
|
121 |
+
<p></p>
|
122 |
+
<table class="form-table">
|
123 |
+
<tr>
|
124 |
+
<th scope="row"><label for="s3bucketselected"><?php _e( 'Bucket selection', 'backwpup' ); ?></label></th>
|
125 |
+
<td>
|
126 |
+
<input id="s3bucketselected" name="s3bucketselected" type="hidden" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3bucket' ) ); ?>" />
|
127 |
+
<?php if ( BackWPup_Option::get( $jobid, 's3accesskey' ) && BackWPup_Option::get( $jobid, 's3secretkey' ) ) $this->edit_ajax( array(
|
128 |
+
's3accesskey' => BackWPup_Option::get( $jobid, 's3accesskey' ),
|
129 |
+
's3secretkey' => BackWPup_Encryption::decrypt(BackWPup_Option::get( $jobid, 's3secretkey' ) ),
|
130 |
+
's3bucketselected' => BackWPup_Option::get( $jobid, 's3bucket' ),
|
131 |
+
's3base_url' => BackWPup_Option::get( $jobid, 's3base_url' ),
|
132 |
+
's3region' => BackWPup_Option::get( $jobid, 's3region' )
|
133 |
+
) ); ?>
|
134 |
+
</td>
|
135 |
+
</tr>
|
136 |
+
<tr>
|
137 |
+
<th scope="row"><label for="s3newbucket"><?php _e( 'Create a new bucket', 'backwpup' ); ?></label></th>
|
138 |
+
<td>
|
139 |
+
<input id="s3newbucket" name="s3newbucket" type="text" value="" class="small-text" autocomplete="off" />
|
140 |
+
</td>
|
141 |
+
</tr>
|
142 |
+
</table>
|
143 |
+
|
144 |
+
<h3 class="title"><?php _e( 'S3 Backup settings', 'backwpup' ); ?></h3>
|
145 |
+
<p></p>
|
146 |
+
<table class="form-table">
|
147 |
+
<tr>
|
148 |
+
<th scope="row"><label for="ids3dir"><?php _e( 'Folder in bucket', 'backwpup' ); ?></label></th>
|
149 |
+
<td>
|
150 |
+
<input id="ids3dir" name="s3dir" type="text" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3dir' ) ); ?>" class="regular-text" />
|
151 |
+
</td>
|
152 |
+
</tr>
|
153 |
+
<tr>
|
154 |
+
<th scope="row"><?php _e( 'File deletion', 'backwpup' ); ?></th>
|
155 |
+
<td>
|
156 |
+
<?php
|
157 |
+
if ( BackWPup_Option::get( $jobid, 'backuptype' ) == 'archive' ) {
|
158 |
+
?>
|
159 |
+
<label for="ids3maxbackups"><input id="ids3maxbackups" name="s3maxbackups" type="text" size="3" value="<?php echo esc_attr( BackWPup_Option::get( $jobid, 's3maxbackups' ) ); ?>" class="small-text help-tip" title="<?php esc_attr_e( 'Oldest files will be deleted first. 0 = no deletion', 'backwpup' ); ?>" />
|
160 |
+
<?php _e( 'Number of files to keep in folder.', 'backwpup' ); ?></label>
|
161 |
+
<?php } else { ?>
|
162 |
+
<label for="ids3syncnodelete"><input class="checkbox" value="1"
|
163 |
+
type="checkbox" <?php checked( BackWPup_Option::get( $jobid, 's3syncnodelete' ), TRUE ); ?>
|
164 |
+
name="s3syncnodelete" id="ids3syncnodelete" /> <?php _e( 'Do not delete files while syncing to destination!', 'backwpup' ); ?></label>
|
165 |
+
<?php } ?>
|
166 |
+
</td>
|
167 |
+
</tr>
|
168 |
+
<?php if ( BackWPup_Option::get( $jobid, 'backuptype' ) == 'archive' ) { ?>
|
169 |
+
<tr>
|
170 |
+
<th scope="row"><?php _e( 'Multipart Upload', 'backwpup' ); ?></th>
|
171 |
+
<td>
|
172 |
+
<label for="ids3multipart"><input class="checkbox help-tip" value="1" title="<?php esc_attr_e( 'Multipart splits file into multiple chunks while uploading. This is necessary for displaying the upload process and to transfer bigger files. Works without a problem on Amazon. Other services might have issues.', 'backwpup'); ?>"
|
173 |
+
type="checkbox" <?php checked( BackWPup_Option::get( $jobid, 's3multipart' ), TRUE ); ?>
|
174 |
+
name="s3multipart" id="ids3multipart" /> <?php _e( 'Use multipart upload for uploading a file', 'backwpup' ); ?></label>
|
175 |
+
</td>
|
176 |
+
</tr>
|
177 |
+
<?php } ?>
|
178 |
+
</table>
|
179 |
+
|
180 |
+
<h3 class="title"><?php _e( 'Amazon specific settings', 'backwpup' ); ?></h3>
|
181 |
+
<p></p>
|
182 |
+
<table class="form-table">
|
183 |
+
<tr>
|
184 |
+
<th scope="row"><label for="ids3storageclass"><?php _e( 'Amazon: Storage Class', 'backwpup' ); ?></label></th>
|
185 |
+
<td>
|
186 |
+
<select name="s3storageclass" id="ids3storageclass" title="<?php _e( 'Amazon: Storage Class', 'backwpup' ); ?>">
|
187 |
+
<option value="" <?php selected( 'us-east-1', BackWPup_Option::get( $jobid, 's3storageclass' ), TRUE ) ?>><?php _e( 'none', 'backwpup' ); ?></option>
|
188 |
+
<option value="REDUCED_REDUNDANCY" <?php selected( 'REDUCED_REDUNDANCY', BackWPup_Option::get( $jobid, 's3storageclass' ), TRUE ) ?>><?php _e( 'Reduced Redundancy', 'backwpup' ); ?></option>
|
189 |
+
</select>
|
190 |
+
</td>
|
191 |
+
</tr>
|
192 |
+
<tr>
|
193 |
+
<th scope="row"><label for="ids3ssencrypt"><?php _e( 'Server side encryption', 'backwpup' ); ?></label></th>
|
194 |
+
<td>
|
195 |
+
<input class="checkbox" value="AES256"
|
196 |
+
type="checkbox" <?php checked( BackWPup_Option::get( $jobid, 's3ssencrypt' ), 'AES256' ); ?>
|
197 |
+
name="s3ssencrypt" id="ids3ssencrypt" /> <?php _e( 'Save files encrypted (AES256) on server.', 'backwpup' ); ?>
|
198 |
+
</td>
|
199 |
+
</tr>
|
200 |
+
</table>
|
201 |
+
|
202 |
+
<?php
|
203 |
+
}
|
204 |
+
|
205 |
+
|
206 |
+
/**
|
207 |
+
* @param $jobid
|
208 |
+
* @return string
|
209 |
+
*/
|
210 |
+
public function edit_form_post_save( $jobid ) {
|
211 |
+
|
212 |
+
BackWPup_Option::update( $jobid, 's3accesskey', isset( $_POST[ 's3accesskey' ] ) ? $_POST[ 's3accesskey' ] : '' );
|
213 |
+
BackWPup_Option::update( $jobid, 's3secretkey', isset( $_POST[ 's3secretkey' ] ) ? BackWPup_Encryption::encrypt( $_POST[ 's3secretkey' ] ) : '' );
|
214 |
+
BackWPup_Option::update( $jobid, 's3base_url', isset( $_POST[ 's3base_url' ] ) ? esc_url_raw( $_POST[ 's3base_url' ] ) : '' );
|
215 |
+
BackWPup_Option::update( $jobid, 's3region', isset( $_POST[ 's3region' ] ) ? $_POST[ 's3region' ] : '' );
|
216 |
+
BackWPup_Option::update( $jobid, 's3storageclass', isset( $_POST[ 's3storageclass' ] ) ? $_POST[ 's3storageclass' ] : '' );
|
217 |
+
BackWPup_Option::update( $jobid, 's3ssencrypt', ( isset( $_POST[ 's3ssencrypt' ] ) && $_POST[ 's3ssencrypt' ] == 'AES256' ) ? 'AES256' : '' );
|
218 |
+
BackWPup_Option::update( $jobid, 's3bucket', isset( $_POST[ 's3bucket' ] ) ? $_POST[ 's3bucket' ] : '' );
|
219 |
+
|
220 |
+
$_POST[ 's3dir' ] = trailingslashit( str_replace( '//', '/', str_replace( '\\', '/', trim( stripslashes( $_POST[ 's3dir' ] ) ) ) ) );
|
221 |
+
if ( substr( $_POST[ 's3dir' ], 0, 1 ) == '/' )
|
222 |
+
$_POST[ 's3dir' ] = substr( $_POST[ 's3dir' ], 1 );
|
223 |
+
if ( $_POST[ 's3dir' ] == '/' )
|
224 |
+
$_POST[ 's3dir' ] = '';
|
225 |
+
BackWPup_Option::update( $jobid, 's3dir', $_POST[ 's3dir' ] );
|
226 |
+
|
227 |
+
BackWPup_Option::update( $jobid, 's3maxbackups', isset( $_POST[ 's3maxbackups' ] ) ? (int)$_POST[ 's3maxbackups' ] : 0 );
|
228 |
+
BackWPup_Option::update( $jobid, 's3syncnodelete', ( isset( $_POST[ 's3syncnodelete' ] ) && $_POST[ 's3syncnodelete' ] == 1 ) ? TRUE : FALSE );
|
229 |
+
BackWPup_Option::update( $jobid, 's3multipart', ( isset( $_POST[ 's3multipart' ] ) && $_POST[ 's3multipart' ] == 1 ) ? TRUE : FALSE );
|
230 |
+
|
231 |
+
//create new bucket
|
232 |
+
if ( !empty( $_POST[ 's3newbucket' ] ) ) {
|
233 |
+
try {
|
234 |
+
$s3 = Aws\S3\S3Client::factory( array( 'key' => $_POST[ 's3accesskey' ],
|
235 |
+
'secret' => $_POST[ 's3secretkey' ],
|
236 |
+
'region' => $_POST[ 's3region' ],
|
237 |
+
'base_url' => $this->get_s3_base_url( $_POST[ 's3region' ], $_POST[ 's3base_url' ]),
|
238 |
+
'scheme' => 'https',
|
239 |
+
'ssl.certificate_authority' => BackWPup::get_plugin_data( 'cacert' ) ) );
|
240 |
+
// set bucket creation region
|
241 |
+
if ( $_POST[ 's3region' ] == 'google-storage' || $_POST[ 's3region' ] == 'hosteurope' )
|
242 |
+
$region = 'EU';
|
243 |
+
else
|
244 |
+
$region = $_POST[ 's3region' ];
|
245 |
+
|
246 |
+
if ($s3->isValidBucketName( $_POST[ 's3newbucket' ] ) ) {
|
247 |
+
$bucket = $s3->createBucket( array(
|
248 |
+
'Bucket' => $_POST[ 's3newbucket' ] ,
|
249 |
+
'LocationConstraint' => $region
|
250 |
+
) );
|
251 |
+
$s3->waitUntil('bucket_exists', $_POST[ 's3newbucket' ]);
|
252 |
+
if ( $bucket->get( 'Location' ) )
|
253 |
+
BackWPup_Admin::message( sprintf( __( 'Bucket %1$s created in %2$s.','backwpup'), $_POST[ 's3newbucket' ], $bucket->get( 'Location' ) ) );
|
254 |
+
else
|
255 |
+
BackWPup_Admin::message( sprintf( __( 'Bucket %s could not be created.','backwpup'), $_POST[ 's3newbucket' ] ), TRUE );
|
256 |
+
} else {
|
257 |
+
BackWPup_Admin::message( sprintf( __( ' %s is not a valid bucket name.','backwpup'), $_POST[ 's3newbucket' ] ), TRUE );
|
258 |
+
}
|
259 |
+
}
|
260 |
+
catch ( Aws\S3\Exception\S3Exception $e ) {
|
261 |
+
BackWPup_Admin::message( $e->getMessage(), TRUE );
|
262 |
+
}
|
263 |
+
BackWPup_Option::update( $jobid, 's3bucket', $_POST[ 's3newbucket' ] );
|
264 |
+
}
|
265 |
+
}
|
266 |
+
|
267 |
+
/**
|
268 |
+
* @param $jobdest
|
269 |
+
* @param $backupfile
|
270 |
+
*/
|
271 |
+
public function file_delete( $jobdest, $backupfile ) {
|
272 |
+
|
273 |
+
$files = get_site_transient( 'backwpup_'. strtolower( $jobdest ), array() );
|
274 |
+
list( $jobid, $dest ) = explode( '_', $jobdest );
|
275 |
+
|
276 |
+
if ( BackWPup_Option::get( $jobid, 's3accesskey' ) && BackWPup_Option::get( $jobid, 's3secretkey' ) && BackWPup_Option::get( $jobid, 's3bucket' ) ) {
|
277 |
+
try {
|
278 |
+
$s3 = Aws\S3\S3Client::factory( array( 'key' => BackWPup_Option::get( $jobid, 's3accesskey' ),
|
279 |
+
'secret' => BackWPup_Encryption::decrypt( BackWPup_Option::get( $jobid, 's3secretkey' ) ),
|
280 |
+
'region' => BackWPup_Option::get( $jobid, 's3region' ),
|
281 |
+
'base_url' => $this->get_s3_base_url( BackWPup_Option::get( $jobid, 's3region' ), BackWPup_Option::get( $jobid, 's3base_url' ) ),
|
282 |
+
'scheme' => 'https',
|
283 |
+
'ssl.certificate_authority' => BackWPup::get_plugin_data( 'cacert' ) ) );
|
284 |
+
|
285 |
+
$s3->deleteObject( array(
|
286 |
+
'Bucket' => BackWPup_Option::get( $jobid, 's3bucket' ),
|
287 |
+
'Key' => $backupfile
|
288 |
+
) );
|
289 |
+
//update file list
|
290 |
+
foreach ( $files as $key => $file ) {
|
291 |
+
if ( is_array( $file ) && $file[ 'file' ] == $backupfile )
|
292 |
+
unset( $files[ $key ] );
|
293 |
+
}
|
294 |
+
unset( $s3 );
|
295 |
+
}
|
296 |
+
catch ( Exception $e ) {
|
297 |
+
BackWPup_Admin::message( sprintf( __('S3 Service API: %s','backwpup'), $e->getMessage() ), TRUE );
|
298 |
+
}
|
299 |
+
}
|
300 |
+
|
301 |
+
set_site_transient( 'backwpup_'. strtolower( $jobdest ), $files, 60 * 60 * 24 * 7 );
|
302 |
+
}
|
303 |
+
|
304 |
+
/**
|
305 |
+
* @param $jobid
|
306 |
+
* @param $get_file
|
307 |
+
*/
|
308 |
+
public function file_download( $jobid, $get_file ) {
|
309 |
+
|
310 |
+
try {
|
311 |
+
$s3 = Aws\S3\S3Client::factory( array( 'key' => BackWPup_Option::get( $jobid, 's3accesskey' ),
|
312 |
+
'secret' => BackWPup_Encryption::decrypt( BackWPup_Option::get( $jobid, 's3secretkey' ) ),
|
313 |
+
'region' => BackWPup_Option::get( $jobid, 's3region' ),
|
314 |
+
'base_url' => $this->get_s3_base_url( BackWPup_Option::get( $jobid, 's3region' ), BackWPup_Option::get( $jobid, 's3base_url' ) ),
|
315 |
+
'scheme' => 'https',
|
316 |
+
'ssl.certificate_authority' => BackWPup::get_plugin_data( 'cacert' ) ) );
|
317 |
+
|
318 |
+
$s3file = $s3->getObject( array(
|
319 |
+
'Bucket' => BackWPup_Option::get( $jobid, 's3bucket' ),
|
320 |
+
'Key' => $get_file ) );
|
321 |
+
}
|
322 |
+
catch ( Exception $e ) {
|
323 |
+
die( $e->getMessage() );
|
324 |
+
}
|
325 |
+
|
326 |
+
if ( $s3file[ 'ContentLength' ] > 0 && ! empty( $s3file[ 'ContentType' ] ) ) {
|
327 |
+
header( "Pragma: public" );
|
328 |
+
header( "Expires: 0" );
|
329 |
+
header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );;
|
330 |
+
header( "Content-Type: application/octet-stream" );
|
331 |
+
header( "Content-Disposition: attachment; filename=" . basename( $get_file ) . ";" );
|
332 |
+
header( "Content-Transfer-Encoding: binary" );
|
333 |
+
header( "Content-Length: " . $s3file[ 'ContentLength' ] );
|
334 |
+
@set_time_limit( 300 );
|
335 |
+
$body = $s3file->get( 'Body' );
|
336 |
+
$body->rewind();
|
337 |
+
while ( $filedata = $body->read( 1024 ) ) {
|
338 |
+
echo $filedata;
|
339 |
+
}
|
340 |
+
die();
|
341 |
+
}
|
342 |
+
}
|
343 |
+
|
344 |
+
/**
|
345 |
+
* @param $jobdest
|
346 |
+
* @return mixed
|
347 |
+
*/
|
348 |
+
public function file_get_list( $jobdest ) {
|
349 |
+
|
350 |
+
return get_site_transient( 'backwpup_' . strtolower( $jobdest ) );
|
351 |
+
}
|
352 |
+
|
353 |
+
/**
|
354 |
+
* @param $job_object
|
355 |
+
* @return bool
|
356 |
+
*/
|
357 |
+
public function job_run_archive( &$job_object ) {
|
358 |
+
|
359 |
+
$job_object->substeps_todo = 2 + $job_object->backup_filesize;
|
360 |
+
if ( $job_object->steps_data[ $job_object->step_working ]['SAVE_STEP_TRY'] != $job_object->steps_data[ $job_object->step_working ][ 'STEP_TRY' ] )
|
361 |
+
$job_object->log( sprintf( __( '%d. Trying to send backup file to S3 Service …', 'backwpup' ), $job_object->steps_data[ $job_object->step_working ][ 'STEP_TRY' ] ), E_USER_NOTICE );
|
362 |
+
|
363 |
+
try {
|
364 |
+
$s3 = Aws\S3\S3Client::factory( array( 'key' => $job_object->job[ 's3accesskey' ],
|
365 |
+
'secret' => BackWPup_Encryption::decrypt( $job_object->job[ 's3secretkey' ] ),
|
366 |
+
'region' => $job_object->job[ 's3region' ],
|
367 |
+
'base_url' => $this->get_s3_base_url( $job_object->job[ 's3region' ], $job_object->job[ 's3base_url' ] ),
|
368 |
+
'scheme' => 'https',
|
369 |
+
'ssl.certificate_authority' => BackWPup::get_plugin_data( 'cacert' ) ) );
|
370 |
+
|
371 |
+
if ( $job_object->steps_data[ $job_object->step_working ]['SAVE_STEP_TRY'] != $job_object->steps_data[ $job_object->step_working ][ 'STEP_TRY' ] && $job_object->substeps_done < $job_object->backup_filesize ) {
|
372 |
+
if ( $s3->doesBucketExist( $job_object->job[ 's3bucket' ] ) ) {
|
373 |
+
$bucketregion = $s3->getBucketLocation( array( 'Bucket' => $job_object->job[ 's3bucket' ] ) );
|
374 |
+
$job_object->log( sprintf( __( 'Connected to S3 Bucket "%1$s" in %2$s', 'backwpup' ), $job_object->job[ 's3bucket' ], $bucketregion->get( 'Location' ) ), E_USER_NOTICE );
|
375 |
+
}
|
376 |
+
else {
|
377 |
+
$job_object->log( sprintf( __( 'S3 Bucket "%s" does not exist!', 'backwpup' ), $job_object->job[ 's3bucket' ] ), E_USER_ERROR );
|
378 |
+
|
379 |
+
return TRUE;
|
380 |
+
}
|
381 |
+
|
382 |
+
if ( $job_object->job[ 's3multipart' ] && empty( $job_object->steps_data[ $job_object->step_working ][ 'UploadId' ] ) ) {
|
383 |
+
//Check for aboded Multipart Uploads
|
384 |
+
$job_object->log( __( 'Checking for not aborted multipart Uploads …', 'backwpup' ) );
|
385 |
+
$multipart_uploads = $s3->listMultipartUploads( array( 'Bucket' => $job_object->job[ 's3bucket' ], 'Prefix' => (string) $job_object->job[ 's3dir' ] ) );
|
386 |
+
$uploads = $multipart_uploads->get( 'Uploads' );
|
387 |
+
if ( ! empty( $uploads ) ) {
|
388 |
+
foreach( $uploads as $upload ) {
|
389 |
+
$s3->abortMultipartUpload( array( 'Bucket' => $job_object->job[ 's3bucket' ], 'Key' => $upload[ 'Key' ], 'UploadId' => $upload[ 'UploadId' ] ) );
|
390 |
+
$job_object->log( sprintf( __( 'Upload for %s aborted.', 'backwpup' ), $upload[ 'Key' ] ) );
|
391 |
+
}
|
392 |
+
}
|
393 |
+
}
|
394 |
+
|
395 |
+
//transfer file to S3
|
396 |
+
$job_object->log( __( 'Starting upload to S3 Service …', 'backwpup' ) );
|
397 |
+
}
|
398 |
+
|
399 |
+
|
400 |
+
if ( ! $job_object->job[ 's3multipart' ] ) {
|
401 |
+
//Prepare Upload
|
402 |
+
$create_args = array();
|
403 |
+
$create_args[ 'Bucket' ] = $job_object->job[ 's3bucket' ];
|
404 |
+
$create_args[ 'ACL' ] = 'private';
|
405 |
+
if ( ! empty( $job_object->job[ 's3ssencrypt' ] ) )
|
406 |
+
$create_args[ 'ServerSideEncryption' ] = $job_object->job[ 's3ssencrypt' ]; //AES256
|
407 |
+
if ( ! empty( $job_object->job[ 's3storageclass' ] ) ) //REDUCED_REDUNDANCY
|
408 |
+
$create_args[ 'StorageClass' ] = $job_object->job[ 's3storageclass' ];
|
409 |
+
$create_args[ 'Metadata' ] = array( 'BackupTime' => date_i18n( 'Y-m-d H:i:s', $job_object->start_time ) );
|
410 |
+
|
411 |
+
$create_args[ 'Body' ] = fopen( $job_object->backup_folder . $job_object->backup_file, 'r' );
|
412 |
+
$create_args[ 'Key' ] = $job_object->job[ 's3dir' ] . $job_object->backup_file;
|
413 |
+
$create_args[ 'ContentType' ] = $job_object->get_mime_type( $job_object->backup_folder . $job_object->backup_file );
|
414 |
+
|
415 |
+
try {
|
416 |
+
$s3->putObject( $create_args );
|
417 |
+
} catch ( Aws\Common\Exception\MultipartUploadException $e ) {
|
418 |
+
$job_object->log( E_USER_ERROR, sprintf( __( 'S3 Service API: %s', 'backwpup' ), htmlentities( $e->getMessage() ) ), $e->getFile(), $e->getLine() );
|
419 |
+
|
420 |
+
return FALSE;
|
421 |
+
}
|
422 |
+
} else {
|
423 |
+
//Prepare Upload
|
424 |
+
$job_object->steps_data[ $job_object->step_working ][ 'file_handel' ] = fopen( $job_object->backup_folder . $job_object->backup_file, 'rb' );
|
425 |
+
fseek( $job_object->steps_data[ $job_object->step_working ][ 'file_handel' ], $job_object->substeps_done );
|
426 |
+
|
427 |
+
try {
|
428 |
+
|
429 |
+
if ( empty ( $job_object->steps_data[ $job_object->step_working ][ 'UploadId' ] ) ) {
|
430 |
+
$args = array( 'ACL' => 'private',
|
431 |
+
'Bucket' => $job_object->job[ 's3bucket' ],
|
432 |
+
'ContentType' => $job_object->get_mime_type( $job_object->backup_folder . $job_object->backup_file ),
|
433 |
+
'Key' => $job_object->job[ 's3dir' ] . $job_object->backup_file );
|
434 |
+
if ( !empty( $job_object->job[ 's3ssencrypt' ] ) )
|
435 |
+
$args[ 'ServerSideEncryption' ] = $job_object->job[ 's3ssencrypt' ];
|
436 |
+
if ( !empty( $job_object->job[ 's3storageclass' ] ) )
|
437 |
+
$args[ 'StorageClass' ] = empty( $job_object->job[ 's3storageclass' ] ) ? 'STANDARD' : 'REDUCED_REDUNDANCY';
|
438 |
+
|
439 |
+
$upload = $s3->createMultipartUpload( $args );
|
440 |
+
|
441 |
+
$job_object->steps_data[ $job_object->step_working ][ 'UploadId' ] = $upload->get( 'UploadId' );
|
442 |
+
$job_object->steps_data[ $job_object->step_working ][ 'Parts' ] = array();
|
443 |
+
$job_object->steps_data[ $job_object->step_working ][ 'Part' ] = 1;
|
444 |
+
}
|
445 |
+
|
446 |
+
while ( ! feof( $job_object->steps_data[ $job_object->step_working ][ 'file_handel' ] ) ) {
|
447 |
+
$chunk_upload_start = microtime( TRUE );
|
448 |
+
$part_data = fread( $job_object->steps_data[ $job_object->step_working ][ 'file_handel' ], 1048576 * 5 ); //5MB Minimum part size
|
449 |
+
$part = $s3->uploadPart( array( 'Bucket' => $job_object->job[ 's3bucket' ],
|
450 |
+
'UploadId' => $job_object->steps_data[ $job_object->step_working ][ 'UploadId' ],
|
451 |
+
'Key' => $job_object->job[ 's3dir' ] . $job_object->backup_file,
|
452 |
+
'PartNumber' => $job_object->steps_data[ $job_object->step_working ][ 'Part' ],
|
453 |
+
'Body' => $part_data ) );
|
454 |
+
$chunk_upload_time = microtime( TRUE ) - $chunk_upload_start;
|
455 |
+
$job_object->substeps_done = $job_object->substeps_done + strlen( $part_data );
|
456 |
+
$job_object->steps_data[ $job_object->step_working ][ 'Parts' ][] = array( 'ETag' => $part->get( 'ETag' ),
|
457 |
+
'PartNumber' => $job_object->steps_data[ $job_object->step_working ][ 'Part' ] );
|
458 |
+
$job_object->steps_data[ $job_object->step_working ][ 'Part' ]++;
|
459 |
+
$time_remaining = $job_object->do_restart_time();
|
460 |
+
if ( $time_remaining < $chunk_upload_time )
|
461 |
+
$job_object->do_restart_time( TRUE );
|
462 |
+
$job_object->update_working_data();
|
463 |
+
}
|
464 |
+
|
465 |
+
$s3->completeMultipartUpload( array( 'Bucket' => $job_object->job[ 's3bucket' ],
|
466 |
+
'UploadId' => $job_object->steps_data[ $job_object->step_working ][ 'UploadId' ],
|
467 |
+
'Key' => $job_object->job[ 's3dir' ] . $job_object->backup_file,
|
468 |
+
'Parts' => $job_object->steps_data[ $job_object->step_working ][ 'Parts' ] ) );
|
469 |
+
|
470 |
+
} catch ( Exception $e ) {
|
471 |
+
$job_object->log( E_USER_ERROR, sprintf( __( 'S3 Service API: %s', 'backwpup' ), htmlentities( $e->getMessage() ) ), $e->getFile(), $e->getLine() );
|
472 |
+
if ( ! empty( $job_object->steps_data[ $job_object->step_working ][ 'uploadId' ] ) )
|
473 |
+
$s3->abortMultipartUpload( array( 'Bucket' => $job_object->job[ 's3bucket' ],
|
474 |
+
'UploadId' => $job_object->steps_data[ $job_object->step_working ][ 'uploadId' ],
|
475 |
+
'Key' => $job_object->job[ 's3dir' ] . $job_object->backup_file ) );
|
476 |
+
unset( $job_object->steps_data[ $job_object->step_working ][ 'UploadId' ] );
|
477 |
+
unset( $job_object->steps_data[ $job_object->step_working ][ 'Parts' ] );
|
478 |
+
unset( $job_object->steps_data[ $job_object->step_working ][ 'Part' ] );
|
479 |
+
$job_object->substeps_done = 0;
|
480 |
+
if ( is_resource( $job_object->steps_data[ $job_object->step_working ][ 'file_handel' ] ) )
|
481 |
+
fclose( $job_object->steps_data[ $job_object->step_working ][ 'file_handel' ] );
|
482 |
+
return FALSE;
|
483 |
+
}
|
484 |
+
fclose( $job_object->steps_data[ $job_object->step_working ][ 'file_handel' ] );
|
485 |
+
}
|
486 |
+
|
487 |
+
$result = $s3->headObject( array( 'Bucket' => $job_object->job[ 's3bucket' ],
|
488 |
+
'Key' => $job_object->job[ 's3dir' ] . $job_object->backup_file) );
|
489 |
+
|
490 |
+
if ( $result->get( 'ContentLength' ) == filesize( $job_object->backup_folder . $job_object->backup_file ) ) {
|
491 |
+
$job_object->substeps_done = 1 + $job_object->backup_filesize;
|
492 |
+
$job_object->log( sprintf( __( 'Backup transferred to %s.', 'backwpup' ), $this->get_s3_base_url( $job_object->job[ 's3region' ], $job_object->job[ 's3base_url' ] ). '/' .$job_object->job[ 's3bucket' ] . '/' . $job_object->job[ 's3dir' ] . $job_object->backup_file ), E_USER_NOTICE );
|
493 |
+
if ( ! empty( $job_object->job[ 'jobid' ] ) )
|
494 |
+
BackWPup_Option::update( $job_object->job[ 'jobid' ], 'lastbackupdownloadurl', network_admin_url( 'admin.php' ) . '?page=backwpupbackups&action=downloads3&file=' . $job_object->job[ 's3dir' ] . $job_object->backup_file . '&jobid=' . $job_object->job[ 'jobid' ] );
|
495 |
+
}
|
496 |
+
else {
|
497 |
+
$job_object->log( sprintf( __( 'Cannot transfer backup to S3! (%1$d) %2$s', 'backwpup' ), $result->get( "status" ), $result->get( "Message" ) ), E_USER_ERROR );
|
498 |
+
}
|
499 |
+
}
|
500 |
+
catch ( Exception $e ) {
|
501 |
+
$job_object->log( E_USER_ERROR, sprintf( __( 'S3 Service API: %s', 'backwpup' ), htmlentities( $e->getMessage() ) ), $e->getFile(), $e->getLine() );
|
502 |
+
|
503 |
+
return FALSE;
|
504 |
+
}
|
505 |
+
|
506 |
+
try {
|
507 |
+
$backupfilelist = array();
|
508 |
+
$filecounter = 0;
|
509 |
+
$files = array();
|
510 |
+
$args = array(
|
511 |
+
'Bucket' => $job_object->job[ 's3bucket' ],
|
512 |
+
'Prefix' => (string) $job_object->job[ 's3dir' ]
|
513 |
+
);
|
514 |
+
$objects = $s3->getIterator('ListObjects', $args );
|
515 |
+
if ( is_object( $objects ) ) {
|
516 |
+
foreach ( $objects as $object ) {
|
517 |
+
$file = basename( $object[ 'Key' ] );
|
518 |
+
$changetime = strtotime( $object[ 'LastModified' ] ) + ( get_option( 'gmt_offset' ) * 3600 );
|
519 |
+
if ( $job_object->is_backup_archive( $file ) )
|
520 |
+
$backupfilelist[ $changetime ] = $file;
|
521 |
+
$files[ $filecounter ][ 'folder' ] = $this->get_s3_base_url( $job_object->job[ 's3region' ], $job_object->job[ 's3base_url' ] ). '/' .$job_object->job[ 's3bucket' ] . '/' . dirname( $object[ 'Key' ] );
|
522 |
+
$files[ $filecounter ][ 'file' ] = $object[ 'Key' ];
|
523 |
+
$files[ $filecounter ][ 'filename' ] = basename( $object[ 'Key' ] );
|
524 |
+
if ( ! empty( $object[ 'StorageClass' ] ) )
|
525 |
+
$files[ $filecounter ][ 'info' ] = sprintf( __('Storage Class: %s', 'backwpup' ), $object[ 'StorageClass' ] );
|
526 |
+
$files[ $filecounter ][ 'downloadurl' ] = network_admin_url( 'admin.php' ) . '?page=backwpupbackups&action=downloads3&file=' . $object[ 'Key' ] . '&jobid=' . $job_object->job[ 'jobid' ];
|
527 |
+
$files[ $filecounter ][ 'filesize' ] = $object[ 'Size' ];
|
528 |
+
$files[ $filecounter ][ 'time' ] = $changetime;
|
529 |
+
$filecounter ++;
|
530 |
+
}
|
531 |
+
}
|
532 |
+
if ( $job_object->job[ 's3maxbackups' ] > 0 && is_object( $s3 ) ) { //Delete old backups
|
533 |
+
if ( count( $backupfilelist ) > $job_object->job[ 's3maxbackups' ] ) {
|
534 |
+
ksort( $backupfilelist );
|
535 |
+
$numdeltefiles = 0;
|
536 |
+
while ( $file = array_shift( $backupfilelist ) ) {
|
537 |
+
if ( count( $backupfilelist ) < $job_object->job[ 's3maxbackups' ] )
|
538 |
+
break;
|
539 |
+
//delete files on S3
|
540 |
+
$args = array(
|
541 |
+
'Bucket' => $job_object->job[ 's3bucket' ],
|
542 |
+
'Key' => $job_object->job[ 's3dir' ] . $file
|
543 |
+
);
|
544 |
+
if ( $s3->deleteObject( $args ) ) {
|
545 |
+
foreach ( $files as $key => $filedata ) {
|
546 |
+
if ( $filedata[ 'file' ] == $job_object->job[ 's3dir' ] . $file )
|
547 |
+
unset( $files[ $key ] );
|
548 |
+
}
|
549 |
+
$numdeltefiles ++;
|
550 |
+
} else {
|
551 |
+
$job_object->log( sprintf( __( 'Cannot delete backup from %s.', 'backwpup' ), $this->get_s3_base_url( $job_object->job[ 's3region' ], $job_object->job[ 's3base_url' ] ). '/' .$job_object->job[ 's3bucket' ] . '/' . $job_object->job[ 's3dir' ] . $file ), E_USER_ERROR );
|
552 |
+
}
|
553 |
+
}
|
554 |
+
if ( $numdeltefiles > 0 )
|
555 |
+
$job_object->log( sprintf( _n( 'One file deleted on S3 Bucket.', '%d files deleted on S3 Bucket', $numdeltefiles, 'backwpup' ), $numdeltefiles ), E_USER_NOTICE );
|
556 |
+
}
|
557 |
+
}
|
558 |
+
set_site_transient( 'backwpup_' . $job_object->job[ 'jobid' ] . '_s3', $files, 60 * 60 * 24 * 7 );
|
559 |
+
}
|
560 |
+
catch ( Exception $e ) {
|
561 |
+
$job_object->log( E_USER_ERROR, sprintf( __( 'S3 Service API: %s', 'backwpup' ), htmlentities( $e->getMessage() ) ), $e->getFile(), $e->getLine() );
|
562 |
+
|
563 |
+
return FALSE;
|
564 |
+
}
|
565 |
+
$job_object->substeps_done = 2 + $job_object->backup_filesize;
|
566 |
+
|
567 |
+
return TRUE;
|
568 |
+
}
|
569 |
+
|
570 |
+
|
571 |
+
/**
|
572 |
+
* @param $job_object
|
573 |
+
* @return bool
|
574 |
+
*/
|
575 |
+
public function can_run( $job_object ) {
|
576 |
+
|
577 |
+
if ( empty( $job_object->job[ 's3accesskey' ] ) )
|
578 |
+
return FALSE;
|
579 |
+
|
580 |
+
if ( empty( $job_object->job[ 's3secretkey' ] ) )
|
581 |
+
return FALSE;
|
582 |
+
|
583 |
+
if ( empty( $job_object->job[ 's3bucket' ] ) )
|
584 |
+
return FALSE;
|
585 |
+
|
586 |
+
return TRUE;
|
587 |
+
}
|
588 |
+
|
589 |
+
/**
|
590 |
+
*
|
591 |
+
*/
|
592 |
+
public function edit_inline_js() {
|
593 |
+
//<script type="text/javascript">
|
594 |
+
?>
|
595 |
+
function awsgetbucket() {
|
596 |
+
var data = {
|
597 |
+
action: 'backwpup_dest_s3',
|
598 |
+
s3accesskey: $('input[name="s3accesskey"]').val(),
|
599 |
+
s3secretkey: $('input[name="s3secretkey"]').val(),
|
600 |
+
s3bucketselected: $('input[name="s3bucketselected"]').val(),
|
601 |
+
s3base_url: $('input[name="s3base_url"]').val(),
|
602 |
+
s3region: $('#s3region').val(),
|
603 |
+
_ajax_nonce: $('#backwpupajaxnonce').val()
|
604 |
+
};
|
605 |
+
$.post(ajaxurl, data, function(response) {
|
606 |
+
$('#s3bucketerror').remove();
|
607 |
+
$('#s3bucket').remove();
|
608 |
+
$('#s3bucketselected').after(response);
|
609 |
+
});
|
610 |
+
}
|
611 |
+
$('input[name="s3accesskey"]').change(function() {awsgetbucket();});
|
612 |
+
$('input[name="s3secretkey"]').change(function() {awsgetbucket();});
|
613 |
+
$('input[name="s3base_url"]').change(function() {awsgetbucket();});
|
614 |
+
$('#s3region').change(function() {awsgetbucket();});
|
615 |
+
<?php
|
616 |
+
}
|
617 |
+
|
618 |
+
/**
|
619 |
+
* @param string $args
|
620 |
+
*/
|
621 |
+
public function edit_ajax( $args = '' ) {
|
622 |
+
|
623 |
+
$error = '';
|
624 |
+
|
625 |
+
if ( is_array( $args ) ) {
|
626 |
+
$ajax = FALSE;
|
627 |
+
}
|
628 |
+
else {
|
629 |
+
if ( ! current_user_can( 'backwpup_jobs_edit' ) )
|
630 |
+
wp_die( -1 );
|
631 |
+
check_ajax_referer( 'backwpup_ajax_nonce' );
|
632 |
+
$args[ 's3accesskey' ] = $_POST[ 's3accesskey' ];
|
633 |
+
$args[ 's3secretkey' ] = $_POST[ 's3secretkey' ];
|
634 |
+
$args[ 's3bucketselected' ] = $_POST[ 's3bucketselected' ];
|
635 |
+
$args[ 's3base_url' ] = $_POST[ 's3base_url' ];
|
636 |
+
$args[ 's3region' ] = $_POST[ 's3region' ];
|
637 |
+
$ajax = TRUE;
|
638 |
+
}
|
639 |
+
echo '<span id="s3bucketerror" style="color:red;">';
|
640 |
+
|
641 |
+
if ( ! empty( $args[ 's3accesskey' ] ) && ! empty( $args[ 's3secretkey' ] ) ) {
|
642 |
+
try {
|
643 |
+
$s3 = Aws\S3\S3Client::factory( array( 'key' => $args[ 's3accesskey' ],
|
644 |
+
'secret' => BackWPup_Encryption::decrypt( $args[ 's3secretkey' ] ),
|
645 |
+
'region' => $args[ 's3region' ],
|
646 |
+
'base_url' => $this->get_s3_base_url( $args[ 's3region' ], $args[ 's3base_url' ]),
|
647 |
+
'scheme' => 'https',
|
648 |
+
'ssl.certificate_authority' => BackWPup::get_plugin_data( 'cacert' ) ) );
|
649 |
+
|
650 |
+
$buckets = $s3->listBuckets();
|
651 |
+
}
|
652 |
+
catch ( Exception $e ) {
|
653 |
+
$error = $e->getMessage();
|
654 |
+
}
|
655 |
+
}
|
656 |
+
|
657 |
+
if ( empty( $args[ 's3accesskey' ] ) )
|
658 |
+
_e( 'Missing access key!', 'backwpup' );
|
659 |
+
elseif ( empty( $args[ 's3secretkey' ] ) )
|
660 |
+
_e( 'Missing secret access key!', 'backwpup' );
|
661 |
+
elseif ( ! empty( $error ) && $error == 'Access Denied' )
|
662 |
+
echo '<input type="text" name="s3bucket" id="s3bucket" value="' . esc_attr( $args[ 's3bucketselected' ] ) . '" >';
|
663 |
+
elseif ( ! empty( $error ) )
|
664 |
+
echo esc_html( $error );
|
665 |
+
elseif ( ! isset( $buckets ) || count( $buckets['Buckets'] ) < 1 )
|
666 |
+
_e( 'No bucket found!', 'backwpup' );
|
667 |
+
echo '</span>';
|
668 |
+
|
669 |
+
if ( !empty( $buckets['Buckets'] ) ) {
|
670 |
+
echo '<select name="s3bucket" id="s3bucket">';
|
671 |
+
foreach ( $buckets['Buckets'] as $bucket ) {
|
672 |
+
echo "<option " . selected( $args[ 's3bucketselected' ], esc_attr( $bucket['Name'] ), FALSE ) . ">" . esc_attr( $bucket['Name'] ) . "</option>";
|
673 |
+
}
|
674 |
+
echo '</select>';
|
675 |
+
}
|
676 |
+
|
677 |
+
if ( $ajax )
|
678 |
+
die();
|
679 |
+
}
|
680 |
+
}
|
inc/class-job.php
CHANGED
@@ -391,7 +391,7 @@ final class BackWPup_Job {
|
|
391 |
public static function get_jobrun_url( $starttype, $jobid = 0 ) {
|
392 |
|
393 |
|
394 |
-
$wp_admin_user = get_users( array( 'role' => '
|
395 |
$url = site_url( 'wp-cron.php' );
|
396 |
$header = array();
|
397 |
$authurl = '';
|
@@ -1116,8 +1116,15 @@ final class BackWPup_Job {
|
|
1116 |
$in_file = str_replace( str_replace( '\\', '/', ABSPATH ), '', str_replace( '\\', '/', $args[ 2 ] ) );
|
1117 |
|
1118 |
//print message to cli
|
1119 |
-
if (
|
1120 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1121 |
//log line
|
1122 |
$timestamp = '<span datetime="' . date_i18n( 'c' ) . '" title="[Type: ' . $args[ 0 ] . '|Line: ' . $args[ 3 ] . '|File: ' . $in_file . '|Mem: ' . size_format( @memory_get_usage( TRUE ), 2 ) . '|Mem Max: ' . size_format( @memory_get_peak_usage( TRUE ), 2 ) . '|Mem Limit: ' . ini_get( 'memory_limit' ) . '|PID: ' . self::get_pid() . ' | UniqID: ' . $this->uniqid . '|Query\'s: ' . get_num_queries() . ']">[' . date_i18n( 'd-M-Y H:i:s' ) . ']</span> ';
|
1123 |
//set last Message
|
@@ -1960,10 +1967,11 @@ final class BackWPup_Job {
|
|
1960 |
if ( ! empty( $suffix ) && substr( $suffix, 0, 1 ) != '.' )
|
1961 |
$suffix = '.' . $suffix;
|
1962 |
|
1963 |
-
$name = str_replace( $datevars, $datevalues, sanitize_file_name( $name ) );
|
1964 |
-
$name .= $suffix;
|
1965 |
-
if ( $delete_temp_file && is_writeable( BackWPup::get_plugin_data( 'TEMP' ) . $name ) && !is_dir( BackWPup::get_plugin_data( 'TEMP' ) . $name ) && !is_link( BackWPup::get_plugin_data( 'TEMP' ) . $name ) )
|
1966 |
unlink( BackWPup::get_plugin_data( 'TEMP' ) . $name );
|
|
|
1967 |
|
1968 |
return $name;
|
1969 |
}
|
@@ -1974,7 +1982,7 @@ final class BackWPup_Job {
|
|
1974 |
*/
|
1975 |
public function is_backup_archive( $filename ) {
|
1976 |
|
1977 |
-
$filename
|
1978 |
|
1979 |
if ( ! substr( $filename, -3 ) == '.gz' || ! substr( $filename, -4 ) == '.bz2' || ! substr( $filename, -4 ) == '.tar' || ! substr( $filename, -4 ) == '.zip' )
|
1980 |
return FALSE;
|
@@ -1984,7 +1992,7 @@ final class BackWPup_Job {
|
|
1984 |
$datevars = array( '%d', '%j', '%m', '%n', '%Y', '%y', '%a', '%A', '%B', '%g', '%G', '%h', '%H', '%i', '%s' );
|
1985 |
$dateregex = array( '(0[1-9]|[12][0-9]|3[01])', '([1-9]|[12][0-9]|3[01])', '(0[1-9]|1[012])', '([1-9]|1[012])', '((19|20|21)[0-9]{2})', '([0-9]{2})', '(am|pm)', '(AM|PM)', '([0-9]{3})', '([1-9]|1[012])', '([0-9]|1[0-9]|2[0-3])', '(0[1-9]|1[012])', '(0[0-9]|1[0-9]|2[0-3])', '([0-5][0-9])', '([0-5][0-9])' );
|
1986 |
|
1987 |
-
$regex = "/^" . str_replace( $datevars, $dateregex,
|
1988 |
|
1989 |
preg_match( $regex, $filename, $matches );
|
1990 |
if ( ! empty( $matches[ 0 ] ) && $matches[ 0 ] == $filename )
|
@@ -1993,6 +2001,28 @@ final class BackWPup_Job {
|
|
1993 |
return FALSE;
|
1994 |
}
|
1995 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1996 |
/**
|
1997 |
* Get the Process id of working script
|
1998 |
*
|
391 |
public static function get_jobrun_url( $starttype, $jobid = 0 ) {
|
392 |
|
393 |
|
394 |
+
$wp_admin_user = get_users( array( 'role' => 'backwpup_admin', 'number' => 1 ) ); //get a user for cookie auth
|
395 |
$url = site_url( 'wp-cron.php' );
|
396 |
$header = array();
|
397 |
$authurl = '';
|
1116 |
$in_file = str_replace( str_replace( '\\', '/', ABSPATH ), '', str_replace( '\\', '/', $args[ 2 ] ) );
|
1117 |
|
1118 |
//print message to cli
|
1119 |
+
if ( defined( 'WP_CLI' ) && WP_CLI ) {
|
1120 |
+
if ( $error_or_warning ) {
|
1121 |
+
WP_CLI::warning( '[' . date_i18n( 'd-M-Y H:i:s' ) . '] ' . strip_tags( $messagetype ) . str_replace( array( '…', ' ' ), array( '...', ' ' ), strip_tags( $args[ 1 ] ) ) );
|
1122 |
+
} else {
|
1123 |
+
WP_CLI::log( '[' . date_i18n( 'd-M-Y H:i:s' ) . '] ' . strip_tags( $messagetype ) . str_replace( array( '…', ' ' ), array( '...', ' ' ), strip_tags( $args[ 1 ] ) ) );
|
1124 |
+
}
|
1125 |
+
} elseif ( php_sapi_name() == 'cli' && defined( 'STDOUT' ) ) {
|
1126 |
+
fwrite( STDOUT, '[' . date_i18n( 'd-M-Y H:i:s' ) . '] ' . strip_tags( $messagetype ) . str_replace( array( '…', ' ' ), array( '...', ' ' ), strip_tags( $args[ 1 ] ) ) . PHP_EOL ) ;
|
1127 |
+
}
|
1128 |
//log line
|
1129 |
$timestamp = '<span datetime="' . date_i18n( 'c' ) . '" title="[Type: ' . $args[ 0 ] . '|Line: ' . $args[ 3 ] . '|File: ' . $in_file . '|Mem: ' . size_format( @memory_get_usage( TRUE ), 2 ) . '|Mem Max: ' . size_format( @memory_get_peak_usage( TRUE ), 2 ) . '|Mem Limit: ' . ini_get( 'memory_limit' ) . '|PID: ' . self::get_pid() . ' | UniqID: ' . $this->uniqid . '|Query\'s: ' . get_num_queries() . ']">[' . date_i18n( 'd-M-Y H:i:s' ) . ']</span> ';
|
1130 |
//set last Message
|
1967 |
if ( ! empty( $suffix ) && substr( $suffix, 0, 1 ) != '.' )
|
1968 |
$suffix = '.' . $suffix;
|
1969 |
|
1970 |
+
$name = str_replace( $datevars, $datevalues, self::sanitize_file_name( $name ) );
|
1971 |
+
$name .= $suffix;
|
1972 |
+
if ( $delete_temp_file && is_writeable( BackWPup::get_plugin_data( 'TEMP' ) . $name ) && !is_dir( BackWPup::get_plugin_data( 'TEMP' ) . $name ) && !is_link( BackWPup::get_plugin_data( 'TEMP' ) . $name ) ) {
|
1973 |
unlink( BackWPup::get_plugin_data( 'TEMP' ) . $name );
|
1974 |
+
}
|
1975 |
|
1976 |
return $name;
|
1977 |
}
|
1982 |
*/
|
1983 |
public function is_backup_archive( $filename ) {
|
1984 |
|
1985 |
+
$filename = basename( $filename );
|
1986 |
|
1987 |
if ( ! substr( $filename, -3 ) == '.gz' || ! substr( $filename, -4 ) == '.bz2' || ! substr( $filename, -4 ) == '.tar' || ! substr( $filename, -4 ) == '.zip' )
|
1988 |
return FALSE;
|
1992 |
$datevars = array( '%d', '%j', '%m', '%n', '%Y', '%y', '%a', '%A', '%B', '%g', '%G', '%h', '%H', '%i', '%s' );
|
1993 |
$dateregex = array( '(0[1-9]|[12][0-9]|3[01])', '([1-9]|[12][0-9]|3[01])', '(0[1-9]|1[012])', '([1-9]|1[012])', '((19|20|21)[0-9]{2})', '([0-9]{2})', '(am|pm)', '(AM|PM)', '([0-9]{3})', '([1-9]|1[012])', '([0-9]|1[0-9]|2[0-3])', '(0[1-9]|1[012])', '(0[0-9]|1[0-9]|2[0-3])', '([0-5][0-9])', '([0-5][0-9])' );
|
1994 |
|
1995 |
+
$regex = "/^" . str_replace( $datevars, $dateregex, self::sanitize_file_name( $this->job[ 'archivename' ] ) ) . "$/";
|
1996 |
|
1997 |
preg_match( $regex, $filename, $matches );
|
1998 |
if ( ! empty( $matches[ 0 ] ) && $matches[ 0 ] == $filename )
|
2001 |
return FALSE;
|
2002 |
}
|
2003 |
|
2004 |
+
/**
|
2005 |
+
* Sanitizes a filename, replacing whitespace with underscores.
|
2006 |
+
*
|
2007 |
+
* @param $filename
|
2008 |
+
*
|
2009 |
+
* @return mixed
|
2010 |
+
*/
|
2011 |
+
public static function sanitize_file_name( $filename ) {
|
2012 |
+
|
2013 |
+
$filename = trim( $filename );
|
2014 |
+
|
2015 |
+
$special_chars = array( "?", "[", "]", "/", "\\", "=", "<", ">", ":", ";", ",", "'", "\"", "&", "$", "#", "*", "(", ")", "|", "~", "`", "!", "{", "}", chr(0) );
|
2016 |
+
|
2017 |
+
$filename = str_replace( $special_chars, '', $filename );
|
2018 |
+
|
2019 |
+
$filename = str_replace( array( ' ', '%20', '+' ), '_', $filename );
|
2020 |
+
$filename = str_replace( array( "\n", "\t", "\r" ), '-', $filename );
|
2021 |
+
$filename = trim( $filename, '.-_' );
|
2022 |
+
|
2023 |
+
return $filename;
|
2024 |
+
}
|
2025 |
+
|
2026 |
/**
|
2027 |
* Get the Process id of working script
|
2028 |
*
|
inc/class-jobtype-dbdump.php
CHANGED
@@ -123,7 +123,7 @@ class BackWPup_JobType_DBDump extends BackWPup_JobTypes {
|
|
123 |
|
124 |
if ( $_POST[ 'dbdumpfilecompression' ] == '' || $_POST[ 'dbdumpfilecompression' ] == '.gz' )
|
125 |
BackWPup_Option::update( $id, 'dbdumpfilecompression', $_POST[ 'dbdumpfilecompression' ] );
|
126 |
-
BackWPup_Option::update( $id, 'dbdumpfile',
|
127 |
//selected tables
|
128 |
$dbdumpexclude = array();
|
129 |
$checked_db_tables = array();
|
123 |
|
124 |
if ( $_POST[ 'dbdumpfilecompression' ] == '' || $_POST[ 'dbdumpfilecompression' ] == '.gz' )
|
125 |
BackWPup_Option::update( $id, 'dbdumpfilecompression', $_POST[ 'dbdumpfilecompression' ] );
|
126 |
+
BackWPup_Option::update( $id, 'dbdumpfile', BackWPup_Job::sanitize_file_name( $_POST[ 'dbdumpfile' ] ) );
|
127 |
//selected tables
|
128 |
$dbdumpexclude = array();
|
129 |
$checked_db_tables = array();
|
inc/class-jobtype-wpexp.php
CHANGED
@@ -1,719 +1,719 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
*
|
4 |
-
*/
|
5 |
-
class BackWPup_JobType_WPEXP extends BackWPup_JobTypes {
|
6 |
-
|
7 |
-
/**
|
8 |
-
*
|
9 |
-
*/
|
10 |
-
public function __construct() {
|
11 |
-
|
12 |
-
$this->info[ 'ID' ] = 'WPEXP';
|
13 |
-
$this->info[ 'name' ] = __( 'XML export', 'backwpup' );
|
14 |
-
$this->info[ 'description' ] = __( 'WordPress XML export', 'backwpup' );
|
15 |
-
$this->info[ 'URI' ] = translate( BackWPup::get_plugin_data( 'PluginURI' ), 'backwpup' );
|
16 |
-
$this->info[ 'author' ] = BackWPup::get_plugin_data( 'Author' );
|
17 |
-
$this->info[ 'authorURI' ] = translate( BackWPup::get_plugin_data( 'AuthorURI' ), 'backwpup' );
|
18 |
-
$this->info[ 'version' ] = BackWPup::get_plugin_data( 'Version' );
|
19 |
-
|
20 |
-
}
|
21 |
-
|
22 |
-
/**
|
23 |
-
* @return bool
|
24 |
-
*/
|
25 |
-
public function creates_file() {
|
26 |
-
|
27 |
-
return TRUE;
|
28 |
-
}
|
29 |
-
|
30 |
-
/**
|
31 |
-
* @return array
|
32 |
-
*/
|
33 |
-
public function option_defaults() {
|
34 |
-
return array( 'wpexportcontent' => 'all', 'wpexportfilecompression' => '', 'wpexportfile' => sanitize_file_name( get_bloginfo( 'name' ) ) . '.wordpress.%Y-%m-%d' );
|
35 |
-
}
|
36 |
-
|
37 |
-
|
38 |
-
/**
|
39 |
-
* @param $jobid
|
40 |
-
* @internal param $main
|
41 |
-
*/
|
42 |
-
public function edit_tab( $jobid ) {
|
43 |
-
?>
|
44 |
-
<table class="form-table">
|
45 |
-
<tr>
|
46 |
-
<th scope="row"><?php _e( 'Items to export', 'backwpup' ) ?></th>
|
47 |
-
<td>
|
48 |
-
<fieldset>
|
49 |
-
<label for="idwpexportcontent-all"><input type="radio" name="wpexportcontent" id="idwpexportcontent-all" value="all" <?php checked( BackWPup_Option::get( $jobid, 'wpexportcontent' ), 'all' ); ?> /> <?php _e( 'All content', 'backwpup' ); ?></label><br />
|
50 |
-
<label for="idwpexportcontent-post"><input type="radio" name="wpexportcontent" id="idwpexportcontent-post" value="post" <?php checked( BackWPup_Option::get( $jobid, 'wpexportcontent' ), 'post' ); ?> /> <?php _e( 'Posts', 'backwpup' ); ?></label><br />
|
51 |
-
<label for="idwpexportcontent-page"><input type="radio" name="wpexportcontent" id="idwpexportcontent-page" value="page" <?php checked( BackWPup_Option::get( $jobid, 'wpexportcontent' ), 'page' ); ?> /> <?php _e( 'Pages', 'backwpup' ); ?></label><br />
|
52 |
-
<?php
|
53 |
-
foreach ( get_post_types( array( '_builtin' => FALSE, 'can_export' => TRUE ), 'objects' ) as $post_type ) {
|
54 |
-
?>
|
55 |
-
<label for="idwpexportcontent-<?php echo esc_attr( $post_type->name ); ?>"><input type="radio" name="wpexportcontent" id="idwpexportcontent-<?php echo esc_attr( $post_type->name ); ?>" value="<?php echo esc_attr( $post_type->name ); ?>" <?php checked( BackWPup_Option::get( $jobid, 'wpexportcontent' ), esc_attr( $post_type->name ) ); ?> /> <?php echo esc_html( $post_type->label ); ?></label><br />
|
56 |
-
<?php } ?>
|
57 |
-
</fieldset>
|
58 |
-
</td>
|
59 |
-
</tr>
|
60 |
-
<tr>
|
61 |
-
<th scope="row"><label for="idwpexportfile"><?php _e( 'XML Export file name', 'backwpup' ) ?></label></th>
|
62 |
-
<td>
|
63 |
-
<input name="wpexportfile" type="text" id="idwpexportfile"
|
64 |
-
value="<?php echo BackWPup_Option::get( $jobid, 'wpexportfile' );?>"
|
65 |
-
class="medium-text code"/>.xml
|
66 |
-
</td>
|
67 |
-
</tr>
|
68 |
-
<tr>
|
69 |
-
<th scope="row"><?php _e( 'File compression', 'backwpup' ) ?></th>
|
70 |
-
<td>
|
71 |
-
<fieldset>
|
72 |
-
<?php
|
73 |
-
echo '<label for="idwpexportfilecompression"><input class="radio" type="radio"' . checked( '', BackWPup_Option::get( $jobid, 'wpexportfilecompression' ), FALSE ) . ' name="wpexportfilecompression" id="idwpexportfilecompression" value="" /> ' . __( 'none', 'backwpup' ). '</label><br />';
|
74 |
-
if ( function_exists( 'gzopen' ) )
|
75 |
-
echo '<label for="idwpexportfilecompression-gz"><input class="radio" type="radio"' . checked( '.gz', BackWPup_Option::get( $jobid, 'wpexportfilecompression' ), FALSE ) . ' name="wpexportfilecompression" id="idwpexportfilecompression-gz" value=".gz" /> ' . __( 'GZip', 'backwpup' ). '</label><br />';
|
76 |
-
else
|
77 |
-
echo '<label for="idwpexportfilecompression-gz"><input class="radio" type="radio"' . checked( '.gz', BackWPup_Option::get( $jobid, 'wpexportfilecompression' ), FALSE ) . ' name="wpexportfilecompression" id="idwpexportfilecompression-gz" value=".gz" disabled="disabled" /> ' . __( 'GZip', 'backwpup' ). '</label><br />';
|
78 |
-
if ( function_exists( 'bzopen' ) )
|
79 |
-
echo '<label for="idwpexportfilecompression-bz2"><input class="radio" type="radio"' . checked( '.bz2', BackWPup_Option::get( $jobid, 'wpexportfilecompression' ), FALSE ) . ' name="wpexportfilecompression" id="idwpexportfilecompression-bz2" value=".bz2" /> ' . __( 'BZip2', 'backwpup' ). '</label><br />';
|
80 |
-
else
|
81 |
-
echo '<label for="idwpexportfilecompression-bz2"><input class="radio" type="radio"' . checked( '.bz2', BackWPup_Option::get( $jobid, 'wpexportfilecompression' ), FALSE ) . ' name="wpexportfilecompression" id="idwpexportfilecompression-bz2" value=".bz2" disabled="disabled" /> ' . __( 'BZip2', 'backwpup' ). '</label><br />';
|
82 |
-
?>
|
83 |
-
</fieldset>
|
84 |
-
</td>
|
85 |
-
</tr>
|
86 |
-
</table>
|
87 |
-
<?php
|
88 |
-
}
|
89 |
-
|
90 |
-
/**
|
91 |
-
* @param $id
|
92 |
-
*/
|
93 |
-
public function edit_form_post_save( $id ) {
|
94 |
-
|
95 |
-
BackWPup_Option::update( $id, 'wpexportcontent', $_POST[ 'wpexportcontent' ] );
|
96 |
-
BackWPup_Option::update( $id, 'wpexportfile', sanitize_file_name( $_POST[ 'wpexportfile' ] ) );
|
97 |
-
if ( $_POST[ 'wpexportfilecompression' ] == '' || $_POST[ 'wpexportfilecompression' ] == '.gz' || $_POST[ 'wpexportfilecompression' ] == '.bz2' )
|
98 |
-
BackWPup_Option::update( $id, 'wpexportfilecompression', $_POST[ 'wpexportfilecompression' ] );
|
99 |
-
}
|
100 |
-
|
101 |
-
/**
|
102 |
-
* @param $job_object
|
103 |
-
* @return bool
|
104 |
-
*/
|
105 |
-
public function job_run( &$job_object ) {
|
106 |
-
global $wpdb, $post, $wp_query;
|
107 |
-
|
108 |
-
$wxr_version = '1.2';
|
109 |
-
|
110 |
-
if ( $job_object->steps_data[ $job_object->step_working ]['SAVE_STEP_TRY'] != $job_object->steps_data[ $job_object->step_working ][ 'STEP_TRY' ] ) {
|
111 |
-
$job_object->log( sprintf( __( '%d. Trying to create a WordPress export to XML file …', 'backwpup' ), $job_object->steps_data[ $job_object->step_working ][ 'STEP_TRY' ] ) );
|
112 |
-
$job_object->steps_data[ $job_object->step_working ]['wpexportfile'] = BackWPup::get_plugin_data( 'TEMP' ) . $job_object->generate_filename( $job_object->job[ 'wpexportfile' ], 'xml', TRUE );
|
113 |
-
$job_object->steps_data[ $job_object->step_working ]['substep'] = 'header';
|
114 |
-
$job_object->steps_data[ $job_object->step_working ]['post_ids'] = array();
|
115 |
-
$job_object->substeps_todo = 10;
|
116 |
-
$job_object->substeps_done = 0;
|
117 |
-
}
|
118 |
-
|
119 |
-
add_filter( 'wxr_export_skip_postmeta', array( $this, 'wxr_filter_postmeta' ), 10, 2 );
|
120 |
-
|
121 |
-
if ( $job_object->steps_data[ $job_object->step_working ]['substep'] == 'header' ) {
|
122 |
-
|
123 |
-
if ( 'all' != $job_object->job[ 'wpexportcontent' ] && post_type_exists( $job_object->job[ 'wpexportcontent' ] ) ) {
|
124 |
-
$ptype = get_post_type_object( $job_object->job[ 'wpexportcontent' ] );
|
125 |
-
if ( ! $ptype->can_export ) {
|
126 |
-
$job_object->log( sprintf( __( 'WP Export: Post type “%s” does not allow export.', 'backwpup' ), $job_object->job[ 'wpexportcontent' ] ), E_USER_ERROR );
|
127 |
-
return FALSE;
|
128 |
-
}
|
129 |
-
$where = $wpdb->prepare( "{$wpdb->posts}.post_type = %s", $job_object->job[ 'wpexportcontent' ] );
|
130 |
-
} else {
|
131 |
-
$post_types = get_post_types( array( 'can_export' => true ) );
|
132 |
-
$esses = array_fill( 0, count($post_types), '%s' );
|
133 |
-
$where = $wpdb->prepare( "{$wpdb->posts}.post_type IN (" . implode( ',', $esses ) . ')', $post_types );
|
134 |
-
$job_object->job[ 'wpexportcontent' ] = 'all';
|
135 |
-
}
|
136 |
-
$where .= " AND {$wpdb->posts}.post_status != 'auto-draft'";
|
137 |
-
|
138 |
-
// grab a snapshot of post IDs, just in case it changes during the export
|
139 |
-
$job_object->steps_data[ $job_object->step_working ]['post_ids'] = $wpdb->get_col( "SELECT ID FROM {$wpdb->posts} WHERE $where" );
|
140 |
-
$job_object->substeps_todo = $job_object->substeps_todo + count( $job_object->steps_data[ $job_object->step_working ]['post_ids'] );
|
141 |
-
|
142 |
-
$header = '<?xml version="1.0" encoding="' . get_bloginfo('charset') . "\" ?>\n";
|
143 |
-
$header .= "<!-- This is a WordPress eXtended RSS file generated by the WordPress plugin BackWPup as an export of your site. -->\n";
|
144 |
-
$header .= "<!-- It contains information about your site's posts, pages, comments, categories, and other content. -->\n";
|
145 |
-
$header .= "<!-- You may use this file to transfer that content from one site to another. -->\n";
|
146 |
-
$header .= "<!-- This file is not intended to serve as a complete backup of your site. -->\n\n";
|
147 |
-
$header .= "<!-- To import this information into a WordPress site follow these steps: -->\n";
|
148 |
-
$header .= "<!-- 1. Log in to that site as an administrator. -->\n";
|
149 |
-
$header .= "<!-- 2. Go to Tools: Import in the WordPress admin panel. -->\n";
|
150 |
-
$header .= "<!-- 3. Install the \"WordPress\" importer from the list. -->\n";
|
151 |
-
$header .= "<!-- 4. Activate & Run Importer. -->\n";
|
152 |
-
$header .= "<!-- 5. Upload this file using the form provided on that page. -->\n";
|
153 |
-
$header .= "<!-- 6. You will first be asked to map the authors in this export file to users -->\n";
|
154 |
-
$header .= "<!-- on the site. For each author, you may choose to map to an -->\n";
|
155 |
-
$header .= "<!-- existing user on the site or to create a new user. -->\n";
|
156 |
-
$header .= "<!-- 7. WordPress will then import each of the posts, pages, comments, categories, etc. -->\n";
|
157 |
-
$header .= "<!-- contained in this file into your site. -->\n\n";
|
158 |
-
$header .= "<!-- generator=\"WordPress/" . get_bloginfo_rss('version') . "\" created=\"". date('Y-m-d H:i') . "\" -->\n";
|
159 |
-
$header .= "<rss version=\"2.0\" xmlns:excerpt=\"http://wordpress.org/export/$wxr_version/excerpt/\" xmlns:content=\"http://purl.org/rss/1.0/modules/content/\" xmlns:wfw=\"http://wellformedweb.org/CommentAPI/\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:wp=\"http://wordpress.org/export/$wxr_version/\">\n";
|
160 |
-
$header .= "<channel>\n";
|
161 |
-
$header .= "\t<title>" . get_bloginfo_rss( 'name' ) ."</title>\n";
|
162 |
-
$header .= "\t<link>" . get_bloginfo_rss( 'url' ) ."</link>\n";
|
163 |
-
$header .= "\t<description>" . get_bloginfo_rss( 'description' ) ."</description>\n";
|
164 |
-
$header .= "\t<pubDate>" . date( 'D, d M Y H:i:s +0000' ) ."</pubDate>\n";
|
165 |
-
$header .= "\t<language>" . get_bloginfo_rss( 'language' ) ."</language>\n";
|
166 |
-
$header .= "\t<wp:wxr_version>" . $wxr_version ."</wp:wxr_version>\n";
|
167 |
-
$header .= "\t<wp:base_site_url>" . $this->wxr_site_url() ."</wp:base_site_url>\n";
|
168 |
-
$header .= "\t<wp:base_blog_url>" . get_bloginfo_rss( 'url' ) ."</wp:base_blog_url>\n";
|
169 |
-
$written = file_put_contents( $job_object->steps_data[ $job_object->step_working ][ 'wpexportfile' ], $header, FILE_APPEND );
|
170 |
-
if ( $written === FALSE ) {
|
171 |
-
$job_object->log( __( 'WP Export file could not written.', 'backwpup' ), E_USER_ERROR );
|
172 |
-
|
173 |
-
return FALSE;
|
174 |
-
}
|
175 |
-
unset( $header );
|
176 |
-
$job_object->steps_data[ $job_object->step_working ]['substep'] = 'authors';
|
177 |
-
$job_object->substeps_done ++;
|
178 |
-
$job_object->update_working_data();
|
179 |
-
$job_object->do_restart_time();
|
180 |
-
}
|
181 |
-
|
182 |
-
if ( $job_object->steps_data[ $job_object->step_working ]['substep'] == 'authors' ) {
|
183 |
-
$written = file_put_contents( $job_object->steps_data[ $job_object->step_working ][ 'wpexportfile' ], $this->wxr_authors_list(), FILE_APPEND );
|
184 |
-
if ( $written === FALSE ) {
|
185 |
-
$job_object->log( __( 'WP Export file could not written.', 'backwpup' ), E_USER_ERROR );
|
186 |
-
|
187 |
-
return FALSE;
|
188 |
-
}
|
189 |
-
$job_object->steps_data[ $job_object->step_working ]['substep'] = 'cats';
|
190 |
-
$job_object->substeps_done ++;
|
191 |
-
$job_object->update_working_data();
|
192 |
-
$job_object->do_restart_time();
|
193 |
-
}
|
194 |
-
|
195 |
-
|
196 |
-
if ( $job_object->steps_data[ $job_object->step_working ]['substep'] == 'cats' ) {
|
197 |
-
if ( 'all' == $job_object->job[ 'wpexportcontent' ] ) {
|
198 |
-
$cats = array();
|
199 |
-
$categories = (array) get_categories( array( 'get' => 'all' ) );
|
200 |
-
// put categories in order with no child going before its parent
|
201 |
-
while ( $cat = array_shift( $categories ) ) {
|
202 |
-
if ( $cat->parent == 0 || isset( $cats[$cat->parent] ) )
|
203 |
-
$cats[$cat->term_id] = $cat;
|
204 |
-
else
|
205 |
-
$categories[] = $cat;
|
206 |
-
}
|
207 |
-
$cats_xml = '';
|
208 |
-
foreach ( $cats as $c ) {
|
209 |
-
$parent_slug = $c->parent ? $cats[$c->parent]->slug : '';
|
210 |
-
$cats_xml .= "\t<wp:category><wp:term_id>" . $c->term_id ."</wp:term_id><wp:category_nicename>" . $c->slug . "</wp:category_nicename><wp:category_parent>" . $parent_slug . "</wp:category_parent>" . $this->wxr_cat_name( $c ) . $this->wxr_category_description( $c ) ."</wp:category>\n";
|
211 |
-
}
|
212 |
-
$written = file_put_contents( $job_object->steps_data[ $job_object->step_working ][ 'wpexportfile' ], $cats_xml, FILE_APPEND );
|
213 |
-
if ( $written === FALSE ) {
|
214 |
-
$job_object->log( __( 'WP Export file could not written.', 'backwpup' ), E_USER_ERROR );
|
215 |
-
|
216 |
-
return FALSE;
|
217 |
-
}
|
218 |
-
unset( $cats_xml );
|
219 |
-
}
|
220 |
-
$job_object->steps_data[ $job_object->step_working ]['substep'] = 'tags';
|
221 |
-
$job_object->substeps_done ++;
|
222 |
-
$job_object->update_working_data();
|
223 |
-
$job_object->do_restart_time();
|
224 |
-
}
|
225 |
-
|
226 |
-
if ( $job_object->steps_data[ $job_object->step_working ]['substep'] == 'tags' ) {
|
227 |
-
if ( 'all' == $job_object->job[ 'wpexportcontent' ] ) {
|
228 |
-
$tags = (array) get_tags( array( 'get' => 'all' ) );
|
229 |
-
$tags_xml = '';
|
230 |
-
foreach ( $tags as $t ) {
|
231 |
-
$tags_xml .= "\t<wp:tag><wp:term_id>" . $t->term_id ."</wp:term_id><wp:tag_slug>" . $t->slug ."</wp:tag_slug>" . $this->wxr_tag_name( $t ) . $this->wxr_tag_description( $t ) ."</wp:tag>\n";
|
232 |
-
}
|
233 |
-
$written = file_put_contents( $job_object->steps_data[ $job_object->step_working ][ 'wpexportfile' ], $tags_xml, FILE_APPEND );
|
234 |
-
if ( $written === FALSE ) {
|
235 |
-
$job_object->log( __( 'WP Export file could not written.', 'backwpup' ), E_USER_ERROR );
|
236 |
-
|
237 |
-
return FALSE;
|
238 |
-
}
|
239 |
-
unset( $tags_xml );
|
240 |
-
}
|
241 |
-
$job_object->steps_data[ $job_object->step_working ]['substep'] = 'terms';
|
242 |
-
$job_object->substeps_done ++;
|
243 |
-
$job_object->update_working_data();
|
244 |
-
$job_object->do_restart_time();
|
245 |
-
}
|
246 |
-
|
247 |
-
if ( $job_object->steps_data[ $job_object->step_working ]['substep'] == 'terms' ) {
|
248 |
-
if ( 'all' == $job_object->job[ 'wpexportcontent' ] ) {
|
249 |
-
|
250 |
-
$terms = array();
|
251 |
-
$custom_taxonomies = get_taxonomies( array( '_builtin' => false ) );
|
252 |
-
$custom_terms = (array) get_terms( $custom_taxonomies, array( 'get' => 'all' ) );
|
253 |
-
|
254 |
-
// put terms in order with no child going before its parent
|
255 |
-
while ( $t = array_shift( $custom_terms ) ) {
|
256 |
-
if ( $t->parent == 0 || isset( $terms[$t->parent] ) )
|
257 |
-
$terms[$t->term_id] = $t;
|
258 |
-
else
|
259 |
-
$custom_terms[] = $t;
|
260 |
-
}
|
261 |
-
$terms_xml = '';
|
262 |
-
foreach ( $terms as $t ) {
|
263 |
-
$parent_slug = $t->parent ? $terms[$t->parent]->slug : '';
|
264 |
-
$terms_xml .= "\t<wp:term><wp:term_id>" . $t->term_id ."</wp:term_id><wp:term_taxonomy>" . $t->taxonomy . "</wp:term_taxonomy><wp:term_slug>" . $t->slug ."</wp:term_slug><wp:term_parent>" . $parent_slug ."</wp:term_parent>" . $this->wxr_term_name( $t ) . $this->wxr_term_description( $t ) ."</wp:term>\n";
|
265 |
-
}
|
266 |
-
$written = file_put_contents( $job_object->steps_data[ $job_object->step_working ][ 'wpexportfile' ], $terms_xml, FILE_APPEND );
|
267 |
-
if ( $written === FALSE ) {
|
268 |
-
$job_object->log( __( 'WP Export file could not written.', 'backwpup' ), E_USER_ERROR );
|
269 |
-
|
270 |
-
return FALSE;
|
271 |
-
}
|
272 |
-
unset( $terms_xml );
|
273 |
-
}
|
274 |
-
$job_object->steps_data[ $job_object->step_working ]['substep'] = 'menus';
|
275 |
-
$job_object->substeps_done ++;
|
276 |
-
$job_object->update_working_data();
|
277 |
-
$job_object->do_restart_time();
|
278 |
-
}
|
279 |
-
|
280 |
-
if ( $job_object->steps_data[ $job_object->step_working ]['substep'] == 'menus' ) {
|
281 |
-
$menu_xml = '';
|
282 |
-
if ( 'all' == $job_object->job[ 'wpexportcontent' ] ) {
|
283 |
-
$menu_xml .= $this->wxr_nav_menu_terms();
|
284 |
-
}
|
285 |
-
$menu_xml .= "\t<generator>http://wordpress.org/?v=" . get_bloginfo_rss( 'version' ) . "</generator>\n";
|
286 |
-
$written = file_put_contents( $job_object->steps_data[ $job_object->step_working ][ 'wpexportfile' ], $menu_xml, FILE_APPEND );
|
287 |
-
if ( $written === FALSE ) {
|
288 |
-
$job_object->log( __( 'WP Export file could not written.', 'backwpup' ), E_USER_ERROR );
|
289 |
-
|
290 |
-
return FALSE;
|
291 |
-
}
|
292 |
-
unset( $menu_xml );
|
293 |
-
|
294 |
-
$job_object->steps_data[ $job_object->step_working ]['substep'] = 'posts';
|
295 |
-
$job_object->substeps_done ++;
|
296 |
-
$job_object->update_working_data();
|
297 |
-
$job_object->do_restart_time();
|
298 |
-
}
|
299 |
-
|
300 |
-
|
301 |
-
if ( $job_object->steps_data[ $job_object->step_working ]['substep'] == 'posts' ) {
|
302 |
-
|
303 |
-
if ( ! empty( $job_object->steps_data[ $job_object->step_working ]['post_ids'] ) ) {
|
304 |
-
$wp_query->in_the_loop = true; // Fake being in the loop.
|
305 |
-
|
306 |
-
// fetch 20 posts at a time rather than loading the entire table into memory
|
307 |
-
while ( $next_posts = array_splice( $job_object->steps_data[ $job_object->step_working ]['post_ids'], 0, 20 ) ) {
|
308 |
-
$where = 'WHERE ID IN (' . join( ',', $next_posts ) . ')';
|
309 |
-
$posts = $wpdb->get_results( "SELECT * FROM {$wpdb->posts} $where" );
|
310 |
-
$wxr_post = '';
|
311 |
-
// Begin Loop
|
312 |
-
foreach ( $posts as $post ) {
|
313 |
-
/* @var WP_Post $post */
|
314 |
-
|
315 |
-
$is_sticky = is_sticky( $post->ID ) ? 1 : 0;
|
316 |
-
|
317 |
-
$wxr_post .= "\t<item>\n";
|
318 |
-
$wxr_post .= "\t\t<title>" . apply_filters( 'the_title_rss', $post->post_title ) ."</title>\n";
|
319 |
-
$wxr_post .= "\t\t<link>" . esc_url( apply_filters( 'the_permalink_rss', get_permalink( $post ) ) ) ."</link>\n";
|
320 |
-
$wxr_post .= "\t\t<pubDate>" . mysql2date( 'D, d M Y H:i:s +0000', get_post_time( 'Y-m-d H:i:s', true, $post ), false ) ."</pubDate>\n";
|
321 |
-
$wxr_post .= "\t\t<dc:creator>" . $this->wxr_cdata( get_the_author_meta( 'login', $post->post_author ) ) ."</dc:creator>\n";
|
322 |
-
$wxr_post .= "\t\t<guid isPermaLink=\"false\">" . esc_url( get_the_guid( $post->ID ) ) ."</guid>\n";
|
323 |
-
$wxr_post .= "\t\t<description></description>\n";
|
324 |
-
$wxr_post .= "\t\t<content:encoded>" . $this->wxr_cdata( apply_filters( 'the_content_export', $post->post_content ) ) . "</content:encoded>\n";
|
325 |
-
$wxr_post .= "\t\t<excerpt:encoded>" . $this->wxr_cdata( apply_filters( 'the_excerpt_export', $post->post_excerpt ) ) . "</excerpt:encoded>\n";
|
326 |
-
$wxr_post .= "\t\t<wp:post_id>" . $post->ID . "</wp:post_id>\n";
|
327 |
-
$wxr_post .= "\t\t<wp:post_date>" . $post->post_date . "</wp:post_date>\n";
|
328 |
-
$wxr_post .= "\t\t<wp:post_date_gmt>" . $post->post_date_gmt . "</wp:post_date_gmt>\n";
|
329 |
-
$wxr_post .= "\t\t<wp:comment_status>" . $post->comment_status . "</wp:comment_status>\n";
|
330 |
-
$wxr_post .= "\t\t<wp:ping_status>" . $post->ping_status . "</wp:ping_status>\n";
|
331 |
-
$wxr_post .= "\t\t<wp:post_name>" . $post->post_name . "</wp:post_name>\n";
|
332 |
-
$wxr_post .= "\t\t<wp:status>" . $post->post_status . "</wp:status>\n";
|
333 |
-
$wxr_post .= "\t\t<wp:post_parent>" . $post->post_parent . "</wp:post_parent>\n";
|
334 |
-
$wxr_post .= "\t\t<wp:menu_order>" . $post->menu_order . "</wp:menu_order>\n";
|
335 |
-
$wxr_post .= "\t\t<wp:post_type>" . $post->post_type . "</wp:post_type>\n";
|
336 |
-
$wxr_post .= "\t\t<wp:post_password>" . $post->post_password . "</wp:post_password>\n";
|
337 |
-
$wxr_post .= "\t\t<wp:is_sticky>" . $is_sticky . "</wp:is_sticky>\n";
|
338 |
-
if ( $post->post_type == 'attachment' ) {
|
339 |
-
$wxr_post .= "\t\t<wp:attachment_url>" . wp_get_attachment_url( $post->ID ) . "</wp:attachment_url>\n";
|
340 |
-
}
|
341 |
-
$wxr_post .= $this->wxr_post_taxonomy();
|
342 |
-
|
343 |
-
$postmeta = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->postmeta WHERE post_id = %d", $post->ID ) );
|
344 |
-
foreach ( $postmeta as $meta ) {
|
345 |
-
if ( apply_filters( 'wxr_export_skip_postmeta', false, $meta->meta_key, $meta ) ) {
|
346 |
-
continue;
|
347 |
-
}
|
348 |
-
$wxr_post .= "\t\t<wp:postmeta>\n\t\t\t<wp:meta_key>" . $meta->meta_key ."</wp:meta_key>\n\t\t\t<wp:meta_value>" .$this->wxr_cdata( $meta->meta_value ) ."</wp:meta_value>\n\t\t</wp:postmeta>\n";
|
349 |
-
}
|
350 |
-
|
351 |
-
$comments = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_approved <> 'spam'", $post->ID ) );
|
352 |
-
foreach ( $comments as $c ) {
|
353 |
-
$wxr_post .= "\t\t<wp:comment>\n";
|
354 |
-
$wxr_post .= "\t\t\t<wp:comment_id>" . $c->comment_ID . "</wp:comment_id>\n";
|
355 |
-
$wxr_post .= "\t\t\t<wp:comment_author>" . $this->wxr_cdata( $c->comment_author ) . "</wp:comment_author>\n";
|
356 |
-
$wxr_post .= "\t\t\t<wp:comment_author_email>" . $c->comment_author_email . "</wp:comment_author_email>\n";
|
357 |
-
$wxr_post .= "\t\t\t<wp:comment_author_url>" . esc_url_raw( $c->comment_author_url ) . "</wp:comment_author_url>\n";
|
358 |
-
$wxr_post .= "\t\t\t<wp:comment_author_IP>" . $c->comment_author_IP . "</wp:comment_author_IP>\n";
|
359 |
-
$wxr_post .= "\t\t\t<wp:comment_date>" . $c->comment_date . "</wp:comment_date>\n";
|
360 |
-
$wxr_post .= "\t\t\t<wp:comment_date_gmt>" . $c->comment_date_gmt . "</wp:comment_date_gmt>\n";
|
361 |
-
$wxr_post .= "\t\t\t<wp:comment_content>" . $this->wxr_cdata( $c->comment_content ) . "</wp:comment_content>\n";
|
362 |
-
$wxr_post .= "\t\t\t<wp:comment_approved>" . $c->comment_approved . "</wp:comment_approved>\n";
|
363 |
-
$wxr_post .= "\t\t\t<wp:comment_type>" . $c->comment_type . "</wp:comment_type>\n";
|
364 |
-
$wxr_post .= "\t\t\t<wp:comment_parent>" . $c->comment_parent . "</wp:comment_parent>\n";
|
365 |
-
$wxr_post .= "\t\t\t<wp:comment_user_id>" . $c->user_id . "</wp:comment_user_id>\n";
|
366 |
-
$c_meta = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->commentmeta WHERE comment_id = %d", $c->comment_ID ) );
|
367 |
-
foreach ( $c_meta as $meta ) {
|
368 |
-
$wxr_post .= "\t\t\t<wp:commentmeta>\n\t\t\t\t<wp:meta_key>" . $meta->meta_key ."</wp:meta_key>\n\t\t\t\t<wp:meta_value>" .$this->wxr_cdata( $meta->meta_value ) ."</wp:meta_value>\n\t\t\t</wp:commentmeta>\n";
|
369 |
-
}
|
370 |
-
$wxr_post .= "\t\t</wp:comment>\n";
|
371 |
-
}
|
372 |
-
$wxr_post .= "\t</item>\n";
|
373 |
-
$job_object->substeps_done ++;
|
374 |
-
}
|
375 |
-
$written = file_put_contents( $job_object->steps_data[ $job_object->step_working ][ 'wpexportfile' ], $wxr_post, FILE_APPEND );
|
376 |
-
if ( $written === FALSE ) {
|
377 |
-
$job_object->log( __( 'WP Export file could not written.', 'backwpup' ), E_USER_ERROR );
|
378 |
-
|
379 |
-
return FALSE;
|
380 |
-
}
|
381 |
-
$job_object->do_restart_time();
|
382 |
-
}
|
383 |
-
}
|
384 |
-
$written = file_put_contents( $job_object->steps_data[ $job_object->step_working ][ 'wpexportfile' ], "</channel>\n</rss>", FILE_APPEND );
|
385 |
-
if ( $written === FALSE ) {
|
386 |
-
$job_object->log( __( 'WP Export file could not written.', 'backwpup' ), E_USER_ERROR );
|
387 |
-
|
388 |
-
return FALSE;
|
389 |
-
}
|
390 |
-
$job_object->steps_data[ $job_object->step_working ]['substep'] = 'check';
|
391 |
-
$job_object->substeps_done ++;
|
392 |
-
$job_object->update_working_data();
|
393 |
-
$job_object->do_restart_time();
|
394 |
-
}
|
395 |
-
|
396 |
-
remove_filter( 'wxr_export_skip_postmeta', array( $this, 'wxr_filter_postmeta' ), 10, 2 );
|
397 |
-
|
398 |
-
if ( $job_object->steps_data[ $job_object->step_working ]['substep'] == 'check' ) {
|
399 |
-
|
400 |
-
if ( extension_loaded( 'simplexml' ) && class_exists( 'DOMDocument' ) ) {
|
401 |
-
$job_object->log( __( 'Check WP Export file …', 'backwpup' ) );
|
402 |
-
$job_object->need_free_memory( filesize( $job_object->steps_data[ $job_object->step_working ]['wpexportfile'] ) * 2 );
|
403 |
-
$valid = TRUE;
|
404 |
-
|
405 |
-
$internal_errors = libxml_use_internal_errors( TRUE );
|
406 |
-
$dom = new DOMDocument;
|
407 |
-
$old_value = NULL;
|
408 |
-
if ( function_exists( 'libxml_disable_entity_loader' ) )
|
409 |
-
$old_value = libxml_disable_entity_loader( TRUE );
|
410 |
-
$success = $dom->loadXML( file_get_contents( $job_object->steps_data[ $job_object->step_working ]['wpexportfile'] ) );
|
411 |
-
if ( ! is_null( $old_value ) )
|
412 |
-
libxml_disable_entity_loader( $old_value );
|
413 |
-
|
414 |
-
if ( ! $success || isset( $dom->doctype ) ) {
|
415 |
-
$errors = libxml_get_errors();
|
416 |
-
$valid = FALSE;
|
417 |
-
|
418 |
-
foreach ( $errors as $error ) {
|
419 |
-
switch ( $error->level ) {
|
420 |
-
case LIBXML_ERR_WARNING:
|
421 |
-
$job_object->log( E_USER_WARNING, sprintf( __( 'XML WARNING (%s): %s', 'backwpup' ), $error->code, trim( $error->message ) ), $job_object->steps_data[ $job_object->step_working ]['wpexportfile'], $error->line );
|
422 |
-
break;
|
423 |
-
case LIBXML_ERR_ERROR:
|
424 |
-
$job_object->log( E_USER_WARNING, sprintf( __( 'XML RECOVERABLE (%s): %s', 'backwpup' ), $error->code, trim( $error->message ) ), $job_object->steps_data[ $job_object->step_working ]['wpexportfile'], $error->line );
|
425 |
-
break;
|
426 |
-
case LIBXML_ERR_FATAL:
|
427 |
-
$job_object->log( E_USER_WARNING, sprintf( __( 'XML ERROR (%s): %s', 'backwpup' ),$error->code, trim( $error->message ) ), $job_object->steps_data[ $job_object->step_working ]['wpexportfile'], $error->line );
|
428 |
-
break;
|
429 |
-
}
|
430 |
-
}
|
431 |
-
} else {
|
432 |
-
$xml = simplexml_import_dom( $dom );
|
433 |
-
unset( $dom );
|
434 |
-
|
435 |
-
// halt if loading produces an error
|
436 |
-
if ( ! $xml ) {
|
437 |
-
$job_object->log( __( 'There was an error when reading this WXR file', 'backwpup' ), E_USER_ERROR );
|
438 |
-
$valid = FALSE;
|
439 |
-
} else {
|
440 |
-
|
441 |
-
$wxr_version = $xml->xpath('/rss/channel/wp:wxr_version');
|
442 |
-
if ( ! $wxr_version ) {
|
443 |
-
$job_object->log( __( 'This does not appear to be a WXR file, missing/invalid WXR version number', 'backwpup' ), E_USER_ERROR );
|
444 |
-
$valid = FALSE;
|
445 |
-
}
|
446 |
-
|
447 |
-
$wxr_version = (string) trim( $wxr_version[0] );
|
448 |
-
// confirm that we are dealing with the correct file format
|
449 |
-
if ( ! preg_match( '/^\d+\.\d+$/', $wxr_version ) ) {
|
450 |
-
$job_object->log( __( 'This does not appear to be a WXR file, missing/invalid WXR version number', 'backwpup' ), E_USER_ERROR );
|
451 |
-
$valid = FALSE;
|
452 |
-
}
|
453 |
-
}
|
454 |
-
}
|
455 |
-
|
456 |
-
libxml_use_internal_errors( $internal_errors );
|
457 |
-
|
458 |
-
if ( $valid )
|
459 |
-
$job_object->log( __( 'WP Export file is a valid WXR file.', 'backwpup' ) );
|
460 |
-
} else {
|
461 |
-
$job_object->log( __( 'WP Export file can not checked, because no XML extension loaded with the file can checked.', 'backwpup' ) );
|
462 |
-
}
|
463 |
-
|
464 |
-
$job_object->steps_data[ $job_object->step_working ]['substep'] = 'compress';
|
465 |
-
$job_object->substeps_done ++;
|
466 |
-
$job_object->update_working_data();
|
467 |
-
$job_object->do_restart_time();
|
468 |
-
}
|
469 |
-
|
470 |
-
//Compress file
|
471 |
-
if ( $job_object->steps_data[ $job_object->step_working ]['substep'] == 'compress' ) {
|
472 |
-
if ( ! empty( $job_object->job[ 'wpexportfilecompression' ] ) ) {
|
473 |
-
$job_object->log( __( 'Compressing file …', 'backwpup' ) );
|
474 |
-
try {
|
475 |
-
$compress = new BackWPup_Create_Archive( $job_object->steps_data[ $job_object->step_working ]['wpexportfile'] . $job_object->job[ 'wpexportfilecompression' ] );
|
476 |
-
if ( $compress->add_file( $job_object->steps_data[ $job_object->step_working ]['wpexportfile'] ) ) {
|
477 |
-
unset( $compress );
|
478 |
-
unlink( $job_object->steps_data[ $job_object->step_working ]['wpexportfile'] );
|
479 |
-
$job_object->steps_data[ $job_object->step_working ]['wpexportfile'] .= $job_object->job[ 'wpexportfilecompression' ];
|
480 |
-
$job_object->log( __( 'Compressing done.', 'backwpup' ) );
|
481 |
-
}
|
482 |
-
} catch ( Exception $e ) {
|
483 |
-
$job_object->log( $e->getMessage(), E_USER_ERROR, $e->getFile(), $e->getLine() );
|
484 |
-
unset( $compress );
|
485 |
-
return FALSE;
|
486 |
-
}
|
487 |
-
}
|
488 |
-
$job_object->steps_data[ $job_object->step_working ]['substep'] = 'addfile';
|
489 |
-
$job_object->substeps_done ++;
|
490 |
-
$job_object->update_working_data();
|
491 |
-
$job_object->do_restart_time();
|
492 |
-
}
|
493 |
-
|
494 |
-
if ( $job_object->steps_data[ $job_object->step_working ]['substep'] == 'addfile' ) {
|
495 |
-
//add XML file to backup files
|
496 |
-
if ( is_readable( $job_object->steps_data[ $job_object->step_working ]['wpexportfile'] ) ) {
|
497 |
-
$job_object->additional_files_to_backup[ ] = $job_object->steps_data[ $job_object->step_working ]['wpexportfile'];
|
498 |
-
$job_object->count_files ++;
|
499 |
-
$filesize = filesize( $job_object->steps_data[ $job_object->step_working ][ 'wpexportfile' ] );
|
500 |
-
$job_object->count_filesize = $job_object->count_filesize + $filesize;
|
501 |
-
$job_object->log( sprintf( __( 'Added XML export "%1$s" with %2$s to backup file list.', 'backwpup' ), basename( $job_object->steps_data[ $job_object->step_working ]['wpexportfile'] ), size_format( $filesize, 2 ) ) );
|
502 |
-
}
|
503 |
-
$job_object->substeps_done ++;
|
504 |
-
$job_object->update_working_data();
|
505 |
-
}
|
506 |
-
|
507 |
-
return TRUE;
|
508 |
-
}
|
509 |
-
|
510 |
-
/**
|
511 |
-
* Wrap given string in XML CDATA tag.
|
512 |
-
*
|
513 |
-
* @since WordPress 2.1.0
|
514 |
-
*
|
515 |
-
* @param string $str String to wrap in XML CDATA tag.
|
516 |
-
* @return string
|
517 |
-
*/
|
518 |
-
private function wxr_cdata( $str ) {
|
519 |
-
if ( seems_utf8( $str ) == false )
|
520 |
-
$str = utf8_encode( $str );
|
521 |
-
|
522 |
-
// not allowed UTF-8 chars in XML
|
523 |
-
$str = preg_replace( '/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u', '', $str );
|
524 |
-
|
525 |
-
// $str = ent2ncr(esc_html($str));
|
526 |
-
$str = '<![CDATA[' . str_replace( ']]>', ']]]]><![CDATA[>', $str ) . ']]>';
|
527 |
-
|
528 |
-
return $str;
|
529 |
-
}
|
530 |
-
|
531 |
-
/**
|
532 |
-
* Return the URL of the site
|
533 |
-
*
|
534 |
-
* @since WordPress 2.5.0
|
535 |
-
*
|
536 |
-
* @return string Site URL.
|
537 |
-
*/
|
538 |
-
private function wxr_site_url() {
|
539 |
-
// ms: the base url
|
540 |
-
if ( is_multisite() )
|
541 |
-
return network_home_url();
|
542 |
-
// wp: the blog url
|
543 |
-
else
|
544 |
-
return get_bloginfo_rss( 'url' );
|
545 |
-
}
|
546 |
-
|
547 |
-
/**
|
548 |
-
* Output a cat_name XML tag from a given category object
|
549 |
-
*
|
550 |
-
* @since WordPress 2.1.0
|
551 |
-
*
|
552 |
-
* @param object $category Category Object
|
553 |
-
* @return string
|
554 |
-
*/
|
555 |
-
private function wxr_cat_name( $category ) {
|
556 |
-
if ( empty( $category->name ) )
|
557 |
-
return '';
|
558 |
-
|
559 |
-
return '<wp:cat_name>' . $this->wxr_cdata( $category->name ) . '</wp:cat_name>';
|
560 |
-
}
|
561 |
-
|
562 |
-
/**
|
563 |
-
* Output a category_description XML tag from a given category object
|
564 |
-
*
|
565 |
-
* @since WordPress 2.1.0
|
566 |
-
*
|
567 |
-
* @param object $category Category Object
|
568 |
-
* @return string
|
569 |
-
*/
|
570 |
-
private function wxr_category_description( $category ) {
|
571 |
-
if ( empty( $category->description ) )
|
572 |
-
return '';
|
573 |
-
|
574 |
-
return '<wp:category_description>' . $this->wxr_cdata( $category->description ) . '</wp:category_description>';
|
575 |
-
}
|
576 |
-
|
577 |
-
/**
|
578 |
-
* Output a tag_name XML tag from a given tag object
|
579 |
-
*
|
580 |
-
* @since WordPress 2.3.0
|
581 |
-
*
|
582 |
-
* @param object $tag Tag Object
|
583 |
-
* @return string
|
584 |
-
*/
|
585 |
-
private function wxr_tag_name( $tag ) {
|
586 |
-
if ( empty( $tag->name ) )
|
587 |
-
return '';
|
588 |
-
|
589 |
-
return '<wp:tag_name>' . $this->wxr_cdata( $tag->name ) . '</wp:tag_name>';
|
590 |
-
}
|
591 |
-
|
592 |
-
/**
|
593 |
-
* Output a tag_description XML tag from a given tag object
|
594 |
-
*
|
595 |
-
* @since WordPress 2.3.0
|
596 |
-
*
|
597 |
-
* @param object $tag Tag Object
|
598 |
-
* @return string
|
599 |
-
*/
|
600 |
-
private function wxr_tag_description( $tag ) {
|
601 |
-
if ( empty( $tag->description ) )
|
602 |
-
return '';
|
603 |
-
|
604 |
-
return '<wp:tag_description>' . $this->wxr_cdata( $tag->description ) . '</wp:tag_description>';
|
605 |
-
}
|
606 |
-
|
607 |
-
/**
|
608 |
-
* Output a term_name XML tag from a given term object
|
609 |
-
*
|
610 |
-
* @since WordPress 2.9.0
|
611 |
-
*
|
612 |
-
* @param object $term Term Object
|
613 |
-
* @return string
|
614 |
-
*/
|
615 |
-
private function wxr_term_name( $term ) {
|
616 |
-
if ( empty( $term->name ) )
|
617 |
-
return '';
|
618 |
-
|
619 |
-
return '<wp:term_name>' . $this->wxr_cdata( $term->name ) . '</wp:term_name>';
|
620 |
-
}
|
621 |
-
|
622 |
-
/**
|
623 |
-
* Output a term_description XML tag from a given term object
|
624 |
-
*
|
625 |
-
* @since WordPress 2.9.0
|
626 |
-
*
|
627 |
-
* @param object $term Term Object
|
628 |
-
* @return string
|
629 |
-
*/
|
630 |
-
private function wxr_term_description( $term ) {
|
631 |
-
if ( empty( $term->description ) )
|
632 |
-
return '';
|
633 |
-
|
634 |
-
return '<wp:term_description>' . $this->wxr_cdata( $term->description ) . '</wp:term_description>';
|
635 |
-
}
|
636 |
-
|
637 |
-
/**
|
638 |
-
* Output list of authors with posts
|
639 |
-
*
|
640 |
-
* @since WordPress 3.1.0
|
641 |
-
*/
|
642 |
-
private function wxr_authors_list() {
|
643 |
-
global $wpdb;
|
644 |
-
|
645 |
-
$authors = array();
|
646 |
-
$results = $wpdb->get_results( "SELECT DISTINCT post_author FROM $wpdb->posts WHERE post_status != 'auto-draft'" );
|
647 |
-
foreach ( (array) $results as $result )
|
648 |
-
$authors[] = get_userdata( $result->post_author );
|
649 |
-
|
650 |
-
$authors = array_filter( $authors );
|
651 |
-
|
652 |
-
$wxr_authors = '';
|
653 |
-
|
654 |
-
foreach ( $authors as $author ) {
|
655 |
-
$wxr_authors .= "\t<wp:author>";
|
656 |
-
$wxr_authors .= '<wp:author_id>' . $author->ID . '</wp:author_id>';
|
657 |
-
$wxr_authors .= '<wp:author_login>' . $author->user_login . '</wp:author_login>';
|
658 |
-
$wxr_authors .= '<wp:author_email>' . $author->user_email . '</wp:author_email>';
|
659 |
-
$wxr_authors .= '<wp:author_display_name>' . $this->wxr_cdata( $author->display_name ) . '</wp:author_display_name>';
|
660 |
-
$wxr_authors .= '<wp:author_first_name>' . $this->wxr_cdata( $author->user_firstname ) . '</wp:author_first_name>';
|
661 |
-
$wxr_authors .= '<wp:author_last_name>' . $this->wxr_cdata( $author->user_lastname ) . '</wp:author_last_name>';
|
662 |
-
$wxr_authors .= "</wp:author>\n";
|
663 |
-
}
|
664 |
-
|
665 |
-
return $wxr_authors;
|
666 |
-
}
|
667 |
-
|
668 |
-
/**
|
669 |
-
* Ouput all navigation menu terms
|
670 |
-
*
|
671 |
-
* @since WordPress 3.1.0
|
672 |
-
*/
|
673 |
-
private function wxr_nav_menu_terms() {
|
674 |
-
$nav_menus = wp_get_nav_menus();
|
675 |
-
if ( empty( $nav_menus ) || ! is_array( $nav_menus ) )
|
676 |
-
return '';
|
677 |
-
|
678 |
-
$wxr_nav_meuns = '';
|
679 |
-
|
680 |
-
foreach ( $nav_menus as $menu ) {
|
681 |
-
$wxr_nav_meuns .= "\t<wp:term><wp:term_id>{$menu->term_id}</wp:term_id><wp:term_taxonomy>nav_menu</wp:term_taxonomy><wp:term_slug>{$menu->slug}</wp:term_slug>";
|
682 |
-
$wxr_nav_meuns .= $this->wxr_term_name( $menu );
|
683 |
-
$wxr_nav_meuns .= "</wp:term>\n";
|
684 |
-
}
|
685 |
-
|
686 |
-
return $wxr_nav_meuns;
|
687 |
-
}
|
688 |
-
|
689 |
-
/**
|
690 |
-
* Output list of taxonomy terms, in XML tag format, associated with a post
|
691 |
-
*
|
692 |
-
* @since WordPress 2.3.0
|
693 |
-
*/
|
694 |
-
private function wxr_post_taxonomy() {
|
695 |
-
$post = get_post();
|
696 |
-
|
697 |
-
$taxonomies = get_object_taxonomies( $post->post_type );
|
698 |
-
if ( empty( $taxonomies ) )
|
699 |
-
return '';
|
700 |
-
$terms = wp_get_object_terms( $post->ID, $taxonomies );
|
701 |
-
|
702 |
-
$wxr_post_tags = '';
|
703 |
-
|
704 |
-
foreach ( (array) $terms as $term ) {
|
705 |
-
$wxr_post_tags .= "\t\t<category domain=\"{$term->taxonomy}\" nicename=\"{$term->slug}\">" . $this->wxr_cdata( $term->name ) . "</category>\n";
|
706 |
-
}
|
707 |
-
|
708 |
-
return $wxr_post_tags;
|
709 |
-
}
|
710 |
-
|
711 |
-
public function wxr_filter_postmeta( $return_me, $meta_key ) {
|
712 |
-
if ( '_edit_lock' == $meta_key )
|
713 |
-
$return_me = true;
|
714 |
-
return $return_me;
|
715 |
-
}
|
716 |
-
|
717 |
-
|
718 |
-
|
719 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
*
|
4 |
+
*/
|
5 |
+
class BackWPup_JobType_WPEXP extends BackWPup_JobTypes {
|
6 |
+
|
7 |
+
/**
|
8 |
+
*
|
9 |
+
*/
|
10 |
+
public function __construct() {
|
11 |
+
|
12 |
+
$this->info[ 'ID' ] = 'WPEXP';
|
13 |
+
$this->info[ 'name' ] = __( 'XML export', 'backwpup' );
|
14 |
+
$this->info[ 'description' ] = __( 'WordPress XML export', 'backwpup' );
|
15 |
+
$this->info[ 'URI' ] = translate( BackWPup::get_plugin_data( 'PluginURI' ), 'backwpup' );
|
16 |
+
$this->info[ 'author' ] = BackWPup::get_plugin_data( 'Author' );
|
17 |
+
$this->info[ 'authorURI' ] = translate( BackWPup::get_plugin_data( 'AuthorURI' ), 'backwpup' );
|
18 |
+
$this->info[ 'version' ] = BackWPup::get_plugin_data( 'Version' );
|
19 |
+
|
20 |
+
}
|
21 |
+
|
22 |
+
/**
|
23 |
+
* @return bool
|
24 |
+
*/
|
25 |
+
public function creates_file() {
|
26 |
+
|
27 |
+
return TRUE;
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* @return array
|
32 |
+
*/
|
33 |
+
public function option_defaults() {
|
34 |
+
return array( 'wpexportcontent' => 'all', 'wpexportfilecompression' => '', 'wpexportfile' => sanitize_file_name( get_bloginfo( 'name' ) ) . '.wordpress.%Y-%m-%d' );
|
35 |
+
}
|
36 |
+
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @param $jobid
|
40 |
+
* @internal param $main
|
41 |
+
*/
|
42 |
+
public function edit_tab( $jobid ) {
|
43 |
+
?>
|
44 |
+
<table class="form-table">
|
45 |
+
<tr>
|
46 |
+
<th scope="row"><?php _e( 'Items to export', 'backwpup' ) ?></th>
|
47 |
+
<td>
|
48 |
+
<fieldset>
|
49 |
+
<label for="idwpexportcontent-all"><input type="radio" name="wpexportcontent" id="idwpexportcontent-all" value="all" <?php checked( BackWPup_Option::get( $jobid, 'wpexportcontent' ), 'all' ); ?> /> <?php _e( 'All content', 'backwpup' ); ?></label><br />
|
50 |
+
<label for="idwpexportcontent-post"><input type="radio" name="wpexportcontent" id="idwpexportcontent-post" value="post" <?php checked( BackWPup_Option::get( $jobid, 'wpexportcontent' ), 'post' ); ?> /> <?php _e( 'Posts', 'backwpup' ); ?></label><br />
|
51 |
+
<label for="idwpexportcontent-page"><input type="radio" name="wpexportcontent" id="idwpexportcontent-page" value="page" <?php checked( BackWPup_Option::get( $jobid, 'wpexportcontent' ), 'page' ); ?> /> <?php _e( 'Pages', 'backwpup' ); ?></label><br />
|
52 |
+
<?php
|
53 |
+
foreach ( get_post_types( array( '_builtin' => FALSE, 'can_export' => TRUE ), 'objects' ) as $post_type ) {
|
54 |
+
?>
|
55 |
+
<label for="idwpexportcontent-<?php echo esc_attr( $post_type->name ); ?>"><input type="radio" name="wpexportcontent" id="idwpexportcontent-<?php echo esc_attr( $post_type->name ); ?>" value="<?php echo esc_attr( $post_type->name ); ?>" <?php checked( BackWPup_Option::get( $jobid, 'wpexportcontent' ), esc_attr( $post_type->name ) ); ?> /> <?php echo esc_html( $post_type->label ); ?></label><br />
|
56 |
+
<?php } ?>
|
57 |
+
</fieldset>
|
58 |
+
</td>
|
59 |
+
</tr>
|
60 |
+
<tr>
|
61 |
+
<th scope="row"><label for="idwpexportfile"><?php _e( 'XML Export file name', 'backwpup' ) ?></label></th>
|
62 |
+
<td>
|
63 |
+
<input name="wpexportfile" type="text" id="idwpexportfile"
|
64 |
+
value="<?php echo BackWPup_Option::get( $jobid, 'wpexportfile' );?>"
|
65 |
+
class="medium-text code"/>.xml
|
66 |
+
</td>
|
67 |
+
</tr>
|
68 |
+
<tr>
|
69 |
+
<th scope="row"><?php _e( 'File compression', 'backwpup' ) ?></th>
|
70 |
+
<td>
|
71 |
+
<fieldset>
|
72 |
+
<?php
|
73 |
+
echo '<label for="idwpexportfilecompression"><input class="radio" type="radio"' . checked( '', BackWPup_Option::get( $jobid, 'wpexportfilecompression' ), FALSE ) . ' name="wpexportfilecompression" id="idwpexportfilecompression" value="" /> ' . __( 'none', 'backwpup' ). '</label><br />';
|
74 |
+
if ( function_exists( 'gzopen' ) )
|
75 |
+
echo '<label for="idwpexportfilecompression-gz"><input class="radio" type="radio"' . checked( '.gz', BackWPup_Option::get( $jobid, 'wpexportfilecompression' ), FALSE ) . ' name="wpexportfilecompression" id="idwpexportfilecompression-gz" value=".gz" /> ' . __( 'GZip', 'backwpup' ). '</label><br />';
|
76 |
+
else
|
77 |
+
echo '<label for="idwpexportfilecompression-gz"><input class="radio" type="radio"' . checked( '.gz', BackWPup_Option::get( $jobid, 'wpexportfilecompression' ), FALSE ) . ' name="wpexportfilecompression" id="idwpexportfilecompression-gz" value=".gz" disabled="disabled" /> ' . __( 'GZip', 'backwpup' ). '</label><br />';
|
78 |
+
if ( function_exists( 'bzopen' ) )
|
79 |
+
echo '<label for="idwpexportfilecompression-bz2"><input class="radio" type="radio"' . checked( '.bz2', BackWPup_Option::get( $jobid, 'wpexportfilecompression' ), FALSE ) . ' name="wpexportfilecompression" id="idwpexportfilecompression-bz2" value=".bz2" /> ' . __( 'BZip2', 'backwpup' ). '</label><br />';
|
80 |
+
else
|
81 |
+
echo '<label for="idwpexportfilecompression-bz2"><input class="radio" type="radio"' . checked( '.bz2', BackWPup_Option::get( $jobid, 'wpexportfilecompression' ), FALSE ) . ' name="wpexportfilecompression" id="idwpexportfilecompression-bz2" value=".bz2" disabled="disabled" /> ' . __( 'BZip2', 'backwpup' ). '</label><br />';
|
82 |
+
?>
|
83 |
+
</fieldset>
|
84 |
+
</td>
|
85 |
+
</tr>
|
86 |
+
</table>
|
87 |
+
<?php
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* @param $id
|
92 |
+
*/
|
93 |
+
public function edit_form_post_save( $id ) {
|
94 |
+
|
95 |
+
BackWPup_Option::update( $id, 'wpexportcontent', $_POST[ 'wpexportcontent' ] );
|
96 |
+
BackWPup_Option::update( $id, 'wpexportfile', BackWPup_Job::sanitize_file_name( $_POST[ 'wpexportfile' ] ) );
|
97 |
+
if ( $_POST[ 'wpexportfilecompression' ] == '' || $_POST[ 'wpexportfilecompression' ] == '.gz' || $_POST[ 'wpexportfilecompression' ] == '.bz2' )
|
98 |
+
BackWPup_Option::update( $id, 'wpexportfilecompression', $_POST[ 'wpexportfilecompression' ] );
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* @param $job_object
|
103 |
+
* @return bool
|
104 |
+
*/
|
105 |
+
public function job_run( &$job_object ) {
|
106 |
+
global $wpdb, $post, $wp_query;
|
107 |
+
|
108 |
+
$wxr_version = '1.2';
|
109 |
+
|
110 |
+
if ( $job_object->steps_data[ $job_object->step_working ]['SAVE_STEP_TRY'] != $job_object->steps_data[ $job_object->step_working ][ 'STEP_TRY' ] ) {
|
111 |
+
$job_object->log( sprintf( __( '%d. Trying to create a WordPress export to XML file …', 'backwpup' ), $job_object->steps_data[ $job_object->step_working ][ 'STEP_TRY' ] ) );
|
112 |
+
$job_object->steps_data[ $job_object->step_working ]['wpexportfile'] = BackWPup::get_plugin_data( 'TEMP' ) . $job_object->generate_filename( $job_object->job[ 'wpexportfile' ], 'xml', TRUE );
|
113 |
+
$job_object->steps_data[ $job_object->step_working ]['substep'] = 'header';
|
114 |
+
$job_object->steps_data[ $job_object->step_working ]['post_ids'] = array();
|
115 |
+
$job_object->substeps_todo = 10;
|
116 |
+
$job_object->substeps_done = 0;
|
117 |
+
}
|
118 |
+
|
119 |
+
add_filter( 'wxr_export_skip_postmeta', array( $this, 'wxr_filter_postmeta' ), 10, 2 );
|
120 |
+
|
121 |
+
if ( $job_object->steps_data[ $job_object->step_working ]['substep'] == 'header' ) {
|
122 |
+
|
123 |
+
if ( 'all' != $job_object->job[ 'wpexportcontent' ] && post_type_exists( $job_object->job[ 'wpexportcontent' ] ) ) {
|
124 |
+
$ptype = get_post_type_object( $job_object->job[ 'wpexportcontent' ] );
|
125 |
+
if ( ! $ptype->can_export ) {
|
126 |
+
$job_object->log( sprintf( __( 'WP Export: Post type “%s” does not allow export.', 'backwpup' ), $job_object->job[ 'wpexportcontent' ] ), E_USER_ERROR );
|
127 |
+
return FALSE;
|
128 |
+
}
|
129 |
+
$where = $wpdb->prepare( "{$wpdb->posts}.post_type = %s", $job_object->job[ 'wpexportcontent' ] );
|
130 |
+
} else {
|
131 |
+
$post_types = get_post_types( array( 'can_export' => true ) );
|
132 |
+
$esses = array_fill( 0, count($post_types), '%s' );
|
133 |
+
$where = $wpdb->prepare( "{$wpdb->posts}.post_type IN (" . implode( ',', $esses ) . ')', $post_types );
|
134 |
+
$job_object->job[ 'wpexportcontent' ] = 'all';
|
135 |
+
}
|
136 |
+
$where .= " AND {$wpdb->posts}.post_status != 'auto-draft'";
|
137 |
+
|
138 |
+
// grab a snapshot of post IDs, just in case it changes during the export
|
139 |
+
$job_object->steps_data[ $job_object->step_working ]['post_ids'] = $wpdb->get_col( "SELECT ID FROM {$wpdb->posts} WHERE $where" );
|
140 |
+
$job_object->substeps_todo = $job_object->substeps_todo + count( $job_object->steps_data[ $job_object->step_working ]['post_ids'] );
|
141 |
+
|
142 |
+
$header = '<?xml version="1.0" encoding="' . get_bloginfo('charset') . "\" ?>\n";
|
143 |
+
$header .= "<!-- This is a WordPress eXtended RSS file generated by the WordPress plugin BackWPup as an export of your site. -->\n";
|
144 |
+
$header .= "<!-- It contains information about your site's posts, pages, comments, categories, and other content. -->\n";
|
145 |
+
$header .= "<!-- You may use this file to transfer that content from one site to another. -->\n";
|
146 |
+
$header .= "<!-- This file is not intended to serve as a complete backup of your site. -->\n\n";
|
147 |
+
$header .= "<!-- To import this information into a WordPress site follow these steps: -->\n";
|
148 |
+
$header .= "<!-- 1. Log in to that site as an administrator. -->\n";
|
149 |
+
$header .= "<!-- 2. Go to Tools: Import in the WordPress admin panel. -->\n";
|
150 |
+
$header .= "<!-- 3. Install the \"WordPress\" importer from the list. -->\n";
|
151 |
+
$header .= "<!-- 4. Activate & Run Importer. -->\n";
|
152 |
+
$header .= "<!-- 5. Upload this file using the form provided on that page. -->\n";
|
153 |
+
$header .= "<!-- 6. You will first be asked to map the authors in this export file to users -->\n";
|
154 |
+
$header .= "<!-- on the site. For each author, you may choose to map to an -->\n";
|
155 |
+
$header .= "<!-- existing user on the site or to create a new user. -->\n";
|
156 |
+
$header .= "<!-- 7. WordPress will then import each of the posts, pages, comments, categories, etc. -->\n";
|
157 |
+
$header .= "<!-- contained in this file into your site. -->\n\n";
|
158 |
+
$header .= "<!-- generator=\"WordPress/" . get_bloginfo_rss('version') . "\" created=\"". date('Y-m-d H:i') . "\" -->\n";
|
159 |
+
$header .= "<rss version=\"2.0\" xmlns:excerpt=\"http://wordpress.org/export/$wxr_version/excerpt/\" xmlns:content=\"http://purl.org/rss/1.0/modules/content/\" xmlns:wfw=\"http://wellformedweb.org/CommentAPI/\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:wp=\"http://wordpress.org/export/$wxr_version/\">\n";
|
160 |
+
$header .= "<channel>\n";
|
161 |
+
$header .= "\t<title>" . get_bloginfo_rss( 'name' ) ."</title>\n";
|
162 |
+
$header .= "\t<link>" . get_bloginfo_rss( 'url' ) ."</link>\n";
|
163 |
+
$header .= "\t<description>" . get_bloginfo_rss( 'description' ) ."</description>\n";
|
164 |
+
$header .= "\t<pubDate>" . date( 'D, d M Y H:i:s +0000' ) ."</pubDate>\n";
|
165 |
+
$header .= "\t<language>" . get_bloginfo_rss( 'language' ) ."</language>\n";
|
166 |
+
$header .= "\t<wp:wxr_version>" . $wxr_version ."</wp:wxr_version>\n";
|
167 |
+
$header .= "\t<wp:base_site_url>" . $this->wxr_site_url() ."</wp:base_site_url>\n";
|
168 |
+
$header .= "\t<wp:base_blog_url>" . get_bloginfo_rss( 'url' ) ."</wp:base_blog_url>\n";
|
169 |
+
$written = file_put_contents( $job_object->steps_data[ $job_object->step_working ][ 'wpexportfile' ], $header, FILE_APPEND );
|
170 |
+
if ( $written === FALSE ) {
|
171 |
+
$job_object->log( __( 'WP Export file could not written.', 'backwpup' ), E_USER_ERROR );
|
172 |
+
|
173 |
+
return FALSE;
|
174 |
+
}
|
175 |
+
unset( $header );
|
176 |
+
$job_object->steps_data[ $job_object->step_working ]['substep'] = 'authors';
|
177 |
+
$job_object->substeps_done ++;
|
178 |
+
$job_object->update_working_data();
|
179 |
+
$job_object->do_restart_time();
|
180 |
+
}
|
181 |
+
|
182 |
+
if ( $job_object->steps_data[ $job_object->step_working ]['substep'] == 'authors' ) {
|
183 |
+
$written = file_put_contents( $job_object->steps_data[ $job_object->step_working ][ 'wpexportfile' ], $this->wxr_authors_list(), FILE_APPEND );
|
184 |
+
if ( $written === FALSE ) {
|
185 |
+
$job_object->log( __( 'WP Export file could not written.', 'backwpup' ), E_USER_ERROR );
|
186 |
+
|
187 |
+
return FALSE;
|
188 |
+
}
|
189 |
+
$job_object->steps_data[ $job_object->step_working ]['substep'] = 'cats';
|
190 |
+
$job_object->substeps_done ++;
|
191 |
+
$job_object->update_working_data();
|
192 |
+
$job_object->do_restart_time();
|
193 |
+
}
|
194 |
+
|
195 |
+
|
196 |
+
if ( $job_object->steps_data[ $job_object->step_working ]['substep'] == 'cats' ) {
|
197 |
+
if ( 'all' == $job_object->job[ 'wpexportcontent' ] ) {
|
198 |
+
$cats = array();
|
199 |
+
$categories = (array) get_categories( array( 'get' => 'all' ) );
|
200 |
+
// put categories in order with no child going before its parent
|
201 |
+
while ( $cat = array_shift( $categories ) ) {
|
202 |
+
if ( $cat->parent == 0 || isset( $cats[$cat->parent] ) )
|
203 |
+
$cats[$cat->term_id] = $cat;
|
204 |
+
else
|
205 |
+
$categories[] = $cat;
|
206 |
+
}
|
207 |
+
$cats_xml = '';
|
208 |
+
foreach ( $cats as $c ) {
|
209 |
+
$parent_slug = $c->parent ? $cats[$c->parent]->slug : '';
|
210 |
+
$cats_xml .= "\t<wp:category><wp:term_id>" . $c->term_id ."</wp:term_id><wp:category_nicename>" . $c->slug . "</wp:category_nicename><wp:category_parent>" . $parent_slug . "</wp:category_parent>" . $this->wxr_cat_name( $c ) . $this->wxr_category_description( $c ) ."</wp:category>\n";
|
211 |
+
}
|
212 |
+
$written = file_put_contents( $job_object->steps_data[ $job_object->step_working ][ 'wpexportfile' ], $cats_xml, FILE_APPEND );
|
213 |
+
if ( $written === FALSE ) {
|
214 |
+
$job_object->log( __( 'WP Export file could not written.', 'backwpup' ), E_USER_ERROR );
|
215 |
+
|
216 |
+
return FALSE;
|
217 |
+
}
|
218 |
+
unset( $cats_xml );
|
219 |
+
}
|
220 |
+
$job_object->steps_data[ $job_object->step_working ]['substep'] = 'tags';
|
221 |
+
$job_object->substeps_done ++;
|
222 |
+
$job_object->update_working_data();
|
223 |
+
$job_object->do_restart_time();
|
224 |
+
}
|
225 |
+
|
226 |
+
if ( $job_object->steps_data[ $job_object->step_working ]['substep'] == 'tags' ) {
|
227 |
+
if ( 'all' == $job_object->job[ 'wpexportcontent' ] ) {
|
228 |
+
$tags = (array) get_tags( array( 'get' => 'all' ) );
|
229 |
+
$tags_xml = '';
|
230 |
+
foreach ( $tags as $t ) {
|
231 |
+
$tags_xml .= "\t<wp:tag><wp:term_id>" . $t->term_id ."</wp:term_id><wp:tag_slug>" . $t->slug ."</wp:tag_slug>" . $this->wxr_tag_name( $t ) . $this->wxr_tag_description( $t ) ."</wp:tag>\n";
|
232 |
+
}
|
233 |
+
$written = file_put_contents( $job_object->steps_data[ $job_object->step_working ][ 'wpexportfile' ], $tags_xml, FILE_APPEND );
|
234 |
+
if ( $written === FALSE ) {
|
235 |
+
$job_object->log( __( 'WP Export file could not written.', 'backwpup' ), E_USER_ERROR );
|
236 |
+
|
237 |
+
return FALSE;
|
238 |
+
}
|
239 |
+
unset( $tags_xml );
|
240 |
+
}
|
241 |
+
$job_object->steps_data[ $job_object->step_working ]['substep'] = 'terms';
|
242 |
+
$job_object->substeps_done ++;
|
243 |
+
$job_object->update_working_data();
|
244 |
+
$job_object->do_restart_time();
|
245 |
+
}
|
246 |
+
|
247 |
+
if ( $job_object->steps_data[ $job_object->step_working ]['substep'] == 'terms' ) {
|
248 |
+
if ( 'all' == $job_object->job[ 'wpexportcontent' ] ) {
|
249 |
+
|
250 |
+
$terms = array();
|
251 |
+
$custom_taxonomies = get_taxonomies( array( '_builtin' => false ) );
|
252 |
+
$custom_terms = (array) get_terms( $custom_taxonomies, array( 'get' => 'all' ) );
|
253 |
+
|
254 |
+
// put terms in order with no child going before its parent
|
255 |
+
while ( $t = array_shift( $custom_terms ) ) {
|
256 |
+
if ( $t->parent == 0 || isset( $terms[$t->parent] ) )
|
257 |
+
$terms[$t->term_id] = $t;
|
258 |
+
else
|
259 |
+
$custom_terms[] = $t;
|
260 |
+
}
|
261 |
+
$terms_xml = '';
|
262 |
+
foreach ( $terms as $t ) {
|
263 |
+
$parent_slug = $t->parent ? $terms[$t->parent]->slug : '';
|
264 |
+
$terms_xml .= "\t<wp:term><wp:term_id>" . $t->term_id ."</wp:term_id><wp:term_taxonomy>" . $t->taxonomy . "</wp:term_taxonomy><wp:term_slug>" . $t->slug ."</wp:term_slug><wp:term_parent>" . $parent_slug ."</wp:term_parent>" . $this->wxr_term_name( $t ) . $this->wxr_term_description( $t ) ."</wp:term>\n";
|
265 |
+
}
|
266 |
+
$written = file_put_contents( $job_object->steps_data[ $job_object->step_working ][ 'wpexportfile' ], $terms_xml, FILE_APPEND );
|
267 |
+
if ( $written === FALSE ) {
|
268 |
+
$job_object->log( __( 'WP Export file could not written.', 'backwpup' ), E_USER_ERROR );
|
269 |
+
|
270 |
+
return FALSE;
|
271 |
+
}
|
272 |
+
unset( $terms_xml );
|
273 |
+
}
|
274 |
+
$job_object->steps_data[ $job_object->step_working ]['substep'] = 'menus';
|
275 |
+
$job_object->substeps_done ++;
|
276 |
+
$job_object->update_working_data();
|
277 |
+
$job_object->do_restart_time();
|
278 |
+
}
|
279 |
+
|
280 |
+
if ( $job_object->steps_data[ $job_object->step_working ]['substep'] == 'menus' ) {
|
281 |
+
$menu_xml = '';
|
282 |
+
if ( 'all' == $job_object->job[ 'wpexportcontent' ] ) {
|
283 |
+
$menu_xml .= $this->wxr_nav_menu_terms();
|
284 |
+
}
|
285 |
+
$menu_xml .= "\t<generator>http://wordpress.org/?v=" . get_bloginfo_rss( 'version' ) . "</generator>\n";
|
286 |
+
$written = file_put_contents( $job_object->steps_data[ $job_object->step_working ][ 'wpexportfile' ], $menu_xml, FILE_APPEND );
|
287 |
+
if ( $written === FALSE ) {
|
288 |
+
$job_object->log( __( 'WP Export file could not written.', 'backwpup' ), E_USER_ERROR );
|
289 |
+
|
290 |
+
return FALSE;
|
291 |
+
}
|
292 |
+
unset( $menu_xml );
|
293 |
+
|
294 |
+
$job_object->steps_data[ $job_object->step_working ]['substep'] = 'posts';
|
295 |
+
$job_object->substeps_done ++;
|
296 |
+
$job_object->update_working_data();
|
297 |
+
$job_object->do_restart_time();
|
298 |
+
}
|
299 |
+
|
300 |
+
|
301 |
+
if ( $job_object->steps_data[ $job_object->step_working ]['substep'] == 'posts' ) {
|
302 |
+
|
303 |
+
if ( ! empty( $job_object->steps_data[ $job_object->step_working ]['post_ids'] ) ) {
|
304 |
+
$wp_query->in_the_loop = true; // Fake being in the loop.
|
305 |
+
|
306 |
+
// fetch 20 posts at a time rather than loading the entire table into memory
|
307 |
+
while ( $next_posts = array_splice( $job_object->steps_data[ $job_object->step_working ]['post_ids'], 0, 20 ) ) {
|
308 |
+
$where = 'WHERE ID IN (' . join( ',', $next_posts ) . ')';
|
309 |
+
$posts = $wpdb->get_results( "SELECT * FROM {$wpdb->posts} $where" );
|
310 |
+
$wxr_post = '';
|
311 |
+
// Begin Loop
|
312 |
+
foreach ( $posts as $post ) {
|
313 |
+
/* @var WP_Post $post */
|
314 |
+
|
315 |
+
$is_sticky = is_sticky( $post->ID ) ? 1 : 0;
|
316 |
+
|
317 |
+
$wxr_post .= "\t<item>\n";
|
318 |
+
$wxr_post .= "\t\t<title>" . apply_filters( 'the_title_rss', $post->post_title ) ."</title>\n";
|
319 |
+
$wxr_post .= "\t\t<link>" . esc_url( apply_filters( 'the_permalink_rss', get_permalink( $post ) ) ) ."</link>\n";
|
320 |
+
$wxr_post .= "\t\t<pubDate>" . mysql2date( 'D, d M Y H:i:s +0000', get_post_time( 'Y-m-d H:i:s', true, $post ), false ) ."</pubDate>\n";
|
321 |
+
$wxr_post .= "\t\t<dc:creator>" . $this->wxr_cdata( get_the_author_meta( 'login', $post->post_author ) ) ."</dc:creator>\n";
|
322 |
+
$wxr_post .= "\t\t<guid isPermaLink=\"false\">" . esc_url( get_the_guid( $post->ID ) ) ."</guid>\n";
|
323 |
+
$wxr_post .= "\t\t<description></description>\n";
|
324 |
+
$wxr_post .= "\t\t<content:encoded>" . $this->wxr_cdata( apply_filters( 'the_content_export', $post->post_content ) ) . "</content:encoded>\n";
|
325 |
+
$wxr_post .= "\t\t<excerpt:encoded>" . $this->wxr_cdata( apply_filters( 'the_excerpt_export', $post->post_excerpt ) ) . "</excerpt:encoded>\n";
|
326 |
+
$wxr_post .= "\t\t<wp:post_id>" . $post->ID . "</wp:post_id>\n";
|
327 |
+
$wxr_post .= "\t\t<wp:post_date>" . $post->post_date . "</wp:post_date>\n";
|
328 |
+
$wxr_post .= "\t\t<wp:post_date_gmt>" . $post->post_date_gmt . "</wp:post_date_gmt>\n";
|
329 |
+
$wxr_post .= "\t\t<wp:comment_status>" . $post->comment_status . "</wp:comment_status>\n";
|
330 |
+
$wxr_post .= "\t\t<wp:ping_status>" . $post->ping_status . "</wp:ping_status>\n";
|
331 |
+
$wxr_post .= "\t\t<wp:post_name>" . $post->post_name . "</wp:post_name>\n";
|
332 |
+
$wxr_post .= "\t\t<wp:status>" . $post->post_status . "</wp:status>\n";
|
333 |
+
$wxr_post .= "\t\t<wp:post_parent>" . $post->post_parent . "</wp:post_parent>\n";
|
334 |
+
$wxr_post .= "\t\t<wp:menu_order>" . $post->menu_order . "</wp:menu_order>\n";
|
335 |
+
$wxr_post .= "\t\t<wp:post_type>" . $post->post_type . "</wp:post_type>\n";
|
336 |
+
$wxr_post .= "\t\t<wp:post_password>" . $post->post_password . "</wp:post_password>\n";
|
337 |
+
$wxr_post .= "\t\t<wp:is_sticky>" . $is_sticky . "</wp:is_sticky>\n";
|
338 |
+
if ( $post->post_type == 'attachment' ) {
|
339 |
+
$wxr_post .= "\t\t<wp:attachment_url>" . wp_get_attachment_url( $post->ID ) . "</wp:attachment_url>\n";
|
340 |
+
}
|
341 |
+
$wxr_post .= $this->wxr_post_taxonomy();
|
342 |
+
|
343 |
+
$postmeta = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->postmeta WHERE post_id = %d", $post->ID ) );
|
344 |
+
foreach ( $postmeta as $meta ) {
|
345 |
+
if ( apply_filters( 'wxr_export_skip_postmeta', false, $meta->meta_key, $meta ) ) {
|
346 |
+
continue;
|
347 |
+
}
|
348 |
+
$wxr_post .= "\t\t<wp:postmeta>\n\t\t\t<wp:meta_key>" . $meta->meta_key ."</wp:meta_key>\n\t\t\t<wp:meta_value>" .$this->wxr_cdata( $meta->meta_value ) ."</wp:meta_value>\n\t\t</wp:postmeta>\n";
|
349 |
+
}
|
350 |
+
|
351 |
+
$comments = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_approved <> 'spam'", $post->ID ) );
|
352 |
+
foreach ( $comments as $c ) {
|
353 |
+
$wxr_post .= "\t\t<wp:comment>\n";
|
354 |
+
$wxr_post .= "\t\t\t<wp:comment_id>" . $c->comment_ID . "</wp:comment_id>\n";
|
355 |
+
$wxr_post .= "\t\t\t<wp:comment_author>" . $this->wxr_cdata( $c->comment_author ) . "</wp:comment_author>\n";
|
356 |
+
$wxr_post .= "\t\t\t<wp:comment_author_email>" . $c->comment_author_email . "</wp:comment_author_email>\n";
|
357 |
+
$wxr_post .= "\t\t\t<wp:comment_author_url>" . esc_url_raw( $c->comment_author_url ) . "</wp:comment_author_url>\n";
|
358 |
+
$wxr_post .= "\t\t\t<wp:comment_author_IP>" . $c->comment_author_IP . "</wp:comment_author_IP>\n";
|
359 |
+
$wxr_post .= "\t\t\t<wp:comment_date>" . $c->comment_date . "</wp:comment_date>\n";
|
360 |
+
$wxr_post .= "\t\t\t<wp:comment_date_gmt>" . $c->comment_date_gmt . "</wp:comment_date_gmt>\n";
|
361 |
+
$wxr_post .= "\t\t\t<wp:comment_content>" . $this->wxr_cdata( $c->comment_content ) . "</wp:comment_content>\n";
|
362 |
+
$wxr_post .= "\t\t\t<wp:comment_approved>" . $c->comment_approved . "</wp:comment_approved>\n";
|
363 |
+
$wxr_post .= "\t\t\t<wp:comment_type>" . $c->comment_type . "</wp:comment_type>\n";
|
364 |
+
$wxr_post .= "\t\t\t<wp:comment_parent>" . $c->comment_parent . "</wp:comment_parent>\n";
|
365 |
+
$wxr_post .= "\t\t\t<wp:comment_user_id>" . $c->user_id . "</wp:comment_user_id>\n";
|
366 |
+
$c_meta = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->commentmeta WHERE comment_id = %d", $c->comment_ID ) );
|
367 |
+
foreach ( $c_meta as $meta ) {
|
368 |
+
$wxr_post .= "\t\t\t<wp:commentmeta>\n\t\t\t\t<wp:meta_key>" . $meta->meta_key ."</wp:meta_key>\n\t\t\t\t<wp:meta_value>" .$this->wxr_cdata( $meta->meta_value ) ."</wp:meta_value>\n\t\t\t</wp:commentmeta>\n";
|
369 |
+
}
|
370 |
+
$wxr_post .= "\t\t</wp:comment>\n";
|
371 |
+
}
|
372 |
+
$wxr_post .= "\t</item>\n";
|
373 |
+
$job_object->substeps_done ++;
|
374 |
+
}
|
375 |
+
$written = file_put_contents( $job_object->steps_data[ $job_object->step_working ][ 'wpexportfile' ], $wxr_post, FILE_APPEND );
|
376 |
+
if ( $written === FALSE ) {
|
377 |
+
$job_object->log( __( 'WP Export file could not written.', 'backwpup' ), E_USER_ERROR );
|
378 |
+
|
379 |
+
return FALSE;
|
380 |
+
}
|
381 |
+
$job_object->do_restart_time();
|
382 |
+
}
|
383 |
+
}
|
384 |
+
$written = file_put_contents( $job_object->steps_data[ $job_object->step_working ][ 'wpexportfile' ], "</channel>\n</rss>", FILE_APPEND );
|
385 |
+
if ( $written === FALSE ) {
|
386 |
+
$job_object->log( __( 'WP Export file could not written.', 'backwpup' ), E_USER_ERROR );
|
387 |
+
|
388 |
+
return FALSE;
|
389 |
+
}
|
390 |
+
$job_object->steps_data[ $job_object->step_working ]['substep'] = 'check';
|
391 |
+
$job_object->substeps_done ++;
|
392 |
+
$job_object->update_working_data();
|
393 |
+
$job_object->do_restart_time();
|
394 |
+
}
|
395 |
+
|
396 |
+
remove_filter( 'wxr_export_skip_postmeta', array( $this, 'wxr_filter_postmeta' ), 10, 2 );
|
397 |
+
|
398 |
+
if ( $job_object->steps_data[ $job_object->step_working ]['substep'] == 'check' ) {
|
399 |
+
|
400 |
+
if ( extension_loaded( 'simplexml' ) && class_exists( 'DOMDocument' ) ) {
|
401 |
+
$job_object->log( __( 'Check WP Export file …', 'backwpup' ) );
|
402 |
+
$job_object->need_free_memory( filesize( $job_object->steps_data[ $job_object->step_working ]['wpexportfile'] ) * 2 );
|
403 |
+
$valid = TRUE;
|
404 |
+
|
405 |
+
$internal_errors = libxml_use_internal_errors( TRUE );
|
406 |
+
$dom = new DOMDocument;
|
407 |
+
$old_value = NULL;
|
408 |
+
if ( function_exists( 'libxml_disable_entity_loader' ) )
|
409 |
+
$old_value = libxml_disable_entity_loader( TRUE );
|
410 |
+
$success = $dom->loadXML( file_get_contents( $job_object->steps_data[ $job_object->step_working ]['wpexportfile'] ) );
|
411 |
+
if ( ! is_null( $old_value ) )
|
412 |
+
libxml_disable_entity_loader( $old_value );
|
413 |
+
|
414 |
+
if ( ! $success || isset( $dom->doctype ) ) {
|
415 |
+
$errors = libxml_get_errors();
|
416 |
+
$valid = FALSE;
|
417 |
+
|
418 |
+
foreach ( $errors as $error ) {
|
419 |
+
switch ( $error->level ) {
|
420 |
+
case LIBXML_ERR_WARNING:
|
421 |
+
$job_object->log( E_USER_WARNING, sprintf( __( 'XML WARNING (%s): %s', 'backwpup' ), $error->code, trim( $error->message ) ), $job_object->steps_data[ $job_object->step_working ]['wpexportfile'], $error->line );
|
422 |
+
break;
|
423 |
+
case LIBXML_ERR_ERROR:
|
424 |
+
$job_object->log( E_USER_WARNING, sprintf( __( 'XML RECOVERABLE (%s): %s', 'backwpup' ), $error->code, trim( $error->message ) ), $job_object->steps_data[ $job_object->step_working ]['wpexportfile'], $error->line );
|
425 |
+
break;
|
426 |
+
case LIBXML_ERR_FATAL:
|
427 |
+
$job_object->log( E_USER_WARNING, sprintf( __( 'XML ERROR (%s): %s', 'backwpup' ),$error->code, trim( $error->message ) ), $job_object->steps_data[ $job_object->step_working ]['wpexportfile'], $error->line );
|
428 |
+
break;
|
429 |
+
}
|
430 |
+
}
|
431 |
+
} else {
|
432 |
+
$xml = simplexml_import_dom( $dom );
|
433 |
+
unset( $dom );
|
434 |
+
|
435 |
+
// halt if loading produces an error
|
436 |
+
if ( ! $xml ) {
|
437 |
+
$job_object->log( __( 'There was an error when reading this WXR file', 'backwpup' ), E_USER_ERROR );
|
438 |
+
$valid = FALSE;
|
439 |
+
} else {
|
440 |
+
|
441 |
+
$wxr_version = $xml->xpath('/rss/channel/wp:wxr_version');
|
442 |
+
if ( ! $wxr_version ) {
|
443 |
+
$job_object->log( __( 'This does not appear to be a WXR file, missing/invalid WXR version number', 'backwpup' ), E_USER_ERROR );
|
444 |
+
$valid = FALSE;
|
445 |
+
}
|
446 |
+
|
447 |
+
$wxr_version = (string) trim( $wxr_version[0] );
|
448 |
+
// confirm that we are dealing with the correct file format
|
449 |
+
if ( ! preg_match( '/^\d+\.\d+$/', $wxr_version ) ) {
|
450 |
+
$job_object->log( __( 'This does not appear to be a WXR file, missing/invalid WXR version number', 'backwpup' ), E_USER_ERROR );
|
451 |
+
$valid = FALSE;
|
452 |
+
}
|
453 |
+
}
|
454 |
+
}
|
455 |
+
|
456 |
+
libxml_use_internal_errors( $internal_errors );
|
457 |
+
|
458 |
+
if ( $valid )
|
459 |
+
$job_object->log( __( 'WP Export file is a valid WXR file.', 'backwpup' ) );
|
460 |
+
} else {
|
461 |
+
$job_object->log( __( 'WP Export file can not checked, because no XML extension loaded with the file can checked.', 'backwpup' ) );
|
462 |
+
}
|
463 |
+
|
464 |
+
$job_object->steps_data[ $job_object->step_working ]['substep'] = 'compress';
|
465 |
+
$job_object->substeps_done ++;
|
466 |
+
$job_object->update_working_data();
|
467 |
+
$job_object->do_restart_time();
|
468 |
+
}
|
469 |
+
|
470 |
+
//Compress file
|
471 |
+
if ( $job_object->steps_data[ $job_object->step_working ]['substep'] == 'compress' ) {
|
472 |
+
if ( ! empty( $job_object->job[ 'wpexportfilecompression' ] ) ) {
|
473 |
+
$job_object->log( __( 'Compressing file …', 'backwpup' ) );
|
474 |
+
try {
|
475 |
+
$compress = new BackWPup_Create_Archive( $job_object->steps_data[ $job_object->step_working ]['wpexportfile'] . $job_object->job[ 'wpexportfilecompression' ] );
|
476 |
+
if ( $compress->add_file( $job_object->steps_data[ $job_object->step_working ]['wpexportfile'] ) ) {
|
477 |
+
unset( $compress );
|
478 |
+
unlink( $job_object->steps_data[ $job_object->step_working ]['wpexportfile'] );
|
479 |
+
$job_object->steps_data[ $job_object->step_working ]['wpexportfile'] .= $job_object->job[ 'wpexportfilecompression' ];
|
480 |
+
$job_object->log( __( 'Compressing done.', 'backwpup' ) );
|
481 |
+
}
|
482 |
+
} catch ( Exception $e ) {
|
483 |
+
$job_object->log( $e->getMessage(), E_USER_ERROR, $e->getFile(), $e->getLine() );
|
484 |
+
unset( $compress );
|
485 |
+
return FALSE;
|
486 |
+
}
|
487 |
+
}
|
488 |
+
$job_object->steps_data[ $job_object->step_working ]['substep'] = 'addfile';
|
489 |
+
$job_object->substeps_done ++;
|
490 |
+
$job_object->update_working_data();
|
491 |
+
$job_object->do_restart_time();
|
492 |
+
}
|
493 |
+
|
494 |
+
if ( $job_object->steps_data[ $job_object->step_working ]['substep'] == 'addfile' ) {
|
495 |
+
//add XML file to backup files
|
496 |
+
if ( is_readable( $job_object->steps_data[ $job_object->step_working ]['wpexportfile'] ) ) {
|
497 |
+
$job_object->additional_files_to_backup[ ] = $job_object->steps_data[ $job_object->step_working ]['wpexportfile'];
|
498 |
+
$job_object->count_files ++;
|
499 |
+
$filesize = filesize( $job_object->steps_data[ $job_object->step_working ][ 'wpexportfile' ] );
|
500 |
+
$job_object->count_filesize = $job_object->count_filesize + $filesize;
|
501 |
+
$job_object->log( sprintf( __( 'Added XML export "%1$s" with %2$s to backup file list.', 'backwpup' ), basename( $job_object->steps_data[ $job_object->step_working ]['wpexportfile'] ), size_format( $filesize, 2 ) ) );
|
502 |
+
}
|
503 |
+
$job_object->substeps_done ++;
|
504 |
+
$job_object->update_working_data();
|
505 |
+
}
|
506 |
+
|
507 |
+
return TRUE;
|
508 |
+
}
|
509 |
+
|
510 |
+
/**
|
511 |
+
* Wrap given string in XML CDATA tag.
|
512 |
+
*
|
513 |
+
* @since WordPress 2.1.0
|
514 |
+
*
|
515 |
+
* @param string $str String to wrap in XML CDATA tag.
|
516 |
+
* @return string
|
517 |
+
*/
|
518 |
+
private function wxr_cdata( $str ) {
|
519 |
+
if ( seems_utf8( $str ) == false )
|
520 |
+
$str = utf8_encode( $str );
|
521 |
+
|
522 |
+
// not allowed UTF-8 chars in XML
|
523 |
+
$str = preg_replace( '/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u', '', $str );
|
524 |
+
|
525 |
+
// $str = ent2ncr(esc_html($str));
|
526 |
+
$str = '<![CDATA[' . str_replace( ']]>', ']]]]><![CDATA[>', $str ) . ']]>';
|
527 |
+
|
528 |
+
return $str;
|
529 |
+
}
|
530 |
+
|
531 |
+
/**
|
532 |
+
* Return the URL of the site
|
533 |
+
*
|
534 |
+
* @since WordPress 2.5.0
|
535 |
+
*
|
536 |
+
* @return string Site URL.
|
537 |
+
*/
|
538 |
+
private function wxr_site_url() {
|
539 |
+
// ms: the base url
|
540 |
+
if ( is_multisite() )
|
541 |
+
return network_home_url();
|
542 |
+
// wp: the blog url
|
543 |
+
else
|
544 |
+
return get_bloginfo_rss( 'url' );
|
545 |
+
}
|
546 |
+
|
547 |
+
/**
|
548 |
+
* Output a cat_name XML tag from a given category object
|
549 |
+
*
|
550 |
+
* @since WordPress 2.1.0
|
551 |
+
*
|
552 |
+
* @param object $category Category Object
|
553 |
+
* @return string
|
554 |
+
*/
|
555 |
+
private function wxr_cat_name( $category ) {
|
556 |
+
if ( empty( $category->name ) )
|
557 |
+
return '';
|
558 |
+
|
559 |
+
return '<wp:cat_name>' . $this->wxr_cdata( $category->name ) . '</wp:cat_name>';
|
560 |
+
}
|
561 |
+
|
562 |
+
/**
|
563 |
+
* Output a category_description XML tag from a given category object
|
564 |
+
*
|
565 |
+
* @since WordPress 2.1.0
|
566 |
+
*
|
567 |
+
* @param object $category Category Object
|
568 |
+
* @return string
|
569 |
+
*/
|
570 |
+
private function wxr_category_description( $category ) {
|
571 |
+
if ( empty( $category->description ) )
|
572 |
+
return '';
|
573 |
+
|
574 |
+
return '<wp:category_description>' . $this->wxr_cdata( $category->description ) . '</wp:category_description>';
|
575 |
+
}
|
576 |
+
|
577 |
+
/**
|
578 |
+
* Output a tag_name XML tag from a given tag object
|
579 |
+
*
|
580 |
+
* @since WordPress 2.3.0
|
581 |
+
*
|
582 |
+
* @param object $tag Tag Object
|
583 |
+
* @return string
|
584 |
+
*/
|
585 |
+
private function wxr_tag_name( $tag ) {
|
586 |
+
if ( empty( $tag->name ) )
|
587 |
+
return '';
|
588 |
+
|
589 |
+
return '<wp:tag_name>' . $this->wxr_cdata( $tag->name ) . '</wp:tag_name>';
|
590 |
+
}
|
591 |
+
|
592 |
+
/**
|
593 |
+
* Output a tag_description XML tag from a given tag object
|
594 |
+
*
|
595 |
+
* @since WordPress 2.3.0
|
596 |
+
*
|
597 |
+
* @param object $tag Tag Object
|
598 |
+
* @return string
|
599 |
+
*/
|
600 |
+
private function wxr_tag_description( $tag ) {
|
601 |
+
if ( empty( $tag->description ) )
|
602 |
+
return '';
|
603 |
+
|
604 |
+
return '<wp:tag_description>' . $this->wxr_cdata( $tag->description ) . '</wp:tag_description>';
|
605 |
+
}
|
606 |
+
|
607 |
+
/**
|
608 |
+
* Output a term_name XML tag from a given term object
|
609 |
+
*
|
610 |
+
* @since WordPress 2.9.0
|
611 |
+
*
|
612 |
+
* @param object $term Term Object
|
613 |
+
* @return string
|
614 |
+
*/
|
615 |
+
private function wxr_term_name( $term ) {
|
616 |
+
if ( empty( $term->name ) )
|
617 |
+
return '';
|
618 |
+
|
619 |
+
return '<wp:term_name>' . $this->wxr_cdata( $term->name ) . '</wp:term_name>';
|
620 |
+
}
|
621 |
+
|
622 |
+
/**
|
623 |
+
* Output a term_description XML tag from a given term object
|
624 |
+
*
|
625 |
+
* @since WordPress 2.9.0
|
626 |
+
*
|
627 |
+
* @param object $term Term Object
|
628 |
+
* @return string
|
629 |
+
*/
|
630 |
+
private function wxr_term_description( $term ) {
|
631 |
+
if ( empty( $term->description ) )
|
632 |
+
return '';
|
633 |
+
|
634 |
+
return '<wp:term_description>' . $this->wxr_cdata( $term->description ) . '</wp:term_description>';
|
635 |
+
}
|
636 |
+
|
637 |
+
/**
|
638 |
+
* Output list of authors with posts
|
639 |
+
*
|
640 |
+
* @since WordPress 3.1.0
|
641 |
+
*/
|
642 |
+
private function wxr_authors_list() {
|
643 |
+
global $wpdb;
|
644 |
+
|
645 |
+
$authors = array();
|
646 |
+
$results = $wpdb->get_results( "SELECT DISTINCT post_author FROM $wpdb->posts WHERE post_status != 'auto-draft'" );
|
647 |
+
foreach ( (array) $results as $result )
|
648 |
+
$authors[] = get_userdata( $result->post_author );
|
649 |
+
|
650 |
+
$authors = array_filter( $authors );
|
651 |
+
|
652 |
+
$wxr_authors = '';
|
653 |
+
|
654 |
+
foreach ( $authors as $author ) {
|
655 |
+
$wxr_authors .= "\t<wp:author>";
|
656 |
+
$wxr_authors .= '<wp:author_id>' . $author->ID . '</wp:author_id>';
|
657 |
+
$wxr_authors .= '<wp:author_login>' . $author->user_login . '</wp:author_login>';
|
658 |
+
$wxr_authors .= '<wp:author_email>' . $author->user_email . '</wp:author_email>';
|
659 |
+
$wxr_authors .= '<wp:author_display_name>' . $this->wxr_cdata( $author->display_name ) . '</wp:author_display_name>';
|
660 |
+
$wxr_authors .= '<wp:author_first_name>' . $this->wxr_cdata( $author->user_firstname ) . '</wp:author_first_name>';
|
661 |
+
$wxr_authors .= '<wp:author_last_name>' . $this->wxr_cdata( $author->user_lastname ) . '</wp:author_last_name>';
|
662 |
+
$wxr_authors .= "</wp:author>\n";
|
663 |
+
}
|
664 |
+
|
665 |
+
return $wxr_authors;
|
666 |
+
}
|
667 |
+
|
668 |
+
/**
|
669 |
+
* Ouput all navigation menu terms
|
670 |
+
*
|
671 |
+
* @since WordPress 3.1.0
|
672 |
+
*/
|
673 |
+
private function wxr_nav_menu_terms() {
|
674 |
+
$nav_menus = wp_get_nav_menus();
|
675 |
+
if ( empty( $nav_menus ) || ! is_array( $nav_menus ) )
|
676 |
+
return '';
|
677 |
+
|
678 |
+
$wxr_nav_meuns = '';
|
679 |
+
|
680 |
+
foreach ( $nav_menus as $menu ) {
|
681 |
+
$wxr_nav_meuns .= "\t<wp:term><wp:term_id>{$menu->term_id}</wp:term_id><wp:term_taxonomy>nav_menu</wp:term_taxonomy><wp:term_slug>{$menu->slug}</wp:term_slug>";
|
682 |
+
$wxr_nav_meuns .= $this->wxr_term_name( $menu );
|
683 |
+
$wxr_nav_meuns .= "</wp:term>\n";
|
684 |
+
}
|
685 |
+
|
686 |
+
return $wxr_nav_meuns;
|
687 |
+
}
|
688 |
+
|
689 |
+
/**
|
690 |
+
* Output list of taxonomy terms, in XML tag format, associated with a post
|
691 |
+
*
|
692 |
+
* @since WordPress 2.3.0
|
693 |
+
*/
|
694 |
+
private function wxr_post_taxonomy() {
|
695 |
+
$post = get_post();
|
696 |
+
|
697 |
+
$taxonomies = get_object_taxonomies( $post->post_type );
|
698 |
+
if ( empty( $taxonomies ) )
|
699 |
+
return '';
|
700 |
+
$terms = wp_get_object_terms( $post->ID, $taxonomies );
|
701 |
+
|
702 |
+
$wxr_post_tags = '';
|
703 |
+
|
704 |
+
foreach ( (array) $terms as $term ) {
|
705 |
+
$wxr_post_tags .= "\t\t<category domain=\"{$term->taxonomy}\" nicename=\"{$term->slug}\">" . $this->wxr_cdata( $term->name ) . "</category>\n";
|
706 |
+
}
|
707 |
+
|
708 |
+
return $wxr_post_tags;
|
709 |
+
}
|
710 |
+
|
711 |
+
public function wxr_filter_postmeta( $return_me, $meta_key ) {
|
712 |
+
if ( '_edit_lock' == $meta_key )
|
713 |
+
$return_me = true;
|
714 |
+
return $return_me;
|
715 |
+
}
|
716 |
+
|
717 |
+
|
718 |
+
|
719 |
+
}
|
inc/class-jobtype-wpplugin.php
CHANGED
@@ -77,7 +77,7 @@ class BackWPup_JobType_WPPlugin extends BackWPup_JobTypes {
|
|
77 |
*/
|
78 |
public function edit_form_post_save( $id ) {
|
79 |
|
80 |
-
BackWPup_Option::update( $id, 'pluginlistfile', sanitize_file_name( $_POST[ 'pluginlistfile' ] ) );
|
81 |
if ( $_POST[ 'pluginlistfilecompression' ] == '' || $_POST[ 'pluginlistfilecompression' ] == '.gz' || $_POST[ 'pluginlistfilecompression' ] == '.bz2' )
|
82 |
BackWPup_Option::update( $id, 'pluginlistfilecompression', $_POST[ 'pluginlistfilecompression' ] );
|
83 |
}
|
77 |
*/
|
78 |
public function edit_form_post_save( $id ) {
|
79 |
|
80 |
+
BackWPup_Option::update( $id, 'pluginlistfile', BackWPup_Job::sanitize_file_name( $_POST[ 'pluginlistfile' ] ) );
|
81 |
if ( $_POST[ 'pluginlistfilecompression' ] == '' || $_POST[ 'pluginlistfilecompression' ] == '.gz' || $_POST[ 'pluginlistfilecompression' ] == '.bz2' )
|
82 |
BackWPup_Option::update( $id, 'pluginlistfilecompression', $_POST[ 'pluginlistfilecompression' ] );
|
83 |
}
|
inc/class-page-about.php
CHANGED
@@ -1,715 +1,715 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Render plugin about Page.
|
4 |
-
*
|
5 |
-
*/
|
6 |
-
class BackWPup_Page_About {
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Enqueue style.
|
10 |
-
*
|
11 |
-
* @return void
|
12 |
-
*/
|
13 |
-
public static function admin_print_styles() {
|
14 |
-
|
15 |
-
?>
|
16 |
-
<style type="text/css" media="screen">
|
17 |
-
.inpsyde {
|
18 |
-
width:79px;
|
19 |
-
height:119px;
|
20 |
-
background: url( '<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/inpsyde.png' ) no-repeat;
|
21 |
-
position: absolute;
|
22 |
-
top:0;
|
23 |
-
right: 100px;
|
24 |
-
z-index: 1;
|
25 |
-
}
|
26 |
-
.inpsyde a, .inpsyde a:link{
|
27 |
-
float:left;
|
28 |
-
font-size:14px;
|
29 |
-
color:#fff;
|
30 |
-
text-decoration:none;
|
31 |
-
padding:65px 15px 15px 15px;
|
32 |
-
text-align:center;
|
33 |
-
}
|
34 |
-
@media screen and (max-width: 782px) {
|
35 |
-
.inpsyde {
|
36 |
-
right:10px;
|
37 |
-
}
|
38 |
-
}
|
39 |
-
@media screen and (max-width: 600px) {
|
40 |
-
.inpsyde {
|
41 |
-
display: none;
|
42 |
-
}
|
43 |
-
}
|
44 |
-
#backwpup-page {
|
45 |
-
background: #fff;
|
46 |
-
margin-top: 22px;
|
47 |
-
padding: 0 20px;
|
48 |
-
}
|
49 |
-
#backwpup-page .inpsyde + h2 {
|
50 |
-
visibility: hidden;
|
51 |
-
}
|
52 |
-
.welcome {
|
53 |
-
/* max-width: 960px; */
|
54 |
-
}
|
55 |
-
.welcome .welcome_inner {
|
56 |
-
margin:0 auto;
|
57 |
-
max-width: 960px;
|
58 |
-
}
|
59 |
-
.backwpup-welcome {
|
60 |
-
/*
|
61 |
-
margin: 0 auto;
|
62 |
-
max-width: 960px;
|
63 |
-
*/
|
64 |
-
}
|
65 |
-
.welcome .welcome_inner h3{
|
66 |
-
font-size:42px;
|
67 |
-
}
|
68 |
-
.welcome .welcome_inner .welcometxt {
|
69 |
-
/* width: 100%; */
|
70 |
-
margin-bottom: 40px;
|
71 |
-
overflow: hidden;
|
72 |
-
border-bottom: 1px #ccc dotted;
|
73 |
-
text-align: center;
|
74 |
-
padding-bottom: 25px;
|
75 |
-
position: relative;
|
76 |
-
}
|
77 |
-
.welcome .welcome_inner .welcometxt p{
|
78 |
-
line-height:20px;
|
79 |
-
font-size:18px;
|
80 |
-
}
|
81 |
-
.welcome .welcome_inner .feature-box{
|
82 |
-
clear: both;
|
83 |
-
margin-bottom: 40px;
|
84 |
-
overflow: hidden;
|
85 |
-
}
|
86 |
-
.welcome .welcome_inner .feature-box .feature-image{
|
87 |
-
float: left;
|
88 |
-
width:18%;
|
89 |
-
height:auto;
|
90 |
-
}
|
91 |
-
.welcome .welcome_inner .feature-box .feature-image img{
|
92 |
-
width:100%;
|
93 |
-
height:auto;
|
94 |
-
max-width:350px;
|
95 |
-
}
|
96 |
-
.welcome .welcome_inner .feature-box .feature-text{
|
97 |
-
float: left;
|
98 |
-
width:72%;
|
99 |
-
padding: 0 0 20px 20px;
|
100 |
-
}
|
101 |
-
.welcome .welcome_inner .feature-box-right .feature-text {
|
102 |
-
padding: 0 20px 20px 0;
|
103 |
-
}
|
104 |
-
.welcome .welcome_inner .feature-box .feature-text h3{
|
105 |
-
color:rgb(0, 155, 204);
|
106 |
-
font-weight:normal;
|
107 |
-
font-size:24px;
|
108 |
-
margin:0 0 10px 0;
|
109 |
-
text-align:left;
|
110 |
-
}
|
111 |
-
.welcome .welcome_inner .feature-box .left {
|
112 |
-
float:left;
|
113 |
-
}
|
114 |
-
.welcome .welcome_inner .feature-box .right {
|
115 |
-
float:right;
|
116 |
-
}
|
117 |
-
.welcome .welcome_inner .featuretitle h3 {
|
118 |
-
font-size:28px;
|
119 |
-
font-weight:normal;
|
120 |
-
text-align:left;
|
121 |
-
margin-bottom:25px;
|
122 |
-
}
|
123 |
-
.welcome .button-primary-bwp {
|
124 |
-
float:left;
|
125 |
-
padding:15px;
|
126 |
-
font-size:18px;
|
127 |
-
text-decoration:none;
|
128 |
-
background-color:#38b0eb;
|
129 |
-
color:#fff;
|
130 |
-
border:none;
|
131 |
-
cursor:pointer;
|
132 |
-
margin: 35px 0;
|
133 |
-
}
|
134 |
-
.welcome .button-primary-bwp:hover {
|
135 |
-
background-color:#064565;
|
136 |
-
cursor:pointer;
|
137 |
-
}
|
138 |
-
@media only screen and (max-width: 1100px), only screen and (max-device-width: 1100px) {
|
139 |
-
.welcome .welcome_inner h3{
|
140 |
-
font-size:32px;
|
141 |
-
}
|
142 |
-
.welcome .welcome_inner .featuretitle h3 {
|
143 |
-
font-size:22px;
|
144 |
-
font-weight:normal;
|
145 |
-
text-align:left;
|
146 |
-
margin-bottom:25px;
|
147 |
-
}
|
148 |
-
.welcome .welcome_inner .welcometxt p{
|
149 |
-
line-height:20px;
|
150 |
-
font-size:14px;
|
151 |
-
}
|
152 |
-
.welcome .welcome_inner .feature-box .feature-text h3{
|
153 |
-
font-weight:normal;
|
154 |
-
font-size:20px;
|
155 |
-
margin:0 0 10px 0;
|
156 |
-
text-align:left;
|
157 |
-
}
|
158 |
-
.welcome .welcome_inner .feature-box .feature-text{
|
159 |
-
width:72%;
|
160 |
-
font-size:14px;
|
161 |
-
line-height:20px;
|
162 |
-
}
|
163 |
-
.welcome .button-primary-bwp {
|
164 |
-
float:left;
|
165 |
-
padding:10px;
|
166 |
-
font-size:16px;
|
167 |
-
text-decoration:none;
|
168 |
-
background-color:#38b0eb;
|
169 |
-
color:#fff;
|
170 |
-
border:none;
|
171 |
-
cursor:pointer;
|
172 |
-
margin: 35px 0;
|
173 |
-
}
|
174 |
-
}
|
175 |
-
@media only screen and (max-width: 780px), only screen and (max-device-width: 780px) {
|
176 |
-
.welcome .welcome_inner h3{
|
177 |
-
font-size:22px;
|
178 |
-
}
|
179 |
-
.welcome .welcome_inner .featuretitle h3 {
|
180 |
-
font-size:22px;
|
181 |
-
font-weight:normal;
|
182 |
-
text-align:left;
|
183 |
-
}
|
184 |
-
.welcome .welcome_inner .welcometxt p{
|
185 |
-
line-height:20px;
|
186 |
-
font-size:14px;
|
187 |
-
}
|
188 |
-
.welcome .welcome_inner .feature-box .feature-text h3{
|
189 |
-
font-weight:normal;
|
190 |
-
font-size:16px;
|
191 |
-
margin:0 0 10px 0;
|
192 |
-
}
|
193 |
-
.welcome .welcome_inner .feature-box .feature-text{
|
194 |
-
width:72%;
|
195 |
-
font-size:12px;
|
196 |
-
line-height:16px;
|
197 |
-
text-align:left;
|
198 |
-
}
|
199 |
-
.welcome .button-primary-bwp {
|
200 |
-
float:left;
|
201 |
-
padding:10px;
|
202 |
-
font-size:16px;
|
203 |
-
text-decoration:none;
|
204 |
-
background-color:#38b0eb;
|
205 |
-
color:#fff;
|
206 |
-
border:none;
|
207 |
-
cursor:pointer;
|
208 |
-
margin: 35px 0;
|
209 |
-
}
|
210 |
-
}
|
211 |
-
|
212 |
-
.backwpup_comp {
|
213 |
-
margin: 20px auto;
|
214 |
-
width: 100%;
|
215 |
-
font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
|
216 |
-
font-size: 16px;
|
217 |
-
}
|
218 |
-
|
219 |
-
.backwpup_comp table {
|
220 |
-
border: none;
|
221 |
-
}
|
222 |
-
|
223 |
-
.backwpup_comp table tbody tr.even td {
|
224 |
-
border: none;
|
225 |
-
background: none;
|
226 |
-
padding: 15px;
|
227 |
-
margin: 0;
|
228 |
-
}
|
229 |
-
|
230 |
-
.backwpup_comp table tbody tr.odd td {
|
231 |
-
border: none;
|
232 |
-
background: none;
|
233 |
-
padding: 15px;
|
234 |
-
margin: 0;
|
235 |
-
}
|
236 |
-
|
237 |
-
.backwpup_comp h3 {
|
238 |
-
font-family: "Arial", sans-serif;
|
239 |
-
font-size: 42px;
|
240 |
-
text-align: center;
|
241 |
-
font-weight: normal;
|
242 |
-
color: #333;
|
243 |
-
line-height: 44px;
|
244 |
-
margin: 20px 0;
|
245 |
-
}
|
246 |
-
|
247 |
-
.backwpup_comp table tbody tr.ub {
|
248 |
-
font-family: 'MisoRegular', "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
|
249 |
-
font-size: 26px;
|
250 |
-
}
|
251 |
-
|
252 |
-
.backwpup_comp table tbody tr.ubdown {
|
253 |
-
font-family: 'MisoRegular', "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
|
254 |
-
font-size: 26px;
|
255 |
-
background: none !important;
|
256 |
-
}
|
257 |
-
|
258 |
-
.backwpup_comp table tbody tr.even {
|
259 |
-
background-image: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/even.png);
|
260 |
-
}
|
261 |
-
|
262 |
-
.backwpup_comp table tbody tr.odd {
|
263 |
-
background-image: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/odd.png);
|
264 |
-
}
|
265 |
-
|
266 |
-
.backwpup_comp table tbody tr.ub td.pro {
|
267 |
-
height: 50px;
|
268 |
-
text-align: center;
|
269 |
-
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/hgtopgreen.png) no-repeat bottom center;
|
270 |
-
color: #fff;
|
271 |
-
border-left: 1px solid #112a32;
|
272 |
-
}
|
273 |
-
|
274 |
-
.backwpup_comp table tbody tr.ub td.free {
|
275 |
-
height: 50px;
|
276 |
-
text-align: center;
|
277 |
-
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/hgtopgreen.png) no-repeat bottom center;
|
278 |
-
color: #fff;
|
279 |
-
}
|
280 |
-
|
281 |
-
.backwpup_comp table tbody tr.ubdown td.pro {
|
282 |
-
height: 50px;
|
283 |
-
text-align: center;
|
284 |
-
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/hgbtgreen.png) no-repeat top center;
|
285 |
-
color: #fff;
|
286 |
-
border-left: 1px solid #1c3e49;
|
287 |
-
}
|
288 |
-
|
289 |
-
.backwpup_comp table tbody tr.ubdown td.pro a {
|
290 |
-
color: #fff;
|
291 |
-
text-decoration: none;
|
292 |
-
cursor: auto;
|
293 |
-
font-weight: 300;
|
294 |
-
line-height: 1.4em;
|
295 |
-
font-size: 18px;
|
296 |
-
}
|
297 |
-
|
298 |
-
.backwpup_comp table tbody tr.ubdown td.free {
|
299 |
-
height: 50px;
|
300 |
-
text-align: center;
|
301 |
-
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/hgbtred.png) no-repeat top center;
|
302 |
-
color: #fff;
|
303 |
-
}
|
304 |
-
|
305 |
-
.backwpup_comp table tbody tr.ubdown td.free a {
|
306 |
-
color: #fff;
|
307 |
-
}
|
308 |
-
|
309 |
-
.backwpup_comp table tbody tr.even td.tick {
|
310 |
-
width: 100px;
|
311 |
-
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/tickeven.png) no-repeat center;
|
312 |
-
border-bottom: 1px solid #799e14;
|
313 |
-
border-top: 1px solid #a2d123;
|
314 |
-
border-left: 1px solid #799e14;
|
315 |
-
}
|
316 |
-
|
317 |
-
.backwpup_comp table tbody tr.odd td.tick {
|
318 |
-
width: 100px;
|
319 |
-
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/tickodd.png) no-repeat center;
|
320 |
-
border-left: 1px solid #799e14;
|
321 |
-
}
|
322 |
-
|
323 |
-
.backwpup_comp table tbody tr.even td.error {
|
324 |
-
width: 100px;
|
325 |
-
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/erroreven.png) no-repeat center;
|
326 |
-
border-bottom: 1px solid #b13020;
|
327 |
-
border-top: 1px solid #e84936;
|
328 |
-
}
|
329 |
-
|
330 |
-
.backwpup_comp table tbody tr.odd td.error {
|
331 |
-
width: 100px;
|
332 |
-
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/errorodd.png) no-repeat center;
|
333 |
-
}
|
334 |
-
|
335 |
-
.backwpup_comp table tbody tr.even:hover {
|
336 |
-
background-image: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/hover.png);
|
337 |
-
}
|
338 |
-
|
339 |
-
.backwpup_comp table tbody tr.odd:hover {
|
340 |
-
background-image: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/hover.png);
|
341 |
-
}
|
342 |
-
|
343 |
-
.backwpup_comp table tbody tr.even:hover td.tick {
|
344 |
-
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/tickhover.png) center;
|
345 |
-
}
|
346 |
-
|
347 |
-
.backwpup_comp table tbody tr.odd:hover td.tick {
|
348 |
-
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/tickhover.png) center;
|
349 |
-
}
|
350 |
-
|
351 |
-
.backwpup_comp table tbody tr.even:hover td.error {
|
352 |
-
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/errorhover.png) center;
|
353 |
-
}
|
354 |
-
|
355 |
-
.backwpup_comp table tbody tr.odd:hover td.error {
|
356 |
-
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/errorhover.png) center;
|
357 |
-
}
|
358 |
-
|
359 |
-
.backwpup_comp table tbody tr.ubdown:hover td.pro:hover {
|
360 |
-
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/hgbtgreenhover.png) no-repeat top center;
|
361 |
-
}
|
362 |
-
|
363 |
-
.backwpup_comp table tbody tr.ubdown:hover td.free:hover {
|
364 |
-
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/hgbtredhover.png) no-repeat top center;
|
365 |
-
}
|
366 |
-
</style>
|
367 |
-
<?php
|
368 |
-
}
|
369 |
-
|
370 |
-
/**
|
371 |
-
* Enqueue script.
|
372 |
-
*
|
373 |
-
* @return void
|
374 |
-
*/
|
375 |
-
public static function admin_print_scripts() {
|
376 |
-
|
377 |
-
wp_enqueue_script( 'backwpupgeneral' );
|
378 |
-
|
379 |
-
}
|
380 |
-
|
381 |
-
|
382 |
-
/**
|
383 |
-
* Print the markup.
|
384 |
-
*
|
385 |
-
* @return void
|
386 |
-
*/
|
387 |
-
public static function page() {
|
388 |
-
|
389 |
-
?>
|
390 |
-
<div class="wrap" id="backwpup-page">
|
391 |
-
<div class="inpsyde">
|
392 |
-
<a href="http://inpsyde.com/" title="Inpsyde GmbH">Inpsyde</a>
|
393 |
-
</div>
|
394 |
-
<h2><span id="backwpup-page-icon"> </span><?php echo sprintf( __( '%s Welcome', 'backwpup' ), BackWPup::get_plugin_data( 'name') ); ?></h2>
|
395 |
-
<?php BackWPup_Admin::display_messages(); ?>
|
396 |
-
<div class="welcome">
|
397 |
-
<div class="welcome_inner">
|
398 |
-
<div class="top">
|
399 |
-
<?php if ( get_site_transient( 'backwpup_upgrade_from_version_two') ) { ?>
|
400 |
-
<div id="update-notice" class="backwpup-welcome updated">
|
401 |
-
<h3><?php _e( 'Heads up! You have updated from version 2.x', 'backwpup' ); ?></h3>
|
402 |
-
<p><?php echo str_replace( '\"','"', sprintf( __( 'Please <a href="%s">check your settings</a> after updating from version 2.x:', 'backwpup' ), network_admin_url( 'admin.php').'?page=backwpupjobs') ); ?></a></p>
|
403 |
-
<ul><li><?php _e('Dropbox authentication must be re-entered','backwpup'); ?></li>
|
404 |
-
<li><?php _e('SugarSync authentication must be re-entered','backwpup'); ?></li>
|
405 |
-
<li><?php _e('S3 Settings','backwpup'); ?></li>
|
406 |
-
<li><?php _e('Google Storage is now a part of S3 service settings','backwpup'); ?></li>
|
407 |
-
<li><?php _e('All your passwords','backwpup'); ?></li>
|
408 |
-
</ul>
|
409 |
-
</div>
|
410 |
-
<?php } ?>
|
411 |
-
</div>
|
412 |
-
<?php if ( class_exists( 'BackWPup_Pro', FALSE ) ) { ?>
|
413 |
-
<div class="welcometxt">
|
414 |
-
<div class="backwpup-welcome">
|
415 |
-
<img class="backwpup-banner-img" src="<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/backwpupbanner-pro.png" />
|
416 |
-
<h3><?php _e( 'Welcome to BackWPup Pro', 'backwpup' ); ?></h3>
|
417 |
-
<p><?php _e( 'BackWPup’s job wizards make planning and scheduling your backup jobs a breeze.', 'backwpup' ); echo ' ';
|
418 |
-
_e( 'Use your backup archives to save your entire WordPress installation including <code>/wp-content/</code>. Push them to an external storage service if you don’t want to save the backups on the same server. With a single backup archive you are able to restore an installation. Use a tool like phpMyAdmin or a plugin like <a href="http://wordpress.org/plugins/adminer/" target="_blank">Adminer</a> to restore your database backup files.', 'backwpup' ); ?></p>
|
419 |
-
<p><?php echo str_replace( '\"','"', sprintf( __( 'Ready to <a href="%1$s">set up a backup job</a>? You can <a href="%2$s">use the wizards</a> or plan your backup in expert mode.', 'backwpup' ), network_admin_url( 'admin.php').'?page=backwpupeditjob' , network_admin_url( 'admin.php').'?page=backwpupwizard' ) ); ?></p>
|
420 |
-
</div>
|
421 |
-
</div>
|
422 |
-
<?php } else {?>
|
423 |
-
<div class="welcometxt">
|
424 |
-
<div class="backwpup-welcome">
|
425 |
-
<img class="backwpup-banner-img" src="<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/backwpupbanner-free.png" />
|
426 |
-
<h3><?php _e( 'Welcome to BackWPup', 'backwpup' ); ?></h3>
|
427 |
-
<p><?php
|
428 |
-
_e( 'Use your backup archives to save your entire WordPress installation including <code>/wp-content/</code>. Push them to an external storage service if you don’t want to save the backups on the same server. With a single backup archive you are able to restore an installation. Use a tool like phpMyAdmin or a plugin like <a href="http://wordpress.org/plugins/adminer/" target="_blank">Adminer</a> to restore your database backup files.', 'backwpup' ); ?></p>
|
429 |
-
<p><?php _e( 'Ready to set up a backup job? Use one of the wizards to plan what you want to save.', 'backwpup' ); ?></p>
|
430 |
-
</div>
|
431 |
-
</div>
|
432 |
-
<?php } ?>
|
433 |
-
<?php
|
434 |
-
if ( class_exists( 'BackWPup_Pro', FALSE ) ) :
|
435 |
-
$autoupdate = BackWPup_Pro_MarketPress_Autoupdate::get_instance( BackWPup::get_plugin_data( 'Slug' ) , BackWPup::get_plugin_data( 'MainFile' ) );
|
436 |
-
if ( $autoupdate->license_check() == 'false' ) :
|
437 |
-
$plugins = get_plugins();
|
438 |
-
$localplugin = FALSE;
|
439 |
-
foreach ( $plugins as $plugin ) {
|
440 |
-
if ( BackWPup::get_plugin_data( 'Name' ) == $plugin[ 'Name' ] )
|
441 |
-
$localplugin = TRUE;
|
442 |
-
}
|
443 |
-
?>
|
444 |
-
<div class="welcometxt">
|
445 |
-
<div class="backwpup-welcome">
|
446 |
-
<h3><?php _e( 'Please activate your license', 'backwpup' ); ?></h3>
|
447 |
-
<p><a href="<?php echo $localplugin ? admin_url( 'plugins.php' ) : network_admin_url( 'plugins.php' ); ?>"><?php _e( 'Please go to your plugin page and active the license to have the autoupdates enabled.', 'backwpup' ); ?></a></p>
|
448 |
-
</div>
|
449 |
-
</div>
|
450 |
-
<?php endif; ?>
|
451 |
-
<?php endif; ?>
|
452 |
-
<div class="features">
|
453 |
-
|
454 |
-
<div class="feature-box <?php self::feature_class(); ?>">
|
455 |
-
<div class="feature-image">
|
456 |
-
<img title="<?php _e( 'Save your database', 'backwpup' ); ?>" src="<?php echo BackWPup::get_plugin_data( 'URL' ); ?>/assets/images/imagesave.png" />
|
457 |
-
</div>
|
458 |
-
<div class="feature-text">
|
459 |
-
<h3><?php _e( 'Save your database regularly', 'backwpup' ); ?></h3>
|
460 |
-
<p><?php echo str_replace( '\"','"', sprintf( __( 'With BackWPup you can schedule the database backup to run automatically. With a single backup file you can restore your database. You should <a href="%s">set up a backup job</a>, so you will never forget it. There is also an option to repair and optimize the database after each backup.', 'backwpup' ), network_admin_url( 'admin.php').'?page=backwpupeditjob' ) ); ?></p>
|
461 |
-
</div>
|
462 |
-
</div>
|
463 |
-
<div class="feature-box <?php self::feature_class(); ?>">
|
464 |
-
<div class="feature-text">
|
465 |
-
<h3><?php _e('WordPress XML Export', 'backwpup' ); ?></h3>
|
466 |
-
<p><?php _e('You can choose the built-in WordPress export format in addition or exclusive to save your data. This works in automated backups too of course. The advantage is: you can import these files into a blog with the regular WordPress importer.', 'backwpup'); ?></p>
|
467 |
-
</div>
|
468 |
-
<div class="feature-image">
|
469 |
-
<img title="<?php _e( 'WordPress XML Export', 'backwpup' ); ?>" src="<?php echo BackWPup::get_plugin_data( 'URL' ); ?>/assets/images/imagexml.png" />
|
470 |
-
</div>
|
471 |
-
</div>
|
472 |
-
<div class="feature-box <?php self::feature_class(); ?>">
|
473 |
-
<div class="feature-image">
|
474 |
-
<img title="<?php _e( 'Save all data from the webserver', 'backwpup' ); ?>" src="<?php echo BackWPup::get_plugin_data( 'URL' ); ?>/assets/images/imagedata.png" />
|
475 |
-
</div>
|
476 |
-
<div class="feature-text">
|
477 |
-
<h3><?php _e('Save all files', 'backwpup'); ?></h3>
|
478 |
-
<p><?php echo str_replace( '\"','"', sprintf( __('You can backup all your attachments, also all system files, plugins and themes in a single file. You can <a href="%s">create a job</a> to update a backup copy of your file system only when files are changed.', 'backwpup'), network_admin_url( 'admin.php' ) . '?page=backwpupeditjob' ) ); ?></p>
|
479 |
-
</div>
|
480 |
-
</div>
|
481 |
-
<div class="feature-box <?php self::feature_class(); ?>">
|
482 |
-
<div class="feature-text">
|
483 |
-
<h3><?php _e( 'Security!', 'backwpup' ); ?></h3>
|
484 |
-
<p><?php _e('By default everything is encrypted: connections to external services, local files and access to directories.', 'backwpup'); ?></p>
|
485 |
-
</div>
|
486 |
-
<div class="feature-image">
|
487 |
-
<img title="<?php _e( 'Security!', 'backwpup' ); ?>" src="<?php echo BackWPup::get_plugin_data( 'URL' ); ?>/assets/images/imagesec.png" />
|
488 |
-
</div>
|
489 |
-
</div>
|
490 |
-
<div class="feature-box <?php self::feature_class(); ?>">
|
491 |
-
<div class="feature-image">
|
492 |
-
<img title="<?php _e( 'Cloud Support', 'backwpup' ); ?>" src="<?php echo BackWPup::get_plugin_data( 'URL' ); ?>/assets/images/imagecloud.png" />
|
493 |
-
</div>
|
494 |
-
<div class="feature-text">
|
495 |
-
<h3><?php _e( 'Cloud Support', 'backwpup' ); ?></h3>
|
496 |
-
<p><?php _e( 'BackWPup supports multiple cloud services in parallel. This ensures backups are redundant.', 'backwpup' ); ?></p>
|
497 |
-
</div>
|
498 |
-
</div>
|
499 |
-
</div>
|
500 |
-
</div>
|
501 |
-
|
502 |
-
<?php if ( ! class_exists( 'BackWPup_Pro', FALSE ) ) : ?>
|
503 |
-
<div class="backwpup_comp">
|
504 |
-
<h3><?php _e( 'Features / differences between Free and Pro', 'backwpup' ); ?></h3>
|
505 |
-
<table width="100%" border="0" cellspacing="0" cellpadding="0">
|
506 |
-
<tr class="even ub">
|
507 |
-
<td><?php _e( 'Features', 'backwpup' ); ?></td>
|
508 |
-
<td class="free"><?php _e( 'FREE', 'backwpup' ); ?></td>
|
509 |
-
<td class="pro"><?php _e( 'PRO', 'backwpup' ); ?></td>
|
510 |
-
</tr>
|
511 |
-
<tr class="odd">
|
512 |
-
<td><?php _e( 'Complete database backup', 'backwpup' ); ?></td>
|
513 |
-
<td class="tick"></td>
|
514 |
-
<td class="tick"></td>
|
515 |
-
</tr>
|
516 |
-
<tr class="even">
|
517 |
-
<td><?php _e( 'Complete file backup', 'backwpup' ); ?></td>
|
518 |
-
<td class="tick"></td>
|
519 |
-
<td class="tick"></td>
|
520 |
-
</tr>
|
521 |
-
<tr class="odd">
|
522 |
-
<td><?php _e( 'Database check', 'backwpup' ); ?></td>
|
523 |
-
<td class="tick"></td>
|
524 |
-
<td class="tick"></td>
|
525 |
-
</tr>
|
526 |
-
<tr class="even">
|
527 |
-
<td><?php _e( 'Data compression', 'backwpup' ); ?></td>
|
528 |
-
<td class="tick"></td>
|
529 |
-
<td class="tick"></td>
|
530 |
-
</tr>
|
531 |
-
<tr class="odd">
|
532 |
-
<td><?php _e( 'WordPress XML export', 'backwpup' ); ?></td>
|
533 |
-
<td class="tick"></td>
|
534 |
-
<td class="tick"></td>
|
535 |
-
</tr>
|
536 |
-
<tr class="even">
|
537 |
-
<td><?php _e( 'List of installed plugins', 'backwpup' ); ?></td>
|
538 |
-
<td class="tick"></td>
|
539 |
-
<td class="tick"></td>
|
540 |
-
</tr>
|
541 |
-
<tr class="odd">
|
542 |
-
<td><?php _e( 'Backup archives management', 'backwpup' ); ?></td>
|
543 |
-
<td class="tick"></td>
|
544 |
-
<td class="tick"></td>
|
545 |
-
</tr>
|
546 |
-
<tr class="even">
|
547 |
-
<td><?php _e( 'Log file management', 'backwpup' ); ?></td>
|
548 |
-
<td class="tick"></td>
|
549 |
-
<td class="tick"></td>
|
550 |
-
</tr>
|
551 |
-
<tr class="odd">
|
552 |
-
<td><?php _e( 'Start jobs per WP-Cron, URL, system, backend or WP-CLI', 'backwpup' ); ?></td>
|
553 |
-
<td class="tick"></td>
|
554 |
-
<td class="tick"></td>
|
555 |
-
</tr>
|
556 |
-
<tr class="even">
|
557 |
-
<td><?php _e( 'Log report via email', 'backwpup' ); ?></td>
|
558 |
-
<td class="tick"></td>
|
559 |
-
<td class="tick"></td>
|
560 |
-
</tr>
|
561 |
-
<tr class="odd">
|
562 |
-
<td><?php _e( 'Backup to Microsoft Azure', 'backwpup' ); ?></td>
|
563 |
-
<td class="tick"></td>
|
564 |
-
<td class="tick"></td>
|
565 |
-
</tr>
|
566 |
-
<tr class="even">
|
567 |
-
<td><?php _e( 'Backup as email', 'backwpup' ); ?></td>
|
568 |
-
<td class="tick"></td>
|
569 |
-
<td class="tick"></td>
|
570 |
-
</tr>
|
571 |
-
<tr class="odd">
|
572 |
-
<td><?php _e( 'Backup to S3 services <small>(Amazon, Google Storage, Hosteurope and more)</small>', 'backwpup' ); ?></td>
|
573 |
-
<td class="tick"></td>
|
574 |
-
<td class="tick"></td>
|
575 |
-
</tr>
|
576 |
-
<tr class="even">
|
577 |
-
<td><?php _e( 'Backup to Dropbox', 'backwpup' ); ?></td>
|
578 |
-
<td class="tick"></td>
|
579 |
-
<td class="tick"></td>
|
580 |
-
</tr>
|
581 |
-
<tr class="odd">
|
582 |
-
<td><?php _e( 'Backup to Rackspace Cloud Files', 'backwpup' ); ?></td>
|
583 |
-
<td class="tick"></td>
|
584 |
-
<td class="tick"></td>
|
585 |
-
</tr>
|
586 |
-
<tr class="even">
|
587 |
-
<td><?php _e( 'Backup to FTP server', 'backwpup' ); ?></td>
|
588 |
-
<td class="tick"></td>
|
589 |
-
<td class="tick"></td>
|
590 |
-
</tr>
|
591 |
-
<tr class="odd">
|
592 |
-
<td><?php _e( 'Backup to your web space', 'backwpup' ); ?></td>
|
593 |
-
<td class="tick"></td>
|
594 |
-
<td class="tick"></td>
|
595 |
-
</tr>
|
596 |
-
<tr class="even">
|
597 |
-
<td><?php _e( 'Backup to SugarSync', 'backwpup' ); ?></td>
|
598 |
-
<td class="tick"></td>
|
599 |
-
<td class="tick"></td>
|
600 |
-
</tr>
|
601 |
-
<tr class="odd">
|
602 |
-
<td><?php _e( 'Backup to Google Drive', 'backwpup' ); ?></td>
|
603 |
-
<td class="error"></td>
|
604 |
-
<td class="tick"></td>
|
605 |
-
</tr>
|
606 |
-
<tr class="even">
|
607 |
-
<td><?php _e( 'Backup to Amazon Glacier', 'backwpup' ); ?></td>
|
608 |
-
<td class="error"></td>
|
609 |
-
<td class="tick"></td>
|
610 |
-
</tr>
|
611 |
-
<tr class="odd">
|
612 |
-
<td><?php _e( 'Custom API keys for DropBox and SugarSync', 'backwpup' ); ?></td>
|
613 |
-
<td class="error"></td>
|
614 |
-
<td class="tick"></td>
|
615 |
-
</tr>
|
616 |
-
<tr class="even">
|
617 |
-
<td><?php _e( 'XML database backup as PHPMyAdmin schema', 'backwpup' ); ?></td>
|
618 |
-
<td class="error"></td>
|
619 |
-
<td class="tick"></td>
|
620 |
-
</tr>
|
621 |
-
<tr class="odd">
|
622 |
-
<td><?php _e( 'Database backup as mysqldump per command line', 'backwpup' ); ?></td>
|
623 |
-
<td class="error"></td>
|
624 |
-
<td class="tick"></td>
|
625 |
-
</tr>
|
626 |
-
<tr class="even">
|
627 |
-
<td><?php _e( 'Database backup for additional MySQL databases', 'backwpup' ); ?></td>
|
628 |
-
<td class="error"></td>
|
629 |
-
<td class="tick"></td>
|
630 |
-
</tr>
|
631 |
-
<tr class="odd">
|
632 |
-
<td><?php _e( 'Import and export job settings as XML', 'backwpup' ); ?></td>
|
633 |
-
<td class="error"></td>
|
634 |
-
<td class="tick"></td>
|
635 |
-
</tr>
|
636 |
-
<tr class="even">
|
637 |
-
<td><?php _e( 'Wizard for system tests', 'backwpup' ); ?></td>
|
638 |
-
<td class="error"></td>
|
639 |
-
<td class="tick"></td>
|
640 |
-
</tr>
|
641 |
-
<tr class="odd">
|
642 |
-
<td><?php _e( 'Wizard for scheduled backup jobs', 'backwpup' ); ?></td>
|
643 |
-
<td class="error"></td>
|
644 |
-
<td class="tick"></td>
|
645 |
-
</tr>
|
646 |
-
<tr class="even">
|
647 |
-
<td><?php _e( 'Wizard to import settings and backup jobs', 'backwpup' ); ?></td>
|
648 |
-
<td class="error"></td>
|
649 |
-
<td class="tick"></td>
|
650 |
-
</tr>
|
651 |
-
<tr class="odd">
|
652 |
-
<td><?php _e( 'Differential backup of changed directories to Dropbox', 'backwpup' ); ?></td>
|
653 |
-
<td class="error"></td>
|
654 |
-
<td class="tick"></td>
|
655 |
-
</tr>
|
656 |
-
<tr class="even">
|
657 |
-
<td><?php _e( 'Differential backup of changed directories to Rackspace Cloud Files', 'backwpup' ); ?></td>
|
658 |
-
<td class="error"></td>
|
659 |
-
<td class="tick"></td>
|
660 |
-
</tr>
|
661 |
-
<tr class="odd">
|
662 |
-
<td><?php _e( 'Differential backup of changed directories to S3', 'backwpup' ); ?></td>
|
663 |
-
<td class="error"></td>
|
664 |
-
<td class="tick"></td>
|
665 |
-
</tr>
|
666 |
-
<tr class="even">
|
667 |
-
<td><?php _e( 'Differential backup of changed directories to MS Azure', 'backwpup' ); ?></td>
|
668 |
-
<td class="error"></td>
|
669 |
-
<td class="tick"></td>
|
670 |
-
</tr>
|
671 |
-
<tr class="odd">
|
672 |
-
<td><?php _e( '<strong>Premium support</strong>', 'backwpup' ); ?></td>
|
673 |
-
<td class="error"></td>
|
674 |
-
<td class="tick"></td>
|
675 |
-
</tr>
|
676 |
-
<tr class="even">
|
677 |
-
<td><?php _e( '<strong>Dynamically loaded documentation</strong>', 'backwpup' ); ?></td>
|
678 |
-
<td class="error" style="border-bottom:none;"></td>
|
679 |
-
<td class="tick" style="border-bottom:none;"></td>
|
680 |
-
</tr>
|
681 |
-
<tr class="odd">
|
682 |
-
<td><?php _e( '<strong>Automatic update from MarketPress</strong>', 'backwpup' ); ?></td>
|
683 |
-
<td class="error" style="border-bottom:none;"></td>
|
684 |
-
<td class="tick" style="border-bottom:none;"></td>
|
685 |
-
</tr>
|
686 |
-
<tr class="even ubdown">
|
687 |
-
<td></td>
|
688 |
-
<td></td>
|
689 |
-
<td class="pro buylink"><a href="<?php _e( 'http://marketpress.com/product/backwpup-pro/', 'backwpup' ); ?>"><?php _e( 'GET PRO', 'backwpup' ); ?></a></td>
|
690 |
-
</tr>
|
691 |
-
</table>
|
692 |
-
</div>
|
693 |
-
<?php
|
694 |
-
endif;
|
695 |
-
?>
|
696 |
-
</div>
|
697 |
-
</div>
|
698 |
-
<?php
|
699 |
-
}
|
700 |
-
|
701 |
-
/**
|
702 |
-
* Alternate between 'left' and 'right' CSS class.
|
703 |
-
*
|
704 |
-
* @since 2013.02.19
|
705 |
-
* @return void
|
706 |
-
*/
|
707 |
-
protected static function feature_class() {
|
708 |
-
|
709 |
-
static $class = 'feature-box-left';
|
710 |
-
|
711 |
-
print $class;
|
712 |
-
|
713 |
-
$class = 'feature-box-left' === $class ? 'feature-box-right' : 'feature-box-left';
|
714 |
-
}
|
715 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Render plugin about Page.
|
4 |
+
*
|
5 |
+
*/
|
6 |
+
class BackWPup_Page_About {
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Enqueue style.
|
10 |
+
*
|
11 |
+
* @return void
|
12 |
+
*/
|
13 |
+
public static function admin_print_styles() {
|
14 |
+
|
15 |
+
?>
|
16 |
+
<style type="text/css" media="screen">
|
17 |
+
.inpsyde {
|
18 |
+
width:79px;
|
19 |
+
height:119px;
|
20 |
+
background: url( '<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/inpsyde.png' ) no-repeat;
|
21 |
+
position: absolute;
|
22 |
+
top:0;
|
23 |
+
right: 100px;
|
24 |
+
z-index: 1;
|
25 |
+
}
|
26 |
+
.inpsyde a, .inpsyde a:link{
|
27 |
+
float:left;
|
28 |
+
font-size:14px;
|
29 |
+
color:#fff;
|
30 |
+
text-decoration:none;
|
31 |
+
padding:65px 15px 15px 15px;
|
32 |
+
text-align:center;
|
33 |
+
}
|
34 |
+
@media screen and (max-width: 782px) {
|
35 |
+
.inpsyde {
|
36 |
+
right:10px;
|
37 |
+
}
|
38 |
+
}
|
39 |
+
@media screen and (max-width: 600px) {
|
40 |
+
.inpsyde {
|
41 |
+
display: none;
|
42 |
+
}
|
43 |
+
}
|
44 |
+
#backwpup-page {
|
45 |
+
background: #fff;
|
46 |
+
margin-top: 22px;
|
47 |
+
padding: 0 20px;
|
48 |
+
}
|
49 |
+
#backwpup-page .inpsyde + h2 {
|
50 |
+
visibility: hidden;
|
51 |
+
}
|
52 |
+
.welcome {
|
53 |
+
/* max-width: 960px; */
|
54 |
+
}
|
55 |
+
.welcome .welcome_inner {
|
56 |
+
margin:0 auto;
|
57 |
+
max-width: 960px;
|
58 |
+
}
|
59 |
+
.backwpup-welcome {
|
60 |
+
/*
|
61 |
+
margin: 0 auto;
|
62 |
+
max-width: 960px;
|
63 |
+
*/
|
64 |
+
}
|
65 |
+
.welcome .welcome_inner h3{
|
66 |
+
font-size:42px;
|
67 |
+
}
|
68 |
+
.welcome .welcome_inner .welcometxt {
|
69 |
+
/* width: 100%; */
|
70 |
+
margin-bottom: 40px;
|
71 |
+
overflow: hidden;
|
72 |
+
border-bottom: 1px #ccc dotted;
|
73 |
+
text-align: center;
|
74 |
+
padding-bottom: 25px;
|
75 |
+
position: relative;
|
76 |
+
}
|
77 |
+
.welcome .welcome_inner .welcometxt p{
|
78 |
+
line-height:20px;
|
79 |
+
font-size:18px;
|
80 |
+
}
|
81 |
+
.welcome .welcome_inner .feature-box{
|
82 |
+
clear: both;
|
83 |
+
margin-bottom: 40px;
|
84 |
+
overflow: hidden;
|
85 |
+
}
|
86 |
+
.welcome .welcome_inner .feature-box .feature-image{
|
87 |
+
float: left;
|
88 |
+
width:18%;
|
89 |
+
height:auto;
|
90 |
+
}
|
91 |
+
.welcome .welcome_inner .feature-box .feature-image img{
|
92 |
+
width:100%;
|
93 |
+
height:auto;
|
94 |
+
max-width:350px;
|
95 |
+
}
|
96 |
+
.welcome .welcome_inner .feature-box .feature-text{
|
97 |
+
float: left;
|
98 |
+
width:72%;
|
99 |
+
padding: 0 0 20px 20px;
|
100 |
+
}
|
101 |
+
.welcome .welcome_inner .feature-box-right .feature-text {
|
102 |
+
padding: 0 20px 20px 0;
|
103 |
+
}
|
104 |
+
.welcome .welcome_inner .feature-box .feature-text h3{
|
105 |
+
color:rgb(0, 155, 204);
|
106 |
+
font-weight:normal;
|
107 |
+
font-size:24px;
|
108 |
+
margin:0 0 10px 0;
|
109 |
+
text-align:left;
|
110 |
+
}
|
111 |
+
.welcome .welcome_inner .feature-box .left {
|
112 |
+
float:left;
|
113 |
+
}
|
114 |
+
.welcome .welcome_inner .feature-box .right {
|
115 |
+
float:right;
|
116 |
+
}
|
117 |
+
.welcome .welcome_inner .featuretitle h3 {
|
118 |
+
font-size:28px;
|
119 |
+
font-weight:normal;
|
120 |
+
text-align:left;
|
121 |
+
margin-bottom:25px;
|
122 |
+
}
|
123 |
+
.welcome .button-primary-bwp {
|
124 |
+
float:left;
|
125 |
+
padding:15px;
|
126 |
+
font-size:18px;
|
127 |
+
text-decoration:none;
|
128 |
+
background-color:#38b0eb;
|
129 |
+
color:#fff;
|
130 |
+
border:none;
|
131 |
+
cursor:pointer;
|
132 |
+
margin: 35px 0;
|
133 |
+
}
|
134 |
+
.welcome .button-primary-bwp:hover {
|
135 |
+
background-color:#064565;
|
136 |
+
cursor:pointer;
|
137 |
+
}
|
138 |
+
@media only screen and (max-width: 1100px), only screen and (max-device-width: 1100px) {
|
139 |
+
.welcome .welcome_inner h3{
|
140 |
+
font-size:32px;
|
141 |
+
}
|
142 |
+
.welcome .welcome_inner .featuretitle h3 {
|
143 |
+
font-size:22px;
|
144 |
+
font-weight:normal;
|
145 |
+
text-align:left;
|
146 |
+
margin-bottom:25px;
|
147 |
+
}
|
148 |
+
.welcome .welcome_inner .welcometxt p{
|
149 |
+
line-height:20px;
|
150 |
+
font-size:14px;
|
151 |
+
}
|
152 |
+
.welcome .welcome_inner .feature-box .feature-text h3{
|
153 |
+
font-weight:normal;
|
154 |
+
font-size:20px;
|
155 |
+
margin:0 0 10px 0;
|
156 |
+
text-align:left;
|
157 |
+
}
|
158 |
+
.welcome .welcome_inner .feature-box .feature-text{
|
159 |
+
width:72%;
|
160 |
+
font-size:14px;
|
161 |
+
line-height:20px;
|
162 |
+
}
|
163 |
+
.welcome .button-primary-bwp {
|
164 |
+
float:left;
|
165 |
+
padding:10px;
|
166 |
+
font-size:16px;
|
167 |
+
text-decoration:none;
|
168 |
+
background-color:#38b0eb;
|
169 |
+
color:#fff;
|
170 |
+
border:none;
|
171 |
+
cursor:pointer;
|
172 |
+
margin: 35px 0;
|
173 |
+
}
|
174 |
+
}
|
175 |
+
@media only screen and (max-width: 780px), only screen and (max-device-width: 780px) {
|
176 |
+
.welcome .welcome_inner h3{
|
177 |
+
font-size:22px;
|
178 |
+
}
|
179 |
+
.welcome .welcome_inner .featuretitle h3 {
|
180 |
+
font-size:22px;
|
181 |
+
font-weight:normal;
|
182 |
+
text-align:left;
|
183 |
+
}
|
184 |
+
.welcome .welcome_inner .welcometxt p{
|
185 |
+
line-height:20px;
|
186 |
+
font-size:14px;
|
187 |
+
}
|
188 |
+
.welcome .welcome_inner .feature-box .feature-text h3{
|
189 |
+
font-weight:normal;
|
190 |
+
font-size:16px;
|
191 |
+
margin:0 0 10px 0;
|
192 |
+
}
|
193 |
+
.welcome .welcome_inner .feature-box .feature-text{
|
194 |
+
width:72%;
|
195 |
+
font-size:12px;
|
196 |
+
line-height:16px;
|
197 |
+
text-align:left;
|
198 |
+
}
|
199 |
+
.welcome .button-primary-bwp {
|
200 |
+
float:left;
|
201 |
+
padding:10px;
|
202 |
+
font-size:16px;
|
203 |
+
text-decoration:none;
|
204 |
+
background-color:#38b0eb;
|
205 |
+
color:#fff;
|
206 |
+
border:none;
|
207 |
+
cursor:pointer;
|
208 |
+
margin: 35px 0;
|
209 |
+
}
|
210 |
+
}
|
211 |
+
|
212 |
+
.backwpup_comp {
|
213 |
+
margin: 20px auto;
|
214 |
+
width: 100%;
|
215 |
+
font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
|
216 |
+
font-size: 16px;
|
217 |
+
}
|
218 |
+
|
219 |
+
.backwpup_comp table {
|
220 |
+
border: none;
|
221 |
+
}
|
222 |
+
|
223 |
+
.backwpup_comp table tbody tr.even td {
|
224 |
+
border: none;
|
225 |
+
background: none;
|
226 |
+
padding: 15px;
|
227 |
+
margin: 0;
|
228 |
+
}
|
229 |
+
|
230 |
+
.backwpup_comp table tbody tr.odd td {
|
231 |
+
border: none;
|
232 |
+
background: none;
|
233 |
+
padding: 15px;
|
234 |
+
margin: 0;
|
235 |
+
}
|
236 |
+
|
237 |
+
.backwpup_comp h3 {
|
238 |
+
font-family: "Arial", sans-serif;
|
239 |
+
font-size: 42px;
|
240 |
+
text-align: center;
|
241 |
+
font-weight: normal;
|
242 |
+
color: #333;
|
243 |
+
line-height: 44px;
|
244 |
+
margin: 20px 0;
|
245 |
+
}
|
246 |
+
|
247 |
+
.backwpup_comp table tbody tr.ub {
|
248 |
+
font-family: 'MisoRegular', "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
|
249 |
+
font-size: 26px;
|
250 |
+
}
|
251 |
+
|
252 |
+
.backwpup_comp table tbody tr.ubdown {
|
253 |
+
font-family: 'MisoRegular', "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
|
254 |
+
font-size: 26px;
|
255 |
+
background: none !important;
|
256 |
+
}
|
257 |
+
|
258 |
+
.backwpup_comp table tbody tr.even {
|
259 |
+
background-image: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/even.png);
|
260 |
+
}
|
261 |
+
|
262 |
+
.backwpup_comp table tbody tr.odd {
|
263 |
+
background-image: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/odd.png);
|
264 |
+
}
|
265 |
+
|
266 |
+
.backwpup_comp table tbody tr.ub td.pro {
|
267 |
+
height: 50px;
|
268 |
+
text-align: center;
|
269 |
+
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/hgtopgreen.png) no-repeat bottom center;
|
270 |
+
color: #fff;
|
271 |
+
border-left: 1px solid #112a32;
|
272 |
+
}
|
273 |
+
|
274 |
+
.backwpup_comp table tbody tr.ub td.free {
|
275 |
+
height: 50px;
|
276 |
+
text-align: center;
|
277 |
+
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/hgtopgreen.png) no-repeat bottom center;
|
278 |
+
color: #fff;
|
279 |
+
}
|
280 |
+
|
281 |
+
.backwpup_comp table tbody tr.ubdown td.pro {
|
282 |
+
height: 50px;
|
283 |
+
text-align: center;
|
284 |
+
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/hgbtgreen.png) no-repeat top center;
|
285 |
+
color: #fff;
|
286 |
+
border-left: 1px solid #1c3e49;
|
287 |
+
}
|
288 |
+
|
289 |
+
.backwpup_comp table tbody tr.ubdown td.pro a {
|
290 |
+
color: #fff;
|
291 |
+
text-decoration: none;
|
292 |
+
cursor: auto;
|
293 |
+
font-weight: 300;
|
294 |
+
line-height: 1.4em;
|
295 |
+
font-size: 18px;
|
296 |
+
}
|
297 |
+
|
298 |
+
.backwpup_comp table tbody tr.ubdown td.free {
|
299 |
+
height: 50px;
|
300 |
+
text-align: center;
|
301 |
+
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/hgbtred.png) no-repeat top center;
|
302 |
+
color: #fff;
|
303 |
+
}
|
304 |
+
|
305 |
+
.backwpup_comp table tbody tr.ubdown td.free a {
|
306 |
+
color: #fff;
|
307 |
+
}
|
308 |
+
|
309 |
+
.backwpup_comp table tbody tr.even td.tick {
|
310 |
+
width: 100px;
|
311 |
+
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/tickeven.png) no-repeat center;
|
312 |
+
border-bottom: 1px solid #799e14;
|
313 |
+
border-top: 1px solid #a2d123;
|
314 |
+
border-left: 1px solid #799e14;
|
315 |
+
}
|
316 |
+
|
317 |
+
.backwpup_comp table tbody tr.odd td.tick {
|
318 |
+
width: 100px;
|
319 |
+
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/tickodd.png) no-repeat center;
|
320 |
+
border-left: 1px solid #799e14;
|
321 |
+
}
|
322 |
+
|
323 |
+
.backwpup_comp table tbody tr.even td.error {
|
324 |
+
width: 100px;
|
325 |
+
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/erroreven.png) no-repeat center;
|
326 |
+
border-bottom: 1px solid #b13020;
|
327 |
+
border-top: 1px solid #e84936;
|
328 |
+
}
|
329 |
+
|
330 |
+
.backwpup_comp table tbody tr.odd td.error {
|
331 |
+
width: 100px;
|
332 |
+
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/errorodd.png) no-repeat center;
|
333 |
+
}
|
334 |
+
|
335 |
+
.backwpup_comp table tbody tr.even:hover {
|
336 |
+
background-image: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/hover.png);
|
337 |
+
}
|
338 |
+
|
339 |
+
.backwpup_comp table tbody tr.odd:hover {
|
340 |
+
background-image: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/hover.png);
|
341 |
+
}
|
342 |
+
|
343 |
+
.backwpup_comp table tbody tr.even:hover td.tick {
|
344 |
+
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/tickhover.png) center;
|
345 |
+
}
|
346 |
+
|
347 |
+
.backwpup_comp table tbody tr.odd:hover td.tick {
|
348 |
+
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/tickhover.png) center;
|
349 |
+
}
|
350 |
+
|
351 |
+
.backwpup_comp table tbody tr.even:hover td.error {
|
352 |
+
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/errorhover.png) center;
|
353 |
+
}
|
354 |
+
|
355 |
+
.backwpup_comp table tbody tr.odd:hover td.error {
|
356 |
+
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/errorhover.png) center;
|
357 |
+
}
|
358 |
+
|
359 |
+
.backwpup_comp table tbody tr.ubdown:hover td.pro:hover {
|
360 |
+
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/hgbtgreenhover.png) no-repeat top center;
|
361 |
+
}
|
362 |
+
|
363 |
+
.backwpup_comp table tbody tr.ubdown:hover td.free:hover {
|
364 |
+
background: url(<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/hgbtredhover.png) no-repeat top center;
|
365 |
+
}
|
366 |
+
</style>
|
367 |
+
<?php
|
368 |
+
}
|
369 |
+
|
370 |
+
/**
|
371 |
+
* Enqueue script.
|
372 |
+
*
|
373 |
+
* @return void
|
374 |
+
*/
|
375 |
+
public static function admin_print_scripts() {
|
376 |
+
|
377 |
+
wp_enqueue_script( 'backwpupgeneral' );
|
378 |
+
|
379 |
+
}
|
380 |
+
|
381 |
+
|
382 |
+
/**
|
383 |
+
* Print the markup.
|
384 |
+
*
|
385 |
+
* @return void
|
386 |
+
*/
|
387 |
+
public static function page() {
|
388 |
+
|
389 |
+
?>
|
390 |
+
<div class="wrap" id="backwpup-page">
|
391 |
+
<div class="inpsyde">
|
392 |
+
<a href="http://inpsyde.com/" title="Inpsyde GmbH">Inpsyde</a>
|
393 |
+
</div>
|
394 |
+
<h2><span id="backwpup-page-icon"> </span><?php echo sprintf( __( '%s Welcome', 'backwpup' ), BackWPup::get_plugin_data( 'name') ); ?></h2>
|
395 |
+
<?php BackWPup_Admin::display_messages(); ?>
|
396 |
+
<div class="welcome">
|
397 |
+
<div class="welcome_inner">
|
398 |
+
<div class="top">
|
399 |
+
<?php if ( get_site_transient( 'backwpup_upgrade_from_version_two') ) { ?>
|
400 |
+
<div id="update-notice" class="backwpup-welcome updated">
|
401 |
+
<h3><?php _e( 'Heads up! You have updated from version 2.x', 'backwpup' ); ?></h3>
|
402 |
+
<p><?php echo str_replace( '\"','"', sprintf( __( 'Please <a href="%s">check your settings</a> after updating from version 2.x:', 'backwpup' ), network_admin_url( 'admin.php').'?page=backwpupjobs') ); ?></a></p>
|
403 |
+
<ul><li><?php _e('Dropbox authentication must be re-entered','backwpup'); ?></li>
|
404 |
+
<li><?php _e('SugarSync authentication must be re-entered','backwpup'); ?></li>
|
405 |
+
<li><?php _e('S3 Settings','backwpup'); ?></li>
|
406 |
+
<li><?php _e('Google Storage is now a part of S3 service settings','backwpup'); ?></li>
|
407 |
+
<li><?php _e('All your passwords','backwpup'); ?></li>
|
408 |
+
</ul>
|
409 |
+
</div>
|
410 |
+
<?php } ?>
|
411 |
+
</div>
|
412 |
+
<?php if ( class_exists( 'BackWPup_Pro', FALSE ) ) { ?>
|
413 |
+
<div class="welcometxt">
|
414 |
+
<div class="backwpup-welcome">
|
415 |
+
<img class="backwpup-banner-img" src="<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/backwpupbanner-pro.png" />
|
416 |
+
<h3><?php _e( 'Welcome to BackWPup Pro', 'backwpup' ); ?></h3>
|
417 |
+
<p><?php _e( 'BackWPup’s job wizards make planning and scheduling your backup jobs a breeze.', 'backwpup' ); echo ' ';
|
418 |
+
_e( 'Use your backup archives to save your entire WordPress installation including <code>/wp-content/</code>. Push them to an external storage service if you don’t want to save the backups on the same server. With a single backup archive you are able to restore an installation. Use a tool like phpMyAdmin or a plugin like <a href="http://wordpress.org/plugins/adminer/" target="_blank">Adminer</a> to restore your database backup files.', 'backwpup' ); ?></p>
|
419 |
+
<p><?php echo str_replace( '\"','"', sprintf( __( 'Ready to <a href="%1$s">set up a backup job</a>? You can <a href="%2$s">use the wizards</a> or plan your backup in expert mode.', 'backwpup' ), network_admin_url( 'admin.php').'?page=backwpupeditjob' , network_admin_url( 'admin.php').'?page=backwpupwizard' ) ); ?></p>
|
420 |
+
</div>
|
421 |
+
</div>
|
422 |
+
<?php } else {?>
|
423 |
+
<div class="welcometxt">
|
424 |
+
<div class="backwpup-welcome">
|
425 |
+
<img class="backwpup-banner-img" src="<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/backwpupbanner-free.png" />
|
426 |
+
<h3><?php _e( 'Welcome to BackWPup', 'backwpup' ); ?></h3>
|
427 |
+
<p><?php
|
428 |
+
_e( 'Use your backup archives to save your entire WordPress installation including <code>/wp-content/</code>. Push them to an external storage service if you don’t want to save the backups on the same server. With a single backup archive you are able to restore an installation. Use a tool like phpMyAdmin or a plugin like <a href="http://wordpress.org/plugins/adminer/" target="_blank">Adminer</a> to restore your database backup files.', 'backwpup' ); ?></p>
|
429 |
+
<p><?php _e( 'Ready to set up a backup job? Use one of the wizards to plan what you want to save.', 'backwpup' ); ?></p>
|
430 |
+
</div>
|
431 |
+
</div>
|
432 |
+
<?php } ?>
|
433 |
+
<?php
|
434 |
+
if ( class_exists( 'BackWPup_Pro', FALSE ) ) :
|
435 |
+
$autoupdate = BackWPup_Pro_MarketPress_Autoupdate::get_instance( BackWPup::get_plugin_data( 'Slug' ) , BackWPup::get_plugin_data( 'MainFile' ) );
|
436 |
+
if ( $autoupdate->license_check() == 'false' ) :
|
437 |
+
$plugins = get_plugins();
|
438 |
+
$localplugin = FALSE;
|
439 |
+
foreach ( $plugins as $plugin ) {
|
440 |
+
if ( BackWPup::get_plugin_data( 'Name' ) == $plugin[ 'Name' ] )
|
441 |
+
$localplugin = TRUE;
|
442 |
+
}
|
443 |
+
?>
|
444 |
+
<div class="welcometxt">
|
445 |
+
<div class="backwpup-welcome">
|
446 |
+
<h3><?php _e( 'Please activate your license', 'backwpup' ); ?></h3>
|
447 |
+
<p><a href="<?php echo $localplugin ? admin_url( 'plugins.php' ) : network_admin_url( 'plugins.php' ); ?>"><?php _e( 'Please go to your plugin page and active the license to have the autoupdates enabled.', 'backwpup' ); ?></a></p>
|
448 |
+
</div>
|
449 |
+
</div>
|
450 |
+
<?php endif; ?>
|
451 |
+
<?php endif; ?>
|
452 |
+
<div class="features">
|
453 |
+
|
454 |
+
<div class="feature-box <?php self::feature_class(); ?>">
|
455 |
+
<div class="feature-image">
|
456 |
+
<img title="<?php _e( 'Save your database', 'backwpup' ); ?>" src="<?php echo BackWPup::get_plugin_data( 'URL' ); ?>/assets/images/imagesave.png" />
|
457 |
+
</div>
|
458 |
+
<div class="feature-text">
|
459 |
+
<h3><?php _e( 'Save your database regularly', 'backwpup' ); ?></h3>
|
460 |
+
<p><?php echo str_replace( '\"','"', sprintf( __( 'With BackWPup you can schedule the database backup to run automatically. With a single backup file you can restore your database. You should <a href="%s">set up a backup job</a>, so you will never forget it. There is also an option to repair and optimize the database after each backup.', 'backwpup' ), network_admin_url( 'admin.php').'?page=backwpupeditjob' ) ); ?></p>
|
461 |
+
</div>
|
462 |
+
</div>
|
463 |
+
<div class="feature-box <?php self::feature_class(); ?>">
|
464 |
+
<div class="feature-text">
|
465 |
+
<h3><?php _e('WordPress XML Export', 'backwpup' ); ?></h3>
|
466 |
+
<p><?php _e('You can choose the built-in WordPress export format in addition or exclusive to save your data. This works in automated backups too of course. The advantage is: you can import these files into a blog with the regular WordPress importer.', 'backwpup'); ?></p>
|
467 |
+
</div>
|
468 |
+
<div class="feature-image">
|
469 |
+
<img title="<?php _e( 'WordPress XML Export', 'backwpup' ); ?>" src="<?php echo BackWPup::get_plugin_data( 'URL' ); ?>/assets/images/imagexml.png" />
|
470 |
+
</div>
|
471 |
+
</div>
|
472 |
+
<div class="feature-box <?php self::feature_class(); ?>">
|
473 |
+
<div class="feature-image">
|
474 |
+
<img title="<?php _e( 'Save all data from the webserver', 'backwpup' ); ?>" src="<?php echo BackWPup::get_plugin_data( 'URL' ); ?>/assets/images/imagedata.png" />
|
475 |
+
</div>
|
476 |
+
<div class="feature-text">
|
477 |
+
<h3><?php _e('Save all files', 'backwpup'); ?></h3>
|
478 |
+
<p><?php echo str_replace( '\"','"', sprintf( __('You can backup all your attachments, also all system files, plugins and themes in a single file. You can <a href="%s">create a job</a> to update a backup copy of your file system only when files are changed.', 'backwpup'), network_admin_url( 'admin.php' ) . '?page=backwpupeditjob' ) ); ?></p>
|
479 |
+
</div>
|
480 |
+
</div>
|
481 |
+
<div class="feature-box <?php self::feature_class(); ?>">
|
482 |
+
<div class="feature-text">
|
483 |
+
<h3><?php _e( 'Security!', 'backwpup' ); ?></h3>
|
484 |
+
<p><?php _e('By default everything is encrypted: connections to external services, local files and access to directories.', 'backwpup'); ?></p>
|
485 |
+
</div>
|
486 |
+
<div class="feature-image">
|
487 |
+
<img title="<?php _e( 'Security!', 'backwpup' ); ?>" src="<?php echo BackWPup::get_plugin_data( 'URL' ); ?>/assets/images/imagesec.png" />
|
488 |
+
</div>
|
489 |
+
</div>
|
490 |
+
<div class="feature-box <?php self::feature_class(); ?>">
|
491 |
+
<div class="feature-image">
|
492 |
+
<img title="<?php _e( 'Cloud Support', 'backwpup' ); ?>" src="<?php echo BackWPup::get_plugin_data( 'URL' ); ?>/assets/images/imagecloud.png" />
|
493 |
+
</div>
|
494 |
+
<div class="feature-text">
|
495 |
+
<h3><?php _e( 'Cloud Support', 'backwpup' ); ?></h3>
|
496 |
+
<p><?php _e( 'BackWPup supports multiple cloud services in parallel. This ensures backups are redundant.', 'backwpup' ); ?></p>
|
497 |
+
</div>
|
498 |
+
</div>
|
499 |
+
</div>
|
500 |
+
</div>
|
501 |
+
|
502 |
+
<?php if ( ! class_exists( 'BackWPup_Pro', FALSE ) ) : ?>
|
503 |
+
<div class="backwpup_comp">
|
504 |
+
<h3><?php _e( 'Features / differences between Free and Pro', 'backwpup' ); ?></h3>
|
505 |
+
<table width="100%" border="0" cellspacing="0" cellpadding="0">
|
506 |
+
<tr class="even ub">
|
507 |
+
<td><?php _e( 'Features', 'backwpup' ); ?></td>
|
508 |
+
<td class="free"><?php _e( 'FREE', 'backwpup' ); ?></td>
|
509 |
+
<td class="pro"><?php _e( 'PRO', 'backwpup' ); ?></td>
|
510 |
+
</tr>
|
511 |
+
<tr class="odd">
|
512 |
+
<td><?php _e( 'Complete database backup', 'backwpup' ); ?></td>
|
513 |
+
<td class="tick"></td>
|
514 |
+
<td class="tick"></td>
|
515 |
+
</tr>
|
516 |
+
<tr class="even">
|
517 |
+
<td><?php _e( 'Complete file backup', 'backwpup' ); ?></td>
|
518 |
+
<td class="tick"></td>
|
519 |
+
<td class="tick"></td>
|
520 |
+
</tr>
|
521 |
+
<tr class="odd">
|
522 |
+
<td><?php _e( 'Database check', 'backwpup' ); ?></td>
|
523 |
+
<td class="tick"></td>
|
524 |
+
<td class="tick"></td>
|
525 |
+
</tr>
|
526 |
+
<tr class="even">
|
527 |
+
<td><?php _e( 'Data compression', 'backwpup' ); ?></td>
|
528 |
+
<td class="tick"></td>
|
529 |
+
<td class="tick"></td>
|
530 |
+
</tr>
|
531 |
+
<tr class="odd">
|
532 |
+
<td><?php _e( 'WordPress XML export', 'backwpup' ); ?></td>
|
533 |
+
<td class="tick"></td>
|
534 |
+
<td class="tick"></td>
|
535 |
+
</tr>
|
536 |
+
<tr class="even">
|
537 |
+
<td><?php _e( 'List of installed plugins', 'backwpup' ); ?></td>
|
538 |
+
<td class="tick"></td>
|
539 |
+
<td class="tick"></td>
|
540 |
+
</tr>
|
541 |
+
<tr class="odd">
|
542 |
+
<td><?php _e( 'Backup archives management', 'backwpup' ); ?></td>
|
543 |
+
<td class="tick"></td>
|
544 |
+
<td class="tick"></td>
|
545 |
+
</tr>
|
546 |
+
<tr class="even">
|
547 |
+
<td><?php _e( 'Log file management', 'backwpup' ); ?></td>
|
548 |
+
<td class="tick"></td>
|
549 |
+
<td class="tick"></td>
|
550 |
+
</tr>
|
551 |
+
<tr class="odd">
|
552 |
+
<td><?php _e( 'Start jobs per WP-Cron, URL, system, backend or WP-CLI', 'backwpup' ); ?></td>
|
553 |
+
<td class="tick"></td>
|
554 |
+
<td class="tick"></td>
|
555 |
+
</tr>
|
556 |
+
<tr class="even">
|
557 |
+
<td><?php _e( 'Log report via email', 'backwpup' ); ?></td>
|
558 |
+
<td class="tick"></td>
|
559 |
+
<td class="tick"></td>
|
560 |
+
</tr>
|
561 |
+
<tr class="odd">
|
562 |
+
<td><?php _e( 'Backup to Microsoft Azure', 'backwpup' ); ?></td>
|
563 |
+
<td class="tick"></td>
|
564 |
+
<td class="tick"></td>
|
565 |
+
</tr>
|
566 |
+
<tr class="even">
|
567 |
+
<td><?php _e( 'Backup as email', 'backwpup' ); ?></td>
|
568 |
+
<td class="tick"></td>
|
569 |
+
<td class="tick"></td>
|
570 |
+
</tr>
|
571 |
+
<tr class="odd">
|
572 |
+
<td><?php _e( 'Backup to S3 services <small>(Amazon, Google Storage, Hosteurope and more)</small>', 'backwpup' ); ?></td>
|
573 |
+
<td class="tick"></td>
|
574 |
+
<td class="tick"></td>
|
575 |
+
</tr>
|
576 |
+
<tr class="even">
|
577 |
+
<td><?php _e( 'Backup to Dropbox', 'backwpup' ); ?></td>
|
578 |
+
<td class="tick"></td>
|
579 |
+
<td class="tick"></td>
|
580 |
+
</tr>
|
581 |
+
<tr class="odd">
|
582 |
+
<td><?php _e( 'Backup to Rackspace Cloud Files', 'backwpup' ); ?></td>
|
583 |
+
<td class="tick"></td>
|
584 |
+
<td class="tick"></td>
|
585 |
+
</tr>
|
586 |
+
<tr class="even">
|
587 |
+
<td><?php _e( 'Backup to FTP server', 'backwpup' ); ?></td>
|
588 |
+
<td class="tick"></td>
|
589 |
+
<td class="tick"></td>
|
590 |
+
</tr>
|
591 |
+
<tr class="odd">
|
592 |
+
<td><?php _e( 'Backup to your web space', 'backwpup' ); ?></td>
|
593 |
+
<td class="tick"></td>
|
594 |
+
<td class="tick"></td>
|
595 |
+
</tr>
|
596 |
+
<tr class="even">
|
597 |
+
<td><?php _e( 'Backup to SugarSync', 'backwpup' ); ?></td>
|
598 |
+
<td class="tick"></td>
|
599 |
+
<td class="tick"></td>
|
600 |
+
</tr>
|
601 |
+
<tr class="odd">
|
602 |
+
<td><?php _e( 'Backup to Google Drive', 'backwpup' ); ?></td>
|
603 |
+
<td class="error"></td>
|
604 |
+
<td class="tick"></td>
|
605 |
+
</tr>
|
606 |
+
<tr class="even">
|
607 |
+
<td><?php _e( 'Backup to Amazon Glacier', 'backwpup' ); ?></td>
|
608 |
+
<td class="error"></td>
|
609 |
+
<td class="tick"></td>
|
610 |
+
</tr>
|
611 |
+
<tr class="odd">
|
612 |
+
<td><?php _e( 'Custom API keys for DropBox and SugarSync', 'backwpup' ); ?></td>
|
613 |
+
<td class="error"></td>
|
614 |
+
<td class="tick"></td>
|
615 |
+
</tr>
|
616 |
+
<tr class="even">
|
617 |
+
<td><?php _e( 'XML database backup as PHPMyAdmin schema', 'backwpup' ); ?></td>
|
618 |
+
<td class="error"></td>
|
619 |
+
<td class="tick"></td>
|
620 |
+
</tr>
|
621 |
+
<tr class="odd">
|
622 |
+
<td><?php _e( 'Database backup as mysqldump per command line', 'backwpup' ); ?></td>
|
623 |
+
<td class="error"></td>
|
624 |
+
<td class="tick"></td>
|
625 |
+
</tr>
|
626 |
+
<tr class="even">
|
627 |
+
<td><?php _e( 'Database backup for additional MySQL databases', 'backwpup' ); ?></td>
|
628 |
+
<td class="error"></td>
|
629 |
+
<td class="tick"></td>
|
630 |
+
</tr>
|
631 |
+
<tr class="odd">
|
632 |
+
<td><?php _e( 'Import and export job settings as XML', 'backwpup' ); ?></td>
|
633 |
+
<td class="error"></td>
|
634 |
+
<td class="tick"></td>
|
635 |
+
</tr>
|
636 |
+
<tr class="even">
|
637 |
+
<td><?php _e( 'Wizard for system tests', 'backwpup' ); ?></td>
|
638 |
+
<td class="error"></td>
|
639 |
+
<td class="tick"></td>
|
640 |
+
</tr>
|
641 |
+
<tr class="odd">
|
642 |
+
<td><?php _e( 'Wizard for scheduled backup jobs', 'backwpup' ); ?></td>
|
643 |
+
<td class="error"></td>
|
644 |
+
<td class="tick"></td>
|
645 |
+
</tr>
|
646 |
+
<tr class="even">
|
647 |
+
<td><?php _e( 'Wizard to import settings and backup jobs', 'backwpup' ); ?></td>
|
648 |
+
<td class="error"></td>
|
649 |
+
<td class="tick"></td>
|
650 |
+
</tr>
|
651 |
+
<tr class="odd">
|
652 |
+
<td><?php _e( 'Differential backup of changed directories to Dropbox', 'backwpup' ); ?></td>
|
653 |
+
<td class="error"></td>
|
654 |
+
<td class="tick"></td>
|
655 |
+
</tr>
|
656 |
+
<tr class="even">
|
657 |
+
<td><?php _e( 'Differential backup of changed directories to Rackspace Cloud Files', 'backwpup' ); ?></td>
|
658 |
+
<td class="error"></td>
|
659 |
+
<td class="tick"></td>
|
660 |
+
</tr>
|
661 |
+
<tr class="odd">
|
662 |
+
<td><?php _e( 'Differential backup of changed directories to S3', 'backwpup' ); ?></td>
|
663 |
+
<td class="error"></td>
|
664 |
+
<td class="tick"></td>
|
665 |
+
</tr>
|
666 |
+
<tr class="even">
|
667 |
+
<td><?php _e( 'Differential backup of changed directories to MS Azure', 'backwpup' ); ?></td>
|
668 |
+
<td class="error"></td>
|
669 |
+
<td class="tick"></td>
|
670 |
+
</tr>
|
671 |
+
<tr class="odd">
|
672 |
+
<td><?php _e( '<strong>Premium support</strong>', 'backwpup' ); ?></td>
|
673 |
+
<td class="error"></td>
|
674 |
+
<td class="tick"></td>
|
675 |
+
</tr>
|
676 |
+
<tr class="even">
|
677 |
+
<td><?php _e( '<strong>Dynamically loaded documentation</strong>', 'backwpup' ); ?></td>
|
678 |
+
<td class="error" style="border-bottom:none;"></td>
|
679 |
+
<td class="tick" style="border-bottom:none;"></td>
|
680 |
+
</tr>
|
681 |
+
<tr class="odd">
|
682 |
+
<td><?php _e( '<strong>Automatic update from MarketPress</strong>', 'backwpup' ); ?></td>
|
683 |
+
<td class="error" style="border-bottom:none;"></td>
|
684 |
+
<td class="tick" style="border-bottom:none;"></td>
|
685 |
+
</tr>
|
686 |
+
<tr class="even ubdown">
|
687 |
+
<td></td>
|
688 |
+
<td></td>
|
689 |
+
<td class="pro buylink"><a href="<?php _e( 'http://marketpress.com/product/backwpup-pro/', 'backwpup' ); ?>"><?php _e( 'GET PRO', 'backwpup' ); ?></a></td>
|
690 |
+
</tr>
|
691 |
+
</table>
|
692 |
+
</div>
|
693 |
+
<?php
|
694 |
+
endif;
|
695 |
+
?>
|
696 |
+
</div>
|
697 |
+
</div>
|
698 |
+
<?php
|
699 |
+
}
|
700 |
+
|
701 |
+
/**
|
702 |
+
* Alternate between 'left' and 'right' CSS class.
|
703 |
+
*
|
704 |
+
* @since 2013.02.19
|
705 |
+
* @return void
|
706 |
+
*/
|
707 |
+
protected static function feature_class() {
|
708 |
+
|
709 |
+
static $class = 'feature-box-left';
|
710 |
+
|
711 |
+
print $class;
|
712 |
+
|
713 |
+
$class = 'feature-box-left' === $class ? 'feature-box-right' : 'feature-box-left';
|
714 |
+
}
|
715 |
+
}
|
inc/class-page-editjob.php
CHANGED
@@ -77,8 +77,9 @@ class BackWPup_Page_Editjob {
|
|
77 |
}
|
78 |
}
|
79 |
}
|
80 |
-
if ( ! $makes_file )
|
81 |
$_POST[ 'destinations' ] = array();
|
|
|
82 |
BackWPup_Option::update( $jobid, 'type', $_POST[ 'type' ] );
|
83 |
|
84 |
if ( isset( $_POST[ 'destinations' ] ) && is_array( $_POST[ 'destinations' ] ) ) {
|
@@ -98,8 +99,9 @@ class BackWPup_Page_Editjob {
|
|
98 |
BackWPup_Option::update( $jobid, 'destinations', $_POST[ 'destinations' ] );
|
99 |
|
100 |
$name = esc_html( trim( $_POST[ 'name' ] ) );
|
101 |
-
if ( empty( $name ) || $_POST[ 'name' ] == __( 'New Job', 'backwpup' ) )
|
102 |
$name = sprintf( __( 'Job with ID %d', 'backwpup' ), $jobid );
|
|
|
103 |
BackWPup_Option::update( $jobid, 'name', $name );
|
104 |
BackWPup_Option::update( $jobid, 'mailaddresslog', sanitize_email( $_POST[ 'mailaddresslog' ] ) );
|
105 |
|
@@ -111,11 +113,11 @@ class BackWPup_Page_Editjob {
|
|
111 |
|
112 |
BackWPup_Option::update( $jobid, 'mailerroronly', ( isset( $_POST[ 'mailerroronly' ] ) && $_POST[ 'mailerroronly' ] == 1 ) ? TRUE : FALSE );
|
113 |
if ( class_exists( 'BackWPup_Pro', FALSE ) )
|
114 |
-
BackWPup_Option::update( $jobid, 'backuptype', $_POST[ 'backuptype' ] );
|
115 |
else
|
116 |
BackWPup_Option::update( $jobid, 'backuptype', 'archive' );
|
117 |
-
BackWPup_Option::update( $jobid, 'archiveformat', $_POST[ 'archiveformat' ] );
|
118 |
-
BackWPup_Option::update( $jobid, 'archivename', sanitize_file_name(
|
119 |
break;
|
120 |
case 'cron':
|
121 |
if ( $_POST[ 'activetype' ] == '' || $_POST[ 'activetype' ] == 'wpcron' || $_POST[ 'activetype' ] == 'link' )
|
@@ -515,8 +517,7 @@ class BackWPup_Page_Editjob {
|
|
515 |
<?php
|
516 |
$datevars = array( '%d', '%j', '%m', '%n', '%Y', '%y', '%a', '%A', '%B', '%g', '%G', '%h', '%H', '%i', '%s' );
|
517 |
$datevalues = array( date_i18n( 'd' ), date_i18n( 'j' ), date_i18n( 'm' ), date_i18n( 'n' ), date_i18n( 'Y' ), date_i18n( 'y' ), date_i18n( 'a' ), date_i18n( 'A' ), date_i18n( 'B' ), date_i18n( 'g' ), date_i18n( 'G' ), date_i18n( 'h' ), date_i18n( 'H' ), date_i18n( 'i' ), date_i18n( 's' ) );
|
518 |
-
$archivename = str_replace( $datevars, $datevalues, BackWPup_Option::get( $jobid, 'archivename' ) );
|
519 |
-
$archivename = sanitize_file_name( $archivename );
|
520 |
echo '<p>Preview: <code><span id="archivefilename">' . $archivename . '</span><span id="archiveformat">' . BackWPup_Option::get( $jobid, 'archiveformat' ) . '</span></code></p>';
|
521 |
?>
|
522 |
</td>
|
77 |
}
|
78 |
}
|
79 |
}
|
80 |
+
if ( ! $makes_file ) {
|
81 |
$_POST[ 'destinations' ] = array();
|
82 |
+
}
|
83 |
BackWPup_Option::update( $jobid, 'type', $_POST[ 'type' ] );
|
84 |
|
85 |
if ( isset( $_POST[ 'destinations' ] ) && is_array( $_POST[ 'destinations' ] ) ) {
|
99 |
BackWPup_Option::update( $jobid, 'destinations', $_POST[ 'destinations' ] );
|
100 |
|
101 |
$name = esc_html( trim( $_POST[ 'name' ] ) );
|
102 |
+
if ( empty( $name ) || $_POST[ 'name' ] == __( 'New Job', 'backwpup' ) ) {
|
103 |
$name = sprintf( __( 'Job with ID %d', 'backwpup' ), $jobid );
|
104 |
+
}
|
105 |
BackWPup_Option::update( $jobid, 'name', $name );
|
106 |
BackWPup_Option::update( $jobid, 'mailaddresslog', sanitize_email( $_POST[ 'mailaddresslog' ] ) );
|
107 |
|
113 |
|
114 |
BackWPup_Option::update( $jobid, 'mailerroronly', ( isset( $_POST[ 'mailerroronly' ] ) && $_POST[ 'mailerroronly' ] == 1 ) ? TRUE : FALSE );
|
115 |
if ( class_exists( 'BackWPup_Pro', FALSE ) )
|
116 |
+
BackWPup_Option::update( $jobid, 'backuptype', esc_html( $_POST[ 'backuptype' ] ) );
|
117 |
else
|
118 |
BackWPup_Option::update( $jobid, 'backuptype', 'archive' );
|
119 |
+
BackWPup_Option::update( $jobid, 'archiveformat', esc_html( $_POST[ 'archiveformat' ] ) );
|
120 |
+
BackWPup_Option::update( $jobid, 'archivename', BackWPup_Job::sanitize_file_name( $_POST[ 'archivename' ] ) );
|
121 |
break;
|
122 |
case 'cron':
|
123 |
if ( $_POST[ 'activetype' ] == '' || $_POST[ 'activetype' ] == 'wpcron' || $_POST[ 'activetype' ] == 'link' )
|
517 |
<?php
|
518 |
$datevars = array( '%d', '%j', '%m', '%n', '%Y', '%y', '%a', '%A', '%B', '%g', '%G', '%h', '%H', '%i', '%s' );
|
519 |
$datevalues = array( date_i18n( 'd' ), date_i18n( 'j' ), date_i18n( 'm' ), date_i18n( 'n' ), date_i18n( 'Y' ), date_i18n( 'y' ), date_i18n( 'a' ), date_i18n( 'A' ), date_i18n( 'B' ), date_i18n( 'g' ), date_i18n( 'G' ), date_i18n( 'h' ), date_i18n( 'H' ), date_i18n( 'i' ), date_i18n( 's' ) );
|
520 |
+
$archivename = str_replace( $datevars, $datevalues, BackWPup_Job::sanitize_file_name( BackWPup_Option::get( $jobid, 'archivename' ) ) );
|
|
|
521 |
echo '<p>Preview: <code><span id="archivefilename">' . $archivename . '</span><span id="archiveformat">' . BackWPup_Option::get( $jobid, 'archiveformat' ) . '</span></code></p>';
|
522 |
?>
|
523 |
</td>
|
inc/class-page-jobs.php
CHANGED
@@ -1,716 +1,716 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Class For BackWPup Jobs page
|
4 |
-
*/
|
5 |
-
class BackWPup_Page_Jobs extends WP_List_Table {
|
6 |
-
|
7 |
-
private static $listtable = NULL;
|
8 |
-
public static $logfile = NULL;
|
9 |
-
private $job_object = NULL;
|
10 |
-
private $job_types = NULL;
|
11 |
-
private $destinations = NULL;
|
12 |
-
|
13 |
-
|
14 |
-
/**
|
15 |
-
*
|
16 |
-
*/
|
17 |
-
function __construct() {
|
18 |
-
parent::__construct( array(
|
19 |
-
'plural' => 'jobs',
|
20 |
-
'singular' => 'job',
|
21 |
-
'ajax' => TRUE
|
22 |
-
) );
|
23 |
-
}
|
24 |
-
|
25 |
-
|
26 |
-
/**
|
27 |
-
* @return bool|void
|
28 |
-
*/
|
29 |
-
function ajax_user_can() {
|
30 |
-
|
31 |
-
return current_user_can( 'backwpup' );
|
32 |
-
}
|
33 |
-
|
34 |
-
/**
|
35 |
-
*
|
36 |
-
*/
|
37 |
-
function prepare_items() {
|
38 |
-
|
39 |
-
$this->items = BackWPup_Option::get_job_ids();
|
40 |
-
|
41 |
-
$this->job_object = BackWPup_Job::get_working_data();
|
42 |
-
|
43 |
-
$this->job_types = BackWPup::get_job_types();
|
44 |
-
$this->destinations = BackWPup::get_registered_destinations();
|
45 |
-
}
|
46 |
-
|
47 |
-
/**
|
48 |
-
*
|
49 |
-
*/
|
50 |
-
function no_items() {
|
51 |
-
|
52 |
-
_e( 'No Jobs.', 'backwpup' );
|
53 |
-
}
|
54 |
-
|
55 |
-
/**
|
56 |
-
* @return array
|
57 |
-
*/
|
58 |
-
function get_bulk_actions() {
|
59 |
-
|
60 |
-
if ( ! $this->has_items() )
|
61 |
-
return array ();
|
62 |
-
|
63 |
-
$actions = array();
|
64 |
-
$actions[ 'delete' ] = __( 'Delete', 'backwpup' );
|
65 |
-
|
66 |
-
return apply_filters( 'backwpup_page_jobs_get_bulk_actions', $actions );
|
67 |
-
}
|
68 |
-
|
69 |
-
/**
|
70 |
-
* @return array
|
71 |
-
*/
|
72 |
-
function get_columns() {
|
73 |
-
|
74 |
-
$jobs_columns = array();
|
75 |
-
$jobs_columns[ 'cb' ] = '<input type="checkbox" />';
|
76 |
-
$jobs_columns[ 'jobname' ] = __( 'Job Name', 'backwpup' );
|
77 |
-
$jobs_columns[ 'type' ] = __( 'Type', 'backwpup' );
|
78 |
-
$jobs_columns[ 'dest' ] = __( 'Destinations', 'backwpup' );
|
79 |
-
$jobs_columns[ 'next' ] = __( 'Next Run', 'backwpup' );
|
80 |
-
$jobs_columns[ 'last' ] = __( 'Last Run', 'backwpup' );
|
81 |
-
|
82 |
-
return $jobs_columns;
|
83 |
-
}
|
84 |
-
|
85 |
-
/**
|
86 |
-
* The cb Column
|
87 |
-
*
|
88 |
-
* @param $item
|
89 |
-
* @return string
|
90 |
-
*/
|
91 |
-
function column_cb( $item ) {
|
92 |
-
|
93 |
-
return '<input type="checkbox" name="jobs[]" value="' . esc_attr( $item ) . '" />';
|
94 |
-
}
|
95 |
-
|
96 |
-
/**
|
97 |
-
* The jobname Column
|
98 |
-
*
|
99 |
-
* @param $item
|
100 |
-
* @return string
|
101 |
-
*/
|
102 |
-
function column_jobname( $item ) {
|
103 |
-
|
104 |
-
$job_normal_hide ='';
|
105 |
-
if ( is_object( $this->job_object ) )
|
106 |
-
$job_normal_hide = ' style="display:none;"';
|
107 |
-
|
108 |
-
$r = '<strong title="' . sprintf( __( 'Job ID: %d', 'backwpup' ), $item ) . '">' . esc_html( BackWPup_Option::get( $item, 'name' ) ) . '</strong>';
|
109 |
-
$actions = array();
|
110 |
-
if ( current_user_can( 'backwpup_jobs_edit' ) ) {
|
111 |
-
$actions[ 'edit' ] = "<a href=\"" . wp_nonce_url( network_admin_url( 'admin.php' ) . '?page=backwpupeditjob&jobid=' . $item, 'edit-job' ) . "\">" . __( 'Edit', 'backwpup' ) . "</a>";
|
112 |
-
$actions[ 'copy' ] = "<a href=\"" . wp_nonce_url( network_admin_url( 'admin.php' ) . '?page=backwpupjobs&action=copy&jobid=' . $item, 'copy-job_' . $item ) . "\">" . __( 'Copy', 'backwpup' ) . "</a>";
|
113 |
-
$actions[ 'delete' ] = "<a class=\"submitdelete\" href=\"" . wp_nonce_url( network_admin_url( 'admin.php' ) . '?page=backwpupjobs&action=delete&jobs[]=' . $item, 'bulk-jobs' ) . "\" onclick=\"return showNotice.warn();\">" . __( 'Delete', 'backwpup' ) . "</a>";
|
114 |
-
}
|
115 |
-
if ( current_user_can( 'backwpup_jobs_start' ) ) {
|
116 |
-
$url = BackWPup_Job::get_jobrun_url( 'runnowlink', $item );
|
117 |
-
$actions[ 'runnow' ] = "<a href=\"" . $url[ 'url' ] . "\">" . __( 'Run now', 'backwpup' ) . "</a>";
|
118 |
-
}
|
119 |
-
if ( current_user_can( 'backwpup_logs' ) && BackWPup_Option::get( $item, 'logfile' ) ) {
|
120 |
-
$logfile = basename( BackWPup_Option::get( $item, 'logfile' ) );
|
121 |
-
if ( is_object( $this->job_object ) && $this->job_object->job[ 'jobid' ] == $item )
|
122 |
-
$logfile = basename( $this->job_object->logfile );
|
123 |
-
$actions[ 'lastlog' ] = '<a href="' . admin_url( 'admin-ajax.php' ) . '?&action=backwpup_view_log&logfile=' . $logfile .'&_ajax_nonce=' . wp_create_nonce( 'view-logs' ) . '&TB_iframe=true&width=640&height=440\" title="' . esc_attr( $logfile ) . '" class="thickbox">' . __( 'Last log', 'backwpup' ) . '</a>';
|
124 |
-
}
|
125 |
-
$actions = apply_filters( 'backwpup_page_jobs_actions', $actions, $item, FALSE );
|
126 |
-
$r .= '<div class="job-normal"' . $job_normal_hide . '>' . $this->row_actions( $actions ) . '</div>';
|
127 |
-
if ( is_object( $this->job_object ) ) {
|
128 |
-
$actionsrun = array();
|
129 |
-
$actionsrun = apply_filters( 'backwpup_page_jobs_actions', $actionsrun, $item, TRUE );
|
130 |
-
$r .= '<div class="job-run">' . $this->row_actions( $actionsrun ) . '</div>';
|
131 |
-
}
|
132 |
-
|
133 |
-
return $r;
|
134 |
-
}
|
135 |
-
|
136 |
-
/**
|
137 |
-
* The type Column
|
138 |
-
*
|
139 |
-
* @param $item
|
140 |
-
* @return string
|
141 |
-
*/
|
142 |
-
function column_type( $item ) {
|
143 |
-
|
144 |
-
$r = '';
|
145 |
-
if ( $types = BackWPup_Option::get( $item, 'type' ) ) {
|
146 |
-
foreach ( $types as $type ) {
|
147 |
-
if ( isset( $this->job_types[ $type ] ) ) {
|
148 |
-
$r .= $this->job_types[ $type ]->info[ 'name' ] . '<br />';
|
149 |
-
}
|
150 |
-
else {
|
151 |
-
$r .= $type . '<br />';
|
152 |
-
}
|
153 |
-
}
|
154 |
-
}
|
155 |
-
|
156 |
-
return $r;
|
157 |
-
}
|
158 |
-
|
159 |
-
/**
|
160 |
-
* The destination Column
|
161 |
-
*
|
162 |
-
* @param $item
|
163 |
-
* @return string
|
164 |
-
*/
|
165 |
-
function column_dest( $item ) {
|
166 |
-
|
167 |
-
$r = '';
|
168 |
-
$backup_to = FALSE;
|
169 |
-
foreach ( BackWPup_Option::get( $item, 'type' ) as $typeid ) {
|
170 |
-
if ( isset( $this->job_types[ $typeid ] ) && $this->job_types[ $typeid ]->creates_file() ) {
|
171 |
-
$backup_to = TRUE;
|
172 |
-
break;
|
173 |
-
}
|
174 |
-
}
|
175 |
-
if ( $backup_to ) {
|
176 |
-
foreach ( BackWPup_Option::get( $item, 'destinations' ) as $destid ) {
|
177 |
-
if ( isset( $this->destinations[ $destid ][ 'info' ][ 'name' ] ) ) {
|
178 |
-
$r .= $this->destinations[ $destid ][ 'info' ][ 'name' ] . '<br />';
|
179 |
-
} else {
|
180 |
-
$r .= $destid . '<br />';
|
181 |
-
}
|
182 |
-
}
|
183 |
-
}
|
184 |
-
else {
|
185 |
-
$r .= '<i>' . __( 'Not needed or set', 'backwpup' ) . '</i><br />';
|
186 |
-
}
|
187 |
-
|
188 |
-
return $r;
|
189 |
-
}
|
190 |
-
|
191 |
-
/**
|
192 |
-
* The next Column
|
193 |
-
*
|
194 |
-
* @param $item
|
195 |
-
* @return string
|
196 |
-
*/
|
197 |
-
function column_next( $item ) {
|
198 |
-
|
199 |
-
$r = '';
|
200 |
-
|
201 |
-
$job_normal_hide ='';
|
202 |
-
if ( is_object( $this->job_object ) )
|
203 |
-
$job_normal_hide = ' style="display:none;"';
|
204 |
-
|
205 |
-
if ( is_object( $this->job_object ) && $this->job_object->job[ 'jobid' ] == $item ) {
|
206 |
-
$runtime = current_time( 'timestamp' ) - $this->job_object->start_time;
|
207 |
-
$r .= '<div class="job-run">' . sprintf( __( 'Running for: %s seconds', 'backwpup' ), '<span id="runtime">' . $runtime . '</span>' ) .'</div>';
|
208 |
-
}
|
209 |
-
if ( is_object( $this->job_object ) && $this->job_object->job[ 'jobid' ] == $item )
|
210 |
-
$r .='<div class="job-normal"' . $job_normal_hide . '>';
|
211 |
-
if ( BackWPup_Option::get( $item, 'activetype' ) == 'wpcron' ) {
|
212 |
-
if ( $nextrun = wp_next_scheduled( 'backwpup_cron', array( 'id' => $item ) ) + ( get_option( 'gmt_offset' ) * 3600 ) )
|
213 |
-
$r .= '<span title="' . sprintf( __( 'Cron: %s','backwpup'),BackWPup_Option::get( $item, 'cron' ) ). '">' . sprintf( __( '%1$s at %2$s by WP-Cron', 'backwpup' ) , date_i18n( get_option( 'date_format' ), $nextrun, TRUE ) , date_i18n( get_option( 'time_format' ), $nextrun, TRUE ) ) . '</span>';
|
214 |
-
else
|
215 |
-
$r .= __( 'Not scheduled!', 'backwpup' );
|
216 |
-
}
|
217 |
-
else {
|
218 |
-
$r .= __( 'Inactive', 'backwpup' );
|
219 |
-
}
|
220 |
-
if ( is_object( $this->job_object ) && $this->job_object->job[ 'jobid' ] == $item )
|
221 |
-
$r .= '</div>';
|
222 |
-
|
223 |
-
return $r;
|
224 |
-
}
|
225 |
-
|
226 |
-
/**
|
227 |
-
* The last Column
|
228 |
-
*
|
229 |
-
* @param $item
|
230 |
-
* @return string
|
231 |
-
*/
|
232 |
-
function column_last( $item ) {
|
233 |
-
|
234 |
-
$r = '';
|
235 |
-
|
236 |
-
if ( BackWPup_Option::get( $item, 'lastrun' ) ) {
|
237 |
-
$lastrun = BackWPup_Option::get( $item, 'lastrun' );
|
238 |
-
$r .= sprintf( __( '%1$s at %2$s', 'backwpup' ), date_i18n( get_option( 'date_format' ), $lastrun, TRUE ), date_i18n( get_option( 'time_format' ), $lastrun, TRUE ) );
|
239 |
-
if ( BackWPup_Option::get( $item, 'lastruntime' ) )
|
240 |
-
$r .= '<br />' . sprintf( __( 'Runtime: %d seconds', 'backwpup' ), BackWPup_Option::get( $item, 'lastruntime' ) );
|
241 |
-
}
|
242 |
-
else {
|
243 |
-
$r .= __( 'not yet', 'backwpup' );
|
244 |
-
}
|
245 |
-
$r .= "<br /><span class=\"last-action-links\">";
|
246 |
-
if ( current_user_can( 'backwpup_backups_download' ) && BackWPup_Option::get( $item, 'lastbackupdownloadurl' ) )
|
247 |
-
$r .= "<a href=\"" . wp_nonce_url( BackWPup_Option::get( $item, 'lastbackupdownloadurl' ), 'download-backup' ) . "\" title=\"" . esc_attr( __( 'Download last backup', 'backwpup' ) ) . "\">" . __( 'Download', 'backwpup' ) . "</a> | ";
|
248 |
-
if ( current_user_can( 'backwpup_logs' ) && BackWPup_Option::get( $item, 'logfile' ) ) {
|
249 |
-
$logfile = basename( BackWPup_Option::get( $item, 'logfile' ) );
|
250 |
-
if ( is_object( $this->job_object ) && $this->job_object->job[ 'jobid' ] == $item )
|
251 |
-
$logfile = basename( $this->job_object->logfile );
|
252 |
-
$r .= '<a class="thickbox" href="' . admin_url( 'admin-ajax.php' ) . '?&action=backwpup_view_log&logfile=' . $logfile .'&_ajax_nonce=' . wp_create_nonce( 'view-logs' ) . '&TB_iframe=true&width=640&height=440" title="' . esc_attr( $logfile ) . '">' . __( 'Log', 'backwpup' ) . '</a>';
|
253 |
-
|
254 |
-
}
|
255 |
-
$r .= "</span>";
|
256 |
-
|
257 |
-
return $r;
|
258 |
-
}
|
259 |
-
|
260 |
-
|
261 |
-
/**
|
262 |
-
*
|
263 |
-
*/
|
264 |
-
public static function load() {
|
265 |
-
|
266 |
-
//Create Table
|
267 |
-
self::$listtable = new self;
|
268 |
-
|
269 |
-
switch ( self::$listtable->current_action() ) {
|
270 |
-
case 'delete': //Delete Job
|
271 |
-
if ( ! current_user_can( 'backwpup_jobs_edit' ) )
|
272 |
-
break;
|
273 |
-
if ( is_array( $_GET[ 'jobs' ] ) ) {
|
274 |
-
check_admin_referer( 'bulk-jobs' );
|
275 |
-
foreach ( $_GET[ 'jobs' ] as $jobid ) {
|
276 |
-
wp_clear_scheduled_hook( 'backwpup_cron', array( 'id' => $jobid ) );
|
277 |
-
BackWPup_Option::delete_job( $jobid );
|
278 |
-
}
|
279 |
-
}
|
280 |
-
break;
|
281 |
-
case 'copy': //Copy Job
|
282 |
-
if ( ! current_user_can( 'backwpup_jobs_edit' ) )
|
283 |
-
break;
|
284 |
-
$old_job_id = (int)$_GET[ 'jobid' ];
|
285 |
-
check_admin_referer( 'copy-job_' . $_GET[ 'jobid' ] );
|
286 |
-
//create new
|
287 |
-
$newjobid = BackWPup_Option::get_job_ids();
|
288 |
-
sort( $newjobid );
|
289 |
-
$newjobid = end( $newjobid ) + 1;
|
290 |
-
$old_options = BackWPup_Option::get_job( $old_job_id );
|
291 |
-
foreach ( $old_options as $key => $option ) {
|
292 |
-
if ( $key == "jobid" )
|
293 |
-
$option = $newjobid;
|
294 |
-
if ( $key == "name" )
|
295 |
-
$option = __( 'Copy of', 'backwpup' ) . ' ' . $option;
|
296 |
-
if ( $key == "activetype" )
|
297 |
-
$option = '';
|
298 |
-
if ( $key == "archivename" )
|
299 |
-
$option = str_replace( $_GET[ 'jobid' ], $newjobid, $option );
|
300 |
-
if ( $key == "logfile" || $key == "lastbackupdownloadurl" || $key == "lastruntime" ||
|
301 |
-
$key == "lastrun" )
|
302 |
-
continue;
|
303 |
-
BackWPup_Option::update( $newjobid, $key, $option );
|
304 |
-
}
|
305 |
-
break;
|
306 |
-
case 'start_cli': //Get cmd start file
|
307 |
-
if ( ! current_user_can( 'backwpup_jobs_start' ) )
|
308 |
-
break;
|
309 |
-
check_admin_referer( 'start_cli' );
|
310 |
-
if ( empty( $_GET[ 'jobid' ] ) )
|
311 |
-
break;
|
312 |
-
if ( FALSE === strpos( PHP_OS, "WIN" ) ) {
|
313 |
-
header( "Pragma: public" );
|
314 |
-
header( "Expires: 0" );
|
315 |
-
header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
|
316 |
-
header( "Content-Type: application/octet-stream" );
|
317 |
-
header( "Content-Disposition: attachment; filename=BackWPup_cmd_start_job_" . $_GET[ 'jobid' ] . ".sh;" );
|
318 |
-
if ( defined( 'PHP_BINDIR' ) )
|
319 |
-
echo "#!/bin/sh" . PHP_EOL;
|
320 |
-
echo "@\$1php -c \"" . php_ini_loaded_file() . "\" -r \"\$_SERVER[ 'SERVER_ADDR' ] = '". $_SERVER[ 'SERVER_ADDR' ] ."'; \$_SERVER[ 'REMOTE_ADDR' ] = '". $_SERVER[ 'REMOTE_ADDR' ] ."'; \$_SERVER[ 'HTTP_HOST' ] = '". $_SERVER[ 'HTTP_HOST' ] ."'; \$_SERVER[ 'HTTP_USER_AGENT' ] = '". BackWPup::get_plugin_data( 'name' ) ."'; define( 'DOING_CRON', TRUE ); require '" . ABSPATH . "wp-load.php'; if( class_exists( 'BackWPup_Job' ) ) BackWPup_Job::start_cli( " . $_GET[ 'jobid' ] . " );\"";
|
321 |
-
die();
|
322 |
-
}
|
323 |
-
else {
|
324 |
-
header( "Pragma: public" );
|
325 |
-
header( "Expires: 0" );
|
326 |
-
header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
|
327 |
-
header( "Content-Type: application/octet-stream" );
|
328 |
-
header( "Content-Disposition: attachment; filename=BackWPup_cmd_start_job_" . $_GET[ 'jobid' ] . ".cmd;" );
|
329 |
-
echo "@%1php.exe -c \"" . php_ini_loaded_file() . "\" -r \"\$_SERVER[ 'SERVER_ADDR' ] = '". $_SERVER[ 'SERVER_ADDR' ] ."'; \$_SERVER[ 'REMOTE_ADDR' ] = '". $_SERVER[ 'REMOTE_ADDR' ] ."'; \$_SERVER[ 'HTTP_HOST' ] = '". $_SERVER[ 'HTTP_HOST' ] ."'; \$_SERVER[ 'HTTP_USER_AGENT' ] = '". BackWPup::get_plugin_data( 'name' ) ."'; define( 'DOING_CRON', TRUE ); require '" . ABSPATH . "wp-load.php'; if( class_exists( 'BackWPup_Job' ) ) BackWPup_Job::start_cli( " . $_GET[ 'jobid' ] . " );\"";
|
330 |
-
die();
|
331 |
-
}
|
332 |
-
break;
|
333 |
-
case 'runnow':
|
334 |
-
if ( ! empty( $_GET[ 'jobid' ] ) ) {
|
335 |
-
if ( ! current_user_can( 'backwpup_jobs_start' ) )
|
336 |
-
wp_die( __( 'Sorry, you don\'t have permissions to do that.', 'backwpup') );
|
337 |
-
check_admin_referer( 'backwpup_job_run-runnowlink' );
|
338 |
-
|
339 |
-
//check temp folder
|
340 |
-
BackWPup_Job::check_folder( BackWPup::get_plugin_data( 'TEMP' ), TRUE );
|
341 |
-
//check log folder
|
342 |
-
BackWPup_Job::check_folder( get_site_option( 'backwpup_cfg_logfolder' ) );
|
343 |
-
//check server callback
|
344 |
-
$raw_response = BackWPup_Job::get_jobrun_url( 'test' );
|
345 |
-
$test_result = '';
|
346 |
-
if ( is_wp_error( $raw_response ) )
|
347 |
-
$test_result .= sprintf( __( 'The HTTP response test get an error "%s"','backwpup' ), $raw_response->get_error_message() );
|
348 |
-
elseif ( 200 != wp_remote_retrieve_response_code( $raw_response ) && 204 != wp_remote_retrieve_response_code( $raw_response ) )
|
349 |
-
$test_result .= sprintf( __( 'The HTTP response test get a false http status (%s)','backwpup' ), wp_remote_retrieve_response_code( $raw_response ) );
|
350 |
-
if ( ! empty( $test_result ) )
|
351 |
-
BackWPup_Admin::message( $test_result, TRUE );
|
352 |
-
|
353 |
-
//only start job if messages empty
|
354 |
-
$log_messages = BackWPup_Admin::get_messages();
|
355 |
-
if ( empty ( $log_messages ) ) {
|
356 |
-
$old_log_file = BackWPup_Option::get( $_GET[ 'jobid' ], 'logfile' );
|
357 |
-
BackWPup_Job::get_jobrun_url( 'runnow', $_GET[ 'jobid' ] );
|
358 |
-
usleep( 250000 ); //wait a quarter second
|
359 |
-
$new_log_file = BackWPup_Option::get( $_GET[ 'jobid' ], 'logfile', NULL, FALSE );
|
360 |
-
//sleep as long as job not started
|
361 |
-
$i=0;
|
362 |
-
while ( $old_log_file == $new_log_file ) {
|
363 |
-
usleep( 250000 ); //wait a quarter second for next try
|
364 |
-
$new_log_file = BackWPup_Option::get( $_GET[ 'jobid' ], 'logfile', NULL, FALSE );
|
365 |
-
//wait maximal 10 sec.
|
366 |
-
if ( $i >= 40 ) {
|
367 |
-
BackWPup_Admin::message( sprintf( __( 'Job “%s” has started, but not responded for 10 seconds.', 'backwpup' ), esc_attr( BackWPup_Option::get( $_GET[ 'jobid' ], 'name' ) ) ), TRUE );
|
368 |
-
break 2;
|
369 |
-
}
|
370 |
-
$i++;
|
371 |
-
}
|
372 |
-
BackWPup_Admin::message( sprintf( __( 'Job "%s" started.', 'backwpup' ), esc_attr( BackWPup_Option::get( $_GET[ 'jobid' ], 'name' ) ) ) );
|
373 |
-
}
|
374 |
-
}
|
375 |
-
break;
|
376 |
-
case 'abort': //Abort Job
|
377 |
-
if ( ! current_user_can( 'backwpup_jobs_start' ) )
|
378 |
-
break;
|
379 |
-
check_admin_referer( 'abort-job' );
|
380 |
-
if ( ! file_exists( BackWPup::get_plugin_data( 'running_file' ) ) )
|
381 |
-
break;
|
382 |
-
//abort
|
383 |
-
BackWPup_Job::user_abort();
|
384 |
-
BackWPup_Admin::message( __( 'Job will be terminated.', 'backwpup' ) ) ;
|
385 |
-
break;
|
386 |
-
default:
|
387 |
-
do_action( 'backwpup_page_jobs_load', self::$listtable->current_action() );
|
388 |
-
break;
|
389 |
-
}
|
390 |
-
|
391 |
-
self::$listtable->prepare_items();
|
392 |
-
}
|
393 |
-
|
394 |
-
/**
|
395 |
-
*
|
396 |
-
*/
|
397 |
-
public static function admin_print_styles() {
|
398 |
-
|
399 |
-
?>
|
400 |
-
<style type="text/css" media="screen">
|
401 |
-
|
402 |
-
.column-last, .column-next, .column-type, .column-dest {
|
403 |
-
width: 15%;
|
404 |
-
}
|
405 |
-
|
406 |
-
#TB_ajaxContent {
|
407 |
-
background-color: black;
|
408 |
-
color: white;
|
409 |
-
}
|
410 |
-
|
411 |
-
#showworking {
|
412 |
-
white-space:nowrap;
|
413 |
-
display: block;
|
414 |
-
width: 100%;
|
415 |
-
font-family:monospace;
|
416 |
-
font-size:12px;
|
417 |
-
line-height:15px;
|
418 |
-
}
|
419 |
-
#runningjob {
|
420 |
-
padding:10px;
|
421 |
-
position:relative;
|
422 |
-
margin: 15px 0 25px 0;
|
423 |
-
padding-bottom:25px;
|
424 |
-
}
|
425 |
-
h2#runnigtitle {
|
426 |
-
margin-bottom: 15px;
|
427 |
-
padding: 0;
|
428 |
-
}
|
429 |
-
#warningsid, #errorid {
|
430 |
-
margin-right: 10px;
|
431 |
-
}
|
432 |
-
|
433 |
-
.infobuttons {
|
434 |
-
position: absolute;
|
435 |
-
right: 10px;
|
436 |
-
bottom: 0;
|
437 |
-
}
|
438 |
-
|
439 |
-
.progressbar {
|
440 |
-
margin-top: 20px;
|
441 |
-
height: auto;
|
442 |
-
background: #f6f6f6 url('<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/progressbarhg.jpg');
|
443 |
-
}
|
444 |
-
|
445 |
-
#lastmsg, #onstep, #lasterrormsg {
|
446 |
-
text-align: center;
|
447 |
-
margin-bottom: 20px;
|
448 |
-
}
|
449 |
-
#backwpup-page #lastmsg,
|
450 |
-
#backwpup-page #onstep,
|
451 |
-
#backwpup-page #lasterrormsg {
|
452 |
-
font-family: "Open Sans", sans-serif;
|
453 |
-
}
|
454 |
-
.bwpu-progress {
|
455 |
-
background-color: #1d94cf;
|
456 |
-
color: #fff;
|
457 |
-
padding: 5px 0;
|
458 |
-
text-align: center;
|
459 |
-
}
|
460 |
-
#progresssteps {
|
461 |
-
background-color: #007fb6;
|
462 |
-
}
|
463 |
-
|
464 |
-
.row-actions .lastlog {
|
465 |
-
display: none;
|
466 |
-
}
|
467 |
-
|
468 |
-
@media screen and (max-width: 782px) {
|
469 |
-
.column-type, .column-dest {
|
470 |
-
display: none;
|
471 |
-
}
|
472 |
-
.row-actions .lastlog {
|
473 |
-
display: inline-block;
|
474 |
-
}
|
475 |
-
.last-action-links {
|
476 |
-
display: none;
|
477 |
-
}
|
478 |
-
}
|
479 |
-
</style>
|
480 |
-
<?php
|
481 |
-
}
|
482 |
-
|
483 |
-
/**
|
484 |
-
*
|
485 |
-
*/
|
486 |
-
public static function admin_print_scripts() {
|
487 |
-
|
488 |
-
wp_enqueue_script( 'backwpupgeneral' );
|
489 |
-
}
|
490 |
-
|
491 |
-
/**
|
492 |
-
*
|
493 |
-
*/
|
494 |
-
public static function page() {
|
495 |
-
|
496 |
-
echo '<div class="wrap" id="backwpup-page">';
|
497 |
-
echo '<h2><span id="backwpup-page-icon"> </span>' . esc_html( sprintf( __( '%s Jobs', 'backwpup' ), BackWPup::get_plugin_data( 'name' ) ) ) . ' <a href="' . wp_nonce_url( network_admin_url( 'admin.php' ) . '?page=backwpupeditjob', 'edit-job' ) . '" class="add-new-h2">' . esc_html__( 'Add new', 'backwpup' ) . '</a></h2>';
|
498 |
-
BackWPup_Admin::display_messages();
|
499 |
-
$job_object = BackWPup_Job::get_working_data();
|
500 |
-
if ( current_user_can( 'backwpup_jobs_start' ) && is_object( $job_object ) ) {
|
501 |
-
|
502 |
-
//read existing logfile
|
503 |
-
$logfiledata = file_get_contents( $job_object->logfile );
|
504 |
-
preg_match( '/<body[^>]*>/si', $logfiledata, $match );
|
505 |
-
if ( ! empty( $match[ 0 ] ) )
|
506 |
-
$startpos = strpos( $logfiledata, $match[ 0 ] ) + strlen( $match[ 0 ] );
|
507 |
-
else
|
508 |
-
$startpos = 0;
|
509 |
-
$endpos = stripos( $logfiledata, '</body>' );
|
510 |
-
if ( empty( $endpos ) )
|
511 |
-
$endpos = strlen( $logfiledata );
|
512 |
-
$length = strlen( $logfiledata ) - ( strlen( $logfiledata ) - $endpos ) - $startpos;
|
513 |
-
|
514 |
-
?>
|
515 |
-
<div id="runningjob">
|
516 |
-
<div id="runniginfos">
|
517 |
-
<h2 id="runningtitle"><?php sprintf( __('Job currently running: %s','backwpup'), $job_object->job[ 'name' ] ); ?></h2>
|
518 |
-
<span id="warningsid"><?php _e( 'Warnings:', 'backwpup' ); ?> <span id="warnings"><?php echo $job_object->warnings; ?></span></span>
|
519 |
-
<span id="errorid"><?php _e( 'Errors:', 'backwpup' ); ?> <span id="errors"><?php echo $job_object->errors; ?></span></span>
|
520 |
-
<div class="infobuttons"><a href="#TB_inline?height=440&width=630&inlineId=tb-showworking" id="showworkingbutton" class="thickbox button button-primary button-primary-bwp" title="<?php _e( 'Log of running job', 'backwpup'); ?>"><?php _e( 'Display working log', 'backwpup' ); ?></a>
|
521 |
-
<a href="<?php echo wp_nonce_url( network_admin_url( 'admin.php' ) . '?page=backwpupjobs&action=abort', 'abort-job' ); ?>" id="abortbutton" class="backwpup-fancybox button button-bwp"><?php _e( 'Abort', 'backwpup' ); ?></a>
|
522 |
-
<a href="#" id="showworkingclose" title="<?php _e( 'Close working screen', 'backwpup'); ?>" class="button button-bwp" style="display:none" ><?php _e( 'close', 'backwpup' ); ?></a></div>
|
523 |
-
</div>
|
524 |
-
<input type="hidden" name="logpos" id="logpos" value="<?php echo strlen( $logfiledata ); ?>">
|
525 |
-
<div id="lasterrormsg"></div>
|
526 |
-
<div class="progressbar"><div id="progressstep" class="bwpu-progress" style="width:<?php echo $job_object->step_percent; ?>%;"><?php echo $job_object->step_percent; ?>%</div></div>
|
527 |
-
<div id="onstep"><?php echo $job_object->steps_data[ $job_object->step_working ][ 'NAME' ]; ?></div>
|
528 |
-
<div class="progressbar"><div id="progresssteps" class="bwpu-progress" style="width:<?php echo $job_object->substep_percent; ?>%;"><?php echo $job_object->substep_percent; ?>%</div></div>
|
529 |
-
<div id="lastmsg"><?php echo $job_object->lastmsg; ?></div>
|
530 |
-
<div id="tb-showworking" style="display:none;">
|
531 |
-
<div id="showworking"><?php echo substr( $logfiledata, $startpos, $length ); ?></div>
|
532 |
-
</div>
|
533 |
-
</div>
|
534 |
-
<?php }
|
535 |
-
|
536 |
-
//display jos Table
|
537 |
-
?>
|
538 |
-
<form id="posts-filter" action="" method="get">
|
539 |
-
<input type="hidden" name="page" value="backwpupjobs" />
|
540 |
-
<?php
|
541 |
-
echo wp_nonce_field( 'backwpup_ajax_nonce', 'backwpupajaxnonce', FALSE );
|
542 |
-
self::$listtable->display();
|
543 |
-
?>
|
544 |
-
<div id="ajax-response"></div>
|
545 |
-
</form>
|
546 |
-
</div>
|
547 |
-
<?php
|
548 |
-
|
549 |
-
if ( ! empty( $job_object->logfile ) ) { ?>
|
550 |
-
<script type="text/javascript">
|
551 |
-
//<![CDATA[
|
552 |
-
jQuery(document).ready(function ($) {
|
553 |
-
backwpup_show_working = function () {
|
554 |
-
$.ajax({
|
555 |
-
type: 'GET',
|
556 |
-
url: ajaxurl,
|
557 |
-
cache: false,
|
558 |
-
data:{
|
559 |
-
action: 'backwpup_working',
|
560 |
-
logpos: $('#logpos').val(),
|
561 |
-
logfile: '<?php echo basename( $job_object->logfile );?>',
|
562 |
-
_ajax_nonce: '<?php echo wp_create_nonce( 'backwpupworking_ajax_nonce' );?>'
|
563 |
-
},
|
564 |
-
dataType: 'json',
|
565 |
-
success:function (rundata) {
|
566 |
-
if ( rundata == 0 ) {
|
567 |
-
$("#abortbutton").remove();
|
568 |
-
$("#backwpup-adminbar-running").remove();
|
569 |
-
$(".job-run").hide();
|
570 |
-
$("#message").hide();
|
571 |
-
$(".job-normal").show();
|
572 |
-
$('#showworkingclose').show();
|
573 |
-
}
|
574 |
-
if (0 < rundata.log_pos) {
|
575 |
-
$('#logpos').val(rundata.log_pos);
|
576 |
-
}
|
577 |
-
if ('' != rundata.log_text) {
|
578 |
-
$('#showworking').append(rundata.log_text);
|
579 |
-
$('#TB_ajaxContent').scrollTop(rundata.log_pos * 15);
|
580 |
-
}
|
581 |
-
if (0 < rundata.error_count) {
|
582 |
-
$('#errors').replaceWith('<span id="errors">' + rundata.error_count + '</span>');
|
583 |
-
}
|
584 |
-
if (0 < rundata.warning_count) {
|
585 |
-
$('#warnings').replaceWith('<span id="warnings">' + rundata.warning_count + '</span>');
|
586 |
-
}
|
587 |
-
if (0 < rundata.step_percent) {
|
588 |
-
$('#progressstep').replaceWith('<div id="progressstep" class="bwpu-progress">' + rundata.step_percent + '%</div>');
|
589 |
-
$('#progressstep').css('width', parseFloat(rundata.step_percent) + '%');
|
590 |
-
}
|
591 |
-
if (0 < rundata.sub_step_percent) {
|
592 |
-
$('#progresssteps').replaceWith('<div id="progresssteps" class="bwpu-progress">' + rundata.sub_step_percent + '%</div>');
|
593 |
-
$('#progresssteps').css('width', parseFloat(rundata.sub_step_percent) + '%');
|
594 |
-
}
|
595 |
-
if (0 < rundata.running_time) {
|
596 |
-
$('#runtime').replaceWith('<span id="runtime">' + rundata.running_time + '</span>');
|
597 |
-
}
|
598 |
-
if ( '' != rundata.onstep ) {
|
599 |
-
$('#onstep').replaceWith('<div id="onstep">' + rundata.on_step + '</div>');
|
600 |
-
}
|
601 |
-
if ( '' != rundata.last_msg ) {
|
602 |
-
$('#lastmsg').replaceWith('<div id="lastmsg">' + rundata.last_msg + '</div>');
|
603 |
-
}
|
604 |
-
if ( '' != rundata.last_error_msg ) {
|
605 |
-
$('#lasterrormsg').replaceWith('<div id="lasterrormsg">' + rundata.last_error_msg + '</div>');
|
606 |
-
}
|
607 |
-
if ( rundata.job_done == 1 ) {
|
608 |
-
$("#abortbutton").remove();
|
609 |
-
$("#backwpup-adminbar-running").remove();
|
610 |
-
$(".job-run").hide();
|
611 |
-
$("#message").hide();
|
612 |
-
$(".job-normal").show();
|
613 |
-
$('#showworkingclose').show();
|
614 |
-
} else {
|
615 |
-
setTimeout('backwpup_show_working()', 750);
|
616 |
-
}
|
617 |
-
},
|
618 |
-
error:function ( ) {
|
619 |
-
setTimeout('backwpup_show_working()', 750);
|
620 |
-
}
|
621 |
-
});
|
622 |
-
};
|
623 |
-
backwpup_show_working();
|
624 |
-
$('#showworkingclose').click( function() {
|
625 |
-
$("#runningjob").hide( 'slow' );
|
626 |
-
return false;
|
627 |
-
});
|
628 |
-
});
|
629 |
-
//]]>
|
630 |
-
</script>
|
631 |
-
<?php }
|
632 |
-
}
|
633 |
-
|
634 |
-
|
635 |
-
/**
|
636 |
-
*
|
637 |
-
* Function to generate json data
|
638 |
-
*
|
639 |
-
*/
|
640 |
-
public static function ajax_working() {
|
641 |
-
|
642 |
-
check_ajax_referer( 'backwpupworking_ajax_nonce' );
|
643 |
-
|
644 |
-
$logfile = isset( $_GET[ 'logfile' ] ) ? get_site_option( 'backwpup_cfg_logfolder' ) . trim( $_GET[ 'logfile' ] ) : NULL;
|
645 |
-
$logpos = isset( $_GET[ 'logpos' ] ) ? (int)$_GET[ 'logpos' ] : 0;
|
646 |
-
|
647 |
-
//check if logfile renamed
|
648 |
-
if ( file_exists( $logfile . '.gz' ) )
|
649 |
-
$logfile .= '.gz';
|
650 |
-
|
651 |
-
if ( ! is_readable( $logfile ) )
|
652 |
-
die( '0' );
|
653 |
-
|
654 |
-
$job_object = BackWPup_Job::get_working_data();
|
655 |
-
$done = 0;
|
656 |
-
if ( is_object( $job_object ) ) {
|
657 |
-
$warnings = $job_object->warnings;
|
658 |
-
$errors = $job_object->errors;
|
659 |
-
$step_percent = $job_object->step_percent;
|
660 |
-
$substep_percent = $job_object->substep_percent;
|
661 |
-
$runtime = current_time( 'timestamp' ) - $job_object->start_time;
|
662 |
-
$onstep = $job_object->steps_data[ $job_object->step_working ][ 'NAME' ];
|
663 |
-
$lastmsg = $job_object->lastmsg;
|
664 |
-
$lasterrormsg = $job_object->lasterrormsg;
|
665 |
-
} else {
|
666 |
-
$logheader = BackWPup_Job::read_logheader( $logfile );
|
667 |
-
$warnings = $logheader[ 'warnings' ];
|
668 |
-
$runtime = $logheader[ 'runtime' ];
|
669 |
-
$errors = $logheader[ 'errors' ];
|
670 |
-
$step_percent = 100;
|
671 |
-
$substep_percent = 100;
|
672 |
-
$onstep = '<div class="backwpup-message backwpup-info"><p>' . __( 'Job completed' , 'backwpup' ) . '</p></div>';
|
673 |
-
if ( $errors > 0 )
|
674 |
-
$lastmsg = '<div class="error"><p>' . __( 'ERROR:', 'backwpup' ) . ' ' . sprintf( __( 'Job has ended with errors in %s seconds. You must resolve the errors for correct execution.', 'backwpup' ), $logheader[ 'runtime' ] ) . '</p></div>';
|
675 |
-
elseif ( $warnings > 0 )
|
676 |
-
$lastmsg = '<div class="backwpup-message backwpup-warning"><p>' . __( 'WARNING:', 'backwpup' ) . ' ' . sprintf( __( 'Job has done with warnings in %s seconds. Please resolve them for correct execution.', 'backwpup' ), $logheader[ 'runtime' ] ) . '</p></div>';
|
677 |
-
else
|
678 |
-
$lastmsg = '<div class="updated"><p>' . sprintf( __( 'Job done in %s seconds.', 'backwpup' ), $logheader[ 'runtime' ] ) . '</p></div>';
|
679 |
-
$lasterrormsg = '';
|
680 |
-
$done = 1;
|
681 |
-
}
|
682 |
-
|
683 |
-
if ( '.gz' == substr( $logfile, -3 ) )
|
684 |
-
$logfiledata = file_get_contents( 'compress.zlib://' . $logfile, FALSE, NULL, $logpos );
|
685 |
-
else
|
686 |
-
$logfiledata = file_get_contents( $logfile, FALSE, NULL, $logpos );
|
687 |
-
|
688 |
-
preg_match( '/<body[^>]*>/si', $logfiledata, $match );
|
689 |
-
if ( ! empty( $match[ 0 ] ) )
|
690 |
-
$startpos = strpos( $logfiledata, $match[ 0 ] ) + strlen( $match[ 0 ] );
|
691 |
-
else
|
692 |
-
$startpos = 0;
|
693 |
-
|
694 |
-
$endpos = stripos( $logfiledata, '</body>' );
|
695 |
-
if ( FALSE === $endpos )
|
696 |
-
$endpos = strlen( $logfiledata );
|
697 |
-
|
698 |
-
$length = strlen( $logfiledata ) - ( strlen( $logfiledata ) - $endpos ) - $startpos;
|
699 |
-
|
700 |
-
wp_send_json( array(
|
701 |
-
'log_pos' => strlen( $logfiledata ) + $logpos,
|
702 |
-
'log_text' => substr( $logfiledata, $startpos, $length ),
|
703 |
-
'warning_count' => $warnings,
|
704 |
-
'error_count' => $errors,
|
705 |
-
'running_time' => $runtime,
|
706 |
-
'step_percent' => $step_percent,
|
707 |
-
'on_step' => $onstep,
|
708 |
-
'last_msg' => $lastmsg,
|
709 |
-
'last_error_msg' => $lasterrormsg,
|
710 |
-
'sub_step_percent'=> $substep_percent,
|
711 |
-
'job_done' => $done
|
712 |
-
) );
|
713 |
-
}
|
714 |
-
|
715 |
-
}
|
716 |
-
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Class For BackWPup Jobs page
|
4 |
+
*/
|
5 |
+
class BackWPup_Page_Jobs extends WP_List_Table {
|
6 |
+
|
7 |
+
private static $listtable = NULL;
|
8 |
+
public static $logfile = NULL;
|
9 |
+
private $job_object = NULL;
|
10 |
+
private $job_types = NULL;
|
11 |
+
private $destinations = NULL;
|
12 |
+
|
13 |
+
|
14 |
+
/**
|
15 |
+
*
|
16 |
+
*/
|
17 |
+
function __construct() {
|
18 |
+
parent::__construct( array(
|
19 |
+
'plural' => 'jobs',
|
20 |
+
'singular' => 'job',
|
21 |
+
'ajax' => TRUE
|
22 |
+
) );
|
23 |
+
}
|
24 |
+
|
25 |
+
|
26 |
+
/**
|
27 |
+
* @return bool|void
|
28 |
+
*/
|
29 |
+
function ajax_user_can() {
|
30 |
+
|
31 |
+
return current_user_can( 'backwpup' );
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
*
|
36 |
+
*/
|
37 |
+
function prepare_items() {
|
38 |
+
|
39 |
+
$this->items = BackWPup_Option::get_job_ids();
|
40 |
+
|
41 |
+
$this->job_object = BackWPup_Job::get_working_data();
|
42 |
+
|
43 |
+
$this->job_types = BackWPup::get_job_types();
|
44 |
+
$this->destinations = BackWPup::get_registered_destinations();
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
*
|
49 |
+
*/
|
50 |
+
function no_items() {
|
51 |
+
|
52 |
+
_e( 'No Jobs.', 'backwpup' );
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* @return array
|
57 |
+
*/
|
58 |
+
function get_bulk_actions() {
|
59 |
+
|
60 |
+
if ( ! $this->has_items() )
|
61 |
+
return array ();
|
62 |
+
|
63 |
+
$actions = array();
|
64 |
+
$actions[ 'delete' ] = __( 'Delete', 'backwpup' );
|
65 |
+
|
66 |
+
return apply_filters( 'backwpup_page_jobs_get_bulk_actions', $actions );
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* @return array
|
71 |
+
*/
|
72 |
+
function get_columns() {
|
73 |
+
|
74 |
+
$jobs_columns = array();
|
75 |
+
$jobs_columns[ 'cb' ] = '<input type="checkbox" />';
|
76 |
+
$jobs_columns[ 'jobname' ] = __( 'Job Name', 'backwpup' );
|
77 |
+
$jobs_columns[ 'type' ] = __( 'Type', 'backwpup' );
|
78 |
+
$jobs_columns[ 'dest' ] = __( 'Destinations', 'backwpup' );
|
79 |
+
$jobs_columns[ 'next' ] = __( 'Next Run', 'backwpup' );
|
80 |
+
$jobs_columns[ 'last' ] = __( 'Last Run', 'backwpup' );
|
81 |
+
|
82 |
+
return $jobs_columns;
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* The cb Column
|
87 |
+
*
|
88 |
+
* @param $item
|
89 |
+
* @return string
|
90 |
+
*/
|
91 |
+
function column_cb( $item ) {
|
92 |
+
|
93 |
+
return '<input type="checkbox" name="jobs[]" value="' . esc_attr( $item ) . '" />';
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* The jobname Column
|
98 |
+
*
|
99 |
+
* @param $item
|
100 |
+
* @return string
|
101 |
+
*/
|
102 |
+
function column_jobname( $item ) {
|
103 |
+
|
104 |
+
$job_normal_hide ='';
|
105 |
+
if ( is_object( $this->job_object ) )
|
106 |
+
$job_normal_hide = ' style="display:none;"';
|
107 |
+
|
108 |
+
$r = '<strong title="' . sprintf( __( 'Job ID: %d', 'backwpup' ), $item ) . '">' . esc_html( BackWPup_Option::get( $item, 'name' ) ) . '</strong>';
|
109 |
+
$actions = array();
|
110 |
+
if ( current_user_can( 'backwpup_jobs_edit' ) ) {
|
111 |
+
$actions[ 'edit' ] = "<a href=\"" . wp_nonce_url( network_admin_url( 'admin.php' ) . '?page=backwpupeditjob&jobid=' . $item, 'edit-job' ) . "\">" . __( 'Edit', 'backwpup' ) . "</a>";
|
112 |
+
$actions[ 'copy' ] = "<a href=\"" . wp_nonce_url( network_admin_url( 'admin.php' ) . '?page=backwpupjobs&action=copy&jobid=' . $item, 'copy-job_' . $item ) . "\">" . __( 'Copy', 'backwpup' ) . "</a>";
|
113 |
+
$actions[ 'delete' ] = "<a class=\"submitdelete\" href=\"" . wp_nonce_url( network_admin_url( 'admin.php' ) . '?page=backwpupjobs&action=delete&jobs[]=' . $item, 'bulk-jobs' ) . "\" onclick=\"return showNotice.warn();\">" . __( 'Delete', 'backwpup' ) . "</a>";
|
114 |
+
}
|
115 |
+
if ( current_user_can( 'backwpup_jobs_start' ) ) {
|
116 |
+
$url = BackWPup_Job::get_jobrun_url( 'runnowlink', $item );
|
117 |
+
$actions[ 'runnow' ] = "<a href=\"" . $url[ 'url' ] . "\">" . __( 'Run now', 'backwpup' ) . "</a>";
|
118 |
+
}
|
119 |
+
if ( current_user_can( 'backwpup_logs' ) && BackWPup_Option::get( $item, 'logfile' ) ) {
|
120 |
+
$logfile = basename( BackWPup_Option::get( $item, 'logfile' ) );
|
121 |
+
if ( is_object( $this->job_object ) && $this->job_object->job[ 'jobid' ] == $item )
|
122 |
+
$logfile = basename( $this->job_object->logfile );
|
123 |
+
$actions[ 'lastlog' ] = '<a href="' . admin_url( 'admin-ajax.php' ) . '?&action=backwpup_view_log&logfile=' . $logfile .'&_ajax_nonce=' . wp_create_nonce( 'view-logs' ) . '&TB_iframe=true&width=640&height=440\" title="' . esc_attr( $logfile ) . '" class="thickbox">' . __( 'Last log', 'backwpup' ) . '</a>';
|
124 |
+
}
|
125 |
+
$actions = apply_filters( 'backwpup_page_jobs_actions', $actions, $item, FALSE );
|
126 |
+
$r .= '<div class="job-normal"' . $job_normal_hide . '>' . $this->row_actions( $actions ) . '</div>';
|
127 |
+
if ( is_object( $this->job_object ) ) {
|
128 |
+
$actionsrun = array();
|
129 |
+
$actionsrun = apply_filters( 'backwpup_page_jobs_actions', $actionsrun, $item, TRUE );
|
130 |
+
$r .= '<div class="job-run">' . $this->row_actions( $actionsrun ) . '</div>';
|
131 |
+
}
|
132 |
+
|
133 |
+
return $r;
|
134 |
+
}
|
135 |
+
|
136 |
+
/**
|
137 |
+
* The type Column
|
138 |
+
*
|
139 |
+
* @param $item
|
140 |
+
* @return string
|
141 |
+
*/
|
142 |
+
function column_type( $item ) {
|
143 |
+
|
144 |
+
$r = '';
|
145 |
+
if ( $types = BackWPup_Option::get( $item, 'type' ) ) {
|
146 |
+
foreach ( $types as $type ) {
|
147 |
+
if ( isset( $this->job_types[ $type ] ) ) {
|
148 |
+
$r .= $this->job_types[ $type ]->info[ 'name' ] . '<br />';
|
149 |
+
}
|
150 |
+
else {
|
151 |
+
$r .= $type . '<br />';
|
152 |
+
}
|
153 |
+
}
|
154 |
+
}
|
155 |
+
|
156 |
+
return $r;
|
157 |
+
}
|
158 |
+
|
159 |
+
/**
|
160 |
+
* The destination Column
|
161 |
+
*
|
162 |
+
* @param $item
|
163 |
+
* @return string
|
164 |
+
*/
|
165 |
+
function column_dest( $item ) {
|
166 |
+
|
167 |
+
$r = '';
|
168 |
+
$backup_to = FALSE;
|
169 |
+
foreach ( BackWPup_Option::get( $item, 'type' ) as $typeid ) {
|
170 |
+
if ( isset( $this->job_types[ $typeid ] ) && $this->job_types[ $typeid ]->creates_file() ) {
|
171 |
+
$backup_to = TRUE;
|
172 |
+
break;
|
173 |
+
}
|
174 |
+
}
|
175 |
+
if ( $backup_to ) {
|
176 |
+
foreach ( BackWPup_Option::get( $item, 'destinations' ) as $destid ) {
|
177 |
+
if ( isset( $this->destinations[ $destid ][ 'info' ][ 'name' ] ) ) {
|
178 |
+
$r .= $this->destinations[ $destid ][ 'info' ][ 'name' ] . '<br />';
|
179 |
+
} else {
|
180 |
+
$r .= $destid . '<br />';
|
181 |
+
}
|
182 |
+
}
|
183 |
+
}
|
184 |
+
else {
|
185 |
+
$r .= '<i>' . __( 'Not needed or set', 'backwpup' ) . '</i><br />';
|
186 |
+
}
|
187 |
+
|
188 |
+
return $r;
|
189 |
+
}
|
190 |
+
|
191 |
+
/**
|
192 |
+
* The next Column
|
193 |
+
*
|
194 |
+
* @param $item
|
195 |
+
* @return string
|
196 |
+
*/
|
197 |
+
function column_next( $item ) {
|
198 |
+
|
199 |
+
$r = '';
|
200 |
+
|
201 |
+
$job_normal_hide ='';
|
202 |
+
if ( is_object( $this->job_object ) )
|
203 |
+
$job_normal_hide = ' style="display:none;"';
|
204 |
+
|
205 |
+
if ( is_object( $this->job_object ) && $this->job_object->job[ 'jobid' ] == $item ) {
|
206 |
+
$runtime = current_time( 'timestamp' ) - $this->job_object->start_time;
|
207 |
+
$r .= '<div class="job-run">' . sprintf( __( 'Running for: %s seconds', 'backwpup' ), '<span id="runtime">' . $runtime . '</span>' ) .'</div>';
|
208 |
+
}
|
209 |
+
if ( is_object( $this->job_object ) && $this->job_object->job[ 'jobid' ] == $item )
|
210 |
+
$r .='<div class="job-normal"' . $job_normal_hide . '>';
|
211 |
+
if ( BackWPup_Option::get( $item, 'activetype' ) == 'wpcron' ) {
|
212 |
+
if ( $nextrun = wp_next_scheduled( 'backwpup_cron', array( 'id' => $item ) ) + ( get_option( 'gmt_offset' ) * 3600 ) )
|
213 |
+
$r .= '<span title="' . sprintf( __( 'Cron: %s','backwpup'),BackWPup_Option::get( $item, 'cron' ) ). '">' . sprintf( __( '%1$s at %2$s by WP-Cron', 'backwpup' ) , date_i18n( get_option( 'date_format' ), $nextrun, TRUE ) , date_i18n( get_option( 'time_format' ), $nextrun, TRUE ) ) . '</span>';
|
214 |
+
else
|
215 |
+
$r .= __( 'Not scheduled!', 'backwpup' );
|
216 |
+
}
|
217 |
+
else {
|
218 |
+
$r .= __( 'Inactive', 'backwpup' );
|
219 |
+
}
|
220 |
+
if ( is_object( $this->job_object ) && $this->job_object->job[ 'jobid' ] == $item )
|
221 |
+
$r .= '</div>';
|
222 |
+
|
223 |
+
return $r;
|
224 |
+
}
|
225 |
+
|
226 |
+
/**
|
227 |
+
* The last Column
|
228 |
+
*
|
229 |
+
* @param $item
|
230 |
+
* @return string
|
231 |
+
*/
|
232 |
+
function column_last( $item ) {
|
233 |
+
|
234 |
+
$r = '';
|
235 |
+
|
236 |
+
if ( BackWPup_Option::get( $item, 'lastrun' ) ) {
|
237 |
+
$lastrun = BackWPup_Option::get( $item, 'lastrun' );
|
238 |
+
$r .= sprintf( __( '%1$s at %2$s', 'backwpup' ), date_i18n( get_option( 'date_format' ), $lastrun, TRUE ), date_i18n( get_option( 'time_format' ), $lastrun, TRUE ) );
|
239 |
+
if ( BackWPup_Option::get( $item, 'lastruntime' ) )
|
240 |
+
$r .= '<br />' . sprintf( __( 'Runtime: %d seconds', 'backwpup' ), BackWPup_Option::get( $item, 'lastruntime' ) );
|
241 |
+
}
|
242 |
+
else {
|
243 |
+
$r .= __( 'not yet', 'backwpup' );
|
244 |
+
}
|
245 |
+
$r .= "<br /><span class=\"last-action-links\">";
|
246 |
+
if ( current_user_can( 'backwpup_backups_download' ) && BackWPup_Option::get( $item, 'lastbackupdownloadurl' ) )
|
247 |
+
$r .= "<a href=\"" . wp_nonce_url( BackWPup_Option::get( $item, 'lastbackupdownloadurl' ), 'download-backup' ) . "\" title=\"" . esc_attr( __( 'Download last backup', 'backwpup' ) ) . "\">" . __( 'Download', 'backwpup' ) . "</a> | ";
|
248 |
+
if ( current_user_can( 'backwpup_logs' ) && BackWPup_Option::get( $item, 'logfile' ) ) {
|
249 |
+
$logfile = basename( BackWPup_Option::get( $item, 'logfile' ) );
|
250 |
+
if ( is_object( $this->job_object ) && $this->job_object->job[ 'jobid' ] == $item )
|
251 |
+
$logfile = basename( $this->job_object->logfile );
|
252 |
+
$r .= '<a class="thickbox" href="' . admin_url( 'admin-ajax.php' ) . '?&action=backwpup_view_log&logfile=' . $logfile .'&_ajax_nonce=' . wp_create_nonce( 'view-logs' ) . '&TB_iframe=true&width=640&height=440" title="' . esc_attr( $logfile ) . '">' . __( 'Log', 'backwpup' ) . '</a>';
|
253 |
+
|
254 |
+
}
|
255 |
+
$r .= "</span>";
|
256 |
+
|
257 |
+
return $r;
|
258 |
+
}
|
259 |
+
|
260 |
+
|
261 |
+
/**
|
262 |
+
*
|
263 |
+
*/
|
264 |
+
public static function load() {
|
265 |
+
|
266 |
+
//Create Table
|
267 |
+
self::$listtable = new self;
|
268 |
+
|
269 |
+
switch ( self::$listtable->current_action() ) {
|
270 |
+
case 'delete': //Delete Job
|
271 |
+
if ( ! current_user_can( 'backwpup_jobs_edit' ) )
|
272 |
+
break;
|
273 |
+
if ( is_array( $_GET[ 'jobs' ] ) ) {
|
274 |
+
check_admin_referer( 'bulk-jobs' );
|
275 |
+
foreach ( $_GET[ 'jobs' ] as $jobid ) {
|
276 |
+
wp_clear_scheduled_hook( 'backwpup_cron', array( 'id' => $jobid ) );
|
277 |
+
BackWPup_Option::delete_job( $jobid );
|
278 |
+
}
|
279 |
+
}
|
280 |
+
break;
|
281 |
+
case 'copy': //Copy Job
|
282 |
+
if ( ! current_user_can( 'backwpup_jobs_edit' ) )
|
283 |
+
break;
|
284 |
+
$old_job_id = (int)$_GET[ 'jobid' ];
|
285 |
+
check_admin_referer( 'copy-job_' . $_GET[ 'jobid' ] );
|
286 |
+
//create new
|
287 |
+
$newjobid = BackWPup_Option::get_job_ids();
|
288 |
+
sort( $newjobid );
|
289 |
+
$newjobid = end( $newjobid ) + 1;
|
290 |
+
$old_options = BackWPup_Option::get_job( $old_job_id );
|
291 |
+
foreach ( $old_options as $key => $option ) {
|
292 |
+
if ( $key == "jobid" )
|
293 |
+
$option = $newjobid;
|
294 |
+
if ( $key == "name" )
|
295 |
+
$option = __( 'Copy of', 'backwpup' ) . ' ' . $option;
|
296 |
+
if ( $key == "activetype" )
|
297 |
+
$option = '';
|
298 |
+
if ( $key == "archivename" )
|
299 |
+
$option = str_replace( $_GET[ 'jobid' ], $newjobid, $option );
|
300 |
+
if ( $key == "logfile" || $key == "lastbackupdownloadurl" || $key == "lastruntime" ||
|
301 |
+
$key == "lastrun" )
|
302 |
+
continue;
|
303 |
+
BackWPup_Option::update( $newjobid, $key, $option );
|
304 |
+
}
|
305 |
+
break;
|
306 |
+
case 'start_cli': //Get cmd start file
|
307 |
+
if ( ! current_user_can( 'backwpup_jobs_start' ) )
|
308 |
+
break;
|
309 |
+
check_admin_referer( 'start_cli' );
|
310 |
+
if ( empty( $_GET[ 'jobid' ] ) )
|
311 |
+
break;
|
312 |
+
if ( FALSE === strpos( PHP_OS, "WIN" ) ) {
|
313 |
+
header( "Pragma: public" );
|
314 |
+
header( "Expires: 0" );
|
315 |
+
header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
|
316 |
+
header( "Content-Type: application/octet-stream" );
|
317 |
+
header( "Content-Disposition: attachment; filename=BackWPup_cmd_start_job_" . $_GET[ 'jobid' ] . ".sh;" );
|
318 |
+
if ( defined( 'PHP_BINDIR' ) )
|
319 |
+
echo "#!/bin/sh" . PHP_EOL;
|
320 |
+
echo "@\$1php -c \"" . php_ini_loaded_file() . "\" -r \"\$_SERVER[ 'SERVER_ADDR' ] = '". $_SERVER[ 'SERVER_ADDR' ] ."'; \$_SERVER[ 'REMOTE_ADDR' ] = '". $_SERVER[ 'REMOTE_ADDR' ] ."'; \$_SERVER[ 'HTTP_HOST' ] = '". $_SERVER[ 'HTTP_HOST' ] ."'; \$_SERVER[ 'HTTP_USER_AGENT' ] = '". BackWPup::get_plugin_data( 'name' ) ."'; define( 'DOING_CRON', TRUE ); require '" . ABSPATH . "wp-load.php'; if( class_exists( 'BackWPup_Job' ) ) BackWPup_Job::start_cli( " . $_GET[ 'jobid' ] . " );\"";
|
321 |
+
die();
|
322 |
+
}
|
323 |
+
else {
|
324 |
+
header( "Pragma: public" );
|
325 |
+
header( "Expires: 0" );
|
326 |
+
header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
|
327 |
+
header( "Content-Type: application/octet-stream" );
|
328 |
+
header( "Content-Disposition: attachment; filename=BackWPup_cmd_start_job_" . $_GET[ 'jobid' ] . ".cmd;" );
|
329 |
+
echo "@%1php.exe -c \"" . php_ini_loaded_file() . "\" -r \"\$_SERVER[ 'SERVER_ADDR' ] = '". $_SERVER[ 'SERVER_ADDR' ] ."'; \$_SERVER[ 'REMOTE_ADDR' ] = '". $_SERVER[ 'REMOTE_ADDR' ] ."'; \$_SERVER[ 'HTTP_HOST' ] = '". $_SERVER[ 'HTTP_HOST' ] ."'; \$_SERVER[ 'HTTP_USER_AGENT' ] = '". BackWPup::get_plugin_data( 'name' ) ."'; define( 'DOING_CRON', TRUE ); require '" . ABSPATH . "wp-load.php'; if( class_exists( 'BackWPup_Job' ) ) BackWPup_Job::start_cli( " . $_GET[ 'jobid' ] . " );\"";
|
330 |
+
die();
|
331 |
+
}
|
332 |
+
break;
|
333 |
+
case 'runnow':
|
334 |
+
if ( ! empty( $_GET[ 'jobid' ] ) ) {
|
335 |
+
if ( ! current_user_can( 'backwpup_jobs_start' ) )
|
336 |
+
wp_die( __( 'Sorry, you don\'t have permissions to do that.', 'backwpup') );
|
337 |
+
check_admin_referer( 'backwpup_job_run-runnowlink' );
|
338 |
+
|
339 |
+
//check temp folder
|
340 |
+
BackWPup_Job::check_folder( BackWPup::get_plugin_data( 'TEMP' ), TRUE );
|
341 |
+
//check log folder
|
342 |
+
BackWPup_Job::check_folder( get_site_option( 'backwpup_cfg_logfolder' ) );
|
343 |
+
//check server callback
|
344 |
+
$raw_response = BackWPup_Job::get_jobrun_url( 'test' );
|
345 |
+
$test_result = '';
|
346 |
+
if ( is_wp_error( $raw_response ) )
|
347 |
+
$test_result .= sprintf( __( 'The HTTP response test get an error "%s"','backwpup' ), $raw_response->get_error_message() );
|
348 |
+
elseif ( 200 != wp_remote_retrieve_response_code( $raw_response ) && 204 != wp_remote_retrieve_response_code( $raw_response ) )
|
349 |
+
$test_result .= sprintf( __( 'The HTTP response test get a false http status (%s)','backwpup' ), wp_remote_retrieve_response_code( $raw_response ) );
|
350 |
+
if ( ! empty( $test_result ) )
|
351 |
+
BackWPup_Admin::message( $test_result, TRUE );
|
352 |
+
|
353 |
+
//only start job if messages empty
|
354 |
+
$log_messages = BackWPup_Admin::get_messages();
|
355 |
+
if ( empty ( $log_messages ) ) {
|
356 |
+
$old_log_file = BackWPup_Option::get( $_GET[ 'jobid' ], 'logfile' );
|
357 |
+
BackWPup_Job::get_jobrun_url( 'runnow', $_GET[ 'jobid' ] );
|
358 |
+
usleep( 250000 ); //wait a quarter second
|
359 |
+
$new_log_file = BackWPup_Option::get( $_GET[ 'jobid' ], 'logfile', NULL, FALSE );
|
360 |
+
//sleep as long as job not started
|
361 |
+
$i=0;
|
362 |
+
while ( $old_log_file == $new_log_file ) {
|
363 |
+
usleep( 250000 ); //wait a quarter second for next try
|
364 |
+
$new_log_file = BackWPup_Option::get( $_GET[ 'jobid' ], 'logfile', NULL, FALSE );
|
365 |
+
//wait maximal 10 sec.
|
366 |
+
if ( $i >= 40 ) {
|
367 |
+
BackWPup_Admin::message( sprintf( __( 'Job “%s” has started, but not responded for 10 seconds.', 'backwpup' ), esc_attr( BackWPup_Option::get( $_GET[ 'jobid' ], 'name' ) ) ), TRUE );
|
368 |
+
break 2;
|
369 |
+
}
|
370 |
+
$i++;
|
371 |
+
}
|
372 |
+
BackWPup_Admin::message( sprintf( __( 'Job "%s" started.', 'backwpup' ), esc_attr( BackWPup_Option::get( $_GET[ 'jobid' ], 'name' ) ) ) );
|
373 |
+
}
|
374 |
+
}
|
375 |
+
break;
|
376 |
+
case 'abort': //Abort Job
|
377 |
+
if ( ! current_user_can( 'backwpup_jobs_start' ) )
|
378 |
+
break;
|
379 |
+
check_admin_referer( 'abort-job' );
|
380 |
+
if ( ! file_exists( BackWPup::get_plugin_data( 'running_file' ) ) )
|
381 |
+
break;
|
382 |
+
//abort
|
383 |
+
BackWPup_Job::user_abort();
|
384 |
+
BackWPup_Admin::message( __( 'Job will be terminated.', 'backwpup' ) ) ;
|
385 |
+
break;
|
386 |
+
default:
|
387 |
+
do_action( 'backwpup_page_jobs_load', self::$listtable->current_action() );
|
388 |
+
break;
|
389 |
+
}
|
390 |
+
|
391 |
+
self::$listtable->prepare_items();
|
392 |
+
}
|
393 |
+
|
394 |
+
/**
|
395 |
+
*
|
396 |
+
*/
|
397 |
+
public static function admin_print_styles() {
|
398 |
+
|
399 |
+
?>
|
400 |
+
<style type="text/css" media="screen">
|
401 |
+
|
402 |
+
.column-last, .column-next, .column-type, .column-dest {
|
403 |
+
width: 15%;
|
404 |
+
}
|
405 |
+
|
406 |
+
#TB_ajaxContent {
|
407 |
+
background-color: black;
|
408 |
+
color: white;
|
409 |
+
}
|
410 |
+
|
411 |
+
#showworking {
|
412 |
+
white-space:nowrap;
|
413 |
+
display: block;
|
414 |
+
width: 100%;
|
415 |
+
font-family:monospace;
|
416 |
+
font-size:12px;
|
417 |
+
line-height:15px;
|
418 |
+
}
|
419 |
+
#runningjob {
|
420 |
+
padding:10px;
|
421 |
+
position:relative;
|
422 |
+
margin: 15px 0 25px 0;
|
423 |
+
padding-bottom:25px;
|
424 |
+
}
|
425 |
+
h2#runnigtitle {
|
426 |
+
margin-bottom: 15px;
|
427 |
+
padding: 0;
|
428 |
+
}
|
429 |
+
#warningsid, #errorid {
|
430 |
+
margin-right: 10px;
|
431 |
+
}
|
432 |
+
|
433 |
+
.infobuttons {
|
434 |
+
position: absolute;
|
435 |
+
right: 10px;
|
436 |
+
bottom: 0;
|
437 |
+
}
|
438 |
+
|
439 |
+
.progressbar {
|
440 |
+
margin-top: 20px;
|
441 |
+
height: auto;
|
442 |
+
background: #f6f6f6 url('<?php echo BackWPup::get_plugin_data( 'URL' );?>/assets/images/progressbarhg.jpg');
|
443 |
+
}
|
444 |
+
|
445 |
+
#lastmsg, #onstep, #lasterrormsg {
|
446 |
+
text-align: center;
|
447 |
+
margin-bottom: 20px;
|
448 |
+
}
|
449 |
+
#backwpup-page #lastmsg,
|
450 |
+
#backwpup-page #onstep,
|
451 |
+
#backwpup-page #lasterrormsg {
|
452 |
+
font-family: "Open Sans", sans-serif;
|
453 |
+
}
|
454 |
+
.bwpu-progress {
|
455 |
+
background-color: #1d94cf;
|
456 |
+
color: #fff;
|
457 |
+
padding: 5px 0;
|
458 |
+
text-align: center;
|
459 |
+
}
|
460 |
+
#progresssteps {
|
461 |
+
background-color: #007fb6;
|
462 |
+
}
|
463 |
+
|
464 |
+
.row-actions .lastlog {
|
465 |
+
display: none;
|
466 |
+
}
|
467 |
+
|
468 |
+
@media screen and (max-width: 782px) {
|
469 |
+
.column-type, .column-dest {
|
470 |
+
display: none;
|
471 |
+
}
|
472 |
+
.row-actions .lastlog {
|
473 |
+
display: inline-block;
|
474 |
+
}
|
475 |
+
.last-action-links {
|
476 |
+
display: none;
|
477 |
+
}
|
478 |
+
}
|
479 |
+
</style>
|
480 |
+
<?php
|
481 |
+
}
|
482 |
+
|
483 |
+
/**
|
484 |
+
*
|
485 |
+
*/
|
486 |
+
public static function admin_print_scripts() {
|
487 |
+
|
488 |
+
wp_enqueue_script( 'backwpupgeneral' );
|
489 |
+
}
|
490 |
+
|
491 |
+
/**
|
492 |
+
*
|
493 |
+
*/
|
494 |
+
public static function page() {
|
495 |
+
|
496 |
+
echo '<div class="wrap" id="backwpup-page">';
|
497 |
+
echo '<h2><span id="backwpup-page-icon"> </span>' . esc_html( sprintf( __( '%s Jobs', 'backwpup' ), BackWPup::get_plugin_data( 'name' ) ) ) . ' <a href="' . wp_nonce_url( network_admin_url( 'admin.php' ) . '?page=backwpupeditjob', 'edit-job' ) . '" class="add-new-h2">' . esc_html__( 'Add new', 'backwpup' ) . '</a></h2>';
|
498 |
+
BackWPup_Admin::display_messages();
|
499 |
+
$job_object = BackWPup_Job::get_working_data();
|
500 |
+
if ( current_user_can( 'backwpup_jobs_start' ) && is_object( $job_object ) ) {
|
501 |
+
|
502 |
+
//read existing logfile
|
503 |
+
$logfiledata = file_get_contents( $job_object->logfile );
|
504 |
+
preg_match( '/<body[^>]*>/si', $logfiledata, $match );
|
505 |
+
if ( ! empty( $match[ 0 ] ) )
|
506 |
+
$startpos = strpos( $logfiledata, $match[ 0 ] ) + strlen( $match[ 0 ] );
|
507 |
+
else
|
508 |
+
$startpos = 0;
|
509 |
+
$endpos = stripos( $logfiledata, '</body>' );
|
510 |
+
if ( empty( $endpos ) )
|
511 |
+
$endpos = strlen( $logfiledata );
|
512 |
+
$length = strlen( $logfiledata ) - ( strlen( $logfiledata ) - $endpos ) - $startpos;
|
513 |
+
|
514 |
+
?>
|
515 |
+
<div id="runningjob">
|
516 |
+
<div id="runniginfos">
|
517 |
+
<h2 id="runningtitle"><?php sprintf( __('Job currently running: %s','backwpup'), $job_object->job[ 'name' ] ); ?></h2>
|
518 |
+
<span id="warningsid"><?php _e( 'Warnings:', 'backwpup' ); ?> <span id="warnings"><?php echo $job_object->warnings; ?></span></span>
|
519 |
+
<span id="errorid"><?php _e( 'Errors:', 'backwpup' ); ?> <span id="errors"><?php echo $job_object->errors; ?></span></span>
|
520 |
+
<div class="infobuttons"><a href="#TB_inline?height=440&width=630&inlineId=tb-showworking" id="showworkingbutton" class="thickbox button button-primary button-primary-bwp" title="<?php _e( 'Log of running job', 'backwpup'); ?>"><?php _e( 'Display working log', 'backwpup' ); ?></a>
|
521 |
+
<a href="<?php echo wp_nonce_url( network_admin_url( 'admin.php' ) . '?page=backwpupjobs&action=abort', 'abort-job' ); ?>" id="abortbutton" class="backwpup-fancybox button button-bwp"><?php _e( 'Abort', 'backwpup' ); ?></a>
|
522 |
+
<a href="#" id="showworkingclose" title="<?php _e( 'Close working screen', 'backwpup'); ?>" class="button button-bwp" style="display:none" ><?php _e( 'close', 'backwpup' ); ?></a></div>
|
523 |
+
</div>
|
524 |
+
<input type="hidden" name="logpos" id="logpos" value="<?php echo strlen( $logfiledata ); ?>">
|
525 |
+
<div id="lasterrormsg"></div>
|
526 |
+
<div class="progressbar"><div id="progressstep" class="bwpu-progress" style="width:<?php echo $job_object->step_percent; ?>%;"><?php echo $job_object->step_percent; ?>%</div></div>
|
527 |
+
<div id="onstep"><?php echo $job_object->steps_data[ $job_object->step_working ][ 'NAME' ]; ?></div>
|
528 |
+
<div class="progressbar"><div id="progresssteps" class="bwpu-progress" style="width:<?php echo $job_object->substep_percent; ?>%;"><?php echo $job_object->substep_percent; ?>%</div></div>
|
529 |
+
<div id="lastmsg"><?php echo $job_object->lastmsg; ?></div>
|
530 |
+
<div id="tb-showworking" style="display:none;">
|
531 |
+
<div id="showworking"><?php echo substr( $logfiledata, $startpos, $length ); ?></div>
|
532 |
+
</div>
|
533 |
+
</div>
|
534 |
+
<?php }
|
535 |
+
|
536 |
+
//display jos Table
|
537 |
+
?>
|
538 |
+
<form id="posts-filter" action="" method="get">
|
539 |
+
<input type="hidden" name="page" value="backwpupjobs" />
|
540 |
+
<?php
|
541 |
+
echo wp_nonce_field( 'backwpup_ajax_nonce', 'backwpupajaxnonce', FALSE );
|
542 |
+
self::$listtable->display();
|
543 |
+
?>
|
544 |
+
<div id="ajax-response"></div>
|
545 |
+
</form>
|
546 |
+
</div>
|
547 |
+
<?php
|
548 |
+
|
549 |
+
if ( ! empty( $job_object->logfile ) ) { ?>
|
550 |
+
<script type="text/javascript">
|
551 |
+
//<![CDATA[
|
552 |
+
jQuery(document).ready(function ($) {
|
553 |
+
backwpup_show_working = function () {
|
554 |
+
$.ajax({
|
555 |
+
type: 'GET',
|
556 |
+
url: ajaxurl,
|
557 |
+
cache: false,
|
558 |
+
data:{
|
559 |
+
action: 'backwpup_working',
|
560 |
+
logpos: $('#logpos').val(),
|
561 |
+
logfile: '<?php echo basename( $job_object->logfile );?>',
|
562 |
+
_ajax_nonce: '<?php echo wp_create_nonce( 'backwpupworking_ajax_nonce' );?>'
|
563 |
+
},
|
564 |
+
dataType: 'json',
|
565 |
+
success:function (rundata) {
|
566 |
+
if ( rundata == 0 ) {
|
567 |
+
$("#abortbutton").remove();
|
568 |
+
$("#backwpup-adminbar-running").remove();
|
569 |
+
$(".job-run").hide();
|
570 |
+
$("#message").hide();
|
571 |
+
$(".job-normal").show();
|
572 |
+
$('#showworkingclose').show();
|
573 |
+
}
|
574 |
+
if (0 < rundata.log_pos) {
|
575 |
+
$('#logpos').val(rundata.log_pos);
|
576 |
+
}
|
577 |
+
if ('' != rundata.log_text) {
|
578 |
+
$('#showworking').append(rundata.log_text);
|
579 |
+
$('#TB_ajaxContent').scrollTop(rundata.log_pos * 15);
|
580 |
+
}
|
581 |
+
if (0 < rundata.error_count) {
|
582 |
+
$('#errors').replaceWith('<span id="errors">' + rundata.error_count + '</span>');
|
583 |
+
}
|
584 |
+
if (0 < rundata.warning_count) {
|
585 |
+
$('#warnings').replaceWith('<span id="warnings">' + rundata.warning_count + '</span>');
|
586 |
+
}
|
587 |
+
if (0 < rundata.step_percent) {
|
588 |
+
$('#progressstep').replaceWith('<div id="progressstep" class="bwpu-progress">' + rundata.step_percent + '%</div>');
|
589 |
+
$('#progressstep').css('width', parseFloat(rundata.step_percent) + '%');
|
590 |
+
}
|
591 |
+
if (0 < rundata.sub_step_percent) {
|
592 |
+
$('#progresssteps').replaceWith('<div id="progresssteps" class="bwpu-progress">' + rundata.sub_step_percent + '%</div>');
|
593 |
+
$('#progresssteps').css('width', parseFloat(rundata.sub_step_percent) + '%');
|
594 |
+
}
|
595 |
+
if (0 < rundata.running_time) {
|
596 |
+
$('#runtime').replaceWith('<span id="runtime">' + rundata.running_time + '</span>');
|
597 |
+
}
|
598 |
+
if ( '' != rundata.onstep ) {
|
599 |
+
$('#onstep').replaceWith('<div id="onstep">' + rundata.on_step + '</div>');
|
600 |
+
}
|
601 |
+
if ( '' != rundata.last_msg ) {
|
602 |
+
$('#lastmsg').replaceWith('<div id="lastmsg">' + rundata.last_msg + '</div>');
|
603 |
+
}
|
604 |
+
if ( '' != rundata.last_error_msg ) {
|
605 |
+
$('#lasterrormsg').replaceWith('<div id="lasterrormsg">' + rundata.last_error_msg + '</div>');
|
606 |
+
}
|
607 |
+
if ( rundata.job_done == 1 ) {
|
608 |
+
$("#abortbutton").remove();
|
609 |
+
$("#backwpup-adminbar-running").remove();
|
610 |
+
$(".job-run").hide();
|
611 |
+
$("#message").hide();
|
612 |
+
$(".job-normal").show();
|
613 |
+
$('#showworkingclose').show();
|
614 |
+
} else {
|
615 |
+
setTimeout('backwpup_show_working()', 750);
|
616 |
+
}
|
617 |
+
},
|
618 |
+
error:function ( ) {
|
619 |
+
setTimeout('backwpup_show_working()', 750);
|
620 |
+
}
|
621 |
+
});
|
622 |
+
};
|
623 |
+
backwpup_show_working();
|
624 |
+
$('#showworkingclose').click( function() {
|
625 |
+
$("#runningjob").hide( 'slow' );
|
626 |
+
return false;
|
627 |
+
});
|
628 |
+
});
|
629 |
+
//]]>
|
630 |
+
</script>
|
631 |
+
<?php }
|
632 |
+
}
|
633 |
+
|
634 |
+
|
635 |
+
/**
|
636 |
+
*
|
637 |
+
* Function to generate json data
|
638 |
+
*
|
639 |
+
*/
|
640 |
+
public static function ajax_working() {
|
641 |
+
|
642 |
+
check_ajax_referer( 'backwpupworking_ajax_nonce' );
|
643 |
+
|
644 |
+
$logfile = isset( $_GET[ 'logfile' ] ) ? get_site_option( 'backwpup_cfg_logfolder' ) . trim( $_GET[ 'logfile' ] ) : NULL;
|
645 |
+
$logpos = isset( $_GET[ 'logpos' ] ) ? (int)$_GET[ 'logpos' ] : 0;
|
646 |
+
|
647 |
+
//check if logfile renamed
|
648 |
+
if ( file_exists( $logfile . '.gz' ) )
|
649 |
+
$logfile .= '.gz';
|
650 |
+
|
651 |
+
if ( ! is_readable( $logfile ) )
|
652 |
+
die( '0' );
|
653 |
+
|
654 |
+
$job_object = BackWPup_Job::get_working_data();
|
655 |
+
$done = 0;
|
656 |
+
if ( is_object( $job_object ) ) {
|
657 |
+
$warnings = $job_object->warnings;
|
658 |
+
$errors = $job_object->errors;
|
659 |
+
$step_percent = $job_object->step_percent;
|
660 |
+
$substep_percent = $job_object->substep_percent;
|
661 |
+
$runtime = current_time( 'timestamp' ) - $job_object->start_time;
|
662 |
+
$onstep = $job_object->steps_data[ $job_object->step_working ][ 'NAME' ];
|
663 |
+
$lastmsg = $job_object->lastmsg;
|
664 |
+
$lasterrormsg = $job_object->lasterrormsg;
|
665 |
+
} else {
|
666 |
+
$logheader = BackWPup_Job::read_logheader( $logfile );
|
667 |
+
$warnings = $logheader[ 'warnings' ];
|
668 |
+
$runtime = $logheader[ 'runtime' ];
|
669 |
+
$errors = $logheader[ 'errors' ];
|
670 |
+
$step_percent = 100;
|
671 |
+
$substep_percent = 100;
|
672 |
+
$onstep = '<div class="backwpup-message backwpup-info"><p>' . __( 'Job completed' , 'backwpup' ) . '</p></div>';
|
673 |
+
if ( $errors > 0 )
|
674 |
+
$lastmsg = '<div class="error"><p>' . __( 'ERROR:', 'backwpup' ) . ' ' . sprintf( __( 'Job has ended with errors in %s seconds. You must resolve the errors for correct execution.', 'backwpup' ), $logheader[ 'runtime' ] ) . '</p></div>';
|
675 |
+
elseif ( $warnings > 0 )
|
676 |
+
$lastmsg = '<div class="backwpup-message backwpup-warning"><p>' . __( 'WARNING:', 'backwpup' ) . ' ' . sprintf( __( 'Job has done with warnings in %s seconds. Please resolve them for correct execution.', 'backwpup' ), $logheader[ 'runtime' ] ) . '</p></div>';
|
677 |
+
else
|
678 |
+
$lastmsg = '<div class="updated"><p>' . sprintf( __( 'Job done in %s seconds.', 'backwpup' ), $logheader[ 'runtime' ] ) . '</p></div>';
|
679 |
+
$lasterrormsg = '';
|
680 |
+
$done = 1;
|
681 |
+
}
|
682 |
+
|
683 |
+
if ( '.gz' == substr( $logfile, -3 ) )
|
684 |
+
$logfiledata = file_get_contents( 'compress.zlib://' . $logfile, FALSE, NULL, $logpos );
|
685 |
+
else
|
686 |
+
$logfiledata = file_get_contents( $logfile, FALSE, NULL, $logpos );
|
687 |
+
|
688 |
+
preg_match( '/<body[^>]*>/si', $logfiledata, $match );
|
689 |
+
if ( ! empty( $match[ 0 ] ) )
|
690 |
+
$startpos = strpos( $logfiledata, $match[ 0 ] ) + strlen( $match[ 0 ] );
|
691 |
+
else
|
692 |
+
$startpos = 0;
|
693 |
+
|
694 |
+
$endpos = stripos( $logfiledata, '</body>' );
|
695 |
+
if ( FALSE === $endpos )
|
696 |
+
$endpos = strlen( $logfiledata );
|
697 |
+
|
698 |
+
$length = strlen( $logfiledata ) - ( strlen( $logfiledata ) - $endpos ) - $startpos;
|
699 |
+
|
700 |
+
wp_send_json( array(
|
701 |
+
'log_pos' => strlen( $logfiledata ) + $logpos,
|
702 |
+
'log_text' => substr( $logfiledata, $startpos, $length ),
|
703 |
+
'warning_count' => $warnings,
|
704 |
+
'error_count' => $errors,
|
705 |
+
'running_time' => $runtime,
|
706 |
+
'step_percent' => $step_percent,
|
707 |
+
'on_step' => $onstep,
|
708 |
+
'last_msg' => $lastmsg,
|
709 |
+
'last_error_msg' => $lasterrormsg,
|
710 |
+
'sub_step_percent'=> $substep_percent,
|
711 |
+
'job_done' => $done
|
712 |
+
) );
|
713 |
+
}
|
714 |
+
|
715 |
+
}
|
716 |
+
|
inc/class-page-settings.php
CHANGED
@@ -1,457 +1,457 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Class for BackWPup settings page
|
4 |
-
*/
|
5 |
-
class BackWPup_Page_Settings {
|
6 |
-
|
7 |
-
/**
|
8 |
-
*
|
9 |
-
* Output js
|
10 |
-
*
|
11 |
-
* @return void
|
12 |
-
*/
|
13 |
-
public static function admin_print_scripts() {
|
14 |
-
|
15 |
-
wp_enqueue_script( 'backwpupgeneral' );
|
16 |
-
|
17 |
-
if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) {
|
18 |
-
wp_enqueue_script( 'backwpuppagesettings', BackWPup::get_plugin_data( 'URL' ) . '/assets/js/page_settings.js', array( 'jquery' ), time(), TRUE );
|
19 |
-
} else {
|
20 |
-
wp_enqueue_script( 'backwpuppagesettings', BackWPup::get_plugin_data( 'URL' ) . '/assets/js/page_settings.min.js', array( 'jquery' ), BackWPup::get_plugin_data( 'Version' ), TRUE );
|
21 |
-
}
|
22 |
-
}
|
23 |
-
|
24 |
-
|
25 |
-
/**
|
26 |
-
* Save settings form data
|
27 |
-
*/
|
28 |
-
public static function save_post_form() {
|
29 |
-
|
30 |
-
if ( ! current_user_can( 'backwpup_settings' ) )
|
31 |
-
return;
|
32 |
-
|
33 |
-
//set default options if button clicked
|
34 |
-
if ( isset( $_POST[ 'default_settings' ] ) && $_POST[ 'default_settings' ] ) {
|
35 |
-
|
36 |
-
delete_site_option( 'backwpup_cfg_showadminbar' );
|
37 |
-
delete_site_option( 'backwpup_cfg_showfoldersize' );
|
38 |
-
delete_site_option( 'backwpup_cfg_jobstepretry' );
|
39 |
-
delete_site_option( 'backwpup_cfg_jobmaxexecutiontime' );
|
40 |
-
delete_site_option( 'backwpup_cfg_jobziparchivemethod' );
|
41 |
-
delete_site_option( 'backwpup_cfg_jobnotranslate' );
|
42 |
-
delete_site_option( 'backwpup_cfg_jobwaittimems' );
|
43 |
-
delete_site_option( 'backwpup_cfg_jobrunauthkey' );
|
44 |
-
delete_site_option( 'backwpup_cfg_maxlogs' );
|
45 |
-
delete_site_option( 'backwpup_cfg_gzlogs' );
|
46 |
-
delete_site_option( 'backwpup_cfg_protectfolders' );
|
47 |
-
delete_site_option( 'backwpup_cfg_httpauthuser' );
|
48 |
-
delete_site_option( 'backwpup_cfg_httpauthpassword' );
|
49 |
-
delete_site_option( 'backwpup_cfg_logfolder' );
|
50 |
-
delete_site_option( 'backwpup_cfg_dropboxappkey' );
|
51 |
-
delete_site_option( 'backwpup_cfg_dropboxappsecret' );
|
52 |
-
delete_site_option( 'backwpup_cfg_dropboxsandboxappkey' );
|
53 |
-
delete_site_option( 'backwpup_cfg_dropboxsandboxappsecret' );
|
54 |
-
delete_site_option( 'backwpup_cfg_sugarsynckey' );
|
55 |
-
delete_site_option( 'backwpup_cfg_sugarsyncsecret' );
|
56 |
-
delete_site_option( 'backwpup_cfg_sugarsyncappid' );
|
57 |
-
|
58 |
-
BackWPup_Option::default_site_options();
|
59 |
-
|
60 |
-
BackWPup_Admin::message( __( 'Settings reset to default', 'backwpup' ) );
|
61 |
-
return;
|
62 |
-
}
|
63 |
-
|
64 |
-
update_site_option( 'backwpup_cfg_showadminbar', isset( $_POST[ 'showadminbar' ] ) ? 1 : 0 );
|
65 |
-
update_site_option( 'backwpup_cfg_showfoldersize', isset( $_POST[ 'showfoldersize' ] ) ? 1 : 0 );
|
66 |
-
if ( 100 > $_POST[ 'jobstepretry' ] && 0 < $_POST[ 'jobstepretry' ] )
|
67 |
-
$_POST[ 'jobstepretry' ] = abs( (int)$_POST[ 'jobstepretry' ] );
|
68 |
-
if ( empty( $_POST[ 'jobstepretry' ] ) or ! is_int( $_POST[ 'jobstepretry' ] ) )
|
69 |
-
$_POST[ 'jobstepretry' ] = 3;
|
70 |
-
update_site_option( 'backwpup_cfg_jobstepretry', $_POST[ 'jobstepretry' ] );
|
71 |
-
$max_exe_time = abs( (int)$_POST[ 'jobmaxexecutiontime' ] );
|
72 |
-
if ( ! is_int( $max_exe_time ) || $max_exe_time < 0 ) {
|
73 |
-
$max_exe_time = 0;
|
74 |
-
} elseif ( $max_exe_time > 300 ) {
|
75 |
-
$max_exe_time = 300;
|
76 |
-
}
|
77 |
-
update_site_option( 'backwpup_cfg_jobmaxexecutiontime', $max_exe_time );
|
78 |
-
update_site_option( 'backwpup_cfg_jobziparchivemethod', ( $_POST[ 'jobziparchivemethod' ] == '' || $_POST[ 'jobziparchivemethod' ] == 'PclZip' || $_POST[ 'jobziparchivemethod' ] == 'ZipArchive' ) ? $_POST[ 'jobziparchivemethod' ] : '' );
|
79 |
-
update_site_option( 'backwpup_cfg_jobnotranslate', isset( $_POST[ 'jobnotranslate' ] ) ? 1 : 0 );
|
80 |
-
update_site_option( 'backwpup_cfg_jobwaittimems', $_POST[ 'jobwaittimems' ] );
|
81 |
-
update_site_option( 'backwpup_cfg_maxlogs', abs( (int)$_POST[ 'maxlogs' ] ) );
|
82 |
-
update_site_option( 'backwpup_cfg_gzlogs', isset( $_POST[ 'gzlogs' ] ) ? 1 : 0 );
|
83 |
-
update_site_option( 'backwpup_cfg_protectfolders', isset( $_POST[ 'protectfolders' ] ) ? 1 : 0 );
|
84 |
-
update_site_option( 'backwpup_cfg_httpauthuser', $_POST[ 'httpauthuser' ] );
|
85 |
-
update_site_option( 'backwpup_cfg_httpauthpassword', BackWPup_Encryption::encrypt( $_POST[ 'httpauthpassword' ] ) );
|
86 |
-
$_POST[ 'jobrunauthkey' ] = preg_replace( '/[^a-zA-Z0-9]/', '', trim( $_POST[ 'jobrunauthkey' ] ) );
|
87 |
-
update_site_option( 'backwpup_cfg_jobrunauthkey', $_POST[ 'jobrunauthkey' ] );
|
88 |
-
$_POST[ 'logfolder' ] = trailingslashit( str_replace( '\\', '/', trim( stripslashes( $_POST[ 'logfolder' ] ) ) ) );
|
89 |
-
if ( $_POST[ 'logfolder' ][ 0 ] == '.' || ( $_POST[ 'logfolder' ][ 0 ] != '/' && ! preg_match( '#^[a-zA-Z]:/#', $_POST[ 'logfolder' ] ) ) )
|
90 |
-
$_POST[ 'logfolder' ] = trailingslashit( str_replace( '\\', '/', ABSPATH ) ) . $_POST[ 'logfolder' ];
|
91 |
-
//set def. folders
|
92 |
-
if ( empty( $_POST[ 'logfolder' ] ) || $_POST[ 'logfolder' ] == '/' ) {
|
93 |
-
delete_site_option( 'backwpup_cfg_logfolder' );
|
94 |
-
BackWPup_Option::default_site_options();
|
95 |
-
} else {
|
96 |
-
update_site_option( 'backwpup_cfg_logfolder', $_POST[ 'logfolder' ] );
|
97 |
-
}
|
98 |
-
|
99 |
-
do_action( 'backwpup_page_settings_save' );
|
100 |
-
|
101 |
-
BackWPup_Admin::message( __( 'Settings saved', 'backwpup' ) );
|
102 |
-
}
|
103 |
-
|
104 |
-
/**
|
105 |
-
* Page Output
|
106 |
-
*/
|
107 |
-
public static function page() {
|
108 |
-
global $wpdb;
|
109 |
-
|
110 |
-
?>
|
111 |
-
<div class="wrap" id="backwpup-page">
|
112 |
-
<h2><span id="backwpup-page-icon"> </span><?php echo sprintf( __( '%s Settings', 'backwpup' ), BackWPup::get_plugin_data( 'name' ) ); ?></h2>
|
113 |
-
<?php
|
114 |
-
$tabs = array( 'general' => __( 'General', 'backwpup' ), 'job' => __( 'Jobs', 'backwpup' ), 'log' => __( 'Logs', 'backwpup' ), 'net' => __( 'Network', 'backwpup' ), 'apikey' => __( 'API Keys', 'backwpup' ), 'information' => __( 'Information', 'backwpup' ) );
|
115 |
-
$tabs = apply_filters( 'backwpup_page_settings_tab', $tabs );
|
116 |
-
echo '<h2 class="nav-tab-wrapper">';
|
117 |
-
foreach ( $tabs as $id => $name ) {
|
118 |
-
echo '<a href="#backwpup-tab-' . $id . '" class="nav-tab">' . $name . '</a>';
|
119 |
-
}
|
120 |
-
echo '</h2>';
|
121 |
-
BackWPup_Admin::display_messages();
|
122 |
-
?>
|
123 |
-
|
124 |
-
<form id="settingsform" action="<?php echo admin_url( 'admin-post.php?action=backwpup' ); ?>" method="post">
|
125 |
-
<?php wp_nonce_field( 'backwpupsettings_page' ); ?>
|
126 |
-
<input type="hidden" name="page" value="backwpupsettings" />
|
127 |
-
<input type="hidden" name="anchor" value="#backwpup-tab-general" />
|
128 |
-
|
129 |
-
<div class="table ui-tabs-hide" id="backwpup-tab-general">
|
130 |
-
|
131 |
-
<h3 class="title"><?php _e( 'Display Settings', 'backwpup' ); ?></h3>
|
132 |
-
<p><?php _e( 'Do you want to see BackWPup in the WordPress admin bar?', 'backwpup' ); ?></p>
|
133 |
-
<table class="form-table">
|
134 |
-
<tr>
|
135 |
-
<th scope="row"><?php _e( 'Admin bar', 'backwpup' ); ?></th>
|
136 |
-
<td>
|
137 |
-
<fieldset>
|
138 |
-
<legend class="screen-reader-text"><span><?php _e( 'Admin Bar', 'backwpup' ); ?></span>
|
139 |
-
</legend>
|
140 |
-
<label for="showadminbar">
|
141 |
-
<input name="showadminbar" type="checkbox" id="showadminbar"
|
142 |
-
value="1" <?php checked( get_site_option( 'backwpup_cfg_showadminbar' ), TRUE ); ?> />
|
143 |
-
<?php _e( 'Show BackWPup links in admin bar.', 'backwpup' ); ?></label>
|
144 |
-
</fieldset>
|
145 |
-
</td>
|
146 |
-
</tr>
|
147 |
-
<tr>
|
148 |
-
<th scope="row"><?php _e( 'Folder sizes', 'backwpup' ); ?></th>
|
149 |
-
<td>
|
150 |
-
<fieldset>
|
151 |
-
<legend class="screen-reader-text"><span><?php _e( 'Folder sizes', 'backwpup' ); ?></span>
|
152 |
-
</legend>
|
153 |
-
<label for="showfoldersize">
|
154 |
-
<input name="showfoldersize" type="checkbox" id="showfoldersize"
|
155 |
-
value="1" <?php checked( get_site_option( 'backwpup_cfg_showfoldersize' ), TRUE ); ?> />
|
156 |
-
<?php _e( 'Display folder sizes in the files tab when editing a job. (Might increase loading time of files tab.)', 'backwpup' ); ?></label>
|
157 |
-
</fieldset>
|
158 |
-
</td>
|
159 |
-
</tr>
|
160 |
-
</table>
|
161 |
-
<h3 class="title"><?php _e( 'Security', 'backwpup' ); ?></h3>
|
162 |
-
<p><?php _e( 'Security option for BackWPup', 'backwpup' ); ?></p>
|
163 |
-
<table class="form-table">
|
164 |
-
<tr>
|
165 |
-
<th scope="row"><?php _e( 'Protect folders', 'backwpup' ); ?></th>
|
166 |
-
<td>
|
167 |
-
<fieldset>
|
168 |
-
<legend class="screen-reader-text"><span><?php _e( 'Protect folders', 'backwpup' ); ?></span>
|
169 |
-
</legend>
|
170 |
-
<label for="protectfolders">
|
171 |
-
<input name="protectfolders" type="checkbox" id="protectfolders"
|
172 |
-
value="1" <?php checked( get_site_option( 'backwpup_cfg_protectfolders' ), TRUE ); ?> />
|
173 |
-
<?php _e( 'Protect BackWPup folders ( Temp, Log and Backups ) with <code>.htaccess</code> and <code>index.php</code>', 'backwpup' ); ?>
|
174 |
-
</label>
|
175 |
-
</fieldset>
|
176 |
-
</td>
|
177 |
-
</tr>
|
178 |
-
</table>
|
179 |
-
|
180 |
-
<?php do_action('backwpup_page_settings_tab_generel'); ?>
|
181 |
-
|
182 |
-
</div>
|
183 |
-
|
184 |
-
<div class="table ui-tabs-hide" id="backwpup-tab-log">
|
185 |
-
|
186 |
-
<p><?php _e( 'Every time BackWPup runs a backup job, a log file is being generated. Choose where to store your log files and how many of them.', 'backwpup' ); ?></p>
|
187 |
-
<table class="form-table">
|
188 |
-
<tr>
|
189 |
-
<th scope="row"><label for="logfolder"><?php _e( 'Log file folder', 'backwpup' ); ?></label></th>
|
190 |
-
<td>
|
191 |
-
<input name="logfolder" type="text" id="logfolder"
|
192 |
-
value="<?php echo get_site_option( 'backwpup_cfg_logfolder' );?>"
|
193 |
-
class="regular-text code"/>
|
194 |
-
</td>
|
195 |
-
</tr>
|
196 |
-
<tr>
|
197 |
-
<th scope="row"><label for="maxlogs"><?php _e( 'Maximum number of log files in folder', 'backwpup' ); ?></label>
|
198 |
-
</th>
|
199 |
-
<td>
|
200 |
-
<input name="maxlogs" type="text" id="maxlogs" title="<?php esc_attr_e( 'Oldest files will be deleted first.', 'backwpup' ); ?>"
|
201 |
-
value="<?php echo get_site_option( 'backwpup_cfg_maxlogs' );?>" class="small-text code help-tip"/>
|
202 |
-
</td>
|
203 |
-
</tr>
|
204 |
-
<tr>
|
205 |
-
<th scope="row"><?php _e( 'Compression', 'backwpup' ); ?></th>
|
206 |
-
<td>
|
207 |
-
<fieldset>
|
208 |
-
<legend class="screen-reader-text"><span><?php _e( 'Compression', 'backwpup' ); ?></span>
|
209 |
-
</legend>
|
210 |
-
<label for="gzlogs">
|
211 |
-
<input name="gzlogs" type="checkbox" id="gzlogs"
|
212 |
-
value="1" <?php checked( get_site_option( 'backwpup_cfg_gzlogs' ), TRUE ); ?><?php if ( ! function_exists( 'gzopen' ) ) echo " disabled=\"disabled\""; ?> />
|
213 |
-
<?php _e( 'Compress log files with GZip.', 'backwpup' ); ?></label>
|
214 |
-
</fieldset>
|
215 |
-
</td>
|
216 |
-
</tr>
|
217 |
-
</table>
|
218 |
-
|
219 |
-
</div>
|
220 |
-
<div class="table ui-tabs-hide" id="backwpup-tab-job">
|
221 |
-
|
222 |
-
<p><?php _e( 'There are a couple of general options for backup jobs. Set them here.', 'backwpup' ); ?></p>
|
223 |
-
<table class="form-table">
|
224 |
-
<tr>
|
225 |
-
<th scope="row">
|
226 |
-
<label for="jobstepretry"><?php _e( "Maximum number of retries for job steps", 'backwpup' ); ?></label></th>
|
227 |
-
<td>
|
228 |
-
<input name="jobstepretry" type="text" id="jobstepretry"
|
229 |
-
value="<?php echo get_site_option( 'backwpup_cfg_jobstepretry' );?>"
|
230 |
-
class="small-text code" />
|
231 |
-
</td>
|
232 |
-
</tr>
|
233 |
-
<tr>
|
234 |
-
<th scope="row"><?php _e( 'Maximum script execution time', 'backwpup' ); ?></th>
|
235 |
-
<td>
|
236 |
-
<fieldset>
|
237 |
-
<legend class="screen-reader-text"><span><?php _e( 'Maximum PHP Script execution time', 'backwpup' ); ?></span>
|
238 |
-
</legend>
|
239 |
-
<label for="jobmaxexecutiontime">
|
240 |
-
<input name="jobmaxexecutiontime" type="text" id="jobmaxexecutiontime" size="3" title="<?php esc_attr_e( 'Job will restart before hitting maximum execution time. It will not work with CLI and not on every step during execution. If <code>ALTERNATE_WP_CRON</code> has been defined, WordPress Cron will be used.', 'backwpup' ); ?>"
|
241 |
-
value="<?php echo get_site_option( 'backwpup_cfg_jobmaxexecutiontime' ); ?>" class="help-tip" />
|
242 |
-
<?php _e( 'seconds. 0 = disabled.', 'backwpup' ); ?>
|
243 |
-
</label>
|
244 |
-
</fieldset>
|
245 |
-
</td>
|
246 |
-
</tr>
|
247 |
-
<tr>
|
248 |
-
<th scope="row"><?php _e( 'Method for creating ZIP-file archives', 'backwpup' ); ?></th>
|
249 |
-
<td>
|
250 |
-
<fieldset>
|
251 |
-
<legend class="screen-reader-text"><span><?php _e( 'Method for creating ZIP-file archives', 'backwpup' ); ?></span>
|
252 |
-
</legend>
|
253 |
-
<label for="jobziparchivemethod">
|
254 |
-
<select name="jobziparchivemethod" size="1" class="help-tip" title="<?php esc_attr_e( 'Auto = Uses PHP class ZipArchive if available; otherwise uses PclZip.<br />ZipArchive = Uses less memory, but many open files at a time.<br />PclZip = Uses more memory, but only 2 open files at a time.', 'backwpup' ); ?>">
|
255 |
-
<option value="" <?php selected( get_site_option( 'backwpup_cfg_jobziparchivemethod' ), '' ); ?>><?php _e( 'Auto', 'backwpup' ); ?></option>
|
256 |
-
<option value="ZipArchive" <?php selected( get_site_option( 'backwpup_cfg_jobziparchivemethod' ), 'ZipArchive' ); ?><?php disabled( function_exists( 'ZipArchive' ), TRUE ); ?>><?php _e( 'ZipArchive', 'backwpup' ); ?></option>
|
257 |
-
<option value="PclZip" <?php selected( get_site_option( 'backwpup_cfg_jobziparchivemethod' ), 'PclZip' ); ?>><?php _e( 'PclZip', 'backwpup' ); ?></option>
|
258 |
-
</select>
|
259 |
-
</label>
|
260 |
-
</fieldset>
|
261 |
-
</td>
|
262 |
-
</tr>
|
263 |
-
<tr>
|
264 |
-
<th scope="row">
|
265 |
-
<label for="jobrunauthkey"><?php _e( 'Key to start jobs externally with an URL', 'backwpup' ); ?></label>
|
266 |
-
</th>
|
267 |
-
<td>
|
268 |
-
<input name="jobrunauthkey" type="text" id="jobrunauthkey" title="<?php esc_attr_e( 'empty = deactivated. Will be used to protect job starts from unauthorized person.', 'backwpup' ); ?>"
|
269 |
-
value="<?php echo get_site_option( 'backwpup_cfg_jobrunauthkey' );?>" class="text code help-tip"/>
|
270 |
-
</td>
|
271 |
-
</tr>
|
272 |
-
<tr>
|
273 |
-
<th scope="row"><?php _e( 'No translation', 'backwpup' ); ?></th>
|
274 |
-
<td>
|
275 |
-
<fieldset>
|
276 |
-
<legend class="screen-reader-text"><span><?php _e( 'No Translation', 'backwpup' ); ?></span>
|
277 |
-
</legend>
|
278 |
-
<label for="jobnotranslate">
|
279 |
-
<input name="jobnotranslate" type="checkbox" id="jobnotranslate"
|
280 |
-
value="1" <?php checked( get_site_option( 'backwpup_cfg_jobnotranslate' ), TRUE ); ?> />
|
281 |
-
<?php _e( 'No translation for the job, the log will be written in English', 'backwpup' ); ?>
|
282 |
-
</label>
|
283 |
-
</fieldset>
|
284 |
-
</td>
|
285 |
-
</tr>
|
286 |
-
<tr>
|
287 |
-
<th scope="row"><?php _e( 'Reduce server load', 'backwpup' ); ?></th>
|
288 |
-
<td>
|
289 |
-
<fieldset>
|
290 |
-
<legend class="screen-reader-text"><span><?php _e( 'Reduce server load', 'backwpup' ); ?></span>
|
291 |
-
</legend>
|
292 |
-
<label for="jobwaittimems">
|
293 |
-
<select name="jobwaittimems" size="1" class="help-tip" title="<?php esc_attr_e( 'This adds short pauses to the process. Can be used to reduce the CPU load.<br /> Disabled = off<br /> minimum = shortest sleep<br /> medium = middle between minimum and maximum<br /> maximum = longest sleep<br />', 'backwpup' ); ?>">
|
294 |
-
<option value="0" <?php selected( get_site_option( 'backwpup_cfg_jobwaittimems' ), 0 ); ?>><?php _e( 'disabled', 'backwpup' ); ?></option>
|
295 |
-
<option value="10000" <?php selected( get_site_option( 'backwpup_cfg_jobwaittimems' ), 10000 ); ?>><?php _e( 'minimum', 'backwpup' ); ?></option>
|
296 |
-
<option value="30000" <?php selected( get_site_option( 'backwpup_cfg_jobwaittimems' ), 30000 ); ?>><?php _e( 'medium', 'backwpup' ); ?></option>
|
297 |
-
<option value="90000" <?php selected( get_site_option( 'backwpup_cfg_jobwaittimems' ), 90000 ); ?>><?php _e( 'maximum', 'backwpup' ); ?></option>
|
298 |
-
</select>
|
299 |
-
</label>
|
300 |
-
</fieldset>
|
301 |
-
</td>
|
302 |
-
</tr>
|
303 |
-
</table>
|
304 |
-
|
305 |
-
</div>
|
306 |
-
|
307 |
-
<div class="table ui-tabs-hide" id="backwpup-tab-net">
|
308 |
-
|
309 |
-
<h3 class="title"><?php _e( 'Authentication', 'backwpup' ); ?></h3>
|
310 |
-
<p><?php _e( 'Is your blog protected with HTTP basic authentication (.htaccess)? If yes, please set the username and password for authentication here.', 'backwpup' ); ?></p>
|
311 |
-
<table class="form-table">
|
312 |
-
<tr>
|
313 |
-
<th scope="row"><label for="httpauthuser"><?php _e( 'Username:', 'backwpup' ); ?></label></th>
|
314 |
-
<td>
|
315 |
-
<input name="httpauthuser" type="text" id="httpauthuser"
|
316 |
-
value="<?php echo get_site_option( 'backwpup_cfg_httpauthuser' );?>"
|
317 |
-
class="regular-text" autocomplete="off" />
|
318 |
-
</td>
|
319 |
-
</tr>
|
320 |
-
<tr>
|
321 |
-
<th scope="row"><label for="httpauthpassword"><?php _e( 'Password:', 'backwpup' ); ?></label></th>
|
322 |
-
<td>
|
323 |
-
<input name="httpauthpassword" type="password" id="httpauthpassword"
|
324 |
-
value="<?php echo BackWPup_Encryption::decrypt( get_site_option( 'backwpup_cfg_httpauthpassword' ) );?>"
|
325 |
-
class="regular-text" autocomplete="off" />
|
326 |
-
</tr>
|
327 |
-
</table>
|
328 |
-
|
329 |
-
</div>
|
330 |
-
|
331 |
-
<div class="table ui-tabs-hide" id="backwpup-tab-apikey">
|
332 |
-
|
333 |
-
<?php do_action( 'backwpup_page_settings_tab_apikey' ); ?>
|
334 |
-
|
335 |
-
</div>
|
336 |
-
|
337 |
-
<div class="table ui-tabs-hide" id="backwpup-tab-information">
|
338 |
-
<br />
|
339 |
-
<?php
|
340 |
-
echo '<table class="wp-list-table widefat fixed" cellspacing="0" style="width: 85%;margin-left:auto;;margin-right:auto;">';
|
341 |
-
echo '<thead><tr><th width="35%">' . __( 'Setting', 'backwpup' ) . '</th><th>' . __( 'Value', 'backwpup' ) . '</th></tr></thead>';
|
342 |
-
echo '<tfoot><tr><th>' . __( 'Setting', 'backwpup' ) . '</th><th>' . __( 'Value', 'backwpup' ) . '</th></tr></tfoot>';
|
343 |
-
echo '<tr title=">=3.2"><td>' . __( 'WordPress version', 'backwpup' ) . '</td><td>' . BackWPup::get_plugin_data( 'wp_version' ) . '</td></tr>';
|
344 |
-
if ( ! class_exists( 'BackWPup_Pro', FALSE ) )
|
345 |
-
echo '<tr title=""><td>' . __( 'BackWPup version', 'backwpup' ) . '</td><td>' . BackWPup::get_plugin_data( 'Version' ) . ' <a href="' . translate( BackWPup::get_plugin_data( 'pluginuri' ), 'backwpup' ) . '">' . __( 'Get pro.', 'backwpup' ) . '</a></td></tr>';
|
346 |
-
else
|
347 |
-
echo '<tr title=""><td>' . __( 'BackWPup Pro version', 'backwpup' ) . '</td><td>' . BackWPup::get_plugin_data( 'Version' ) . '</td></tr>';
|
348 |
-
echo '<tr title=">=5.3.3"><td>' . __( 'PHP version', 'backwpup' ) . '</td><td>' . PHP_VERSION . '</td></tr>';
|
349 |
-
echo '<tr title=">=5.0.7"><td>' . __( 'MySQL version', 'backwpup' ) . '</td><td>' . $wpdb->get_var( "SELECT VERSION() AS version" ) . '</td></tr>';
|
350 |
-
if ( function_exists( 'curl_version' ) ) {
|
351 |
-
$curlversion = curl_version();
|
352 |
-
echo '<tr title=""><td>' . __( 'cURL version', 'backwpup' ) . '</td><td>' . $curlversion[ 'version' ] . '</td></tr>';
|
353 |
-
echo '<tr title=""><td>' . __( 'cURL SSL version', 'backwpup' ) . '</td><td>' . $curlversion[ 'ssl_version' ] . '</td></tr>';
|
354 |
-
}
|
355 |
-
else {
|
356 |
-
echo '<tr title=""><td>' . __( 'cURL version', 'backwpup' ) . '</td><td>' . __( 'unavailable', 'backwpup' ) . '</td></tr>';
|
357 |
-
}
|
358 |
-
echo '<tr title=""><td>' . __( 'WP-Cron url:', 'backwpup' ) . '</td><td>' . site_url( 'wp-cron.php' ) . '</td></tr>';
|
359 |
-
//response test
|
360 |
-
echo '<tr><td>' . __( 'Server self connect:', 'backwpup' ) . '</td><td>';
|
361 |
-
$raw_response = BackWPup_Job::get_jobrun_url( 'test' );
|
362 |
-
$test_result = '';
|
363 |
-
if ( is_wp_error( $raw_response ) )
|
364 |
-
$test_result .= sprintf( __( 'The HTTP response test get an error "%s"','backwpup' ), $raw_response->get_error_message() );
|
365 |
-
elseif ( 200 != wp_remote_retrieve_response_code( $raw_response ) && 204 != wp_remote_retrieve_response_code( $raw_response ) )
|
366 |
-
$test_result .= sprintf( __( 'The HTTP response test get a false http status (%s)','backwpup' ), wp_remote_retrieve_response_code( $raw_response ) );
|
367 |
-
$headers = wp_remote_retrieve_headers( $raw_response );
|
368 |
-
if ( isset( $headers['x-backwpup-ver'] ) && $headers['x-backwpup-ver'] != BackWPup::get_plugin_data( 'version' ) )
|
369 |
-
$test_result .= sprintf( __( 'The BackWPup HTTP response header returns a false value: "%s"','backwpup' ), $headers['x-backwpup-ver'] );
|
370 |
-
|
371 |
-
if ( empty( $test_result ) )
|
372 |
-
_e( 'Response Test O.K.', 'backwpup' );
|
373 |
-
else
|
374 |
-
echo $test_result;
|
375 |
-
echo '</td></tr>';
|
376 |
-
//folder test
|
377 |
-
echo '<tr><td>' . __( 'Temp folder:', 'backwpup' ) . '</td><td>';
|
378 |
-
if ( ! is_dir( BackWPup::get_plugin_data( 'TEMP' ) ) )
|
379 |
-
echo sprintf( __( 'Temp folder %s doesn\'t exist.','backwpup' ), BackWPup::get_plugin_data( 'TEMP' ) );
|
380 |
-
elseif ( ! is_writable( BackWPup::get_plugin_data( 'TEMP' ) ) )
|
381 |
-
echo sprintf( __( 'Temporary folder %s is not writable.','backwpup' ), BackWPup::get_plugin_data( 'TEMP' ) );
|
382 |
-
else
|
383 |
-
echo BackWPup::get_plugin_data( 'TEMP' );
|
384 |
-
echo '</td></tr>';
|
385 |
-
|
386 |
-
echo '<tr><td>' . __( 'Log folder:', 'backwpup' ) . '</td><td>';
|
387 |
-
if ( ! is_dir( get_site_option( 'backwpup_cfg_logfolder' ) ) )
|
388 |
-
echo sprintf( __( 'Logs folder %s not exist.','backwpup' ), get_site_option( 'backwpup_cfg_logfolder' ) );
|
389 |
-
elseif ( ! is_writable( get_site_option( 'backwpup_cfg_logfolder' ) ) )
|
390 |
-
echo sprintf( __( 'Log folder %s is not writable.','backwpup' ), get_site_option( 'backwpup_cfg_logfolder' ) );
|
391 |
-
else
|
392 |
-
echo get_site_option( 'backwpup_cfg_logfolder' );
|
393 |
-
echo '</td></tr>';
|
394 |
-
echo '<tr title=""><td>' . __( 'Server', 'backwpup' ) . '</td><td>' . $_SERVER[ 'SERVER_SOFTWARE' ] . '</td></tr>';
|
395 |
-
echo '<tr title=""><td>' . __( 'Operating System', 'backwpup' ) . '</td><td>' . PHP_OS . '</td></tr>';
|
396 |
-
echo '<tr title=""><td>' . __( 'PHP SAPI', 'backwpup' ) . '</td><td>' . PHP_SAPI . '</td></tr>';
|
397 |
-
echo '<tr title=""><td>' . __( 'Current PHP user', 'backwpup' ) . '</td><td>' . get_current_user() . '</td></tr>';
|
398 |
-
$text = (bool)ini_get( 'safe_mode' ) ? __( 'On', 'backwpup' ) : __( 'Off', 'backwpup' );
|
399 |
-
echo '<tr title=""><td>' . __( 'Safe Mode', 'backwpup' ) . '</td><td>' . $text . '</td></tr>';
|
400 |
-
echo '<tr title=">=30"><td>' . __( 'Maximum execution time', 'backwpup' ) . '</td><td>' . ini_get( 'max_execution_time' ) . ' ' . __( 'seconds', 'backwpup' ) . '</td></tr>';
|
401 |
-
if ( defined( 'ALTERNATE_WP_CRON' ) && ALTERNATE_WP_CRON )
|
402 |
-
echo '<tr title="ALTERNATE_WP_CRON"><td>' . __( 'Alternative WP Cron', 'backwpup' ) . '</td><td>' . __( 'On', 'backwpup' ) . '</td></tr>';
|
403 |
-
else
|
404 |
-
echo '<tr title="ALTERNATE_WP_CRON"><td>' . __( 'Alternative WP Cron', 'backwpup' ) . '</td><td>' . __( 'Off', 'backwpup' ) . '</td></tr>';
|
405 |
-
if ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON )
|
406 |
-
echo '<tr title="DISABLE_WP_CRON"><td>' . __( 'Disabled WP Cron', 'backwpup' ) . '</td><td>' . __( 'On', 'backwpup' ) . '</td></tr>';
|
407 |
-
else
|
408 |
-
echo '<tr title="DISABLE_WP_CRON"><td>' . __( 'Disabled WP Cron', 'backwpup' ) . '</td><td>' . __( 'Off', 'backwpup' ) . '</td></tr>';
|
409 |
-
if ( defined( 'FS_CHMOD_DIR' ) )
|
410 |
-
echo '<tr title="FS_CHMOD_DIR"><td>' . __( 'CHMOD Dir', 'backwpup' ) . '</td><td>' . FS_CHMOD_DIR . '</td></tr>';
|
411 |
-
else
|
412 |
-
echo '<tr title="FS_CHMOD_DIR"><td>' . __( 'CHMOD Dir', 'backwpup' ) . '</td><td>0755</td></tr>';
|
413 |
-
$now = localtime( time(), TRUE );
|
414 |
-
echo '<tr title=""><td>' . __( 'Server Time', 'backwpup' ) . '</td><td>' . $now[ 'tm_hour' ] . ':' . $now[ 'tm_min' ] . '</td></tr>';
|
415 |
-
echo '<tr title=""><td>' . __( 'Blog Time', 'backwpup' ) . '</td><td>' . date_i18n( 'H:i' ) . '</td></tr>';
|
416 |
-
echo '<tr title=""><td>' . __( 'Blog Timezone', 'backwpup' ) . '</td><td>' . get_option( 'timezone_string' ) . '</td></tr>';
|
417 |
-
echo '<tr title=""><td>' . __( 'Blog Time offset', 'backwpup' ) . '</td><td>' . sprintf( __( '%s hours', 'backwpup' ), get_option( 'gmt_offset' ) ) . '</td></tr>';
|
418 |
-
echo '<tr title="WPLANG"><td>' . __( 'Blog language', 'backwpup' ) . '</td><td>' . get_bloginfo( 'language' ) . '</td></tr>';
|
419 |
-
echo '<tr title="utf8"><td>' . __( 'MySQL Client encoding', 'backwpup' ) . '</td><td>';
|
420 |
-
echo defined( 'DB_CHARSET' ) ? DB_CHARSET : '';
|
421 |
-
echo '</td></tr>';
|
422 |
-
echo '<tr title="URF-8"><td>' . __( 'Blog charset', 'backwpup' ) . '</td><td>' . get_bloginfo( 'charset' ) . '</td></tr>';
|
423 |
-
echo '<tr title=">=128M"><td>' . __( 'PHP Memory limit', 'backwpup' ) . '</td><td>' . ini_get( 'memory_limit' ) . '</td></tr>';
|
424 |
-
echo '<tr title="WP_MEMORY_LIMIT"><td>' . __( 'WP memory limit', 'backwpup' ) . '</td><td>' . WP_MEMORY_LIMIT . '</td></tr>';
|
425 |
-
echo '<tr title="WP_MAX_MEMORY_LIMIT"><td>' . __( 'WP maximum memory limit', 'backwpup' ) . '</td><td>' . WP_MAX_MEMORY_LIMIT . '</td></tr>';
|
426 |
-
echo '<tr title=""><td>' . __( 'Memory in use', 'backwpup' ) . '</td><td>' . size_format( @memory_get_usage( TRUE ), 2 ) . '</td></tr>';
|
427 |
-
//disabled PHP functions
|
428 |
-
$disabled = ini_get( 'disable_functions' );
|
429 |
-
if ( ! empty( $disabled ) ) {
|
430 |
-
$disabledarry = explode( ',', $disabled );
|
431 |
-
echo '<tr title=""><td>' . __( 'Disabled PHP Functions:', 'backwpup' ) . '</td><td>';
|
432 |
-
echo implode( ', ', $disabledarry );
|
433 |
-
echo '</td></tr>';
|
434 |
-
}
|
435 |
-
//Loaded PHP Extensions
|
436 |
-
echo '<tr title=""><td>' . __( 'Loaded PHP Extensions:', 'backwpup' ) . '</td><td>';
|
437 |
-
$extensions = get_loaded_extensions();
|
438 |
-
sort( $extensions );
|
439 |
-
echo implode( ', ', $extensions);
|
440 |
-
echo '</td></tr>';
|
441 |
-
echo '</table>'
|
442 |
-
?>
|
443 |
-
</div>
|
444 |
-
|
445 |
-
<?php do_action( 'backwpup_page_settings_tab_content' ); ?>
|
446 |
-
|
447 |
-
<p class="submit">
|
448 |
-
<input type="submit" name="submit" id="submit" class="button-primary" value="<?php _e( 'Save Changes', 'backwpup' ); ?>" />
|
449 |
-
|
450 |
-
<input type="submit" name="default_settings" id="default_settings" class="button-secondary" value="<?php _e( 'Reset all settings to default', 'backwpup' ); ?>" />
|
451 |
-
</p>
|
452 |
-
</form>
|
453 |
-
</div>
|
454 |
-
<?php
|
455 |
-
}
|
456 |
-
|
457 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Class for BackWPup settings page
|
4 |
+
*/
|
5 |
+
class BackWPup_Page_Settings {
|
6 |
+
|
7 |
+
/**
|
8 |
+
*
|
9 |
+
* Output js
|
10 |
+
*
|
11 |
+
* @return void
|
12 |
+
*/
|
13 |
+
public static function admin_print_scripts() {
|
14 |
+
|
15 |
+
wp_enqueue_script( 'backwpupgeneral' );
|
16 |
+
|
17 |
+
if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) {
|
18 |
+
wp_enqueue_script( 'backwpuppagesettings', BackWPup::get_plugin_data( 'URL' ) . '/assets/js/page_settings.js', array( 'jquery' ), time(), TRUE );
|
19 |
+
} else {
|
20 |
+
wp_enqueue_script( 'backwpuppagesettings', BackWPup::get_plugin_data( 'URL' ) . '/assets/js/page_settings.min.js', array( 'jquery' ), BackWPup::get_plugin_data( 'Version' ), TRUE );
|
21 |
+
}
|
22 |
+
}
|
23 |
+
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Save settings form data
|
27 |
+
*/
|
28 |
+
public static function save_post_form() {
|
29 |
+
|
30 |
+
if ( ! current_user_can( 'backwpup_settings' ) )
|
31 |
+
return;
|
32 |
+
|
33 |
+
//set default options if button clicked
|
34 |
+
if ( isset( $_POST[ 'default_settings' ] ) && $_POST[ 'default_settings' ] ) {
|
35 |
+
|
36 |
+
delete_site_option( 'backwpup_cfg_showadminbar' );
|
37 |
+
delete_site_option( 'backwpup_cfg_showfoldersize' );
|
38 |
+
delete_site_option( 'backwpup_cfg_jobstepretry' );
|
39 |
+
delete_site_option( 'backwpup_cfg_jobmaxexecutiontime' );
|
40 |
+
delete_site_option( 'backwpup_cfg_jobziparchivemethod' );
|
41 |
+
delete_site_option( 'backwpup_cfg_jobnotranslate' );
|
42 |
+
delete_site_option( 'backwpup_cfg_jobwaittimems' );
|
43 |
+
delete_site_option( 'backwpup_cfg_jobrunauthkey' );
|
44 |
+
delete_site_option( 'backwpup_cfg_maxlogs' );
|
45 |
+
delete_site_option( 'backwpup_cfg_gzlogs' );
|
46 |
+
delete_site_option( 'backwpup_cfg_protectfolders' );
|
47 |
+
delete_site_option( 'backwpup_cfg_httpauthuser' );
|
48 |
+
delete_site_option( 'backwpup_cfg_httpauthpassword' );
|
49 |
+
delete_site_option( 'backwpup_cfg_logfolder' );
|
50 |
+
delete_site_option( 'backwpup_cfg_dropboxappkey' );
|
51 |
+
delete_site_option( 'backwpup_cfg_dropboxappsecret' );
|
52 |
+
delete_site_option( 'backwpup_cfg_dropboxsandboxappkey' );
|
53 |
+
delete_site_option( 'backwpup_cfg_dropboxsandboxappsecret' );
|
54 |
+
delete_site_option( 'backwpup_cfg_sugarsynckey' );
|
55 |
+
delete_site_option( 'backwpup_cfg_sugarsyncsecret' );
|
56 |
+
delete_site_option( 'backwpup_cfg_sugarsyncappid' );
|
57 |
+
|
58 |
+
BackWPup_Option::default_site_options();
|
59 |
+
|
60 |
+
BackWPup_Admin::message( __( 'Settings reset to default', 'backwpup' ) );
|
61 |
+
return;
|
62 |
+
}
|
63 |
+
|
64 |
+
update_site_option( 'backwpup_cfg_showadminbar', isset( $_POST[ 'showadminbar' ] ) ? 1 : 0 );
|
65 |
+
update_site_option( 'backwpup_cfg_showfoldersize', isset( $_POST[ 'showfoldersize' ] ) ? 1 : 0 );
|
66 |
+
if ( 100 > $_POST[ 'jobstepretry' ] && 0 < $_POST[ 'jobstepretry' ] )
|
67 |
+
$_POST[ 'jobstepretry' ] = abs( (int)$_POST[ 'jobstepretry' ] );
|
68 |
+
if ( empty( $_POST[ 'jobstepretry' ] ) or ! is_int( $_POST[ 'jobstepretry' ] ) )
|
69 |
+
$_POST[ 'jobstepretry' ] = 3;
|
70 |
+
update_site_option( 'backwpup_cfg_jobstepretry', $_POST[ 'jobstepretry' ] );
|
71 |
+
$max_exe_time = abs( (int)$_POST[ 'jobmaxexecutiontime' ] );
|
72 |
+
if ( ! is_int( $max_exe_time ) || $max_exe_time < 0 ) {
|
73 |
+
$max_exe_time = 0;
|
74 |
+
} elseif ( $max_exe_time > 300 ) {
|
75 |
+
$max_exe_time = 300;
|
76 |
+
}
|
77 |
+
update_site_option( 'backwpup_cfg_jobmaxexecutiontime', $max_exe_time );
|
78 |
+
update_site_option( 'backwpup_cfg_jobziparchivemethod', ( $_POST[ 'jobziparchivemethod' ] == '' || $_POST[ 'jobziparchivemethod' ] == 'PclZip' || $_POST[ 'jobziparchivemethod' ] == 'ZipArchive' ) ? $_POST[ 'jobziparchivemethod' ] : '' );
|
79 |
+
update_site_option( 'backwpup_cfg_jobnotranslate', isset( $_POST[ 'jobnotranslate' ] ) ? 1 : 0 );
|
80 |
+
update_site_option( 'backwpup_cfg_jobwaittimems', $_POST[ 'jobwaittimems' ] );
|
81 |
+
update_site_option( 'backwpup_cfg_maxlogs', abs( (int)$_POST[ 'maxlogs' ] ) );
|
82 |
+
update_site_option( 'backwpup_cfg_gzlogs', isset( $_POST[ 'gzlogs' ] ) ? 1 : 0 );
|
83 |
+
update_site_option( 'backwpup_cfg_protectfolders', isset( $_POST[ 'protectfolders' ] ) ? 1 : 0 );
|
84 |
+
update_site_option( 'backwpup_cfg_httpauthuser', $_POST[ 'httpauthuser' ] );
|
85 |
+
update_site_option( 'backwpup_cfg_httpauthpassword', BackWPup_Encryption::encrypt( $_POST[ 'httpauthpassword' ] ) );
|
86 |
+
$_POST[ 'jobrunauthkey' ] = preg_replace( '/[^a-zA-Z0-9]/', '', trim( $_POST[ 'jobrunauthkey' ] ) );
|
87 |
+
update_site_option( 'backwpup_cfg_jobrunauthkey', $_POST[ 'jobrunauthkey' ] );
|
88 |
+
$_POST[ 'logfolder' ] = trailingslashit( str_replace( '\\', '/', trim( stripslashes( $_POST[ 'logfolder' ] ) ) ) );
|
89 |
+
if ( $_POST[ 'logfolder' ][ 0 ] == '.' || ( $_POST[ 'logfolder' ][ 0 ] != '/' && ! preg_match( '#^[a-zA-Z]:/#', $_POST[ 'logfolder' ] ) ) )
|
90 |
+
$_POST[ 'logfolder' ] = trailingslashit( str_replace( '\\', '/', ABSPATH ) ) . $_POST[ 'logfolder' ];
|
91 |
+
//set def. folders
|
92 |
+
if ( empty( $_POST[ 'logfolder' ] ) || $_POST[ 'logfolder' ] == '/' ) {
|
93 |
+
delete_site_option( 'backwpup_cfg_logfolder' );
|
94 |
+
BackWPup_Option::default_site_options();
|
95 |
+
} else {
|
96 |
+
update_site_option( 'backwpup_cfg_logfolder', $_POST[ 'logfolder' ] );
|
97 |
+
}
|
98 |
+
|
99 |
+
do_action( 'backwpup_page_settings_save' );
|
100 |
+
|
101 |
+
BackWPup_Admin::message( __( 'Settings saved', 'backwpup' ) );
|
102 |
+
}
|
103 |
+
|
104 |
+
/**
|
105 |
+
* Page Output
|
106 |
+
*/
|
107 |
+
public static function page() {
|
108 |
+
global $wpdb;
|
109 |
+
|
110 |
+
?>
|
111 |
+
<div class="wrap" id="backwpup-page">
|
112 |
+
<h2><span id="backwpup-page-icon"> </span><?php echo sprintf( __( '%s Settings', 'backwpup' ), BackWPup::get_plugin_data( 'name' ) ); ?></h2>
|
113 |
+
<?php
|
114 |
+
$tabs = array( 'general' => __( 'General', 'backwpup' ), 'job' => __( 'Jobs', 'backwpup' ), 'log' => __( 'Logs', 'backwpup' ), 'net' => __( 'Network', 'backwpup' ), 'apikey' => __( 'API Keys', 'backwpup' ), 'information' => __( 'Information', 'backwpup' ) );
|
115 |
+
$tabs = apply_filters( 'backwpup_page_settings_tab', $tabs );
|
116 |
+
echo '<h2 class="nav-tab-wrapper">';
|
117 |
+
foreach ( $tabs as $id => $name ) {
|
118 |
+
echo '<a href="#backwpup-tab-' . $id . '" class="nav-tab">' . $name . '</a>';
|
119 |
+
}
|
120 |
+
echo '</h2>';
|
121 |
+
BackWPup_Admin::display_messages();
|
122 |
+
?>
|
123 |
+
|
124 |
+
<form id="settingsform" action="<?php echo admin_url( 'admin-post.php?action=backwpup' ); ?>" method="post">
|
125 |
+
<?php wp_nonce_field( 'backwpupsettings_page' ); ?>
|
126 |
+
<input type="hidden" name="page" value="backwpupsettings" />
|
127 |
+
<input type="hidden" name="anchor" value="#backwpup-tab-general" />
|
128 |
+
|
129 |
+
<div class="table ui-tabs-hide" id="backwpup-tab-general">
|
130 |
+
|
131 |
+
<h3 class="title"><?php _e( 'Display Settings', 'backwpup' ); ?></h3>
|
132 |
+
<p><?php _e( 'Do you want to see BackWPup in the WordPress admin bar?', 'backwpup' ); ?></p>
|
133 |
+
<table class="form-table">
|
134 |
+
<tr>
|
135 |
+
<th scope="row"><?php _e( 'Admin bar', 'backwpup' ); ?></th>
|
136 |
+
<td>
|
137 |
+
<fieldset>
|
138 |
+
<legend class="screen-reader-text"><span><?php _e( 'Admin Bar', 'backwpup' ); ?></span>
|
139 |
+
</legend>
|
140 |
+
<label for="showadminbar">
|
141 |
+
<input name="showadminbar" type="checkbox" id="showadminbar"
|
142 |
+
value="1" <?php checked( get_site_option( 'backwpup_cfg_showadminbar' ), TRUE ); ?> />
|
143 |
+
<?php _e( 'Show BackWPup links in admin bar.', 'backwpup' ); ?></label>
|
144 |
+
</fieldset>
|
145 |
+
</td>
|
146 |
+
</tr>
|
147 |
+
<tr>
|
148 |
+
<th scope="row"><?php _e( 'Folder sizes', 'backwpup' ); ?></th>
|
149 |
+
<td>
|
150 |
+
<fieldset>
|
151 |
+
<legend class="screen-reader-text"><span><?php _e( 'Folder sizes', 'backwpup' ); ?></span>
|
152 |
+
</legend>
|
153 |
+
<label for="showfoldersize">
|
154 |
+
<input name="showfoldersize" type="checkbox" id="showfoldersize"
|
155 |
+
value="1" <?php checked( get_site_option( 'backwpup_cfg_showfoldersize' ), TRUE ); ?> />
|
156 |
+
<?php _e( 'Display folder sizes in the files tab when editing a job. (Might increase loading time of files tab.)', 'backwpup' ); ?></label>
|
157 |
+
</fieldset>
|
158 |
+
</td>
|
159 |
+
</tr>
|
160 |
+
</table>
|
161 |
+
<h3 class="title"><?php _e( 'Security', 'backwpup' ); ?></h3>
|
162 |
+
<p><?php _e( 'Security option for BackWPup', 'backwpup' ); ?></p>
|
163 |
+
<table class="form-table">
|
164 |
+
<tr>
|
165 |
+
<th scope="row"><?php _e( 'Protect folders', 'backwpup' ); ?></th>
|
166 |
+
<td>
|
167 |
+
<fieldset>
|
168 |
+
<legend class="screen-reader-text"><span><?php _e( 'Protect folders', 'backwpup' ); ?></span>
|
169 |
+
</legend>
|
170 |
+
<label for="protectfolders">
|
171 |
+
<input name="protectfolders" type="checkbox" id="protectfolders"
|
172 |
+
value="1" <?php checked( get_site_option( 'backwpup_cfg_protectfolders' ), TRUE ); ?> />
|
173 |
+
<?php _e( 'Protect BackWPup folders ( Temp, Log and Backups ) with <code>.htaccess</code> and <code>index.php</code>', 'backwpup' ); ?>
|
174 |
+
</label>
|
175 |
+
</fieldset>
|
176 |
+
</td>
|
177 |
+
</tr>
|
178 |
+
</table>
|
179 |
+
|
180 |
+
<?php do_action('backwpup_page_settings_tab_generel'); ?>
|
181 |
+
|
182 |
+
</div>
|
183 |
+
|
184 |
+
<div class="table ui-tabs-hide" id="backwpup-tab-log">
|
185 |
+
|
186 |
+
<p><?php _e( 'Every time BackWPup runs a backup job, a log file is being generated. Choose where to store your log files and how many of them.', 'backwpup' ); ?></p>
|
187 |
+
<table class="form-table">
|
188 |
+
<tr>
|
189 |
+
<th scope="row"><label for="logfolder"><?php _e( 'Log file folder', 'backwpup' ); ?></label></th>
|
190 |
+
<td>
|
191 |
+
<input name="logfolder" type="text" id="logfolder"
|
192 |
+
value="<?php echo get_site_option( 'backwpup_cfg_logfolder' );?>"
|
193 |
+
class="regular-text code"/>
|
194 |
+
</td>
|
195 |
+
</tr>
|
196 |
+
<tr>
|
197 |
+
<th scope="row"><label for="maxlogs"><?php _e( 'Maximum number of log files in folder', 'backwpup' ); ?></label>
|
198 |
+
</th>
|
199 |
+
<td>
|
200 |
+
<input name="maxlogs" type="text" id="maxlogs" title="<?php esc_attr_e( 'Oldest files will be deleted first.', 'backwpup' ); ?>"
|
201 |
+
value="<?php echo get_site_option( 'backwpup_cfg_maxlogs' );?>" class="small-text code help-tip"/>
|
202 |
+
</td>
|
203 |
+
</tr>
|
204 |
+
<tr>
|
205 |
+
<th scope="row"><?php _e( 'Compression', 'backwpup' ); ?></th>
|
206 |
+
<td>
|
207 |
+
<fieldset>
|
208 |
+
<legend class="screen-reader-text"><span><?php _e( 'Compression', 'backwpup' ); ?></span>
|
209 |
+
</legend>
|
210 |
+
<label for="gzlogs">
|
211 |
+
<input name="gzlogs" type="checkbox" id="gzlogs"
|
212 |
+
value="1" <?php checked( get_site_option( 'backwpup_cfg_gzlogs' ), TRUE ); ?><?php if ( ! function_exists( 'gzopen' ) ) echo " disabled=\"disabled\""; ?> />
|
213 |
+
<?php _e( 'Compress log files with GZip.', 'backwpup' ); ?></label>
|
214 |
+
</fieldset>
|
215 |
+
</td>
|
216 |
+
</tr>
|
217 |
+
</table>
|
218 |
+
|
219 |
+
</div>
|
220 |
+
<div class="table ui-tabs-hide" id="backwpup-tab-job">
|
221 |
+
|
222 |
+
<p><?php _e( 'There are a couple of general options for backup jobs. Set them here.', 'backwpup' ); ?></p>
|
223 |
+
<table class="form-table">
|
224 |
+
<tr>
|
225 |
+
<th scope="row">
|
226 |
+
<label for="jobstepretry"><?php _e( "Maximum number of retries for job steps", 'backwpup' ); ?></label></th>
|
227 |
+
<td>
|
228 |
+
<input name="jobstepretry" type="text" id="jobstepretry"
|
229 |
+
value="<?php echo get_site_option( 'backwpup_cfg_jobstepretry' );?>"
|
230 |
+
class="small-text code" />
|
231 |
+
</td>
|
232 |
+
</tr>
|
233 |
+
<tr>
|
234 |
+
<th scope="row"><?php _e( 'Maximum script execution time', 'backwpup' ); ?></th>
|
235 |
+
<td>
|
236 |
+
<fieldset>
|
237 |
+
<legend class="screen-reader-text"><span><?php _e( 'Maximum PHP Script execution time', 'backwpup' ); ?></span>
|
238 |
+
</legend>
|
239 |
+
<label for="jobmaxexecutiontime">
|
240 |
+
<input name="jobmaxexecutiontime" type="text" id="jobmaxexecutiontime" size="3" title="<?php esc_attr_e( 'Job will restart before hitting maximum execution time. It will not work with CLI and not on every step during execution. If <code>ALTERNATE_WP_CRON</code> has been defined, WordPress Cron will be used.', 'backwpup' ); ?>"
|
241 |
+
value="<?php echo get_site_option( 'backwpup_cfg_jobmaxexecutiontime' ); ?>" class="help-tip" />
|
242 |
+
<?php _e( 'seconds. 0 = disabled.', 'backwpup' ); ?>
|
243 |
+
</label>
|
244 |
+
</fieldset>
|
245 |
+
</td>
|
246 |
+
</tr>
|
247 |
+
<tr>
|
248 |
+
<th scope="row"><?php _e( 'Method for creating ZIP-file archives', 'backwpup' ); ?></th>
|
249 |
+
<td>
|
250 |
+
<fieldset>
|
251 |
+
<legend class="screen-reader-text"><span><?php _e( 'Method for creating ZIP-file archives', 'backwpup' ); ?></span>
|
252 |
+
</legend>
|
253 |
+
<label for="jobziparchivemethod">
|
254 |
+
<select name="jobziparchivemethod" size="1" class="help-tip" title="<?php esc_attr_e( 'Auto = Uses PHP class ZipArchive if available; otherwise uses PclZip.<br />ZipArchive = Uses less memory, but many open files at a time.<br />PclZip = Uses more memory, but only 2 open files at a time.', 'backwpup' ); ?>">
|
255 |
+
<option value="" <?php selected( get_site_option( 'backwpup_cfg_jobziparchivemethod' ), '' ); ?>><?php _e( 'Auto', 'backwpup' ); ?></option>
|
256 |
+
<option value="ZipArchive" <?php selected( get_site_option( 'backwpup_cfg_jobziparchivemethod' ), 'ZipArchive' ); ?><?php disabled( function_exists( 'ZipArchive' ), TRUE ); ?>><?php _e( 'ZipArchive', 'backwpup' ); ?></option>
|
257 |
+
<option value="PclZip" <?php selected( get_site_option( 'backwpup_cfg_jobziparchivemethod' ), 'PclZip' ); ?>><?php _e( 'PclZip', 'backwpup' ); ?></option>
|
258 |
+
</select>
|
259 |
+
</label>
|
260 |
+
</fieldset>
|
261 |
+
</td>
|
262 |
+
</tr>
|
263 |
+
<tr>
|
264 |
+
<th scope="row">
|
265 |
+
<label for="jobrunauthkey"><?php _e( 'Key to start jobs externally with an URL', 'backwpup' ); ?></label>
|
266 |
+
</th>
|
267 |
+
<td>
|
268 |
+
<input name="jobrunauthkey" type="text" id="jobrunauthkey" title="<?php esc_attr_e( 'empty = deactivated. Will be used to protect job starts from unauthorized person.', 'backwpup' ); ?>"
|
269 |
+
value="<?php echo get_site_option( 'backwpup_cfg_jobrunauthkey' );?>" class="text code help-tip"/>
|
270 |
+
</td>
|
271 |
+
</tr>
|
272 |
+
<tr>
|
273 |
+
<th scope="row"><?php _e( 'No translation', 'backwpup' ); ?></th>
|
274 |
+
<td>
|
275 |
+
<fieldset>
|
276 |
+
<legend class="screen-reader-text"><span><?php _e( 'No Translation', 'backwpup' ); ?></span>
|
277 |
+
</legend>
|
278 |
+
<label for="jobnotranslate">
|
279 |
+
<input name="jobnotranslate" type="checkbox" id="jobnotranslate"
|
280 |
+
value="1" <?php checked( get_site_option( 'backwpup_cfg_jobnotranslate' ), TRUE ); ?> />
|
281 |
+
<?php _e( 'No translation for the job, the log will be written in English', 'backwpup' ); ?>
|
282 |
+
</label>
|
283 |
+
</fieldset>
|
284 |
+
</td>
|
285 |
+
</tr>
|
286 |
+
<tr>
|
287 |
+
<th scope="row"><?php _e( 'Reduce server load', 'backwpup' ); ?></th>
|
288 |
+
<td>
|
289 |
+
<fieldset>
|
290 |
+
<legend class="screen-reader-text"><span><?php _e( 'Reduce server load', 'backwpup' ); ?></span>
|
291 |
+
</legend>
|
292 |
+
<label for="jobwaittimems">
|
293 |
+
<select name="jobwaittimems" size="1" class="help-tip" title="<?php esc_attr_e( 'This adds short pauses to the process. Can be used to reduce the CPU load.<br /> Disabled = off<br /> minimum = shortest sleep<br /> medium = middle between minimum and maximum<br /> maximum = longest sleep<br />', 'backwpup' ); ?>">
|
294 |
+
<option value="0" <?php selected( get_site_option( 'backwpup_cfg_jobwaittimems' ), 0 ); ?>><?php _e( 'disabled', 'backwpup' ); ?></option>
|
295 |
+
<option value="10000" <?php selected( get_site_option( 'backwpup_cfg_jobwaittimems' ), 10000 ); ?>><?php _e( 'minimum', 'backwpup' ); ?></option>
|
296 |
+
<option value="30000" <?php selected( get_site_option( 'backwpup_cfg_jobwaittimems' ), 30000 ); ?>><?php _e( 'medium', 'backwpup' ); ?></option>
|
297 |
+
<option value="90000" <?php selected( get_site_option( 'backwpup_cfg_jobwaittimems' ), 90000 ); ?>><?php _e( 'maximum', 'backwpup' ); ?></option>
|
298 |
+
</select>
|
299 |
+
</label>
|
300 |
+
</fieldset>
|
301 |
+
</td>
|
302 |
+
</tr>
|
303 |
+
</table>
|
304 |
+
|
305 |
+
</div>
|
306 |
+
|
307 |
+
<div class="table ui-tabs-hide" id="backwpup-tab-net">
|
308 |
+
|
309 |
+
<h3 class="title"><?php _e( 'Authentication', 'backwpup' ); ?></h3>
|
310 |
+
<p><?php _e( 'Is your blog protected with HTTP basic authentication (.htaccess)? If yes, please set the username and password for authentication here.', 'backwpup' ); ?></p>
|
311 |
+
<table class="form-table">
|
312 |
+
<tr>
|
313 |
+
<th scope="row"><label for="httpauthuser"><?php _e( 'Username:', 'backwpup' ); ?></label></th>
|
314 |
+
<td>
|
315 |
+
<input name="httpauthuser" type="text" id="httpauthuser"
|
316 |
+
value="<?php echo get_site_option( 'backwpup_cfg_httpauthuser' );?>"
|
317 |
+
class="regular-text" autocomplete="off" />
|
318 |
+
</td>
|
319 |
+
</tr>
|
320 |
+
<tr>
|
321 |
+
<th scope="row"><label for="httpauthpassword"><?php _e( 'Password:', 'backwpup' ); ?></label></th>
|
322 |
+
<td>
|
323 |
+
<input name="httpauthpassword" type="password" id="httpauthpassword"
|
324 |
+
value="<?php echo BackWPup_Encryption::decrypt( get_site_option( 'backwpup_cfg_httpauthpassword' ) );?>"
|
325 |
+
class="regular-text" autocomplete="off" />
|
326 |
+
</tr>
|
327 |
+
</table>
|
328 |
+
|
329 |
+
</div>
|
330 |
+
|
331 |
+
<div class="table ui-tabs-hide" id="backwpup-tab-apikey">
|
332 |
+
|
333 |
+
<?php do_action( 'backwpup_page_settings_tab_apikey' ); ?>
|
334 |
+
|
335 |
+
</div>
|
336 |
+
|
337 |
+
<div class="table ui-tabs-hide" id="backwpup-tab-information">
|
338 |
+
<br />
|
339 |
+
<?php
|
340 |
+
echo '<table class="wp-list-table widefat fixed" cellspacing="0" style="width: 85%;margin-left:auto;;margin-right:auto;">';
|
341 |
+
echo '<thead><tr><th width="35%">' . __( 'Setting', 'backwpup' ) . '</th><th>' . __( 'Value', 'backwpup' ) . '</th></tr></thead>';
|
342 |
+
echo '<tfoot><tr><th>' . __( 'Setting', 'backwpup' ) . '</th><th>' . __( 'Value', 'backwpup' ) . '</th></tr></tfoot>';
|
343 |
+
echo '<tr title=">=3.2"><td>' . __( 'WordPress version', 'backwpup' ) . '</td><td>' . BackWPup::get_plugin_data( 'wp_version' ) . '</td></tr>';
|
344 |
+
if ( ! class_exists( 'BackWPup_Pro', FALSE ) )
|
345 |
+
echo '<tr title=""><td>' . __( 'BackWPup version', 'backwpup' ) . '</td><td>' . BackWPup::get_plugin_data( 'Version' ) . ' <a href="' . translate( BackWPup::get_plugin_data( 'pluginuri' ), 'backwpup' ) . '">' . __( 'Get pro.', 'backwpup' ) . '</a></td></tr>';
|
346 |
+
else
|
347 |
+
echo '<tr title=""><td>' . __( 'BackWPup Pro version', 'backwpup' ) . '</td><td>' . BackWPup::get_plugin_data( 'Version' ) . '</td></tr>';
|
348 |
+
echo '<tr title=">=5.3.3"><td>' . __( 'PHP version', 'backwpup' ) . '</td><td>' . PHP_VERSION . '</td></tr>';
|
349 |
+
echo '<tr title=">=5.0.7"><td>' . __( 'MySQL version', 'backwpup' ) . '</td><td>' . $wpdb->get_var( "SELECT VERSION() AS version" ) . '</td></tr>';
|
350 |
+
if ( function_exists( 'curl_version' ) ) {
|
351 |
+
$curlversion = curl_version();
|
352 |
+
echo '<tr title=""><td>' . __( 'cURL version', 'backwpup' ) . '</td><td>' . $curlversion[ 'version' ] . '</td></tr>';
|
353 |
+
echo '<tr title=""><td>' . __( 'cURL SSL version', 'backwpup' ) . '</td><td>' . $curlversion[ 'ssl_version' ] . '</td></tr>';
|
354 |
+
}
|
355 |
+
else {
|
356 |
+
echo '<tr title=""><td>' . __( 'cURL version', 'backwpup' ) . '</td><td>' . __( 'unavailable', 'backwpup' ) . '</td></tr>';
|
357 |
+
}
|
358 |
+
echo '<tr title=""><td>' . __( 'WP-Cron url:', 'backwpup' ) . '</td><td>' . site_url( 'wp-cron.php' ) . '</td></tr>';
|
359 |
+
//response test
|
360 |
+
echo '<tr><td>' . __( 'Server self connect:', 'backwpup' ) . '</td><td>';
|
361 |
+
$raw_response = BackWPup_Job::get_jobrun_url( 'test' );
|
362 |
+
$test_result = '';
|
363 |
+
if ( is_wp_error( $raw_response ) )
|
364 |
+
$test_result .= sprintf( __( 'The HTTP response test get an error "%s"','backwpup' ), $raw_response->get_error_message() );
|
365 |
+
elseif ( 200 != wp_remote_retrieve_response_code( $raw_response ) && 204 != wp_remote_retrieve_response_code( $raw_response ) )
|
366 |
+
$test_result .= sprintf( __( 'The HTTP response test get a false http status (%s)','backwpup' ), wp_remote_retrieve_response_code( $raw_response ) );
|
367 |
+
$headers = wp_remote_retrieve_headers( $raw_response );
|
368 |
+
if ( isset( $headers['x-backwpup-ver'] ) && $headers['x-backwpup-ver'] != BackWPup::get_plugin_data( 'version' ) )
|
369 |
+
$test_result .= sprintf( __( 'The BackWPup HTTP response header returns a false value: "%s"','backwpup' ), $headers['x-backwpup-ver'] );
|
370 |
+
|
371 |
+
if ( empty( $test_result ) )
|
372 |
+
_e( 'Response Test O.K.', 'backwpup' );
|
373 |
+
else
|
374 |
+
echo $test_result;
|
375 |
+
echo '</td></tr>';
|
376 |
+
//folder test
|
377 |
+
echo '<tr><td>' . __( 'Temp folder:', 'backwpup' ) . '</td><td>';
|
378 |
+
if ( ! is_dir( BackWPup::get_plugin_data( 'TEMP' ) ) )
|
379 |
+
echo sprintf( __( 'Temp folder %s doesn\'t exist.','backwpup' ), BackWPup::get_plugin_data( 'TEMP' ) );
|
380 |
+
elseif ( ! is_writable( BackWPup::get_plugin_data( 'TEMP' ) ) )
|
381 |
+
echo sprintf( __( 'Temporary folder %s is not writable.','backwpup' ), BackWPup::get_plugin_data( 'TEMP' ) );
|
382 |
+
else
|
383 |
+
echo BackWPup::get_plugin_data( 'TEMP' );
|
384 |
+
echo '</td></tr>';
|
385 |
+
|
386 |
+
echo '<tr><td>' . __( 'Log folder:', 'backwpup' ) . '</td><td>';
|
387 |
+
if ( ! is_dir( get_site_option( 'backwpup_cfg_logfolder' ) ) )
|
388 |
+
echo sprintf( __( 'Logs folder %s not exist.','backwpup' ), get_site_option( 'backwpup_cfg_logfolder' ) );
|
389 |
+
elseif ( ! is_writable( get_site_option( 'backwpup_cfg_logfolder' ) ) )
|
390 |
+
echo sprintf( __( 'Log folder %s is not writable.','backwpup' ), get_site_option( 'backwpup_cfg_logfolder' ) );
|
391 |
+
else
|
392 |
+
echo get_site_option( 'backwpup_cfg_logfolder' );
|
393 |
+
echo '</td></tr>';
|
394 |
+
echo '<tr title=""><td>' . __( 'Server', 'backwpup' ) . '</td><td>' . $_SERVER[ 'SERVER_SOFTWARE' ] . '</td></tr>';
|
395 |
+
echo '<tr title=""><td>' . __( 'Operating System', 'backwpup' ) . '</td><td>' . PHP_OS . '</td></tr>';
|
396 |
+
echo '<tr title=""><td>' . __( 'PHP SAPI', 'backwpup' ) . '</td><td>' . PHP_SAPI . '</td></tr>';
|
397 |
+
echo '<tr title=""><td>' . __( 'Current PHP user', 'backwpup' ) . '</td><td>' . get_current_user() . '</td></tr>';
|
398 |
+
$text = (bool)ini_get( 'safe_mode' ) ? __( 'On', 'backwpup' ) : __( 'Off', 'backwpup' );
|
399 |
+
echo '<tr title=""><td>' . __( 'Safe Mode', 'backwpup' ) . '</td><td>' . $text . '</td></tr>';
|
400 |
+
echo '<tr title=">=30"><td>' . __( 'Maximum execution time', 'backwpup' ) . '</td><td>' . ini_get( 'max_execution_time' ) . ' ' . __( 'seconds', 'backwpup' ) . '</td></tr>';
|
401 |
+
if ( defined( 'ALTERNATE_WP_CRON' ) && ALTERNATE_WP_CRON )
|
402 |
+
echo '<tr title="ALTERNATE_WP_CRON"><td>' . __( 'Alternative WP Cron', 'backwpup' ) . '</td><td>' . __( 'On', 'backwpup' ) . '</td></tr>';
|
403 |
+
else
|
404 |
+
echo '<tr title="ALTERNATE_WP_CRON"><td>' . __( 'Alternative WP Cron', 'backwpup' ) . '</td><td>' . __( 'Off', 'backwpup' ) . '</td></tr>';
|
405 |
+
if ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON )
|
406 |
+
echo '<tr title="DISABLE_WP_CRON"><td>' . __( 'Disabled WP Cron', 'backwpup' ) . '</td><td>' . __( 'On', 'backwpup' ) . '</td></tr>';
|
407 |
+
else
|
408 |
+
echo '<tr title="DISABLE_WP_CRON"><td>' . __( 'Disabled WP Cron', 'backwpup' ) . '</td><td>' . __( 'Off', 'backwpup' ) . '</td></tr>';
|
409 |
+
if ( defined( 'FS_CHMOD_DIR' ) )
|
410 |
+
echo '<tr title="FS_CHMOD_DIR"><td>' . __( 'CHMOD Dir', 'backwpup' ) . '</td><td>' . FS_CHMOD_DIR . '</td></tr>';
|
411 |
+
else
|
412 |
+
echo '<tr title="FS_CHMOD_DIR"><td>' . __( 'CHMOD Dir', 'backwpup' ) . '</td><td>0755</td></tr>';
|
413 |
+
$now = localtime( time(), TRUE );
|
414 |
+
echo '<tr title=""><td>' . __( 'Server Time', 'backwpup' ) . '</td><td>' . $now[ 'tm_hour' ] . ':' . $now[ 'tm_min' ] . '</td></tr>';
|
415 |
+
echo '<tr title=""><td>' . __( 'Blog Time', 'backwpup' ) . '</td><td>' . date_i18n( 'H:i' ) . '</td></tr>';
|
416 |
+
echo '<tr title=""><td>' . __( 'Blog Timezone', 'backwpup' ) . '</td><td>' . get_option( 'timezone_string' ) . '</td></tr>';
|
417 |
+
echo '<tr title=""><td>' . __( 'Blog Time offset', 'backwpup' ) . '</td><td>' . sprintf( __( '%s hours', 'backwpup' ), get_option( 'gmt_offset' ) ) . '</td></tr>';
|
418 |
+
echo '<tr title="WPLANG"><td>' . __( 'Blog language', 'backwpup' ) . '</td><td>' . get_bloginfo( 'language' ) . '</td></tr>';
|
419 |
+
echo '<tr title="utf8"><td>' . __( 'MySQL Client encoding', 'backwpup' ) . '</td><td>';
|
420 |
+
echo defined( 'DB_CHARSET' ) ? DB_CHARSET : '';
|
421 |
+
echo '</td></tr>';
|
422 |
+
echo '<tr title="URF-8"><td>' . __( 'Blog charset', 'backwpup' ) . '</td><td>' . get_bloginfo( 'charset' ) . '</td></tr>';
|
423 |
+
echo '<tr title=">=128M"><td>' . __( 'PHP Memory limit', 'backwpup' ) . '</td><td>' . ini_get( 'memory_limit' ) . '</td></tr>';
|
424 |
+
echo '<tr title="WP_MEMORY_LIMIT"><td>' . __( 'WP memory limit', 'backwpup' ) . '</td><td>' . WP_MEMORY_LIMIT . '</td></tr>';
|
425 |
+
echo '<tr title="WP_MAX_MEMORY_LIMIT"><td>' . __( 'WP maximum memory limit', 'backwpup' ) . '</td><td>' . WP_MAX_MEMORY_LIMIT . '</td></tr>';
|
426 |
+
echo '<tr title=""><td>' . __( 'Memory in use', 'backwpup' ) . '</td><td>' . size_format( @memory_get_usage( TRUE ), 2 ) . '</td></tr>';
|
427 |
+
//disabled PHP functions
|
428 |
+
$disabled = ini_get( 'disable_functions' );
|
429 |
+
if ( ! empty( $disabled ) ) {
|
430 |
+
$disabledarry = explode( ',', $disabled );
|
431 |
+
echo '<tr title=""><td>' . __( 'Disabled PHP Functions:', 'backwpup' ) . '</td><td>';
|
432 |
+
echo implode( ', ', $disabledarry );
|
433 |
+
echo '</td></tr>';
|
434 |
+
}
|
435 |
+
//Loaded PHP Extensions
|
436 |
+
echo '<tr title=""><td>' . __( 'Loaded PHP Extensions:', 'backwpup' ) . '</td><td>';
|
437 |
+
$extensions = get_loaded_extensions();
|
438 |
+
sort( $extensions );
|
439 |
+
echo implode( ', ', $extensions);
|
440 |
+
echo '</td></tr>';
|
441 |
+
echo '</table>'
|
442 |
+
?>
|
443 |
+
</div>
|
444 |
+
|
445 |
+
<?php do_action( 'backwpup_page_settings_tab_content' ); ?>
|
446 |
+
|
447 |
+
<p class="submit">
|
448 |
+
<input type="submit" name="submit" id="submit" class="button-primary" value="<?php _e( 'Save Changes', 'backwpup' ); ?>" />
|
449 |
+
|
450 |
+
<input type="submit" name="default_settings" id="default_settings" class="button-secondary" value="<?php _e( 'Reset all settings to default', 'backwpup' ); ?>" />
|
451 |
+
</p>
|
452 |
+
</form>
|
453 |
+
</div>
|
454 |
+
<?php
|
455 |
+
}
|
456 |
+
|
457 |
+
}
|
inc/class-wp-cli.php
CHANGED
@@ -9,7 +9,7 @@ class BackWPup_WP_CLI extends WP_CLI_Command {
|
|
9 |
*
|
10 |
* @param $args
|
11 |
* @param $assoc_args
|
12 |
-
* @synopsis
|
13 |
*/
|
14 |
public function start( $args, $assoc_args ) {
|
15 |
|
@@ -30,7 +30,6 @@ class BackWPup_WP_CLI extends WP_CLI_Command {
|
|
30 |
/**
|
31 |
* Abort a working BackWPup Job
|
32 |
*
|
33 |
-
* @synopsis abort
|
34 |
*/
|
35 |
public function abort( $args, $assoc_args ) {
|
36 |
|
@@ -45,7 +44,6 @@ class BackWPup_WP_CLI extends WP_CLI_Command {
|
|
45 |
/**
|
46 |
* Display a List of Jobs
|
47 |
*
|
48 |
-
* @synopsis jobs
|
49 |
*/
|
50 |
public function jobs( $args, $assoc_args ) {
|
51 |
|
@@ -64,7 +62,6 @@ class BackWPup_WP_CLI extends WP_CLI_Command {
|
|
64 |
*
|
65 |
* @param $args
|
66 |
* @param $assoc_args
|
67 |
-
* @synopsis working
|
68 |
*/
|
69 |
public function working( $args, $assoc_args ) {
|
70 |
|
9 |
*
|
10 |
* @param $args
|
11 |
* @param $assoc_args
|
12 |
+
* @synopsis --jobid=<ID>
|
13 |
*/
|
14 |
public function start( $args, $assoc_args ) {
|
15 |
|
30 |
/**
|
31 |
* Abort a working BackWPup Job
|
32 |
*
|
|
|
33 |
*/
|
34 |
public function abort( $args, $assoc_args ) {
|
35 |
|
44 |
/**
|
45 |
* Display a List of Jobs
|
46 |
*
|
|
|
47 |
*/
|
48 |
public function jobs( $args, $assoc_args ) {
|
49 |
|
62 |
*
|
63 |
* @param $args
|
64 |
* @param $assoc_args
|
|
|
65 |
*/
|
66 |
public function working( $args, $assoc_args ) {
|
67 |
|
languages/backwpup-de_DE.po
CHANGED
@@ -1,6109 +1,6109 @@
|
|
1 |
-
msgid ""
|
2 |
-
msgstr ""
|
3 |
-
"Project-Id-Version: BackWPup Pro v3.1.3\n"
|
4 |
-
"Report-Msgid-Bugs-To: \n"
|
5 |
-
"POT-Creation-Date: 2014-11-12 13:25+0100\n"
|
6 |
-
"PO-Revision-Date: 2014-11-12 13:26+0100\n"
|
7 |
-
"Last-Translator: Robert Windisch <r.windisch@inpsyde.com>\n"
|
8 |
-
"Language-Team: \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 |
-
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
14 |
-
"X-Generator: GlotPress/0.1\n"
|
15 |
-
"X-Poedit-SourceCharset: utf-8\n"
|
16 |
-
"X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
|
17 |
-
"X-Poedit-Basepath: .\n"
|
18 |
-
"X-Textdomain-Support: yes\n"
|
19 |
-
"X-Poedit-SearchPath-0: .\n"
|
20 |
-
"X-Poedit-SearchPath-1: ..\n"
|
21 |
-
|
22 |
-
# @ backwpup
|
23 |
-
#: ../backwpup.php:42
|
24 |
-
msgid "BackWPup requires PHP version 5.2.7 with spl extension or greater and WordPress 3.4 or greater."
|
25 |
-
msgstr "BackWPup benötigt PHP Version 5.2.7 oder höher mit der SPL-Erweiterung und WordPress 3.4 oder höher."
|
26 |
-
|
27 |
-
# @ backwpup
|
28 |
-
#: ../backwpup.php:289
|
29 |
-
msgid "Folder"
|
30 |
-
msgstr "Ordner"
|
31 |
-
|
32 |
-
# @ backwpup
|
33 |
-
#: ../backwpup.php:290
|
34 |
-
msgid "Backup to Folder"
|
35 |
-
msgstr "Backup in Ordner"
|
36 |
-
|
37 |
-
# @ backwpup
|
38 |
-
#: ../backwpup.php:305
|
39 |
-
msgid "Email"
|
40 |
-
msgstr "E-Mail"
|
41 |
-
|
42 |
-
# @ backwpup
|
43 |
-
#: ../backwpup.php:306
|
44 |
-
msgid "Backup sent via email"
|
45 |
-
msgstr "Backup als E-Mail versendet"
|
46 |
-
|
47 |
-
# @ backwpup
|
48 |
-
#: ../backwpup.php:321
|
49 |
-
msgid "FTP"
|
50 |
-
msgstr "FTP"
|
51 |
-
|
52 |
-
# @ backwpup
|
53 |
-
#: ../backwpup.php:322
|
54 |
-
msgid "Backup to FTP"
|
55 |
-
msgstr "Backup zu FTP"
|
56 |
-
|
57 |
-
# @ backwpup
|
58 |
-
#: ../backwpup.php:337
|
59 |
-
msgid "Dropbox"
|
60 |
-
msgstr "Dropbox"
|
61 |
-
|
62 |
-
# @ backwpup
|
63 |
-
#: ../backwpup.php:338
|
64 |
-
msgid "Backup to Dropbox"
|
65 |
-
msgstr "Backup in die Dropbox"
|
66 |
-
|
67 |
-
# @ backwpup
|
68 |
-
#: ../backwpup.php:354
|
69 |
-
#: ../backwpup.php:373
|
70 |
-
msgid "S3 Service"
|
71 |
-
msgstr "S3 Service"
|
72 |
-
|
73 |
-
# @ backwpup
|
74 |
-
#: ../backwpup.php:355
|
75 |
-
msgid "Backup to an S3 Service"
|
76 |
-
msgstr "Backup zu einem S3 Service"
|
77 |
-
|
78 |
-
# @ backwpup
|
79 |
-
#: ../backwpup.php:374
|
80 |
-
msgid "Backup to an S3 Service v1"
|
81 |
-
msgstr "Backup auf S3 Service v1"
|
82 |
-
|
83 |
-
# @ backwpup
|
84 |
-
#: ../backwpup.php:390
|
85 |
-
msgid "MS Azure"
|
86 |
-
msgstr "MS Azure"
|
87 |
-
|
88 |
-
# @ backwpup
|
89 |
-
#: ../backwpup.php:391
|
90 |
-
msgid "Backup to Microsoft Azure (Blob)"
|
91 |
-
msgstr "Backup zu Microsoft Azure (Blob)"
|
92 |
-
|
93 |
-
# @ backwpup
|
94 |
-
#: ../backwpup.php:406
|
95 |
-
msgid "RSC"
|
96 |
-
msgstr "RSC"
|
97 |
-
|
98 |
-
# @ backwpup
|
99 |
-
#: ../backwpup.php:407
|
100 |
-
msgid "Backup to Rackspace Cloud Files"
|
101 |
-
msgstr "Backup in die Rackspace Cloud"
|
102 |
-
|
103 |
-
# @ backwpup
|
104 |
-
#: ../backwpup.php:423
|
105 |
-
msgid "SugarSync"
|
106 |
-
msgstr "SugarSync"
|
107 |
-
|
108 |
-
# @ backwpup
|
109 |
-
#: ../backwpup.php:424
|
110 |
-
msgid "Backup to SugarSync"
|
111 |
-
msgstr "Backup zu SugarSync"
|
112 |
-
|
113 |
-
# @ backwpup
|
114 |
-
#: ../backwpup.php:443
|
115 |
-
#, php-format
|
116 |
-
msgid "PHP Version %1$s is to low, you need Version %2$s or above."
|
117 |
-
msgstr "Du nutzt die veraltete PHP Version %1$s. Es wird aber mindestens die Version %2$s benötigt."
|
118 |
-
|
119 |
-
# @ backwpup
|
120 |
-
#: ../backwpup.php:450
|
121 |
-
#, php-format
|
122 |
-
msgid "Missing function \"%s\"."
|
123 |
-
msgstr "Fehlende Funktion \"%s\"."
|
124 |
-
|
125 |
-
# @ backwpup
|
126 |
-
#: ../backwpup.php:459
|
127 |
-
#, php-format
|
128 |
-
msgid "Missing class \"%s\"."
|
129 |
-
msgstr "Fehlende Klasse \"%s\"."
|
130 |
-
|
131 |
-
# @ backwpup
|
132 |
-
#: ../inc/class-destination-folder.php:26
|
133 |
-
#: ../inc/class-destination-ftp.php:52
|
134 |
-
msgid "Backup settings"
|
135 |
-
msgstr "Backup-Einstellungen"
|
136 |
-
|
137 |
-
# @ backwpup
|
138 |
-
#: ../inc/class-destination-folder.php:30
|
139 |
-
msgid "Folder to store backups in"
|
140 |
-
msgstr "Order für Dateien"
|
141 |
-
|
142 |
-
# @ backwpup
|
143 |
-
#: ../inc/class-destination-folder.php:36
|
144 |
-
#: ../inc/class-destination-ftp.php:62
|
145 |
-
msgid "File Deletion"
|
146 |
-
msgstr "Dateilöschung"
|
147 |
-
|
148 |
-
# @ backwpup
|
149 |
-
#: ../inc/class-destination-folder.php:42
|
150 |
-
#: ../inc/class-destination-s3.php:160
|
151 |
-
msgid "Number of files to keep in folder."
|
152 |
-
msgstr "Anzahl der Dateien, die im Ordner behalten werden"
|
153 |
-
|
154 |
-
# @ backwpup
|
155 |
-
#: ../inc/class-destination-folder.php:46
|
156 |
-
#: ../inc/class-destination-s3.php:164
|
157 |
-
#: ../inc/class-destination-ftp.php:72
|
158 |
-
msgid "Do not delete files while syncing to destination!"
|
159 |
-
msgstr "Keine Dateien im Sync-Zielverzeichnis löschen!"
|
160 |
-
|
161 |
-
# @ backwpup
|
162 |
-
#: ../inc/class-destination-folder.php:194
|
163 |
-
#, php-format
|
164 |
-
msgid "One backup file deleted"
|
165 |
-
msgid_plural "%d backup files deleted"
|
166 |
-
msgstr[0] "Eine Sicherungsdatei gelöscht"
|
167 |
-
msgstr[1] "%d Sicherungsdateien gelöscht"
|
168 |
-
|
169 |
-
# @ backwpup
|
170 |
-
#: ../inc/class-destination-s3.php:74
|
171 |
-
msgid "Select a S3 service"
|
172 |
-
msgstr "Wähle einen S3 Service"
|
173 |
-
|
174 |
-
# @ backwpup
|
175 |
-
#: ../inc/class-destination-s3.php:76
|
176 |
-
msgid "Amazon S3 Region"
|
177 |
-
msgstr "Amazon S3 Region"
|
178 |
-
|
179 |
-
# @ backwpup
|
180 |
-
#: ../inc/class-destination-s3.php:77
|
181 |
-
msgid "Amazon S3: US Standard"
|
182 |
-
msgstr "Amazon S3: US Standard"
|
183 |
-
|
184 |
-
# @ backwpup
|
185 |
-
#: ../inc/class-destination-s3.php:78
|
186 |
-
msgid "Amazon S3: US West (Northern California)"
|
187 |
-
msgstr "Amazon S3: US West (Northern California)"
|
188 |
-
|
189 |
-
# @ backwpup
|
190 |
-
#: ../inc/class-destination-s3.php:79
|
191 |
-
msgid "Amazon S3: US West (Oregon)"
|
192 |
-
msgstr "Amazon S3: US West (Oregon)"
|
193 |
-
|
194 |
-
# @ backwpup
|
195 |
-
#: ../inc/class-destination-s3.php:80
|
196 |
-
msgid "Amazon S3: EU (Ireland)"
|
197 |
-
msgstr "Amazon S3: EU (Ireland)"
|
198 |
-
|
199 |
-
# @ backwpup
|
200 |
-
#: ../inc/class-destination-s3.php:81
|
201 |
-
msgid "Amazon S3: EU (Germany)"
|
202 |
-
msgstr "Amazon S3: EU (Germany)"
|
203 |
-
|
204 |
-
# @ backwpup
|
205 |
-
#: ../inc/class-destination-s3.php:82
|
206 |
-
msgid "Amazon S3: Asia Pacific (Tokyo)"
|
207 |
-
msgstr "Amazon S3: Asia Pacific (Tokyo)"
|
208 |
-
|
209 |
-
# @ backwpup
|
210 |
-
#: ../inc/class-destination-s3.php:83
|
211 |
-
msgid "Amazon S3: Asia Pacific (Singapore)"
|
212 |
-
msgstr "Amazon S3: Asia Pacific (Singapore)"
|
213 |
-
|
214 |
-
# @ backwpup
|
215 |
-
#: ../inc/class-destination-s3.php:84
|
216 |
-
msgid "Amazon S3: Asia Pacific (Sydney)"
|
217 |
-
msgstr "Amazon S3: Asia Pacific (Sydney)"
|
218 |
-
|
219 |
-
# @ backwpup
|
220 |
-
#: ../inc/class-destination-s3.php:85
|
221 |
-
msgid "Amazon S3: South America (Sao Paulo)"
|
222 |
-
msgstr "Amazon S3: South America (Sao Paulo)"
|
223 |
-
|
224 |
-
# @ backwpup
|
225 |
-
#: ../inc/class-destination-s3.php:86
|
226 |
-
msgid "Amazon S3: China (Beijing)"
|
227 |
-
msgstr "Amazon S3: China (Beijing)"
|
228 |
-
|
229 |
-
# @ backwpup
|
230 |
-
#: ../inc/class-destination-s3.php:87
|
231 |
-
msgid "Google Storage (Interoperable Access)"
|
232 |
-
msgstr "Google Storage (Interoperable Access)"
|
233 |
-
|
234 |
-
# @ backwpup
|
235 |
-
#: ../inc/class-destination-s3.php:88
|
236 |
-
msgid "Dream Host Cloud Storage"
|
237 |
-
msgstr "Dream Host Cloud Storage"
|
238 |
-
|
239 |
-
# @ backwpup
|
240 |
-
#: ../inc/class-destination-s3.php:89
|
241 |
-
msgid "GreenQloud Storage Qloud"
|
242 |
-
msgstr "GreenQloud Storage Qloud"
|
243 |
-
|
244 |
-
# @ backwpup
|
245 |
-
#: ../inc/class-destination-s3.php:94
|
246 |
-
msgid "Or a S3 Server URL"
|
247 |
-
msgstr "oder eine S3 Server URL"
|
248 |
-
|
249 |
-
# @ backwpup
|
250 |
-
#: ../inc/class-destination-s3.php:101
|
251 |
-
msgid "S3 Access Keys"
|
252 |
-
msgstr "S3 Access Keys"
|
253 |
-
|
254 |
-
# @ backwpup
|
255 |
-
#: ../inc/class-destination-s3.php:105
|
256 |
-
msgid "Access Key"
|
257 |
-
msgstr "Access Key"
|
258 |
-
|
259 |
-
# @ backwpup
|
260 |
-
#: ../inc/class-destination-s3.php:112
|
261 |
-
msgid "Secret Key"
|
262 |
-
msgstr "Secret Key"
|
263 |
-
|
264 |
-
# @ backwpup
|
265 |
-
#: ../inc/class-destination-s3.php:120
|
266 |
-
msgid "S3 Bucket"
|
267 |
-
msgstr "S3 Bucket"
|
268 |
-
|
269 |
-
# @ backwpup
|
270 |
-
#: ../inc/class-destination-s3.php:124
|
271 |
-
msgid "Bucket selection"
|
272 |
-
msgstr "Bucket Auswahl"
|
273 |
-
|
274 |
-
# @ backwpup
|
275 |
-
#: ../inc/class-destination-s3.php:137
|
276 |
-
msgid "Create a new bucket"
|
277 |
-
msgstr "Neues Bucket erstellen"
|
278 |
-
|
279 |
-
# @ backwpup
|
280 |
-
#: ../inc/class-destination-s3.php:144
|
281 |
-
msgid "S3 Backup settings"
|
282 |
-
msgstr "S3 Backup Einstellungen"
|
283 |
-
|
284 |
-
# @ backwpup
|
285 |
-
#: ../inc/class-destination-s3.php:148
|
286 |
-
msgid "Folder in bucket"
|
287 |
-
msgstr "Ordner im Bucket"
|
288 |
-
|
289 |
-
# @ backwpup
|
290 |
-
#: ../inc/class-destination-s3.php:154
|
291 |
-
msgid "File deletion"
|
292 |
-
msgstr "Datei Löschung"
|
293 |
-
|
294 |
-
# @ backwpup
|
295 |
-
#: ../inc/class-destination-s3.php:170
|
296 |
-
msgid "Multipart Upload"
|
297 |
-
msgstr "Multipart Upload"
|
298 |
-
|
299 |
-
# @ backwpup
|
300 |
-
#: ../inc/class-destination-s3.php:174
|
301 |
-
msgid "Use multipart upload for uploading a file"
|
302 |
-
msgstr "Benutze Multipart Upload zu hochladen der Datei"
|
303 |
-
|
304 |
-
# @ backwpup
|
305 |
-
#: ../inc/class-destination-s3.php:180
|
306 |
-
msgid "Amazon specific settings"
|
307 |
-
msgstr "Amazon spezifische Einstellungen"
|
308 |
-
|
309 |
-
# @ backwpup
|
310 |
-
#: ../inc/class-destination-s3.php:184
|
311 |
-
#: ../inc/class-destination-s3.php:186
|
312 |
-
msgid "Amazon: Storage Class"
|
313 |
-
msgstr "Amazon: Storage Class"
|
314 |
-
|
315 |
-
# @ backwpup
|
316 |
-
#: ../inc/class-destination-s3.php:187
|
317 |
-
msgid "none"
|
318 |
-
msgstr "keine"
|
319 |
-
|
320 |
-
# @ backwpup
|
321 |
-
#: ../inc/class-destination-s3.php:188
|
322 |
-
msgid "Reduced Redundancy"
|
323 |
-
msgstr "Reduzierte Redundanz"
|
324 |
-
|
325 |
-
# @ backwpup
|
326 |
-
#: ../inc/class-destination-s3.php:193
|
327 |
-
msgid "Server side encryption"
|
328 |
-
msgstr "Serverseitige Enkryption"
|
329 |
-
|
330 |
-
# @ backwpup
|
331 |
-
#: ../inc/class-destination-s3.php:197
|
332 |
-
msgid "Save files encrypted (AES256) on server."
|
333 |
-
msgstr "Speicher Dateien Server Side Encrypted (AES256)"
|
334 |
-
|
335 |
-
# @ backwpup
|
336 |
-
#: ../inc/class-destination-s3.php:253
|
337 |
-
#, php-format
|
338 |
-
msgid "Bucket %1$s created in %2$s."
|
339 |
-
msgstr "Bucket %1$s in %2$s erstellt."
|
340 |
-
|
341 |
-
# @ backwpup
|
342 |
-
#: ../inc/class-destination-s3.php:255
|
343 |
-
#, php-format
|
344 |
-
msgid "Bucket %s could not be created."
|
345 |
-
msgstr "Bucket %s konnte nicht erstellt werden."
|
346 |
-
|
347 |
-
# @ backwpup
|
348 |
-
#: ../inc/class-destination-s3.php:257
|
349 |
-
#, php-format
|
350 |
-
msgid " %s is not a valid bucket name."
|
351 |
-
msgstr "%s ist kein gültiger Bucket Name"
|
352 |
-
|
353 |
-
# @ backwpup
|
354 |
-
#: ../inc/class-destination-s3.php:297
|
355 |
-
#: ../inc/class-destination-s3.php:418
|
356 |
-
#: ../inc/class-destination-s3.php:471
|
357 |
-
#: ../inc/class-destination-s3.php:501
|
358 |
-
#: ../inc/class-destination-s3.php:561
|
359 |
-
#, php-format
|
360 |
-
msgid "S3 Service API: %s"
|
361 |
-
msgstr "S3 Service API: %s"
|
362 |
-
|
363 |
-
# @ backwpup
|
364 |
-
#: ../inc/class-destination-s3.php:361
|
365 |
-
#, php-format
|
366 |
-
msgid "%d. Trying to send backup file to S3 Service …"
|
367 |
-
msgstr "%d. Versuche, ein Backup zum S3-Service zu senden …"
|
368 |
-
|
369 |
-
# @ backwpup
|
370 |
-
#: ../inc/class-destination-s3.php:374
|
371 |
-
#, php-format
|
372 |
-
msgid "Connected to S3 Bucket \"%1$s\" in %2$s"
|
373 |
-
msgstr "Verbunden zum S3 Bucket \"%1$s\" in %2$s"
|
374 |
-
|
375 |
-
# @ backwpup
|
376 |
-
#: ../inc/class-destination-s3.php:377
|
377 |
-
#, php-format
|
378 |
-
msgid "S3 Bucket \"%s\" does not exist!"
|
379 |
-
msgstr "Amazon S3 Bucket \"%s\" existiert nicht!"
|
380 |
-
|
381 |
-
# @ backwpup
|
382 |
-
#: ../inc/class-destination-s3.php:384
|
383 |
-
msgid "Checking for not aborted multipart Uploads …"
|
384 |
-
msgstr "Prüfe auf nicht abgebrochene, mehrteilige Uploads …"
|
385 |
-
|
386 |
-
# @ backwpup
|
387 |
-
#: ../inc/class-destination-s3.php:390
|
388 |
-
#, php-format
|
389 |
-
msgid "Upload for %s aborted."
|
390 |
-
msgstr "Upload für %s abgebrochen."
|
391 |
-
|
392 |
-
# @ backwpup
|
393 |
-
#: ../inc/class-destination-s3.php:396
|
394 |
-
msgid "Starting upload to S3 Service …"
|
395 |
-
msgstr "Upload zum S3 Service begonnen …"
|
396 |
-
|
397 |
-
# @ backwpup
|
398 |
-
#: ../inc/class-destination-s3.php:492
|
399 |
-
#, php-format
|
400 |
-
msgid "Backup transferred to %s."
|
401 |
-
msgstr "Backup übertragen zu %s"
|
402 |
-
|
403 |
-
# @ backwpup
|
404 |
-
#: ../inc/class-destination-s3.php:497
|
405 |
-
#, php-format
|
406 |
-
msgid "Cannot transfer backup to S3! (%1$d) %2$s"
|
407 |
-
msgstr "Backup kann nicht zu Amazon S3 übertragen werden! (%1$d) %2$s"
|
408 |
-
|
409 |
-
# @ backwpup
|
410 |
-
#: ../inc/class-destination-s3.php:525
|
411 |
-
#, php-format
|
412 |
-
msgid "Storage Class: %s"
|
413 |
-
msgstr "Speicher-Klasse: %s"
|
414 |
-
|
415 |
-
# @ backwpup
|
416 |
-
#: ../inc/class-destination-s3.php:551
|
417 |
-
#, php-format
|
418 |
-
msgid "Cannot delete backup from %s."
|
419 |
-
msgstr "Kann das Backup auf %s nicht löschen"
|
420 |
-
|
421 |
-
# @ backwpup
|
422 |
-
#: ../inc/class-destination-s3.php:555
|
423 |
-
#, php-format
|
424 |
-
msgid "One file deleted on S3 Bucket."
|
425 |
-
msgid_plural "%d files deleted on S3 Bucket"
|
426 |
-
msgstr[0] "Eine Datei im S3-Bucket gelöscht"
|
427 |
-
msgstr[1] "%d Dateien im S3-Bucket gelöscht"
|
428 |
-
|
429 |
-
# @ backwpup
|
430 |
-
#: ../inc/class-destination-s3.php:658
|
431 |
-
msgid "Missing access key!"
|
432 |
-
msgstr "Der Zugangsschlüssel (Access Key) fehlt!"
|
433 |
-
|
434 |
-
# @ backwpup
|
435 |
-
#: ../inc/class-destination-s3.php:660
|
436 |
-
msgid "Missing secret access key!"
|
437 |
-
msgstr "Der geheime Zugangsschlüssel (Secret Access Key) fehlt!"
|
438 |
-
|
439 |
-
# @ backwpup
|
440 |
-
#: ../inc/class-destination-s3.php:666
|
441 |
-
msgid "No bucket found!"
|
442 |
-
msgstr "Kein Bucket gefunden!"
|
443 |
-
|
444 |
-
# @ backwpup
|
445 |
-
#: ../inc/class-page-about.php:394
|
446 |
-
#, php-format
|
447 |
-
msgid "%s Welcome"
|
448 |
-
msgstr "%s Willkommen"
|
449 |
-
|
450 |
-
# @ backwpup
|
451 |
-
#: ../inc/class-page-about.php:401
|
452 |
-
msgid "Heads up! You have updated from version 2.x"
|
453 |
-
msgstr "Achtung! Sie haben von Version 2.x aktualisiert"
|
454 |
-
|
455 |
-
# @ backwpup
|
456 |
-
#: ../inc/class-page-about.php:402
|
457 |
-
#, php-format
|
458 |
-
msgid "Please <a href=\"%s\">check your settings</a> after updating from version 2.x:"
|
459 |
-
msgstr "Bitte <a href=\"%s\">prüfen Sie Ihre Einstellungen</a> nach dem Update von Version 2.x."
|
460 |
-
|
461 |
-
# @ backwpup
|
462 |
-
#: ../inc/class-page-about.php:403
|
463 |
-
msgid "Dropbox authentication must be re-entered"
|
464 |
-
msgstr "Die Drohbox-Authentifizierung muss wiederholt werden."
|
465 |
-
|
466 |
-
# @ backwpup
|
467 |
-
#: ../inc/class-page-about.php:404
|
468 |
-
msgid "SugarSync authentication must be re-entered"
|
469 |
-
msgstr "Die SugarSync-Authentifizierung muss wiederholt werden"
|
470 |
-
|
471 |
-
# @ backwpup
|
472 |
-
#: ../inc/class-page-about.php:405
|
473 |
-
msgid "S3 Settings"
|
474 |
-
msgstr "S3-Einstellungen"
|
475 |
-
|
476 |
-
# @ backwpup
|
477 |
-
#: ../inc/class-page-about.php:406
|
478 |
-
msgid "Google Storage is now a part of S3 service settings"
|
479 |
-
msgstr "Google Storage ist jetzt Teil der S3-Einstellungen"
|
480 |
-
|
481 |
-
# @ backwpup
|
482 |
-
#: ../inc/class-page-about.php:407
|
483 |
-
msgid "All your passwords"
|
484 |
-
msgstr "All Ihre Passwörter"
|
485 |
-
|
486 |
-
# @ backwpup
|
487 |
-
#: ../inc/class-page-about.php:416
|
488 |
-
msgid "Welcome to BackWPup Pro"
|
489 |
-
msgstr "Willkommen zu BackWPup Pro"
|
490 |
-
|
491 |
-
# @ backwpup
|
492 |
-
#: ../inc/class-page-about.php:417
|
493 |
-
msgid "BackWPup’s job wizards make planning and scheduling your backup jobs a breeze."
|
494 |
-
msgstr "Die Assistenten in BackWPup machen das Planen und terminieren deiner Sicherungen zu einem Spaziergang."
|
495 |
-
|
496 |
-
# @ backwpup
|
497 |
-
#: ../inc/class-page-about.php:418
|
498 |
-
#: ../inc/class-page-about.php:428
|
499 |
-
msgid "Use your backup archives to save your entire WordPress installation including <code>/wp-content/</code>. Push them to an external storage service if you don’t want to save the backups on the same server. With a single backup archive you are able to restore an installation. Use a tool like phpMyAdmin or a plugin like <a href=\"http://wordpress.org/plugins/adminer/\" target=\"_blank\">Adminer</a> to restore your database backup files."
|
500 |
-
msgstr "Benutze deine Backup-Archive, um deine gesamte WordPress-Installation zu sichern, einschließlich <code>/wp-content/</code>. Lade sie zu einem externen Dienst hoch, wenn du deine Backups nicht auf demselben Server speichern möchtest. Mit einem einzigen Backup-Archiv kannst du deine Installation wiederherstellen. Benutze ein serverseitiges Tool wie phpMyAdmin, oder ein Plugin wie <a href=\"http://wordpress.org/plugins/adminer/\" target=\"_blank\">Adminer</a>, um deine Datenbanksicherung wiederherzustellen."
|
501 |
-
|
502 |
-
# @ backwpup
|
503 |
-
#: ../inc/class-page-about.php:419
|
504 |
-
#, php-format
|
505 |
-
msgid "Ready to <a href=\"%1$s\">set up a backup job</a>? You can <a href=\"%2$s\">use the wizards</a> or plan your backup in expert mode."
|
506 |
-
msgstr "<a href=\"%1$s\">Bereit, einen Backup-Auftrag anzulegen</a>? Benutze die <a href=\"%2$s\">Assistenten</a>, oder plane dein Backup im Expertenmodus."
|
507 |
-
|
508 |
-
# @ backwpup
|
509 |
-
#: ../inc/class-page-about.php:426
|
510 |
-
msgid "Welcome to BackWPup"
|
511 |
-
msgstr "Willkommen bei BackWPup"
|
512 |
-
|
513 |
-
# @ backwpup
|
514 |
-
#: ../inc/class-page-about.php:429
|
515 |
-
msgid "Ready to set up a backup job? Use one of the wizards to plan what you want to save."
|
516 |
-
msgstr "Bereit, einen Backup-Auftrag anzulegen? Benutze einen der Assistenten, um deine Sicherung zu planen."
|
517 |
-
|
518 |
-
# @ backwpup
|
519 |
-
#: ../inc/class-page-about.php:446
|
520 |
-
msgid "Please activate your license"
|
521 |
-
msgstr "Bitte aktivieren Sie Ihre Lizenz."
|
522 |
-
|
523 |
-
# @ backwpup
|
524 |
-
#: ../inc/class-page-about.php:447
|
525 |
-
msgid "Please go to your plugin page and active the license to have the autoupdates enabled."
|
526 |
-
msgstr "Bitte gehen Sie auf die Plugin-Seite, und aktivieren Sie die Lizenz, um automatische Aktualisierungen zu aktivieren."
|
527 |
-
|
528 |
-
# @ backwpup
|
529 |
-
#: ../inc/class-page-about.php:456
|
530 |
-
msgid "Save your database"
|
531 |
-
msgstr "Sichern Sie Ihre Datenbank"
|
532 |
-
|
533 |
-
# @ backwpup
|
534 |
-
#: ../inc/class-page-about.php:459
|
535 |
-
msgid "Save your database regularly"
|
536 |
-
msgstr "Sichern Sie Ihre Datenbank regelmäßig"
|
537 |
-
|
538 |
-
# @ backwpup
|
539 |
-
#: ../inc/class-page-about.php:460
|
540 |
-
#, php-format
|
541 |
-
msgid "With BackWPup you can schedule the database backup to run automatically. With a single backup file you can restore your database. You should <a href=\"%s\">set up a backup job</a>, so you will never forget it. There is also an option to repair and optimize the database after each backup."
|
542 |
-
msgstr "Mit BackWPup können Sie automatische Datenbank-Backups planen. Mit einer einzigen Backup-Datei können Sie Ihre Datenbank wiederherstellen. Sie sollten einen <a href=\\\"%s\\\">Backup-Auftrag einrichten</a>, damit Sie es nie mehr vergessen. Es gibt auch eine Option, um die Datenbank anschließend zu reparieren und zu optimieren."
|
543 |
-
|
544 |
-
# @ backwpup
|
545 |
-
#: ../inc/class-page-about.php:465
|
546 |
-
#: ../inc/class-page-about.php:469
|
547 |
-
msgid "WordPress XML Export"
|
548 |
-
msgstr "WordPress-XML-Export"
|
549 |
-
|
550 |
-
# @ backwpup
|
551 |
-
#: ../inc/class-page-about.php:466
|
552 |
-
msgid "You can choose the built-in WordPress export format in addition or exclusive to save your data. This works in automated backups too of course. The advantage is: you can import these files into a blog with the regular WordPress importer."
|
553 |
-
msgstr "Sie können das interne WordPress-Export-Format zusätzlich oder ausschließlich wählen, um Ihre Daten zu sichern. Das funktioniert natürlich auch in automatischen Backups. Der Vorteil: Sie können dieses Format mit dem normalen WordPress-Importer-Plugin importieren."
|
554 |
-
|
555 |
-
# @ backwpup
|
556 |
-
#: ../inc/class-page-about.php:474
|
557 |
-
msgid "Save all data from the webserver"
|
558 |
-
msgstr "Sichern Sie alle Daten vom Webserver"
|
559 |
-
|
560 |
-
# @ backwpup
|
561 |
-
#: ../inc/class-page-about.php:477
|
562 |
-
msgid "Save all files"
|
563 |
-
msgstr "Sichern Sie alle Dateien"
|
564 |
-
|
565 |
-
# @ backwpup
|
566 |
-
#: ../inc/class-page-about.php:478
|
567 |
-
#, php-format
|
568 |
-
msgid "You can backup all your attachments, also all system files, plugins and themes in a single file. You can <a href=\"%s\">create a job</a> to update a backup copy of your file system only when files are changed."
|
569 |
-
msgstr "Sie können all Ihre Anhänge sichern, ebenso alle Systemdateien, Plugins und Themes – in einer einzigen Datei. Sie können einen <a href=\\\"%s\\\">Auftrag erstellen</a>, um die Sicherungskopie nur dann zu aktualisieren, wenn sich tatsächlich eine Datei geändert hat."
|
570 |
-
|
571 |
-
# @ backwpup
|
572 |
-
#: ../inc/class-page-about.php:483
|
573 |
-
#: ../inc/class-page-about.php:487
|
574 |
-
msgid "Security!"
|
575 |
-
msgstr "Sicherheit!"
|
576 |
-
|
577 |
-
# @ backwpup
|
578 |
-
#: ../inc/class-page-about.php:484
|
579 |
-
msgid "By default everything is encrypted: connections to external services, local files and access to directories."
|
580 |
-
msgstr "In der Grundeinstellung ist alles verschlüsselt: Verbindungen zu externen Diensten, lokale Dateien und der Zugriff auf die Verzeichnisse."
|
581 |
-
|
582 |
-
# @ backwpup
|
583 |
-
#: ../inc/class-page-about.php:492
|
584 |
-
#: ../inc/class-page-about.php:495
|
585 |
-
msgid "Cloud Support"
|
586 |
-
msgstr "Cloud-Support"
|
587 |
-
|
588 |
-
# @ backwpup
|
589 |
-
#: ../inc/class-page-about.php:496
|
590 |
-
msgid "BackWPup supports multiple cloud services in parallel. This ensures backups are redundant."
|
591 |
-
msgstr "BackWPup unterstützt mehrere Cloud-Dienste parallel. Damit wird sichergestellt, dass Sie redundante Backups anlegen können."
|
592 |
-
|
593 |
-
# @ backwpup
|
594 |
-
#: ../inc/class-page-about.php:504
|
595 |
-
msgid "Features / differences between Free and Pro"
|
596 |
-
msgstr "Features / Unterschiede zwischen Free und Pro"
|
597 |
-
|
598 |
-
# @ backwpup
|
599 |
-
#: ../inc/class-page-about.php:507
|
600 |
-
msgid "Features"
|
601 |
-
msgstr "Features"
|
602 |
-
|
603 |
-
# @ backwpup
|
604 |
-
#: ../inc/class-page-about.php:508
|
605 |
-
msgid "FREE"
|
606 |
-
msgstr "FREE"
|
607 |
-
|
608 |
-
# @ backwpup
|
609 |
-
#: ../inc/class-page-about.php:509
|
610 |
-
msgid "PRO"
|
611 |
-
msgstr "PRO"
|
612 |
-
|
613 |
-
# @ backwpup
|
614 |
-
#: ../inc/class-page-about.php:512
|
615 |
-
msgid "Complete database backup"
|
616 |
-
msgstr "Vollständige Datenbanksicherung"
|
617 |
-
|
618 |
-
# @ backwpup
|
619 |
-
#: ../inc/class-page-about.php:517
|
620 |
-
msgid "Complete file backup"
|
621 |
-
msgstr "Vollständige Dateisicherung"
|
622 |
-
|
623 |
-
# @ backwpup
|
624 |
-
#: ../inc/class-page-about.php:522
|
625 |
-
msgid "Database check"
|
626 |
-
msgstr "Datenbanküberprüfung"
|
627 |
-
|
628 |
-
# @ backwpup
|
629 |
-
#: ../inc/class-page-about.php:527
|
630 |
-
msgid "Data compression"
|
631 |
-
msgstr "Datenbankoptimierung"
|
632 |
-
|
633 |
-
# @ backwpup
|
634 |
-
#: ../inc/class-page-about.php:532
|
635 |
-
msgid "WordPress XML export"
|
636 |
-
msgstr "WordPress XML Export"
|
637 |
-
|
638 |
-
# @ backwpup
|
639 |
-
#: ../inc/class-page-about.php:537
|
640 |
-
msgid "List of installed plugins"
|
641 |
-
msgstr "Liste installierter Plugins"
|
642 |
-
|
643 |
-
# @ backwpup
|
644 |
-
#: ../inc/class-page-about.php:542
|
645 |
-
msgid "Backup archives management"
|
646 |
-
msgstr "Verwaltung der Backup-Archive"
|
647 |
-
|
648 |
-
# @ backwpup
|
649 |
-
#: ../inc/class-page-about.php:547
|
650 |
-
msgid "Log file management"
|
651 |
-
msgstr "Verwaltung der Log-Dateien"
|
652 |
-
|
653 |
-
# @ backwpup
|
654 |
-
#: ../inc/class-page-about.php:552
|
655 |
-
msgid "Start jobs per WP-Cron, URL, system, backend or WP-CLI"
|
656 |
-
msgstr "Start der Aufträge über WP-Cron, URL, System, Backend, WP-CLI"
|
657 |
-
|
658 |
-
# @ backwpup
|
659 |
-
#: ../inc/class-page-about.php:557
|
660 |
-
msgid "Log report via email"
|
661 |
-
msgstr "Log-Report via E-Mail"
|
662 |
-
|
663 |
-
# @ backwpup
|
664 |
-
#: ../inc/class-page-about.php:562
|
665 |
-
msgid "Backup to Microsoft Azure"
|
666 |
-
msgstr "Backup zu Microsoft Azure"
|
667 |
-
|
668 |
-
# @ backwpup
|
669 |
-
#: ../inc/class-page-about.php:567
|
670 |
-
msgid "Backup as email"
|
671 |
-
msgstr "Backup per E-Mail"
|
672 |
-
|
673 |
-
# @ backwpup
|
674 |
-
#: ../inc/class-page-about.php:572
|
675 |
-
msgid "Backup to S3 services <small>(Amazon, Google Storage, Hosteurope and more)</small>"
|
676 |
-
msgstr "Backup zu S3-Dienstleistern <small>(Amazon, Google Storage, Hosteurope, usw)</small>"
|
677 |
-
|
678 |
-
# @ backwpup
|
679 |
-
#: ../inc/class-page-about.php:587
|
680 |
-
msgid "Backup to FTP server"
|
681 |
-
msgstr "Backup auf FTP-Server"
|
682 |
-
|
683 |
-
# @ backwpup
|
684 |
-
#: ../inc/class-page-about.php:592
|
685 |
-
msgid "Backup to your web space"
|
686 |
-
msgstr "Backup auf eigenem Webspace"
|
687 |
-
|
688 |
-
# @ backwpup
|
689 |
-
#: ../inc/class-page-about.php:602
|
690 |
-
msgid "Backup to Google Drive"
|
691 |
-
msgstr "Backup zu Google Drive"
|
692 |
-
|
693 |
-
# @ backwpup
|
694 |
-
#: ../inc/class-page-about.php:607
|
695 |
-
msgid "Backup to Amazon Glacier"
|
696 |
-
msgstr "Backup zu Amazon Glacier"
|
697 |
-
|
698 |
-
# @ backwpup
|
699 |
-
#: ../inc/class-page-about.php:612
|
700 |
-
msgid "Custom API keys for DropBox and SugarSync"
|
701 |
-
msgstr "Eigene API-Keys für DropBox und SugarSync hinterlegen"
|
702 |
-
|
703 |
-
# @ backwpup
|
704 |
-
#: ../inc/class-page-about.php:617
|
705 |
-
msgid "XML database backup as PHPMyAdmin schema"
|
706 |
-
msgstr "XML-Datenbanksicherung der Datenbank nach PHPMyAdmin-Schema"
|
707 |
-
|
708 |
-
# @ backwpup
|
709 |
-
#: ../inc/class-page-about.php:622
|
710 |
-
msgid "Database backup as mysqldump per command line"
|
711 |
-
msgstr "Datenbanksicherung mit System-Kommando mysqldump"
|
712 |
-
|
713 |
-
# @ backwpup
|
714 |
-
#: ../inc/class-page-about.php:627
|
715 |
-
msgid "Database backup for additional MySQL databases"
|
716 |
-
msgstr "Datenbanksicherung weiterer MySQL-Datenbanken"
|
717 |
-
|
718 |
-
# @ backwpup
|
719 |
-
#: ../inc/class-page-about.php:632
|
720 |
-
msgid "Import and export job settings as XML"
|
721 |
-
msgstr "Auftragseinstellungen als XML ex- und importieren"
|
722 |
-
|
723 |
-
# @ backwpup
|
724 |
-
#: ../inc/class-page-about.php:637
|
725 |
-
msgid "Wizard for system tests"
|
726 |
-
msgstr "Assistent zur Ausführung eines Systemtests"
|
727 |
-
|
728 |
-
# @ backwpup
|
729 |
-
#: ../inc/class-page-about.php:642
|
730 |
-
msgid "Wizard for scheduled backup jobs"
|
731 |
-
msgstr "Assistent zur Einrichtung von Sicherungsaufträgen"
|
732 |
-
|
733 |
-
# @ backwpup
|
734 |
-
#: ../inc/class-page-about.php:647
|
735 |
-
msgid "Wizard to import settings and backup jobs"
|
736 |
-
msgstr "Assistent zum Importieren von Einstellungen und Aufträgen"
|
737 |
-
|
738 |
-
# @ backwpup
|
739 |
-
#: ../inc/class-page-about.php:652
|
740 |
-
msgid "Differential backup of changed directories to Dropbox"
|
741 |
-
msgstr "Sicherung geänderter Verzeichnisse in einer Dropbox"
|
742 |
-
|
743 |
-
# @ backwpup
|
744 |
-
#: ../inc/class-page-about.php:657
|
745 |
-
msgid "Differential backup of changed directories to Rackspace Cloud Files"
|
746 |
-
msgstr "Sicherung geänderter Verzeichnisse nach Rackspace Cloud Files"
|
747 |
-
|
748 |
-
# @ backwpup
|
749 |
-
#: ../inc/class-page-about.php:662
|
750 |
-
msgid "Differential backup of changed directories to S3"
|
751 |
-
msgstr "Sicherung geänderter Verzeichnisse nach S3"
|
752 |
-
|
753 |
-
# @ backwpup
|
754 |
-
#: ../inc/class-page-about.php:667
|
755 |
-
msgid "Differential backup of changed directories to MS Azure"
|
756 |
-
msgstr "Sicherung geänderter Verzeichnisse nach MS Azure"
|
757 |
-
|
758 |
-
# @ backwpup
|
759 |
-
#: ../inc/class-page-about.php:672
|
760 |
-
msgid "<strong>Premium support</strong>"
|
761 |
-
msgstr "<strong>Premium-Support</strong>"
|
762 |
-
|
763 |
-
# @ backwpup
|
764 |
-
#: ../inc/class-page-about.php:677
|
765 |
-
msgid "<strong>Dynamically loaded documentation</strong>"
|
766 |
-
msgstr "<strong>Integration einer dynamischen Dokumentation</strong>"
|
767 |
-
|
768 |
-
# @ backwpup
|
769 |
-
#: ../inc/class-page-about.php:682
|
770 |
-
msgid "<strong>Automatic update from MarketPress</strong>"
|
771 |
-
msgstr "<strong>Automatische Aktualisierung durch MarketPress</strong>"
|
772 |
-
|
773 |
-
# @ backwpup
|
774 |
-
#: ../inc/class-page-about.php:689
|
775 |
-
msgid "http://marketpress.com/product/backwpup-pro/"
|
776 |
-
msgstr "http://marketpress.de/product/backwpup-pro/"
|
777 |
-
|
778 |
-
# @ backwpup
|
779 |
-
#: ../inc/class-page-about.php:689
|
780 |
-
msgid "GET PRO"
|
781 |
-
msgstr "GET PRO"
|
782 |
-
|
783 |
-
# @ backwpup
|
784 |
-
#: ../inc/class-install.php:71
|
785 |
-
msgid "BackWPup Admin"
|
786 |
-
msgstr "BackWPup Admin"
|
787 |
-
|
788 |
-
# @ backwpup
|
789 |
-
#: ../inc/class-install.php:84
|
790 |
-
msgid "BackWPup jobs checker"
|
791 |
-
msgstr "BackWPup Auftragsprüfung"
|
792 |
-
|
793 |
-
# @ backwpup
|
794 |
-
#: ../inc/class-install.php:97
|
795 |
-
msgid "BackWPup jobs helper"
|
796 |
-
msgstr "BackWPup Auftragshelfer"
|
797 |
-
|
798 |
-
# @ backwpup
|
799 |
-
#: ../inc/class-help.php:15
|
800 |
-
msgid "Plugin Info"
|
801 |
-
msgstr "Plugin Info"
|
802 |
-
|
803 |
-
# @ backwpup
|
804 |
-
#: ../inc/class-help.php:17
|
805 |
-
#, php-format
|
806 |
-
msgctxt "Plugin name and link; Plugin Version"
|
807 |
-
msgid "%1$s version %2$s. A project by <a href=\"http://inpsyde.com\">Inpsyde GmbH</a>."
|
808 |
-
msgstr "%1$s Version %2$s. Ein Projekt von <a href=\"http://inpsyde.com\">Inpsyde GmbH</a>."
|
809 |
-
|
810 |
-
# @ backwpup
|
811 |
-
#: ../inc/class-help.php:18
|
812 |
-
msgid "BackWPup comes with ABSOLUTELY NO WARRANTY. This is a free software, and you are welcome to redistribute it under certain conditions."
|
813 |
-
msgstr "BackWPup erhalten Sie OHNE JEDWEDE GARANTIE. Dies ist freie Software (quelloffen, im Sinne von Open Source) und Sie sind eingeladen, sie unter bestimmten Bedingungen weiterzugeben."
|
814 |
-
|
815 |
-
# @ backwpup
|
816 |
-
#: ../inc/class-help.php:21
|
817 |
-
msgid "For more information:"
|
818 |
-
msgstr "Für weitere Informationen:"
|
819 |
-
|
820 |
-
# @ backwpup
|
821 |
-
#: ../inc/class-help.php:23
|
822 |
-
msgid "Plugin on wordpress.org"
|
823 |
-
msgstr "Plugin auf wordpress.org"
|
824 |
-
|
825 |
-
# @ backwpup
|
826 |
-
#: ../inc/class-help.php:24
|
827 |
-
msgid "https://marketpress.com/news/"
|
828 |
-
msgstr "https://marketpress.de/news/"
|
829 |
-
|
830 |
-
# @ backwpup
|
831 |
-
#: ../inc/class-help.php:24
|
832 |
-
msgid "News"
|
833 |
-
msgstr "Neuigkeiten"
|
834 |
-
|
835 |
-
# @ backwpup
|
836 |
-
#: ../inc/class-help.php:26
|
837 |
-
msgid "https://marketpress.com/support/forum/plugins/backwpup-pro/"
|
838 |
-
msgstr "https://marketpress.de/support/forum/plugins/backwpup-pro/"
|
839 |
-
|
840 |
-
# @ backwpup
|
841 |
-
#: ../inc/class-help.php:26
|
842 |
-
msgid "Pro Support"
|
843 |
-
msgstr "Pro-Support"
|
844 |
-
|
845 |
-
# @ backwpup
|
846 |
-
#: ../inc/class-help.php:28
|
847 |
-
msgid "http://wordpress.org/support/plugin/backwpup/"
|
848 |
-
msgstr "http://wordpress.org/support/plugin/backwpup/"
|
849 |
-
|
850 |
-
# @ backwpup
|
851 |
-
#: ../inc/class-help.php:28
|
852 |
-
msgid "Support"
|
853 |
-
msgstr "Support"
|
854 |
-
|
855 |
-
# @ backwpup
|
856 |
-
#: ../inc/class-help.php:29
|
857 |
-
msgid "https://marketpress.com/documentation/backwpup-pro/"
|
858 |
-
msgstr "https://marketpress.de/dokumentation/backwpup-pro/"
|
859 |
-
|
860 |
-
# @ backwpup
|
861 |
-
#: ../inc/class-help.php:29
|
862 |
-
msgid "Manual"
|
863 |
-
msgstr "Handbuch"
|
864 |
-
|
865 |
-
# @ backwpup
|
866 |
-
#: ../inc/class-destination-ftp.php:23
|
867 |
-
msgid "FTP server and login"
|
868 |
-
msgstr "FTP-Server und -Anmeldung"
|
869 |
-
|
870 |
-
# @ backwpup
|
871 |
-
#: ../inc/class-destination-ftp.php:27
|
872 |
-
msgid "FTP server"
|
873 |
-
msgstr "FTP-Server"
|
874 |
-
|
875 |
-
# @ backwpup
|
876 |
-
#: ../inc/class-destination-ftp.php:31
|
877 |
-
msgid "Port:"
|
878 |
-
msgstr "Port:"
|
879 |
-
|
880 |
-
# @ backwpup
|
881 |
-
#: ../inc/class-destination-ftp.php:37
|
882 |
-
msgid "Username"
|
883 |
-
msgstr "Benutzername"
|
884 |
-
|
885 |
-
# @ backwpup
|
886 |
-
#: ../inc/class-destination-ftp.php:44
|
887 |
-
msgid "Password"
|
888 |
-
msgstr "Passwort"
|
889 |
-
|
890 |
-
# @ backwpup
|
891 |
-
#: ../inc/class-destination-ftp.php:56
|
892 |
-
msgid "Folder to store files in"
|
893 |
-
msgstr "Order für Dateien"
|
894 |
-
|
895 |
-
# @ backwpup
|
896 |
-
#: ../inc/class-destination-ftp.php:68
|
897 |
-
msgid "Maximum number of files to keep in folder."
|
898 |
-
msgstr "Maximale Anzahl von Dateien im Ordner."
|
899 |
-
|
900 |
-
# @ backwpup
|
901 |
-
#: ../inc/class-destination-ftp.php:78
|
902 |
-
msgid "FTP specific settings"
|
903 |
-
msgstr "FTP-Einstellungen"
|
904 |
-
|
905 |
-
# @ backwpup
|
906 |
-
#: ../inc/class-destination-ftp.php:82
|
907 |
-
msgid "Timeout for FTP connection"
|
908 |
-
msgstr "Zeitüberschreitung bei der FTP-Verbindung"
|
909 |
-
|
910 |
-
# @ backwpup
|
911 |
-
#: ../inc/class-destination-ftp.php:86
|
912 |
-
msgid "seconds"
|
913 |
-
msgstr "Sekunden"
|
914 |
-
|
915 |
-
# @ backwpup
|
916 |
-
#: ../inc/class-destination-ftp.php:90
|
917 |
-
msgid "SSL-FTP connection"
|
918 |
-
msgstr "SSL-FTP-Verbindung"
|
919 |
-
|
920 |
-
# @ backwpup
|
921 |
-
#: ../inc/class-destination-ftp.php:94
|
922 |
-
msgid "Use explicit SSL-FTP connection."
|
923 |
-
msgstr "Nutze explizit SSL-FTP Verbindung"
|
924 |
-
|
925 |
-
# @ backwpup
|
926 |
-
#: ../inc/class-destination-ftp.php:99
|
927 |
-
msgid "FTP Passive Mode"
|
928 |
-
msgstr "FTP-Passivmodus"
|
929 |
-
|
930 |
-
# @ backwpup
|
931 |
-
#: ../inc/class-destination-ftp.php:103
|
932 |
-
msgid "Use FTP Passive Mode."
|
933 |
-
msgstr "Nutze FTP-Passivmodus"
|
934 |
-
|
935 |
-
# @ backwpup
|
936 |
-
#: ../inc/class-destination-ftp.php:179
|
937 |
-
msgid "FTP: Login failure!"
|
938 |
-
msgstr "FTP: Anmeldung fehlgeschlagen!"
|
939 |
-
|
940 |
-
# @ backwpup
|
941 |
-
#: ../inc/class-destination-ftp.php:203
|
942 |
-
#, php-format
|
943 |
-
msgid "%d. Try to send backup file to an FTP server …"
|
944 |
-
msgstr "%d. Versuche, Backup an FTP-Server zu senden …"
|
945 |
-
|
946 |
-
# @ backwpup
|
947 |
-
#: ../inc/class-destination-ftp.php:209
|
948 |
-
#, php-format
|
949 |
-
msgid "Connected via explicit SSL-FTP to server: %s"
|
950 |
-
msgstr "Durch explizite SSL-FTP-Verbindung zum Server verbunden: %s"
|
951 |
-
|
952 |
-
# @ backwpup
|
953 |
-
#: ../inc/class-destination-ftp.php:211
|
954 |
-
#, php-format
|
955 |
-
msgid "Cannot connect via explicit SSL-FTP to server: %s"
|
956 |
-
msgstr "Kann nicht mit explizit SSL-FTP zum Server verbinden: %s"
|
957 |
-
|
958 |
-
# @ backwpup
|
959 |
-
#: ../inc/class-destination-ftp.php:217
|
960 |
-
msgid "PHP function to connect with explicit SSL-FTP to server does not exist!"
|
961 |
-
msgstr "PHP-Funktion für die Verbindung mit explizit SSL-FTP zum Server existiert nicht!"
|
962 |
-
|
963 |
-
# @ backwpup
|
964 |
-
#: ../inc/class-destination-ftp.php:225
|
965 |
-
#, php-format
|
966 |
-
msgid "Connected to FTP server: %s"
|
967 |
-
msgstr "Verbunden mit dem FTP-Server: %s"
|
968 |
-
|
969 |
-
# @ backwpup
|
970 |
-
#: ../inc/class-destination-ftp.php:227
|
971 |
-
#, php-format
|
972 |
-
msgid "Cannot connect to FTP server: %s"
|
973 |
-
msgstr "Kann nicht mit dem FTP-Server verbinden: %s"
|
974 |
-
|
975 |
-
# @ backwpup
|
976 |
-
#: ../inc/class-destination-ftp.php:234
|
977 |
-
#: ../inc/class-destination-ftp.php:242
|
978 |
-
#: ../inc/class-destination-ftp.php:253
|
979 |
-
#: ../inc/class-destination-ftp.php:300
|
980 |
-
#, php-format
|
981 |
-
msgid "FTP client command: %s"
|
982 |
-
msgstr "FTP-Client-Befehl: %s"
|
983 |
-
|
984 |
-
# @ backwpup
|
985 |
-
#: ../inc/class-destination-ftp.php:236
|
986 |
-
#, php-format
|
987 |
-
msgid "FTP server response: %s"
|
988 |
-
msgstr "FTP-Server Antwort: %s"
|
989 |
-
|
990 |
-
# @ backwpup
|
991 |
-
#: ../inc/class-destination-ftp.php:240
|
992 |
-
#: ../inc/class-destination-ftp.php:244
|
993 |
-
#: ../inc/class-destination-ftp.php:256
|
994 |
-
#: ../inc/class-destination-ftp.php:258
|
995 |
-
#: ../inc/class-destination-ftp.php:303
|
996 |
-
#: ../inc/class-destination-ftp.php:305
|
997 |
-
#: ../inc/class-destination-ftp.php:309
|
998 |
-
#: ../inc/class-destination-ftp.php:311
|
999 |
-
#, php-format
|
1000 |
-
msgid "FTP server reply: %s"
|
1001 |
-
msgstr "Antwort des FTP-Servers: %s"
|
1002 |
-
|
1003 |
-
# @ backwpup
|
1004 |
-
#: ../inc/class-destination-ftp.php:258
|
1005 |
-
msgid "Error getting SYSTYPE"
|
1006 |
-
msgstr "Fehler, SYSTYPE wird angezeigt"
|
1007 |
-
|
1008 |
-
# @ backwpup
|
1009 |
-
#: ../inc/class-destination-ftp.php:276
|
1010 |
-
#, php-format
|
1011 |
-
msgid "FTP Folder \"%s\" created!"
|
1012 |
-
msgstr "FTP-Ordner \"%s\" erstellt!"
|
1013 |
-
|
1014 |
-
# @ backwpup
|
1015 |
-
#: ../inc/class-destination-ftp.php:280
|
1016 |
-
#, php-format
|
1017 |
-
msgid "FTP Folder \"%s\" cannot be created!"
|
1018 |
-
msgstr "FTP-Ordner \"%s\" kann nicht erstellt werden!"
|
1019 |
-
|
1020 |
-
# @ backwpup
|
1021 |
-
#: ../inc/class-destination-ftp.php:291
|
1022 |
-
#, php-format
|
1023 |
-
msgid "FTP current folder is: %s"
|
1024 |
-
msgstr "Aktueller FTP-Ordner ist: %s"
|
1025 |
-
|
1026 |
-
# @ backwpup
|
1027 |
-
#: ../inc/class-destination-ftp.php:303
|
1028 |
-
msgid "Entering passive mode"
|
1029 |
-
msgstr "Passivmodus gestartet"
|
1030 |
-
|
1031 |
-
# @ backwpup
|
1032 |
-
#: ../inc/class-destination-ftp.php:305
|
1033 |
-
msgid "Cannot enter passive mode"
|
1034 |
-
msgstr "Starten des passiven Modus’ nicht möglich"
|
1035 |
-
|
1036 |
-
# @ backwpup
|
1037 |
-
#: ../inc/class-destination-ftp.php:309
|
1038 |
-
msgid "Entering normal mode"
|
1039 |
-
msgstr "Starte Normalmodus"
|
1040 |
-
|
1041 |
-
# @ backwpup
|
1042 |
-
#: ../inc/class-destination-ftp.php:311
|
1043 |
-
msgid "Cannot enter normal mode"
|
1044 |
-
msgstr "Normalmodus kann nicht gestartet werden"
|
1045 |
-
|
1046 |
-
# @ backwpup
|
1047 |
-
#: ../inc/class-destination-ftp.php:315
|
1048 |
-
msgid "Starting upload to FTP  …"
|
1049 |
-
msgstr "Hochladen ins FTP-Verzeichnis hat begonnen …"
|
1050 |
-
|
1051 |
-
# @ backwpup
|
1052 |
-
#: ../inc/class-destination-ftp.php:327
|
1053 |
-
msgid "Cannot transfer backup to FTP server!"
|
1054 |
-
msgstr "Backup kann nicht zum FTP-Server übertragen werden!"
|
1055 |
-
|
1056 |
-
# @ backwpup
|
1057 |
-
#: ../inc/class-destination-ftp.php:333
|
1058 |
-
#, php-format
|
1059 |
-
msgid "Backup transferred to FTP server: %s"
|
1060 |
-
msgstr "Backup Archiv übertragen zum FTP-Server: %s"
|
1061 |
-
|
1062 |
-
# @ backwpup
|
1063 |
-
#: ../inc/class-destination-ftp.php:379
|
1064 |
-
#, php-format
|
1065 |
-
msgid "Cannot delete \"%s\" on FTP server!"
|
1066 |
-
msgstr "Kann \"%s\" auf dem FTP-Server nicht löschen!"
|
1067 |
-
|
1068 |
-
# @ backwpup
|
1069 |
-
#: ../inc/class-destination-ftp.php:382
|
1070 |
-
#, php-format
|
1071 |
-
msgid "One file deleted on FTP server"
|
1072 |
-
msgid_plural "%d files deleted on FTP server"
|
1073 |
-
msgstr[0] "Eine Datei vom FTP-Server gelöscht"
|
1074 |
-
msgstr[1] "%d Dateien vom FTP-Server gelöscht"
|
1075 |
-
|
1076 |
-
# @ backwpup
|
1077 |
-
#: ../inc/class-jobtype-file.php:15
|
1078 |
-
msgid "Files"
|
1079 |
-
msgstr "Dateien"
|
1080 |
-
|
1081 |
-
# @ backwpup
|
1082 |
-
#: ../inc/class-jobtype-file.php:16
|
1083 |
-
msgid "File backup"
|
1084 |
-
msgstr "Dateien Backup"
|
1085 |
-
|
1086 |
-
# @ backwpup
|
1087 |
-
#: ../inc/class-jobtype-file.php:64
|
1088 |
-
msgid "Folders to backup"
|
1089 |
-
msgstr "Zu sichernde Verzeichnisse"
|
1090 |
-
|
1091 |
-
# @ backwpup
|
1092 |
-
#: ../inc/class-jobtype-file.php:68
|
1093 |
-
msgid "Backup root folder"
|
1094 |
-
msgstr "Root Verzeichnis sichern"
|
1095 |
-
|
1096 |
-
# @ backwpup
|
1097 |
-
#: ../inc/class-jobtype-file.php:79
|
1098 |
-
#: ../inc/class-jobtype-file.php:116
|
1099 |
-
#: ../inc/class-jobtype-file.php:153
|
1100 |
-
#: ../inc/class-jobtype-file.php:190
|
1101 |
-
#: ../inc/class-jobtype-file.php:227
|
1102 |
-
#, php-format
|
1103 |
-
msgid "Path as set by user (symlink?): %s"
|
1104 |
-
msgstr "Pfad, wie vom User gesetzt (symlink?): %s"
|
1105 |
-
|
1106 |
-
# @ backwpup
|
1107 |
-
#: ../inc/class-jobtype-file.php:82
|
1108 |
-
#: ../inc/class-jobtype-file.php:119
|
1109 |
-
#: ../inc/class-jobtype-file.php:156
|
1110 |
-
#: ../inc/class-jobtype-file.php:193
|
1111 |
-
#: ../inc/class-jobtype-file.php:230
|
1112 |
-
msgid "Exclude:"
|
1113 |
-
msgstr "Ausschließen:"
|
1114 |
-
|
1115 |
-
# @ backwpup
|
1116 |
-
#: ../inc/class-jobtype-file.php:93
|
1117 |
-
#: ../inc/class-jobtype-file.php:130
|
1118 |
-
#: ../inc/class-jobtype-file.php:167
|
1119 |
-
#: ../inc/class-jobtype-file.php:204
|
1120 |
-
#: ../inc/class-jobtype-file.php:241
|
1121 |
-
msgid "Excluded by .donotbackup file!"
|
1122 |
-
msgstr "Ausgeschlossen durch .donotbackup Datei!"
|
1123 |
-
|
1124 |
-
# @ backwpup
|
1125 |
-
#: ../inc/class-jobtype-file.php:105
|
1126 |
-
msgid "Backup content folder"
|
1127 |
-
msgstr "Sicherung des Content Verzeichnisses"
|
1128 |
-
|
1129 |
-
# @ backwpup
|
1130 |
-
#: ../inc/class-jobtype-file.php:142
|
1131 |
-
msgid "Backup plugins"
|
1132 |
-
msgstr "Plugins sichern"
|
1133 |
-
|
1134 |
-
# @ backwpup
|
1135 |
-
#: ../inc/class-jobtype-file.php:179
|
1136 |
-
msgid "Backup themes"
|
1137 |
-
msgstr "Themes sichern"
|
1138 |
-
|
1139 |
-
# @ backwpup
|
1140 |
-
#: ../inc/class-jobtype-file.php:216
|
1141 |
-
msgid "Backup uploads folder"
|
1142 |
-
msgstr "Uploads Verzeichnis sichern"
|
1143 |
-
|
1144 |
-
# @ backwpup
|
1145 |
-
#: ../inc/class-jobtype-file.php:253
|
1146 |
-
msgid "Extra folders to backup"
|
1147 |
-
msgstr "Weitere Verzeichnisse sichern"
|
1148 |
-
|
1149 |
-
# @ backwpup
|
1150 |
-
#: ../inc/class-jobtype-file.php:260
|
1151 |
-
msgid "Exclude from backup"
|
1152 |
-
msgstr "Nicht mitsichern"
|
1153 |
-
|
1154 |
-
# @ backwpup
|
1155 |
-
#: ../inc/class-jobtype-file.php:264
|
1156 |
-
msgid "Thumbnails in uploads"
|
1157 |
-
msgstr "Thumbnails in uploads"
|
1158 |
-
|
1159 |
-
# @ backwpup
|
1160 |
-
#: ../inc/class-jobtype-file.php:268
|
1161 |
-
msgid "Don't backup thumbnails from the site's uploads folder."
|
1162 |
-
msgstr "Thumbnails im Uploads-Verzeichnis der Website nicht mitsichern."
|
1163 |
-
|
1164 |
-
# @ backwpup
|
1165 |
-
#: ../inc/class-jobtype-file.php:268
|
1166 |
-
msgid "All images with -???x???. will be excluded. Use a plugin like Regenerate Thumbnails to rebuild them after a restore."
|
1167 |
-
msgstr "Alle Bilder mit -???x??? im Dateinamen werden nicht mitgesichert. Benutze ein Plugin wir Regenerate Thumbnails um die Thumbnails wiederherzustellen."
|
1168 |
-
|
1169 |
-
# @ backwpup
|
1170 |
-
#: ../inc/class-jobtype-file.php:272
|
1171 |
-
msgid "Exclude files/folders from backup"
|
1172 |
-
msgstr "Datein/Verzeichnisse nicht mitsichern."
|
1173 |
-
|
1174 |
-
# @ backwpup
|
1175 |
-
#: ../inc/class-jobtype-file.php:279
|
1176 |
-
msgid "Special option"
|
1177 |
-
msgstr "Spezialoption"
|
1178 |
-
|
1179 |
-
# @ backwpup
|
1180 |
-
#: ../inc/class-jobtype-file.php:283
|
1181 |
-
msgid "Include special files"
|
1182 |
-
msgstr "Spezielle Dateien einschließen"
|
1183 |
-
|
1184 |
-
# @ backwpup
|
1185 |
-
#: ../inc/class-jobtype-file.php:287
|
1186 |
-
msgid "Backup wp-config.php, robots.txt, .htaccess, .htpasswd and favicon.ico from root."
|
1187 |
-
msgstr "Sichere wp-config.php, robots.txt, .htaccess, .htpasswd und favicon.ico vom Root"
|
1188 |
-
|
1189 |
-
# @ backwpup
|
1190 |
-
#: ../inc/class-jobtype-file.php:287
|
1191 |
-
msgid "If the WordPress root folder is not included in this backup job, check this option to additionally include wp-config.php, robots.txt, .htaccess, .htpasswd and favicon.ico into the backup. Your wp-config.php will be included even if you placed it in the parent directory of your root folder."
|
1192 |
-
msgstr "Sofern das WordPress-Wurzelverzeichnis nicht sowieso im Backup inkludiert ist, aktiviere diese Option, um zusätzlich die Dateien wp-config.php, robots.txt, .htaccess, .htpasswd und favicon.ico mitzusichern. Die wp-config-php-Datei wird in diesem Fall auch dann mitgesichert, wenn sie sich eine Ordner-Ebene höher als WordPress befindet."
|
1193 |
-
|
1194 |
-
# @ backwpup
|
1195 |
-
#: ../inc/class-jobtype-file.php:364
|
1196 |
-
#, php-format
|
1197 |
-
msgid "%d. Trying to make a list of folders to back up …"
|
1198 |
-
msgstr "%d. Versuche, eine Liste der Ordner für das Backup zu erstellen …"
|
1199 |
-
|
1200 |
-
# @ backwpup
|
1201 |
-
#: ../inc/class-jobtype-file.php:483
|
1202 |
-
#: ../inc/class-jobtype-file.php:490
|
1203 |
-
#: ../inc/class-jobtype-file.php:497
|
1204 |
-
#: ../inc/class-jobtype-file.php:503
|
1205 |
-
#: ../inc/class-jobtype-file.php:509
|
1206 |
-
#: ../inc/class-jobtype-file.php:515
|
1207 |
-
#, php-format
|
1208 |
-
msgid "Added \"%s\" to backup file list"
|
1209 |
-
msgstr "\"%s\" zur Backup-Datei-Liste hinzugefügt."
|
1210 |
-
|
1211 |
-
# @ backwpup
|
1212 |
-
#: ../inc/class-jobtype-file.php:520
|
1213 |
-
msgid "No files/folder for the backup."
|
1214 |
-
msgstr "Keine Dateien/Ordner für das Backup."
|
1215 |
-
|
1216 |
-
# @ backwpup
|
1217 |
-
#: ../inc/class-jobtype-file.php:522
|
1218 |
-
#, php-format
|
1219 |
-
msgid "%1$d folders to backup."
|
1220 |
-
msgstr "%1$d Ordner für Backup."
|
1221 |
-
|
1222 |
-
# @ backwpup
|
1223 |
-
#: ../inc/class-jobtype-file.php:561
|
1224 |
-
#, php-format
|
1225 |
-
msgid "Folder \"%s\" is not readable!"
|
1226 |
-
msgstr "Ordner \"%s\" ist nicht lesbar!"
|
1227 |
-
|
1228 |
-
# @ backwpup
|
1229 |
-
#: ../inc/class-create-archive.php:71
|
1230 |
-
msgid "The file name of an archive cannot be empty."
|
1231 |
-
msgstr "Der Dateiname eines Archivs kann nicht leer sein."
|
1232 |
-
|
1233 |
-
# @ backwpup
|
1234 |
-
#: ../inc/class-create-archive.php:79
|
1235 |
-
#, php-format
|
1236 |
-
msgctxt "%s = Folder name"
|
1237 |
-
msgid "Folder %s for archive not found"
|
1238 |
-
msgstr "Ordner %s für Archiv nicht gefunden"
|
1239 |
-
|
1240 |
-
# @ backwpup
|
1241 |
-
#: ../inc/class-create-archive.php:85
|
1242 |
-
#: ../inc/class-create-archive.php:120
|
1243 |
-
#: ../inc/class-create-archive.php:137
|
1244 |
-
#: ../inc/class-mysqldump.php:125
|
1245 |
-
msgid "Functions for gz compression not available"
|
1246 |
-
msgstr "Die Funktionen für die Gzip-Kompression sind nicht verfügbar."
|
1247 |
-
|
1248 |
-
# @ backwpup
|
1249 |
-
#: ../inc/class-create-archive.php:92
|
1250 |
-
#: ../inc/class-create-archive.php:143
|
1251 |
-
msgid "Functions for bz2 compression not available"
|
1252 |
-
msgstr "Die Funktionen für die Bz2-Kompression sind nicht verfügbar."
|
1253 |
-
|
1254 |
-
# @ backwpup
|
1255 |
-
#: ../inc/class-create-archive.php:116
|
1256 |
-
#, php-format
|
1257 |
-
msgctxt "ZipArchive open() result"
|
1258 |
-
msgid "Cannot create zip archive: %d"
|
1259 |
-
msgstr "Konte ZIP-Datei %d nicht erstellen"
|
1260 |
-
|
1261 |
-
# @ backwpup
|
1262 |
-
#: ../inc/class-create-archive.php:149
|
1263 |
-
#, php-format
|
1264 |
-
msgctxt "%s = file name"
|
1265 |
-
msgid "Method to archive file %s not detected"
|
1266 |
-
msgstr "Methode zum Archivieren der Datei %s nicht gefunden"
|
1267 |
-
|
1268 |
-
# @ backwpup
|
1269 |
-
#: ../inc/class-create-archive.php:154
|
1270 |
-
msgid "Cannot open archive file"
|
1271 |
-
msgstr "Kann Archivdatei nicht öffnen"
|
1272 |
-
|
1273 |
-
# @ backwpup
|
1274 |
-
#: ../inc/class-create-archive.php:174
|
1275 |
-
#: ../inc/class-create-archive.php:349
|
1276 |
-
#, php-format
|
1277 |
-
msgid "PclZip archive add error: %s"
|
1278 |
-
msgstr "Fehler beim Hinzufügen zum PclZip-Archive: %s"
|
1279 |
-
|
1280 |
-
# @ backwpup
|
1281 |
-
#: ../inc/class-create-archive.php:189
|
1282 |
-
msgid "ZIP archive cannot be closed correctly."
|
1283 |
-
msgstr "ZIP-Archiv kann nicht korrekt geschlossen werden."
|
1284 |
-
|
1285 |
-
# @ backwpup
|
1286 |
-
#: ../inc/class-create-archive.php:244
|
1287 |
-
msgid "File name cannot be empty"
|
1288 |
-
msgstr "Der Dateiname kann nicht leer sein."
|
1289 |
-
|
1290 |
-
# @ backwpup
|
1291 |
-
#: ../inc/class-create-archive.php:253
|
1292 |
-
#, php-format
|
1293 |
-
msgctxt "File to add to archive"
|
1294 |
-
msgid "File %s does not exist or is not readable"
|
1295 |
-
msgstr "Datei %s existiert nicht oder ist nicht lesbar"
|
1296 |
-
|
1297 |
-
# @ backwpup
|
1298 |
-
#: ../inc/class-create-archive.php:266
|
1299 |
-
#: ../inc/class-create-archive.php:282
|
1300 |
-
#: ../inc/class-create-archive.php:392
|
1301 |
-
#: ../inc/class-create-archive.php:396
|
1302 |
-
msgid "This archive method can only add one file"
|
1303 |
-
msgstr "Diese Archive-Methode kann nur eine einziges Datei sichern."
|
1304 |
-
|
1305 |
-
# @ backwpup
|
1306 |
-
#: ../inc/class-create-archive.php:271
|
1307 |
-
#: ../inc/class-create-archive.php:287
|
1308 |
-
#, php-format
|
1309 |
-
msgid "Cannot open source file %s to archive"
|
1310 |
-
msgstr "Konnte Quelle %s zum Archivieren nicht öffnen"
|
1311 |
-
|
1312 |
-
# @ backwpup
|
1313 |
-
#: ../inc/class-create-archive.php:311
|
1314 |
-
msgid "ZipArchive can not closed correctly"
|
1315 |
-
msgstr "ZIP-Archive kann nicht korrekt geschlossen werden"
|
1316 |
-
|
1317 |
-
# @ backwpup
|
1318 |
-
#: ../inc/class-create-archive.php:330
|
1319 |
-
#: ../inc/class-create-archive.php:338
|
1320 |
-
#: ../inc/class-create-archive.php:407
|
1321 |
-
#, php-format
|
1322 |
-
msgid "Cannot add \"%s\" to zip archive!"
|
1323 |
-
msgstr "\"%s\" kann dem ZIP-Archiv nicht hinzugefügt werden!"
|
1324 |
-
|
1325 |
-
# @ backwpup
|
1326 |
-
#: ../inc/class-create-archive.php:374
|
1327 |
-
msgid "Folder name cannot be empty"
|
1328 |
-
msgstr "Der Verzeichnis Name darf nicht leer sein"
|
1329 |
-
|
1330 |
-
# @ backwpup
|
1331 |
-
#: ../inc/class-create-archive.php:379
|
1332 |
-
#, php-format
|
1333 |
-
msgctxt "Folder path to add to archive"
|
1334 |
-
msgid "Folder %s does not exist or is not readable"
|
1335 |
-
msgstr "Verzeichnis %s existiert nicht oder ist nicht lesbar"
|
1336 |
-
|
1337 |
-
# @ backwpup
|
1338 |
-
#: ../inc/class-create-archive.php:429
|
1339 |
-
#, php-format
|
1340 |
-
msgctxt "Text of ZipArchive status Message"
|
1341 |
-
msgid "ZipArchive returns status: %s"
|
1342 |
-
msgstr "Das Zip-Archive liefert den Status: %s"
|
1343 |
-
|
1344 |
-
# @ backwpup
|
1345 |
-
#: ../inc/class-create-archive.php:459
|
1346 |
-
#, php-format
|
1347 |
-
msgid "File name \"%1$s\" is too long to be saved correctly in %2$s archive!"
|
1348 |
-
msgstr "Dateiname \"%1$s\" ist zu lang, um korrekt im %2$s Archiv zu speichern."
|
1349 |
-
|
1350 |
-
# @ backwpup
|
1351 |
-
#: ../inc/class-create-archive.php:462
|
1352 |
-
#, php-format
|
1353 |
-
msgid "File path \"%1$s\" is too long to be saved correctly in %2$s archive!"
|
1354 |
-
msgstr "Dateipfad \"%1$s\" ist zu lang, um korrekt in %2$s Archiv zu speichern"
|
1355 |
-
|
1356 |
-
# @ backwpup
|
1357 |
-
#: ../inc/class-create-archive.php:474
|
1358 |
-
#, php-format
|
1359 |
-
msgid "Cannot open source file %s for archiving"
|
1360 |
-
msgstr "Kann Quelldatei %s nicht zum Archivieren öffnen"
|
1361 |
-
|
1362 |
-
# @ backwpup
|
1363 |
-
#: ../inc/class-create-archive.php:479
|
1364 |
-
#: ../inc/class-create-archive.php:480
|
1365 |
-
#: ../inc/class-create-archive.php:579
|
1366 |
-
#: ../inc/class-create-archive.php:580
|
1367 |
-
msgid "Unknown"
|
1368 |
-
msgstr "Unbekannt"
|
1369 |
-
|
1370 |
-
# @ backwpup
|
1371 |
-
#: ../inc/class-create-archive.php:570
|
1372 |
-
#, php-format
|
1373 |
-
msgid "Folder name \"%1$s\" is too long to be saved correctly in %2$s archive!"
|
1374 |
-
msgstr "Verzeichnis Name \"%1$s\" ist zu lang um ihn koreckt zu speichern im %2$s Archiv"
|
1375 |
-
|
1376 |
-
# @ backwpup
|
1377 |
-
#: ../inc/class-create-archive.php:573
|
1378 |
-
#, php-format
|
1379 |
-
msgid "Folder path \"%1$s\" is too long to be saved correctly in %2$s archive!"
|
1380 |
-
msgstr "Verzeichnis Pfad \"%1$s\" ist zu lang um ihn koreckt zu speichern im %2$s Archiv"
|
1381 |
-
|
1382 |
-
# @ backwpup
|
1383 |
-
#: ../inc/class-create-archive.php:651
|
1384 |
-
#, php-format
|
1385 |
-
msgid "If %s will be added to your backup archive, the archive will be too large for many file systems (over 2GB). You might want to consider splitting the backup job in multiple jobs with less files each."
|
1386 |
-
msgstr "Wenn %s zu deinem Backup-Archiv hinzugefügt wird, wird das Archiv zu groß für etliche Dateisysteme (über 2GB). Vielleicht möchtest du den Backup-Auftrag in mehrere Aufträge mit jeweils weniger Dateien splitten?"
|
1387 |
-
|
1388 |
-
# @ backwpup
|
1389 |
-
#: ../inc/class-cron.php:62
|
1390 |
-
msgid "Aborted, because no progress for one hour!"
|
1391 |
-
msgstr "Abgebrochen, aufgrund keines Fortschrittes innerhalb der letzten Stunde!"
|
1392 |
-
|
1393 |
-
# @ backwpup
|
1394 |
-
#: ../inc/class-page-backups.php:173
|
1395 |
-
msgid "No files could be found. (List will be generated during next backup.)"
|
1396 |
-
msgstr "Keine Dateien gefunden. (Liste wird beim nächsten Backup generiert.)"
|
1397 |
-
|
1398 |
-
# @ backwpup
|
1399 |
-
#: ../inc/class-page-backups.php:185
|
1400 |
-
#: ../inc/class-page-backups.php:304
|
1401 |
-
#: ../inc/class-page-logs.php:114
|
1402 |
-
#: ../inc/class-page-logs.php:192
|
1403 |
-
msgid "Delete"
|
1404 |
-
msgstr "Löschen"
|
1405 |
-
|
1406 |
-
# @ backwpup
|
1407 |
-
#: ../inc/class-page-backups.php:219
|
1408 |
-
msgid "Change destination"
|
1409 |
-
msgstr "Ziel ändern"
|
1410 |
-
|
1411 |
-
# @ backwpup
|
1412 |
-
#: ../inc/class-page-backups.php:258
|
1413 |
-
#: ../inc/class-page-logs.php:125
|
1414 |
-
msgid "Time"
|
1415 |
-
msgstr "Zeit"
|
1416 |
-
|
1417 |
-
# @ backwpup
|
1418 |
-
#: ../inc/class-page-backups.php:259
|
1419 |
-
msgid "File"
|
1420 |
-
msgstr "Datei"
|
1421 |
-
|
1422 |
-
# @ backwpup
|
1423 |
-
#: ../inc/class-page-backups.php:261
|
1424 |
-
#: ../inc/class-page-logs.php:129
|
1425 |
-
msgid "Size"
|
1426 |
-
msgstr "Größe"
|
1427 |
-
|
1428 |
-
# @ backwpup
|
1429 |
-
#: ../inc/class-page-backups.php:304
|
1430 |
-
msgid ""
|
1431 |
-
"You are about to delete this backup archive. \n"
|
1432 |
-
" 'Cancel' to stop, 'OK' to delete."
|
1433 |
-
msgstr ""
|
1434 |
-
"Sie sind dabei dieses Backup Archiv zu löschen. \n"
|
1435 |
-
" 'Abbrechen' um zu stoppen, 'OK' um zu löschen."
|
1436 |
-
|
1437 |
-
# @ backwpup
|
1438 |
-
#: ../inc/class-page-backups.php:306
|
1439 |
-
#: ../inc/class-page-logs.php:193
|
1440 |
-
msgid "Download"
|
1441 |
-
msgstr "Herunterladen"
|
1442 |
-
|
1443 |
-
# @ backwpup
|
1444 |
-
#: ../inc/class-page-backups.php:335
|
1445 |
-
msgid "?"
|
1446 |
-
msgstr "?"
|
1447 |
-
|
1448 |
-
# @ backwpup
|
1449 |
-
#: ../inc/class-page-backups.php:348
|
1450 |
-
#: ../inc/class-page-logs.php:153
|
1451 |
-
#, php-format
|
1452 |
-
msgid "%1$s at %2$s"
|
1453 |
-
msgstr "%1$s um %2$s"
|
1454 |
-
|
1455 |
-
# @ backwpup
|
1456 |
-
#: ../inc/class-page-backups.php:365
|
1457 |
-
#: ../inc/class-page-backups.php:392
|
1458 |
-
msgid "Sorry, you don't have permissions to do that."
|
1459 |
-
msgstr "Sie haben nicht die notwendigen Berechtigungen für diese Aktion."
|
1460 |
-
|
1461 |
-
# @ backwpup
|
1462 |
-
#: ../inc/class-page-backups.php:413
|
1463 |
-
msgid "Backup Files"
|
1464 |
-
msgstr "Backup-Dateien"
|
1465 |
-
|
1466 |
-
# @ backwpup
|
1467 |
-
#: ../inc/class-page-backups.php:461
|
1468 |
-
#, php-format
|
1469 |
-
msgid "%s Manage Backup Archives"
|
1470 |
-
msgstr "%s Sicherungsarchive verwalten"
|
1471 |
-
|
1472 |
-
# @ backwpup
|
1473 |
-
#: ../inc/class-wp-cli.php:17
|
1474 |
-
msgid "A job is already running."
|
1475 |
-
msgstr "Ein Auftrag läuft gerade."
|
1476 |
-
|
1477 |
-
# @ backwpup
|
1478 |
-
#: ../inc/class-wp-cli.php:20
|
1479 |
-
msgid "No job ID specified!"
|
1480 |
-
msgstr "Keine Auftragsnummer angegeben!"
|
1481 |
-
|
1482 |
-
# @ backwpup
|
1483 |
-
#: ../inc/class-wp-cli.php:24
|
1484 |
-
msgid "Job ID does not exist!"
|
1485 |
-
msgstr "Auftragsnummer existiert nicht!"
|
1486 |
-
|
1487 |
-
# @ backwpup
|
1488 |
-
#: ../inc/class-wp-cli.php:38
|
1489 |
-
msgid "Nothing to abort!"
|
1490 |
-
msgstr "Es gibt nichts abzubrechen!"
|
1491 |
-
|
1492 |
-
# @ backwpup
|
1493 |
-
#: ../inc/class-wp-cli.php:42
|
1494 |
-
msgid "Job will be terminated."
|
1495 |
-
msgstr "Auftrag wird beendet."
|
1496 |
-
|
1497 |
-
# @ backwpup
|
1498 |
-
#: ../inc/class-wp-cli.php:54
|
1499 |
-
msgid "List of jobs"
|
1500 |
-
msgstr "Auftragsliste"
|
1501 |
-
|
1502 |
-
# @ backwpup
|
1503 |
-
#: ../inc/class-wp-cli.php:57
|
1504 |
-
#: ../inc/class-wp-cli.php:76
|
1505 |
-
#, php-format
|
1506 |
-
msgid "ID: %1$d Name: %2$s"
|
1507 |
-
msgstr "ID: %1$d Name: %2$s"
|
1508 |
-
|
1509 |
-
# @ backwpup
|
1510 |
-
#: ../inc/class-wp-cli.php:73
|
1511 |
-
msgid "No job running"
|
1512 |
-
msgstr "Kein laufender Auftrag"
|
1513 |
-
|
1514 |
-
# @ backwpup
|
1515 |
-
#: ../inc/class-wp-cli.php:74
|
1516 |
-
msgid "Running job"
|
1517 |
-
msgstr "Laufender Auftrag"
|
1518 |
-
|
1519 |
-
# @ backwpup
|
1520 |
-
#: ../inc/class-wp-cli.php:77
|
1521 |
-
#, php-format
|
1522 |
-
msgid "Warnings: %1$d Errors: %2$d"
|
1523 |
-
msgstr "Warnungen: %1$d Fehler: %2$d"
|
1524 |
-
|
1525 |
-
# @ backwpup
|
1526 |
-
#: ../inc/class-wp-cli.php:78
|
1527 |
-
#, php-format
|
1528 |
-
msgid "Steps in percent: %1$d percent of step: %2$d"
|
1529 |
-
msgstr "Schritte in Prozent: %1$d Prozent des Schritts: %2$d"
|
1530 |
-
|
1531 |
-
# @ backwpup
|
1532 |
-
#: ../inc/class-wp-cli.php:79
|
1533 |
-
#, php-format
|
1534 |
-
msgid "On step: %s"
|
1535 |
-
msgstr "Bei Schritt: %s"
|
1536 |
-
|
1537 |
-
# @ backwpup
|
1538 |
-
#: ../inc/class-wp-cli.php:80
|
1539 |
-
#, php-format
|
1540 |
-
msgid "Last message: %s"
|
1541 |
-
msgstr "Letzte Nachricht: %s"
|
1542 |
-
|
1543 |
-
# @ backwpup
|
1544 |
-
#: ../inc/class-option.php:102
|
1545 |
-
msgid "New Job"
|
1546 |
-
msgstr "Bitte geben Sie einen Namen ein"
|
1547 |
-
|
1548 |
-
# @ backwpup
|
1549 |
-
#: ../inc/class-page-logs.php:102
|
1550 |
-
msgid "No Logs."
|
1551 |
-
msgstr "Keine Protokolldateien."
|
1552 |
-
|
1553 |
-
# @ backwpup
|
1554 |
-
#: ../inc/class-page-logs.php:126
|
1555 |
-
msgid "Job"
|
1556 |
-
msgstr "Auftrag"
|
1557 |
-
|
1558 |
-
# @ backwpup
|
1559 |
-
#: ../inc/class-page-logs.php:127
|
1560 |
-
msgid "Status"
|
1561 |
-
msgstr "Status"
|
1562 |
-
|
1563 |
-
# @ backwpup
|
1564 |
-
#: ../inc/class-page-logs.php:128
|
1565 |
-
msgid "Type"
|
1566 |
-
msgstr "Typ"
|
1567 |
-
|
1568 |
-
# @ backwpup
|
1569 |
-
#: ../inc/class-page-logs.php:130
|
1570 |
-
msgid "Runtime"
|
1571 |
-
msgstr "Laufzeit"
|
1572 |
-
|
1573 |
-
# @ backwpup
|
1574 |
-
#: ../inc/class-page-logs.php:188
|
1575 |
-
#, php-format
|
1576 |
-
msgid "Job ID: %d"
|
1577 |
-
msgstr "Auftrags-ID: %d"
|
1578 |
-
|
1579 |
-
# @ backwpup
|
1580 |
-
#: ../inc/class-page-logs.php:190
|
1581 |
-
msgid "View"
|
1582 |
-
msgstr "Ansehen"
|
1583 |
-
|
1584 |
-
# @ backwpup
|
1585 |
-
#: ../inc/class-page-logs.php:209
|
1586 |
-
#, php-format
|
1587 |
-
msgid "1 ERROR"
|
1588 |
-
msgid_plural "%d ERRORS"
|
1589 |
-
msgstr[0] "1 FEHLER"
|
1590 |
-
msgstr[1] "%d FEHLER"
|
1591 |
-
|
1592 |
-
# @ backwpup
|
1593 |
-
#: ../inc/class-page-logs.php:211
|
1594 |
-
#, php-format
|
1595 |
-
msgid "1 WARNING"
|
1596 |
-
msgid_plural "%d WARNINGS"
|
1597 |
-
msgstr[0] "1 WARNUNG"
|
1598 |
-
msgstr[1] "%d WARNUNGEN"
|
1599 |
-
|
1600 |
-
# @ backwpup
|
1601 |
-
#: ../inc/class-page-logs.php:213
|
1602 |
-
msgid "O.K."
|
1603 |
-
msgstr "O.K."
|
1604 |
-
|
1605 |
-
# @ backwpup
|
1606 |
-
#: ../inc/class-page-logs.php:230
|
1607 |
-
msgid "Log only"
|
1608 |
-
msgstr "Nur Log"
|
1609 |
-
|
1610 |
-
# @ backwpup
|
1611 |
-
#: ../inc/class-page-logs.php:301
|
1612 |
-
#: ../inc/class-admin.php:202
|
1613 |
-
msgid "Logs"
|
1614 |
-
msgstr "Protokolle"
|
1615 |
-
|
1616 |
-
# @ backwpup
|
1617 |
-
#: ../inc/class-page-logs.php:364
|
1618 |
-
#, php-format
|
1619 |
-
msgid "%s Logs"
|
1620 |
-
msgstr "%s Logs"
|
1621 |
-
|
1622 |
-
# @ backwpup
|
1623 |
-
#: ../inc/class-mysqldump.php:55
|
1624 |
-
msgid "No MySQLi extension found. Please install it."
|
1625 |
-
msgstr "Keine MySQLi Erweiterung gefunden. Bitte installieren Sie diese"
|
1626 |
-
|
1627 |
-
# @ backwpup
|
1628 |
-
#: ../inc/class-mysqldump.php:93
|
1629 |
-
msgid "Cannot init MySQLi database connection"
|
1630 |
-
msgstr "MySQLi Datenbank-Verbindung kann nicht initialisiert werden."
|
1631 |
-
|
1632 |
-
# @ backwpup
|
1633 |
-
#: ../inc/class-mysqldump.php:97
|
1634 |
-
#, php-format
|
1635 |
-
msgid "Setting of MySQLi init command \"%s\" failed"
|
1636 |
-
msgstr "Einstellung vom MySQLi Initialisierungsbefehl \"%s\" ist fehlgeschlagen"
|
1637 |
-
|
1638 |
-
# @ backwpup
|
1639 |
-
#: ../inc/class-mysqldump.php:101
|
1640 |
-
msgid "Setting of MySQLi connection timeout failed"
|
1641 |
-
msgstr "Einstellung von der MySQLi Verbindungs-Zeitüberschreitung ist fehlgeschlagen"
|
1642 |
-
|
1643 |
-
# @ backwpup
|
1644 |
-
#: ../inc/class-mysqldump.php:105
|
1645 |
-
#, php-format
|
1646 |
-
msgid "Cannot connect to MySQL database %1$d: %2$s"
|
1647 |
-
msgstr "Kann keine Verbindung zur Datenbank %1$d herstellen: %2$s"
|
1648 |
-
|
1649 |
-
# @ backwpup
|
1650 |
-
#: ../inc/class-mysqldump.php:111
|
1651 |
-
#, php-format
|
1652 |
-
msgctxt "Database Charset"
|
1653 |
-
msgid "Cannot set DB charset to %s"
|
1654 |
-
msgstr "Kann Datenbank-Zeichenkodierung nicht auf %s setzen."
|
1655 |
-
|
1656 |
-
# @ backwpup
|
1657 |
-
#: ../inc/class-mysqldump.php:138
|
1658 |
-
msgid "Cannot open SQL backup file"
|
1659 |
-
msgstr "Kann SQL Backup Datei nicht öffnen"
|
1660 |
-
|
1661 |
-
# @ backwpup
|
1662 |
-
#: ../inc/class-mysqldump.php:144
|
1663 |
-
#: ../inc/class-mysqldump.php:155
|
1664 |
-
#: ../inc/class-mysqldump.php:237
|
1665 |
-
#: ../inc/class-mysqldump.php:250
|
1666 |
-
#: ../inc/class-mysqldump.php:264
|
1667 |
-
#: ../inc/class-mysqldump.php:277
|
1668 |
-
#: ../inc/class-mysqldump.php:320
|
1669 |
-
#: ../inc/class-mysqldump.php:342
|
1670 |
-
#: ../inc/class-mysqldump.php:404
|
1671 |
-
#, php-format
|
1672 |
-
msgid "Database error %1$s for query %2$s"
|
1673 |
-
msgstr "Datenbankfehler %1$s für die Abfrage (Query) %2$s"
|
1674 |
-
|
1675 |
-
# @ backwpup
|
1676 |
-
#: ../inc/class-mysqldump.php:388
|
1677 |
-
#, php-format
|
1678 |
-
msgid "Start for table backup is not correctly set: %1$s "
|
1679 |
-
msgstr "Start für den Tabellen Backup ist nicht richtig gesetzt: %1$s "
|
1680 |
-
|
1681 |
-
# @ backwpup
|
1682 |
-
#: ../inc/class-mysqldump.php:392
|
1683 |
-
#, php-format
|
1684 |
-
msgid "Length for table backup is not correctly set: %1$s "
|
1685 |
-
msgstr "Länge des Tabellen Backups ist nicht richtig gesetzt: %1$s "
|
1686 |
-
|
1687 |
-
# @ backwpup
|
1688 |
-
#: ../inc/class-mysqldump.php:460
|
1689 |
-
msgid "Error while writing file!"
|
1690 |
-
msgstr "Fehler beim Schreiben!"
|
1691 |
-
|
1692 |
-
# @ backwpup
|
1693 |
-
#: ../inc/class-admin.php:137
|
1694 |
-
msgid "Documentation"
|
1695 |
-
msgstr "Dokumentation"
|
1696 |
-
|
1697 |
-
# @ backwpup
|
1698 |
-
#: ../inc/class-admin.php:154
|
1699 |
-
msgid "BackWPup Dashboard"
|
1700 |
-
msgstr "BackWPup Dashboard"
|
1701 |
-
|
1702 |
-
# @ backwpup
|
1703 |
-
#: ../inc/class-admin.php:154
|
1704 |
-
msgid "Dashboard"
|
1705 |
-
msgstr "Dashboard"
|
1706 |
-
|
1707 |
-
# @ backwpup
|
1708 |
-
#: ../inc/class-admin.php:171
|
1709 |
-
msgid "Jobs"
|
1710 |
-
msgstr "Aufträge"
|
1711 |
-
|
1712 |
-
# @ backwpup
|
1713 |
-
#: ../inc/class-admin.php:186
|
1714 |
-
msgid "Add new job"
|
1715 |
-
msgstr "Neuer Auftrag"
|
1716 |
-
|
1717 |
-
# @ backwpup
|
1718 |
-
#: ../inc/class-admin.php:217
|
1719 |
-
msgid "Backups"
|
1720 |
-
msgstr "Backups"
|
1721 |
-
|
1722 |
-
# @ backwpup
|
1723 |
-
#: ../inc/class-admin.php:232
|
1724 |
-
msgid "Settings"
|
1725 |
-
msgstr "Einstellungen"
|
1726 |
-
|
1727 |
-
# @ backwpup
|
1728 |
-
#: ../inc/class-admin.php:245
|
1729 |
-
msgid "About"
|
1730 |
-
msgstr "Über"
|
1731 |
-
|
1732 |
-
# @ backwpup
|
1733 |
-
#: ../inc/class-admin.php:282
|
1734 |
-
#: ../inc/class-admin.php:288
|
1735 |
-
msgid "Cheating, huh?"
|
1736 |
-
msgstr "Mogeln, wie?"
|
1737 |
-
|
1738 |
-
# @ backwpup
|
1739 |
-
#: ../inc/class-admin.php:400
|
1740 |
-
msgid "http://marketpress.com"
|
1741 |
-
msgstr "http://marketpress.com"
|
1742 |
-
|
1743 |
-
# @ backwpup
|
1744 |
-
#: ../inc/class-admin.php:400
|
1745 |
-
msgid "MarketPress"
|
1746 |
-
msgstr "MarketPress"
|
1747 |
-
|
1748 |
-
# @ backwpup
|
1749 |
-
#: ../inc/class-admin.php:402
|
1750 |
-
#, php-format
|
1751 |
-
msgid "<a class=\"backwpup-get-pro\" href=\"%s\">Get BackWPup Pro now.</a>"
|
1752 |
-
msgstr "<a class=\"backwpup-get-pro\" href=\"%s\">Wechsle jetzt zu BackWPup Pro.</a>"
|
1753 |
-
|
1754 |
-
# @ backwpup
|
1755 |
-
#: ../inc/class-admin.php:421
|
1756 |
-
#, php-format
|
1757 |
-
msgid "version %s"
|
1758 |
-
msgstr "Version %s"
|
1759 |
-
|
1760 |
-
# @ backwpup
|
1761 |
-
#: ../inc/class-admin.php:445
|
1762 |
-
#: ../inc/class-admin.php:545
|
1763 |
-
msgid "BackWPup Role"
|
1764 |
-
msgstr "BackWPup Rolle"
|
1765 |
-
|
1766 |
-
# @ backwpup
|
1767 |
-
#: ../inc/class-admin.php:449
|
1768 |
-
msgid "— No role for BackWPup —"
|
1769 |
-
msgstr "— Keine Rolle für BackWPup —"
|
1770 |
-
|
1771 |
-
# @ backwpup
|
1772 |
-
#: ../inc/class-admin.php:459
|
1773 |
-
msgid "Role that the user have on BackWPup"
|
1774 |
-
msgstr "Rolle die dieser Benutzer hat bei BackWPup"
|
1775 |
-
|
1776 |
-
# @ backwpup
|
1777 |
-
#: ../inc/class-admin.php:509
|
1778 |
-
#, php-format
|
1779 |
-
msgid "<strong>Important:</strong> before updating, please <a href=\"%1$s\">back up your database and files</a> with <a href=\"http://marketpress.de/product/backwpup-pro/\">%2$s</a>. For help with updates, visit the <a href=\"http://codex.wordpress.org/Updating_WordPress\">Updating WordPress</a> Codex page."
|
1780 |
-
msgstr "<strong>Wichtig:</strong> Bitte erstelle ein Backup <a href=\"%1$s\">von der Datenbank und den Dateien</a> mit <a href=\"http://marketpress.de/product/backwpup-pro/\">%2$s</a> vor der Installation dieses Plugins. Um Hilfe für die Updates zu erhalten, besuche bitte die <a href=\"http://codex.wordpress.org/Updating_WordPress\">Updating WordPress</a> Codex-Seite."
|
1781 |
-
|
1782 |
-
# @ backwpup
|
1783 |
-
#: ../inc/class-admin.php:512
|
1784 |
-
#: ../inc/class-admin.php:515
|
1785 |
-
#, php-format
|
1786 |
-
msgid "<strong>Important:</strong> before installing this plugin, please <a href=\"%1$s\">back up your database and files</a> with <a href=\"http://marketpress.de/product/backwpup-pro/\">%2$s</a>."
|
1787 |
-
msgstr "<strong>Wichtig:</strong> Bitte erstelle ein Backup <a href=\"%1$s\">von der Datenbank und den Dateien</a> mit <a href=\"http://marketpress.de/product/backwpup-pro/\">%2$s</a> vor der Installation dieses Plugins."
|
1788 |
-
|
1789 |
-
# @ backwpup
|
1790 |
-
#: ../inc/class-jobtype-wpexp.php:13
|
1791 |
-
msgid "XML export"
|
1792 |
-
msgstr "XML Export"
|
1793 |
-
|
1794 |
-
# @ backwpup
|
1795 |
-
#: ../inc/class-jobtype-wpexp.php:46
|
1796 |
-
msgid "Items to export"
|
1797 |
-
msgstr "Objekte zum Exportieren"
|
1798 |
-
|
1799 |
-
# @ backwpup
|
1800 |
-
#: ../inc/class-jobtype-wpexp.php:49
|
1801 |
-
msgid "All content"
|
1802 |
-
msgstr "Gesamter Inhalt"
|
1803 |
-
|
1804 |
-
# @ backwpup
|
1805 |
-
#: ../inc/class-jobtype-wpexp.php:50
|
1806 |
-
msgid "Posts"
|
1807 |
-
msgstr "Beiträge"
|
1808 |
-
|
1809 |
-
# @ backwpup
|
1810 |
-
#: ../inc/class-jobtype-wpexp.php:51
|
1811 |
-
msgid "Pages"
|
1812 |
-
msgstr "Seiten"
|
1813 |
-
|
1814 |
-
# @ backwpup
|
1815 |
-
#: ../inc/class-jobtype-wpexp.php:61
|
1816 |
-
msgid "XML Export file name"
|
1817 |
-
msgstr "XML Export Datei Name"
|
1818 |
-
|
1819 |
-
# @ backwpup
|
1820 |
-
#: ../inc/class-jobtype-wpexp.php:69
|
1821 |
-
msgid "File compression"
|
1822 |
-
msgstr "Dateikomprimierung"
|
1823 |
-
|
1824 |
-
# @ backwpup
|
1825 |
-
#: ../inc/class-jobtype-wpexp.php:75
|
1826 |
-
#: ../inc/class-jobtype-wpexp.php:77
|
1827 |
-
#: ../inc/class-jobtype-dbdump.php:105
|
1828 |
-
#: ../inc/class-jobtype-dbdump.php:107
|
1829 |
-
msgid "GZip"
|
1830 |
-
msgstr "GZip"
|
1831 |
-
|
1832 |
-
# @ backwpup
|
1833 |
-
#: ../inc/class-jobtype-wpexp.php:79
|
1834 |
-
#: ../inc/class-jobtype-wpexp.php:81
|
1835 |
-
msgid "BZip2"
|
1836 |
-
msgstr "BZip2"
|
1837 |
-
|
1838 |
-
# @ backwpup
|
1839 |
-
#: ../inc/class-jobtype-wpexp.php:111
|
1840 |
-
#, php-format
|
1841 |
-
msgid "%d. Trying to create a WordPress export to XML file …"
|
1842 |
-
msgstr "%d. Versuche, einen WordPress-Export als XML-Datei zu erstellen …"
|
1843 |
-
|
1844 |
-
# @ backwpup
|
1845 |
-
#: ../inc/class-jobtype-wpexp.php:126
|
1846 |
-
#, php-format
|
1847 |
-
msgid "WP Export: Post type “%s” does not allow export."
|
1848 |
-
msgstr "WP Export: Post-Type „%s“ erlaubt keinen Export."
|
1849 |
-
|
1850 |
-
# @ backwpup
|
1851 |
-
#: ../inc/class-jobtype-wpexp.php:171
|
1852 |
-
#: ../inc/class-jobtype-wpexp.php:185
|
1853 |
-
#: ../inc/class-jobtype-wpexp.php:214
|
1854 |
-
#: ../inc/class-jobtype-wpexp.php:235
|
1855 |
-
#: ../inc/class-jobtype-wpexp.php:268
|
1856 |
-
#: ../inc/class-jobtype-wpexp.php:288
|
1857 |
-
#: ../inc/class-jobtype-wpexp.php:377
|
1858 |
-
#: ../inc/class-jobtype-wpexp.php:386
|
1859 |
-
msgid "WP Export file could not written."
|
1860 |
-
msgstr "WP-Exportdatei konnte nicht geschrieben werden."
|
1861 |
-
|
1862 |
-
# @ backwpup
|
1863 |
-
#: ../inc/class-jobtype-wpexp.php:401
|
1864 |
-
msgid "Check WP Export file …"
|
1865 |
-
msgstr "Prüfe WP Export-Datei …"
|
1866 |
-
|
1867 |
-
# @ backwpup
|
1868 |
-
#: ../inc/class-jobtype-wpexp.php:421
|
1869 |
-
#, php-format
|
1870 |
-
msgid "XML WARNING (%s): %s"
|
1871 |
-
msgstr "XML WARNUNG (%s): %s"
|
1872 |
-
|
1873 |
-
# @ backwpup
|
1874 |
-
#: ../inc/class-jobtype-wpexp.php:424
|
1875 |
-
#, php-format
|
1876 |
-
msgid "XML RECOVERABLE (%s): %s"
|
1877 |
-
msgstr "XML RECOVERABLE (%s): %s"
|
1878 |
-
|
1879 |
-
# @ backwpup
|
1880 |
-
#: ../inc/class-jobtype-wpexp.php:427
|
1881 |
-
#, php-format
|
1882 |
-
msgid "XML ERROR (%s): %s"
|
1883 |
-
msgstr "XML FEHLER (%s): %s"
|
1884 |
-
|
1885 |
-
# @ backwpup
|
1886 |
-
#: ../inc/class-jobtype-wpexp.php:437
|
1887 |
-
msgid "There was an error when reading this WXR file"
|
1888 |
-
msgstr "Fehler beim Lesen der WXR Datei"
|
1889 |
-
|
1890 |
-
# @ backwpup
|
1891 |
-
#: ../inc/class-jobtype-wpexp.php:443
|
1892 |
-
#: ../inc/class-jobtype-wpexp.php:450
|
1893 |
-
msgid "This does not appear to be a WXR file, missing/invalid WXR version number"
|
1894 |
-
msgstr "Es scheint nicht eine WXR Datei zu sein. Fehlende/ungültige Versionsnummer"
|
1895 |
-
|
1896 |
-
# @ backwpup
|
1897 |
-
#: ../inc/class-jobtype-wpexp.php:459
|
1898 |
-
msgid "WP Export file is a valid WXR file."
|
1899 |
-
msgstr "WP Export-Datei ist eine gültige WXR Datei."
|
1900 |
-
|
1901 |
-
# @ backwpup
|
1902 |
-
#: ../inc/class-jobtype-wpexp.php:461
|
1903 |
-
msgid "WP Export file can not checked, because no XML extension loaded with the file can checked."
|
1904 |
-
msgstr "WP Export-Datei kann nicht geprüft werden, da keine XML Erweiterung geladen wurde."
|
1905 |
-
|
1906 |
-
# @ backwpup
|
1907 |
-
#: ../inc/class-jobtype-wpexp.php:473
|
1908 |
-
msgid "Compressing file …"
|
1909 |
-
msgstr "Komprimiere Datei …"
|
1910 |
-
|
1911 |
-
# @ backwpup
|
1912 |
-
#: ../inc/class-jobtype-wpexp.php:480
|
1913 |
-
msgid "Compressing done."
|
1914 |
-
msgstr "Komprimierung erledigt."
|
1915 |
-
|
1916 |
-
# @ backwpup
|
1917 |
-
#: ../inc/class-jobtype-wpexp.php:501
|
1918 |
-
#, php-format
|
1919 |
-
msgid "Added XML export \"%1$s\" with %2$s to backup file list."
|
1920 |
-
msgstr "XML Export \"%1$s\" mit %2$s zur Backup-Datei-Liste hinzugefügt"
|
1921 |
-
|
1922 |
-
# @ backwpup
|
1923 |
-
#: ../inc/class-job.php:180
|
1924 |
-
msgid "Starting job"
|
1925 |
-
msgstr "Auftrag starten"
|
1926 |
-
|
1927 |
-
# @ backwpup
|
1928 |
-
#: ../inc/class-job.php:199
|
1929 |
-
msgid "Job Start"
|
1930 |
-
msgstr "Auftragsstart"
|
1931 |
-
|
1932 |
-
# @ backwpup
|
1933 |
-
#: ../inc/class-job.php:219
|
1934 |
-
msgid "Creates manifest file"
|
1935 |
-
msgstr "Erstellt Manifest-Datei"
|
1936 |
-
|
1937 |
-
# @ backwpup
|
1938 |
-
#: ../inc/class-job.php:238
|
1939 |
-
msgid "Creates archive"
|
1940 |
-
msgstr "erstellt Archiv"
|
1941 |
-
|
1942 |
-
# @ backwpup
|
1943 |
-
#: ../inc/class-job.php:277
|
1944 |
-
msgid "End of Job"
|
1945 |
-
msgstr "Auftragsende"
|
1946 |
-
|
1947 |
-
# @ backwpup
|
1948 |
-
#: ../inc/class-job.php:287
|
1949 |
-
#, php-format
|
1950 |
-
msgid "BackWPup log for %1$s from %2$s at %3$s"
|
1951 |
-
msgstr "BackWPup-Protokoll für %1$s von %2$s am %3$s"
|
1952 |
-
|
1953 |
-
# @ backwpup
|
1954 |
-
#: ../inc/class-job.php:305
|
1955 |
-
#, php-format
|
1956 |
-
msgctxt "Plugin name; Plugin Version"
|
1957 |
-
msgid "[INFO] %1$s version %2$s; A project of Inpsyde GmbH"
|
1958 |
-
msgstr "[INFO] %1$s Version %2$s; Ein Projekt der Inpsyde GmbH"
|
1959 |
-
|
1960 |
-
# @ backwpup
|
1961 |
-
#: ../inc/class-job.php:306
|
1962 |
-
#, php-format
|
1963 |
-
msgctxt "WordPress Version"
|
1964 |
-
msgid "[INFO] WordPress version %s"
|
1965 |
-
msgstr "[INFO] WordPress Version %s"
|
1966 |
-
|
1967 |
-
# @ backwpup
|
1968 |
-
#: ../inc/class-job.php:307
|
1969 |
-
#, php-format
|
1970 |
-
msgid "[INFO] Blog url: %s"
|
1971 |
-
msgstr "[INFO] Blog URL: %s"
|
1972 |
-
|
1973 |
-
# @ backwpup
|
1974 |
-
#: ../inc/class-job.php:308
|
1975 |
-
#, php-format
|
1976 |
-
msgid "[INFO] BackWPup job: %1$s; %2$s"
|
1977 |
-
msgstr "[INFO] BackWPup-Auftrag: %1$s; %2$s"
|
1978 |
-
|
1979 |
-
# @ backwpup
|
1980 |
-
#: ../inc/class-job.php:320
|
1981 |
-
msgid "Not scheduled!"
|
1982 |
-
msgstr "Nicht geplant!"
|
1983 |
-
|
1984 |
-
# @ backwpup
|
1985 |
-
#: ../inc/class-job.php:323
|
1986 |
-
#, php-format
|
1987 |
-
msgid "[INFO] BackWPup cron: %s; Next: %s "
|
1988 |
-
msgstr "[INFO] BackWPup Cron: %s; Nächste: %s "
|
1989 |
-
|
1990 |
-
# @ backwpup
|
1991 |
-
#: ../inc/class-job.php:326
|
1992 |
-
msgid "[INFO] BackWPup job start with link is active"
|
1993 |
-
msgstr "[INFO] BackWPup Auftragsstart mit aktivem Link gestartet"
|
1994 |
-
|
1995 |
-
# @ backwpup
|
1996 |
-
#: ../inc/class-job.php:328
|
1997 |
-
msgid "[INFO] BackWPup no automatic job start configured"
|
1998 |
-
msgstr "[INFO] BackWPup kein automatischer Auftragsstart konfiguriert"
|
1999 |
-
|
2000 |
-
# @ backwpup
|
2001 |
-
#: ../inc/class-job.php:330
|
2002 |
-
msgid "[INFO] BackWPup job started from wp-cron"
|
2003 |
-
msgstr "[INFO] BackWPup-Auftrag wurde per wp-cron gestartet"
|
2004 |
-
|
2005 |
-
# @ backwpup
|
2006 |
-
#: ../inc/class-job.php:332
|
2007 |
-
msgid "[INFO] BackWPup job started manually"
|
2008 |
-
msgstr "[INFO] BackWPup-Auftrag wurde manuell gestartet"
|
2009 |
-
|
2010 |
-
# @ backwpup
|
2011 |
-
#: ../inc/class-job.php:334
|
2012 |
-
msgid "[INFO] BackWPup job started from external url"
|
2013 |
-
msgstr "[INFO] BackWPup Auftrag wurde von externer URL gestartet"
|
2014 |
-
|
2015 |
-
# @ backwpup
|
2016 |
-
#: ../inc/class-job.php:336
|
2017 |
-
msgid "[INFO] BackWPup job started form commandline interface"
|
2018 |
-
msgstr "[INFO] BackWPup-Auftrag per Kommandozeile gestartet"
|
2019 |
-
|
2020 |
-
# @ backwpup
|
2021 |
-
#: ../inc/class-job.php:342
|
2022 |
-
msgid "[INFO] PHP ver.:"
|
2023 |
-
msgstr "[INFO] PHP ver.:"
|
2024 |
-
|
2025 |
-
# @ backwpup
|
2026 |
-
#: ../inc/class-job.php:343
|
2027 |
-
#, php-format
|
2028 |
-
msgid "[INFO] Maximum PHP script execution time is %1$d seconds"
|
2029 |
-
msgstr "[INFO] Maximum PHP script execution time ist %1$d Sekunden"
|
2030 |
-
|
2031 |
-
# @ backwpup
|
2032 |
-
#: ../inc/class-job.php:347
|
2033 |
-
#, php-format
|
2034 |
-
msgid "[INFO] Script restart time is configured to %1$d seconds"
|
2035 |
-
msgstr "[INFO] Skript-Restart-Zeit ist auf %1$d Sekunden konfiguriert"
|
2036 |
-
|
2037 |
-
# @ backwpup
|
2038 |
-
#: ../inc/class-job.php:350
|
2039 |
-
#, php-format
|
2040 |
-
msgid "[INFO] MySQL ver.: %s"
|
2041 |
-
msgstr "[INFO] MySQL ver.: %s"
|
2042 |
-
|
2043 |
-
# @ backwpup
|
2044 |
-
#: ../inc/class-job.php:352
|
2045 |
-
#, php-format
|
2046 |
-
msgid "[INFO] Web Server: %s"
|
2047 |
-
msgstr "[INFO] Webserver: %s"
|
2048 |
-
|
2049 |
-
# @ backwpup
|
2050 |
-
#: ../inc/class-job.php:355
|
2051 |
-
#, php-format
|
2052 |
-
msgid "[INFO] curl ver.: %1$s; %2$s"
|
2053 |
-
msgstr "[INFO] curl ver.: %1$s; %2$s"
|
2054 |
-
|
2055 |
-
# @ backwpup
|
2056 |
-
#: ../inc/class-job.php:357
|
2057 |
-
#, php-format
|
2058 |
-
msgid "[INFO] Temp folder is: %s"
|
2059 |
-
msgstr "[INFO] Temp Ordner ist: %s"
|
2060 |
-
|
2061 |
-
# @ backwpup
|
2062 |
-
#: ../inc/class-job.php:358
|
2063 |
-
#, php-format
|
2064 |
-
msgid "[INFO] Logfile is: %s"
|
2065 |
-
msgstr "[INFO] Logfile ist: %s"
|
2066 |
-
|
2067 |
-
# @ backwpup
|
2068 |
-
#: ../inc/class-job.php:359
|
2069 |
-
#, php-format
|
2070 |
-
msgid "[INFO] Backup type is: %s"
|
2071 |
-
msgstr "[INFO] Backup Typ ist: %s"
|
2072 |
-
|
2073 |
-
# @ backwpup
|
2074 |
-
#: ../inc/class-job.php:361
|
2075 |
-
#, php-format
|
2076 |
-
msgid "[INFO] Backup file is: %s"
|
2077 |
-
msgstr "[INFO] Backup Datei ist: %s"
|
2078 |
-
|
2079 |
-
# @ backwpup
|
2080 |
-
#: ../inc/class-job.php:376
|
2081 |
-
msgid "No destination correctly defined for backup! Please correct job settings."
|
2082 |
-
msgstr "Es wurde kein korrektes Backupziel definiert! Bitte überprüfe die Auftragseinstellungen."
|
2083 |
-
|
2084 |
-
# @ backwpup
|
2085 |
-
#: ../inc/class-job.php:552
|
2086 |
-
msgid "Wrong BackWPup JobID"
|
2087 |
-
msgstr "Falsche BackWPup JobID"
|
2088 |
-
|
2089 |
-
# @ backwpup
|
2090 |
-
#: ../inc/class-job.php:555
|
2091 |
-
msgid "Log folder does not exist or is not writable for BackWPup"
|
2092 |
-
msgstr "Log-Ordner existiert nicht oder ist nicht beschreibbar für BackWPup"
|
2093 |
-
|
2094 |
-
# @ backwpup
|
2095 |
-
#: ../inc/class-job.php:557
|
2096 |
-
msgid "Temp folder does not exist or is not writable for BackWPup"
|
2097 |
-
msgstr "Temp Ordner existiert nicht oder ist nicht beschreibbar für BackWPup!"
|
2098 |
-
|
2099 |
-
# @ backwpup
|
2100 |
-
#: ../inc/class-job.php:560
|
2101 |
-
msgid "A BackWPup job is already running"
|
2102 |
-
msgstr "Es läuft bereits ein BackWPup-Auftrag"
|
2103 |
-
|
2104 |
-
# @ backwpup
|
2105 |
-
#: ../inc/class-job.php:563
|
2106 |
-
msgid "Job started"
|
2107 |
-
msgstr "Auftrag begonnen"
|
2108 |
-
|
2109 |
-
# @ backwpup
|
2110 |
-
#: ../inc/class-job.php:637
|
2111 |
-
msgid "Job restarts due to inactivity for more than 5 minutes."
|
2112 |
-
msgstr "Auftrag durch Inaktivität von mehr als 5 Minuten neu gestartet"
|
2113 |
-
|
2114 |
-
# @ backwpup
|
2115 |
-
#: ../inc/class-job.php:727
|
2116 |
-
msgid "Step aborted: too many attempts!"
|
2117 |
-
msgstr "Schritt abgebrochen durch zu viele Versuche!"
|
2118 |
-
|
2119 |
-
# @ backwpup
|
2120 |
-
#: ../inc/class-job.php:808
|
2121 |
-
msgid "Restart will be executed now."
|
2122 |
-
msgstr "Neustart wird jetzt ausgeführt."
|
2123 |
-
|
2124 |
-
# @ backwpup
|
2125 |
-
#: ../inc/class-job.php:842
|
2126 |
-
#, php-format
|
2127 |
-
msgid "Restart after %1$d seconds."
|
2128 |
-
msgstr "Neustart nach %1$s Sekunden."
|
2129 |
-
|
2130 |
-
# @ backwpup
|
2131 |
-
#: ../inc/class-job.php:969
|
2132 |
-
#, php-format
|
2133 |
-
msgid "Signal %d is sent to script!"
|
2134 |
-
msgstr "Signal %d wurde zum Script gesendet!"
|
2135 |
-
|
2136 |
-
# @ backwpup
|
2137 |
-
#: ../inc/class-job.php:994
|
2138 |
-
#, php-format
|
2139 |
-
msgid "Folder %1$s not allowed, please use another folder."
|
2140 |
-
msgstr "Ordner %1$s ist nicht erlaubt, bitte wähle einen anderen."
|
2141 |
-
|
2142 |
-
# @ backwpup
|
2143 |
-
#: ../inc/class-job.php:1000
|
2144 |
-
#, php-format
|
2145 |
-
msgid "Cannot create folder: %1$s"
|
2146 |
-
msgstr "Kann keinen Ordner erstellen: %1$s"
|
2147 |
-
|
2148 |
-
# @ backwpup
|
2149 |
-
#: ../inc/class-job.php:1007
|
2150 |
-
#, php-format
|
2151 |
-
msgid "Folder \"%1$s\" is not writable"
|
2152 |
-
msgstr "Ordner \"%1$s\" ist nicht beschreibbar"
|
2153 |
-
|
2154 |
-
# @ backwpup
|
2155 |
-
#: ../inc/class-job.php:1019
|
2156 |
-
msgid "BackWPup will not backup folders and subfolders when this file is inside."
|
2157 |
-
msgstr "BackWPup wird keine Ordner und Unterordner sichern, die diese Datei enthalten."
|
2158 |
-
|
2159 |
-
# @ backwpup
|
2160 |
-
#: ../inc/class-job.php:1031
|
2161 |
-
#, php-format
|
2162 |
-
msgid "Exception caught in %1$s: %2$s"
|
2163 |
-
msgstr "Ausnahme eingefangen in %1$s: %2$s"
|
2164 |
-
|
2165 |
-
# @ backwpup
|
2166 |
-
#: ../inc/class-job.php:1088
|
2167 |
-
msgid "WARNING:"
|
2168 |
-
msgstr "WARNUNG:"
|
2169 |
-
|
2170 |
-
# @ backwpup
|
2171 |
-
#: ../inc/class-job.php:1097
|
2172 |
-
msgid "ERROR:"
|
2173 |
-
msgstr "FEHLER:"
|
2174 |
-
|
2175 |
-
# @ backwpup
|
2176 |
-
#: ../inc/class-job.php:1101
|
2177 |
-
msgid "DEPRECATED:"
|
2178 |
-
msgstr "ABGELEHNT:"
|
2179 |
-
|
2180 |
-
# @ backwpup
|
2181 |
-
#: ../inc/class-job.php:1104
|
2182 |
-
msgid "STRICT NOTICE:"
|
2183 |
-
msgstr "EXAKTE NOTIZ:"
|
2184 |
-
|
2185 |
-
# @ backwpup
|
2186 |
-
#: ../inc/class-job.php:1109
|
2187 |
-
msgid "RECOVERABLE ERROR:"
|
2188 |
-
msgstr "WIEDERHERSTELLUNGS FEHLER:"
|
2189 |
-
|
2190 |
-
# @ backwpup
|
2191 |
-
#: ../inc/class-job.php:1229
|
2192 |
-
msgid "Cannot write progress to working file. Job will be aborted."
|
2193 |
-
msgstr "Kann Fortschritt nicht in die Arbeitsdatei schreiben. Auftrag wird abgebrochen."
|
2194 |
-
|
2195 |
-
# @ backwpup
|
2196 |
-
#: ../inc/class-job.php:1247
|
2197 |
-
msgid "Aborted by user!"
|
2198 |
-
msgstr "Abgebrochen vom Benutzer!"
|
2199 |
-
|
2200 |
-
# @ backwpup
|
2201 |
-
#: ../inc/class-job.php:1272
|
2202 |
-
#, php-format
|
2203 |
-
msgid "One old log deleted"
|
2204 |
-
msgid_plural "%d old logs deleted"
|
2205 |
-
msgstr[0] "Eine alte Log-Datei gelöscht"
|
2206 |
-
msgstr[1] "%d alte Log-Dateien gelöscht"
|
2207 |
-
|
2208 |
-
# @ backwpup
|
2209 |
-
#: ../inc/class-job.php:1278
|
2210 |
-
#, php-format
|
2211 |
-
msgid "Job has ended with errors in %s seconds. You must resolve the errors for correct execution."
|
2212 |
-
msgstr "Job mit Fehlern beendet in %s Sekunden. Sie müssen die Fehler für eine korrekte Ausführung beheben."
|
2213 |
-
|
2214 |
-
# @ backwpup
|
2215 |
-
#: ../inc/class-job.php:1280
|
2216 |
-
#, php-format
|
2217 |
-
msgid "Job finished with warnings in %s seconds. Please resolve them for correct execution."
|
2218 |
-
msgstr "Job mit Warnungen beendet in %s Sekunden. Bitte beheben Sie die Warnungen für eine korrekte Ausführung."
|
2219 |
-
|
2220 |
-
# @ backwpup
|
2221 |
-
#: ../inc/class-job.php:1282
|
2222 |
-
#, php-format
|
2223 |
-
msgid "Job done in %s seconds."
|
2224 |
-
msgstr "Auftrag erledigt in %s Sekunden."
|
2225 |
-
|
2226 |
-
# @ backwpup
|
2227 |
-
#: ../inc/class-job.php:1325
|
2228 |
-
msgid "SUCCESSFUL"
|
2229 |
-
msgstr "ERFOLGREICH"
|
2230 |
-
|
2231 |
-
# @ backwpup
|
2232 |
-
#: ../inc/class-job.php:1328
|
2233 |
-
msgid "WARNING"
|
2234 |
-
msgstr "WARNUNG"
|
2235 |
-
|
2236 |
-
# @ backwpup
|
2237 |
-
#: ../inc/class-job.php:1332
|
2238 |
-
msgid "ERROR"
|
2239 |
-
msgstr "FEHLER"
|
2240 |
-
|
2241 |
-
# @ backwpup
|
2242 |
-
#: ../inc/class-job.php:1336
|
2243 |
-
#, php-format
|
2244 |
-
msgid "[%3$s] BackWPup log %1$s: %2$s"
|
2245 |
-
msgstr "[%3$s] BackWPup Log %1$s: %2$s"
|
2246 |
-
|
2247 |
-
# @ backwpup
|
2248 |
-
#: ../inc/class-job.php:1704
|
2249 |
-
#, php-format
|
2250 |
-
msgctxt "Folder name"
|
2251 |
-
msgid "Folder %s not exists"
|
2252 |
-
msgstr "Verzeichnis %s existiert nicht"
|
2253 |
-
|
2254 |
-
# @ backwpup
|
2255 |
-
#: ../inc/class-job.php:1709
|
2256 |
-
#, php-format
|
2257 |
-
msgctxt "Folder name"
|
2258 |
-
msgid "Folder %s not readable"
|
2259 |
-
msgstr "Verzeichnis %s ist nicht lesbar"
|
2260 |
-
|
2261 |
-
# @ backwpup
|
2262 |
-
#: ../inc/class-job.php:1726
|
2263 |
-
#, php-format
|
2264 |
-
msgid "Link \"%s\" not following."
|
2265 |
-
msgstr "Link \"%s\" wird nicht gefolgt"
|
2266 |
-
|
2267 |
-
# @ backwpup
|
2268 |
-
#: ../inc/class-job.php:1728
|
2269 |
-
#, php-format
|
2270 |
-
msgid "File \"%s\" is not readable!"
|
2271 |
-
msgstr "Datei \"%s\" ist nicht lesbar!"
|
2272 |
-
|
2273 |
-
# @ backwpup
|
2274 |
-
#: ../inc/class-job.php:1732
|
2275 |
-
#, php-format
|
2276 |
-
msgid "File size of “%s” cannot be retrieved. File might be too large and will not be added to queue."
|
2277 |
-
msgstr "Dateigröße von „%s“ kann nicht abgefragt werden. Die Datei könnte zu groß sein und wird nicht zur Warteschlange hinzugefügt."
|
2278 |
-
|
2279 |
-
# @ backwpup
|
2280 |
-
#: ../inc/class-job.php:1754
|
2281 |
-
#, php-format
|
2282 |
-
msgid "%d. Trying to generate a manifest file …"
|
2283 |
-
msgstr "%d. Versuche eine Manifest-Datei zu generieren …"
|
2284 |
-
|
2285 |
-
# @ backwpup
|
2286 |
-
#: ../inc/class-job.php:1804
|
2287 |
-
msgid "You may have noticed the manifest.json file in this archive."
|
2288 |
-
msgstr "Du wirst manifest.json in diesem Archiv bemerkt haben."
|
2289 |
-
|
2290 |
-
# @ backwpup
|
2291 |
-
#: ../inc/class-job.php:1805
|
2292 |
-
msgid "manifest.json might be needed for later restoring a backup from this archive."
|
2293 |
-
msgstr "manifest.json könnte für das spätere Wiederherstellen des Backups aus diesem Archiv benötigt werden."
|
2294 |
-
|
2295 |
-
# @ backwpup
|
2296 |
-
#: ../inc/class-job.php:1806
|
2297 |
-
msgid "Please leave manifest.json untouched and in place. Otherwise it is safe to be ignored."
|
2298 |
-
msgstr "Bitte lasse die manifest.json unberührt an ihrem Platz. Du kannst sie ansonsten einfach ignorieren."
|
2299 |
-
|
2300 |
-
# @ backwpup
|
2301 |
-
#: ../inc/class-job.php:1819
|
2302 |
-
#, php-format
|
2303 |
-
msgid "Added manifest.json file with %1$s to backup file list."
|
2304 |
-
msgstr "manifest.json mit %1$s wurde zur Backup-Datei-Liste hinzugefügt."
|
2305 |
-
|
2306 |
-
# @ backwpup
|
2307 |
-
#: ../inc/class-job.php:1849
|
2308 |
-
#, php-format
|
2309 |
-
msgid "%d. Trying to create backup archive …"
|
2310 |
-
msgstr "%d. Versuche, Backup zu erstellen …"
|
2311 |
-
|
2312 |
-
# @ backwpup
|
2313 |
-
#: ../inc/class-job.php:1856
|
2314 |
-
#, php-format
|
2315 |
-
msgctxt "Archive compression method"
|
2316 |
-
msgid "Compressing files as %s. Please be patient, this may take a moment."
|
2317 |
-
msgstr "Komprimiere Dateien als %s. Bitte habe einen Moment Geduld."
|
2318 |
-
|
2319 |
-
# @ backwpup
|
2320 |
-
#: ../inc/class-job.php:1870
|
2321 |
-
#: ../inc/class-job.php:1919
|
2322 |
-
msgid "Cannot create backup archive correctly. Aborting creation."
|
2323 |
-
msgstr "Backup-Archiv kann nicht korrekt angelegt werden. Anlegeprozess abgebrochen."
|
2324 |
-
|
2325 |
-
# @ backwpup
|
2326 |
-
#: ../inc/class-job.php:1916
|
2327 |
-
msgid "Aborting creation."
|
2328 |
-
msgstr "Anlegen abgebrochen."
|
2329 |
-
|
2330 |
-
# @ backwpup
|
2331 |
-
#: ../inc/class-job.php:1934
|
2332 |
-
msgid "Backup archive created."
|
2333 |
-
msgstr "Backup wurde erstellt."
|
2334 |
-
|
2335 |
-
# @ backwpup
|
2336 |
-
#: ../inc/class-job.php:1943
|
2337 |
-
#, php-format
|
2338 |
-
msgid "Archive size is %s."
|
2339 |
-
msgstr "Archivgröße ist %s"
|
2340 |
-
|
2341 |
-
# @ backwpup
|
2342 |
-
#: ../inc/class-job.php:1944
|
2343 |
-
#, php-format
|
2344 |
-
msgid "%1$d Files with %2$s in Archive."
|
2345 |
-
msgstr "%1$d Dateien mit %2$s in Archiven."
|
2346 |
-
|
2347 |
-
# @ backwpup
|
2348 |
-
#: ../inc/class-destination-msazure.php:25
|
2349 |
-
msgid "MS Azure access keys"
|
2350 |
-
msgstr "MS Azure Zugriff Schlüssel"
|
2351 |
-
|
2352 |
-
# @ backwpup
|
2353 |
-
#: ../inc/class-destination-msazure.php:29
|
2354 |
-
msgid "Account name"
|
2355 |
-
msgstr "Account Name"
|
2356 |
-
|
2357 |
-
# @ backwpup
|
2358 |
-
#: ../inc/class-destination-msazure.php:36
|
2359 |
-
msgid "Access key"
|
2360 |
-
msgstr "Access Key"
|
2361 |
-
|
2362 |
-
# @ backwpup
|
2363 |
-
#: ../inc/class-destination-msazure.php:44
|
2364 |
-
msgid "Blob container"
|
2365 |
-
msgstr "Blob Container"
|
2366 |
-
|
2367 |
-
# @ backwpup
|
2368 |
-
#: ../inc/class-destination-msazure.php:48
|
2369 |
-
msgid "Container selection"
|
2370 |
-
msgstr "Container Auswahl"
|
2371 |
-
|
2372 |
-
# @ backwpup
|
2373 |
-
#: ../inc/class-destination-msazure.php:60
|
2374 |
-
msgid "Create a new container"
|
2375 |
-
msgstr "Neuen Container erstellen"
|
2376 |
-
|
2377 |
-
# @ backwpup
|
2378 |
-
#: ../inc/class-destination-msazure.php:71
|
2379 |
-
msgid "Folder in container"
|
2380 |
-
msgstr "Ordner im Container"
|
2381 |
-
|
2382 |
-
# @ backwpup
|
2383 |
-
#: ../inc/class-destination-msazure.php:125
|
2384 |
-
#, php-format
|
2385 |
-
msgid "MS Azure container \"%s\" created."
|
2386 |
-
msgstr "MS Azure Container \"%s\" erstellt."
|
2387 |
-
|
2388 |
-
# @ backwpup
|
2389 |
-
#: ../inc/class-destination-msazure.php:128
|
2390 |
-
#, php-format
|
2391 |
-
msgid "MS Azure container create: %s"
|
2392 |
-
msgstr "MS Azure Container erstellen: %s"
|
2393 |
-
|
2394 |
-
# @ backwpup
|
2395 |
-
#: ../inc/class-destination-msazure.php:204
|
2396 |
-
#, php-format
|
2397 |
-
msgid "%d. Try sending backup to a Microsoft Azure (Blob) …"
|
2398 |
-
msgstr "%d. Versuche, das Backup zu Microsoft Azure (Blob) zu senden …"
|
2399 |
-
|
2400 |
-
# @ backwpup
|
2401 |
-
#: ../inc/class-destination-msazure.php:226
|
2402 |
-
#, php-format
|
2403 |
-
msgid "MS Azure container \"%s\" does not exist!"
|
2404 |
-
msgstr "MS Azure Container \"%s\" existiert nicht!"
|
2405 |
-
|
2406 |
-
# @ backwpup
|
2407 |
-
#: ../inc/class-destination-msazure.php:230
|
2408 |
-
#, php-format
|
2409 |
-
msgid "Connected to MS Azure container \"%s\"."
|
2410 |
-
msgstr "Verbunden mit MS Azure container \"%s\""
|
2411 |
-
|
2412 |
-
# @ backwpup
|
2413 |
-
#: ../inc/class-destination-msazure.php:233
|
2414 |
-
msgid "Starting upload to MS Azure …"
|
2415 |
-
msgstr "Hochladen zu MS Azure hat begonnen …"
|
2416 |
-
|
2417 |
-
# @ backwpup
|
2418 |
-
#: ../inc/class-destination-msazure.php:268
|
2419 |
-
#: ../inc/class-destination-dropbox.php:263
|
2420 |
-
#, php-format
|
2421 |
-
msgid "Backup transferred to %s"
|
2422 |
-
msgstr "Backup übertragen zu %s"
|
2423 |
-
|
2424 |
-
# @ backwpup
|
2425 |
-
#: ../inc/class-destination-msazure.php:273
|
2426 |
-
#: ../inc/class-destination-msazure.php:329
|
2427 |
-
#, php-format
|
2428 |
-
msgid "Microsoft Azure API: %s"
|
2429 |
-
msgstr "Microsoft Azure API: %s"
|
2430 |
-
|
2431 |
-
# @ backwpup
|
2432 |
-
#: ../inc/class-destination-msazure.php:322
|
2433 |
-
#, php-format
|
2434 |
-
msgid "One file deleted on Microsoft Azure container."
|
2435 |
-
msgid_plural "%d files deleted on Microsoft Azure container."
|
2436 |
-
msgstr[0] "Eine Datei im Microsoft-Azure-Container gelöscht"
|
2437 |
-
msgstr[1] "%d Dateien im Microsoft-Azure-Container gelöscht"
|
2438 |
-
|
2439 |
-
# @ backwpup
|
2440 |
-
#: ../inc/class-destination-msazure.php:415
|
2441 |
-
msgid "Missing account name!"
|
2442 |
-
msgstr "Kontoname (Benutzername) nicht angegeben!"
|
2443 |
-
|
2444 |
-
# @ backwpup
|
2445 |
-
#: ../inc/class-destination-msazure.php:421
|
2446 |
-
msgid "No container found!"
|
2447 |
-
msgstr "Kein Container gefunden!"
|
2448 |
-
|
2449 |
-
# @ backwpup
|
2450 |
-
#: ../inc/class-destination-dropbox.php:36
|
2451 |
-
#: ../inc/class-destination-dropbox.php:325
|
2452 |
-
#, php-format
|
2453 |
-
msgid "Dropbox API: %s"
|
2454 |
-
msgstr "Dropbox-API: %s"
|
2455 |
-
|
2456 |
-
# @ backwpup
|
2457 |
-
#: ../inc/class-destination-dropbox.php:51
|
2458 |
-
msgid "Login"
|
2459 |
-
msgstr "Anmelden"
|
2460 |
-
|
2461 |
-
# @ backwpup
|
2462 |
-
#: ../inc/class-destination-dropbox.php:55
|
2463 |
-
msgid "Authentication"
|
2464 |
-
msgstr "Authentifizierung"
|
2465 |
-
|
2466 |
-
# @ backwpup
|
2467 |
-
#: ../inc/class-destination-dropbox.php:57
|
2468 |
-
msgid "Not authenticated!"
|
2469 |
-
msgstr "Nicht authentifiziert!"
|
2470 |
-
|
2471 |
-
# @ backwpup
|
2472 |
-
#: ../inc/class-destination-dropbox.php:58
|
2473 |
-
msgid "Create Account"
|
2474 |
-
msgstr "Konto erstellen"
|
2475 |
-
|
2476 |
-
# @ backwpup
|
2477 |
-
#: ../inc/class-destination-dropbox.php:60
|
2478 |
-
msgid "Authenticated!"
|
2479 |
-
msgstr "Authentifiziert!"
|
2480 |
-
|
2481 |
-
# @ backwpup
|
2482 |
-
#: ../inc/class-destination-dropbox.php:61
|
2483 |
-
msgid "Delete Dropbox Authentication"
|
2484 |
-
msgstr "Lösche Dropbox-Authentifizierung"
|
2485 |
-
|
2486 |
-
# @ backwpup
|
2487 |
-
#: ../inc/class-destination-dropbox.php:68
|
2488 |
-
msgid "App Access to Dropbox"
|
2489 |
-
msgstr "App-Zugang zu Dropbox"
|
2490 |
-
|
2491 |
-
# @ backwpup
|
2492 |
-
#: ../inc/class-destination-dropbox.php:71
|
2493 |
-
msgid "Get Dropbox App auth code"
|
2494 |
-
msgstr "Hole Auth-Code für Apps-Ordner in Dropbox"
|
2495 |
-
|
2496 |
-
# @ backwpup
|
2497 |
-
#: ../inc/class-destination-dropbox.php:72
|
2498 |
-
msgid "Allows restricted access to Apps/BackWPup folder only."
|
2499 |
-
msgstr "Erlaubt beschränkten Zugriff ausschließlich zum Ordner Apps/BackWPup."
|
2500 |
-
|
2501 |
-
# @ backwpup
|
2502 |
-
#: ../inc/class-destination-dropbox.php:77
|
2503 |
-
msgid "— OR —"
|
2504 |
-
msgstr "— ODER —"
|
2505 |
-
|
2506 |
-
# @ backwpup
|
2507 |
-
#: ../inc/class-destination-dropbox.php:80
|
2508 |
-
msgid "Full Access to Dropbox"
|
2509 |
-
msgstr "Uneingeschränkter Zugang zur Dropbox."
|
2510 |
-
|
2511 |
-
# @ backwpup
|
2512 |
-
#: ../inc/class-destination-dropbox.php:82
|
2513 |
-
msgid "BackWPup will have full read and write access to your entire Dropbox. You can specify your backup destination wherever you want, just be aware that ANY files or folders inside of your Dropbox can be overridden or deleted by BackWPup."
|
2514 |
-
msgstr "BackWPup erhält uneingeschränkten Lese- und Schreibzugriff zu deiner gesamten Dropbox. Du kannst deinen Zielordner innerhalb deiner Dropbox frei wählen; bedenke jedoch, dass ALLE Dateien und Ordner in deiner Dropbox von BackWPup überschrieben oder gelöscht werden können."
|
2515 |
-
|
2516 |
-
# @ backwpup
|
2517 |
-
#: ../inc/class-destination-dropbox.php:83
|
2518 |
-
msgid "Get full Dropbox auth code "
|
2519 |
-
msgstr "Hole Auth-Code für gesamte Dropbox"
|
2520 |
-
|
2521 |
-
# @ backwpup
|
2522 |
-
#: ../inc/class-destination-dropbox.php:84
|
2523 |
-
msgid "Allows full access to your entire Dropbox."
|
2524 |
-
msgstr "Erlaubt uneingeschränkten Zugriff zu deiner gesamten Dropbox."
|
2525 |
-
|
2526 |
-
# @ backwpup
|
2527 |
-
#: ../inc/class-destination-dropbox.php:95
|
2528 |
-
msgid "Destination Folder"
|
2529 |
-
msgstr "Zielordner"
|
2530 |
-
|
2531 |
-
# @ theme_hamburg_textdomain
|
2532 |
-
#: ../inc/class-destination-dropbox.php:98
|
2533 |
-
msgid "Folder inside your Dropbox where your backup archives will be stored."
|
2534 |
-
msgstr "Ordner in deiner Dropbox, in dem deine Backup-Archive gespeichert werden."
|
2535 |
-
|
2536 |
-
# @ backwpup
|
2537 |
-
#: ../inc/class-destination-dropbox.php:225
|
2538 |
-
#, php-format
|
2539 |
-
msgid "%d. Try to send backup file to Dropbox …"
|
2540 |
-
msgstr "%d. Versuche, das Backup zur Dropbox zu senden …"
|
2541 |
-
|
2542 |
-
# @ backwpup
|
2543 |
-
#: ../inc/class-destination-dropbox.php:243
|
2544 |
-
#, php-format
|
2545 |
-
msgid "Authenticated with Dropbox of user %s"
|
2546 |
-
msgstr "Authentifiziert mit Dropbox von Benutzer %s"
|
2547 |
-
|
2548 |
-
# @ backwpup
|
2549 |
-
#: ../inc/class-destination-dropbox.php:246
|
2550 |
-
#, php-format
|
2551 |
-
msgid "%s available on your Dropbox"
|
2552 |
-
msgstr "%s verfügbar in deiner Dropbox"
|
2553 |
-
|
2554 |
-
# @ backwpup
|
2555 |
-
#: ../inc/class-destination-dropbox.php:248
|
2556 |
-
msgid "Not Authenticated with Dropbox!"
|
2557 |
-
msgstr "Nicht mit Dropbox Authentifiziert!"
|
2558 |
-
|
2559 |
-
# @ backwpup
|
2560 |
-
#: ../inc/class-destination-dropbox.php:251
|
2561 |
-
msgid "Uploading to Dropbox …"
|
2562 |
-
msgstr "Hochladen zur Dropbox hat begonnen …"
|
2563 |
-
|
2564 |
-
# @ backwpup
|
2565 |
-
#: ../inc/class-destination-dropbox.php:267
|
2566 |
-
msgid "Uploaded file size and local file size don't match."
|
2567 |
-
msgstr "Größe der lokalen und der hochgeladenen Datei ist nicht identisch."
|
2568 |
-
|
2569 |
-
# @ backwpup
|
2570 |
-
#: ../inc/class-destination-dropbox.php:271
|
2571 |
-
#, php-format
|
2572 |
-
msgid "Error transfering backup to %s."
|
2573 |
-
msgstr "Fehler beim Übertragen des Backups zu %s."
|
2574 |
-
|
2575 |
-
# @ backwpup
|
2576 |
-
#: ../inc/class-destination-dropbox.php:316
|
2577 |
-
#, php-format
|
2578 |
-
msgid "Error while deleting file from Dropbox: %s"
|
2579 |
-
msgstr "Fehler beim Löschen der Datei aus der Dropbox: %s"
|
2580 |
-
|
2581 |
-
# @ backwpup
|
2582 |
-
#: ../inc/class-destination-dropbox.php:319
|
2583 |
-
#, php-format
|
2584 |
-
msgid "One file deleted from Dropbox"
|
2585 |
-
msgid_plural "%d files deleted on Dropbox"
|
2586 |
-
msgstr[0] "Eine Datei aus der Dropbox gelöscht"
|
2587 |
-
msgstr[1] "%d Dateien aus der Dropbox gelöscht"
|
2588 |
-
|
2589 |
-
# @ backwpup
|
2590 |
-
#: ../inc/class-jobtype-dbdump.php:13
|
2591 |
-
msgid "DB Backup"
|
2592 |
-
msgstr "Datenbank-Backup"
|
2593 |
-
|
2594 |
-
# @ backwpup
|
2595 |
-
#: ../inc/class-jobtype-dbdump.php:14
|
2596 |
-
msgid "Database backup"
|
2597 |
-
msgstr "Datenbank Backup"
|
2598 |
-
|
2599 |
-
# @ backwpup
|
2600 |
-
#: ../inc/class-jobtype-dbdump.php:15
|
2601 |
-
msgid "Creates an .sql database backup file"
|
2602 |
-
msgstr "Erstellt ein Datenbank-Backup (.sql, .xml)"
|
2603 |
-
|
2604 |
-
# @ backwpup
|
2605 |
-
#: ../inc/class-jobtype-dbdump.php:61
|
2606 |
-
msgid "Settings for database backup"
|
2607 |
-
msgstr "Einstellungen für das Datenbank Backup"
|
2608 |
-
|
2609 |
-
# @ backwpup
|
2610 |
-
#: ../inc/class-jobtype-dbdump.php:65
|
2611 |
-
msgid "Tables to backup"
|
2612 |
-
msgstr "Tabellen zu sichern"
|
2613 |
-
|
2614 |
-
# @ backwpup
|
2615 |
-
#: ../inc/class-jobtype-dbdump.php:67
|
2616 |
-
msgid "all"
|
2617 |
-
msgstr "alle"
|
2618 |
-
|
2619 |
-
# @ backwpup
|
2620 |
-
#: ../inc/class-jobtype-dbdump.php:91
|
2621 |
-
msgid "Backup file name"
|
2622 |
-
msgstr "Backup Datei Name"
|
2623 |
-
|
2624 |
-
# @ backwpup
|
2625 |
-
#: ../inc/class-jobtype-dbdump.php:99
|
2626 |
-
msgid "Backup file compression"
|
2627 |
-
msgstr "Backup Datei Komprimierungsmethode"
|
2628 |
-
|
2629 |
-
# @ backwpup
|
2630 |
-
#: ../inc/class-jobtype-dbdump.php:155
|
2631 |
-
#, php-format
|
2632 |
-
msgid "%d. Try to backup database …"
|
2633 |
-
msgstr "%d. Versuche, die Datenbank zu sichern …"
|
2634 |
-
|
2635 |
-
# @ backwpup
|
2636 |
-
#: ../inc/class-jobtype-dbdump.php:169
|
2637 |
-
#, php-format
|
2638 |
-
msgid "Connected to database %1$s on %2$s"
|
2639 |
-
msgstr "Mit Datenbank %1$s auf %2$s verbunden"
|
2640 |
-
|
2641 |
-
# @ backwpup
|
2642 |
-
#: ../inc/class-jobtype-dbdump.php:182
|
2643 |
-
msgid "No tables to backup."
|
2644 |
-
msgstr "Es gibt keine Tabellen zu sichern"
|
2645 |
-
|
2646 |
-
# @ backwpup
|
2647 |
-
#: ../inc/class-jobtype-dbdump.php:204
|
2648 |
-
#, php-format
|
2649 |
-
msgid "Backup database table \"%s\" with \"%s\" records"
|
2650 |
-
msgstr "Sichere Datenbank-Tabelle „%s“ mit „%s“ Einträgen"
|
2651 |
-
|
2652 |
-
# @ backwpup
|
2653 |
-
#: ../inc/class-jobtype-dbdump.php:243
|
2654 |
-
msgid "MySQL backup file not created"
|
2655 |
-
msgstr "MySQL-Sicherungsdatei nicht erstellt"
|
2656 |
-
|
2657 |
-
# @ backwpup
|
2658 |
-
#: ../inc/class-jobtype-dbdump.php:249
|
2659 |
-
#, php-format
|
2660 |
-
msgid "Added database dump \"%1$s\" with %2$s to backup file list"
|
2661 |
-
msgstr "Datenbank Backup \"%1$s\" mit %2$s zur Backup Datei Liste hinzugefügt"
|
2662 |
-
|
2663 |
-
# @ backwpup
|
2664 |
-
#: ../inc/class-jobtype-dbdump.php:255
|
2665 |
-
msgid "Database backup done!"
|
2666 |
-
msgstr "Datenbank-Backup fertig!"
|
2667 |
-
|
2668 |
-
# @ backwpup
|
2669 |
-
#: ../inc/class-adminbar.php:53
|
2670 |
-
msgid "running"
|
2671 |
-
msgstr "läuft"
|
2672 |
-
|
2673 |
-
# @ backwpup
|
2674 |
-
#: ../inc/class-adminbar.php:69
|
2675 |
-
msgid "Now Running"
|
2676 |
-
msgstr "Jetzt läuft"
|
2677 |
-
|
2678 |
-
# @ backwpup
|
2679 |
-
#: ../inc/class-adminbar.php:75
|
2680 |
-
msgid "Abort!"
|
2681 |
-
msgstr "Abbrechen!"
|
2682 |
-
|
2683 |
-
# @ backwpup
|
2684 |
-
#: ../inc/class-adminbar.php:92
|
2685 |
-
msgid "Add new"
|
2686 |
-
msgstr "Erstellen"
|
2687 |
-
|
2688 |
-
# @ backwpup
|
2689 |
-
#: ../inc/class-adminbar.php:130
|
2690 |
-
msgid "Run Now"
|
2691 |
-
msgstr "Jetzt starten"
|
2692 |
-
|
2693 |
-
# @ backwpup
|
2694 |
-
#: ../inc/class-destination-s3-v1.php:249
|
2695 |
-
#, php-format
|
2696 |
-
msgid "Bucket %1$s created."
|
2697 |
-
msgstr "Bucket %1$s erstellt."
|
2698 |
-
|
2699 |
-
# @ backwpup
|
2700 |
-
#: ../inc/class-destination-rsc.php:41
|
2701 |
-
msgid "Rack Space Cloud Keys"
|
2702 |
-
msgstr "Rack Space Cloud Keys"
|
2703 |
-
|
2704 |
-
# @ backwpup
|
2705 |
-
#: ../inc/class-destination-rsc.php:52
|
2706 |
-
msgid "API Key"
|
2707 |
-
msgstr "API Key"
|
2708 |
-
|
2709 |
-
# @ backwpup
|
2710 |
-
#: ../inc/class-destination-rsc.php:60
|
2711 |
-
msgid "Select region"
|
2712 |
-
msgstr "Wähle Region"
|
2713 |
-
|
2714 |
-
# @ backwpup
|
2715 |
-
#: ../inc/class-destination-rsc.php:64
|
2716 |
-
#: ../inc/class-destination-rsc.php:66
|
2717 |
-
msgid "Rackspace Cloud Files Region"
|
2718 |
-
msgstr "Rackspace Cloud Verzeichnis"
|
2719 |
-
|
2720 |
-
# @ backwpup
|
2721 |
-
#: ../inc/class-destination-rsc.php:67
|
2722 |
-
msgid "Dallas (DFW)"
|
2723 |
-
msgstr "Dallas (DFW)"
|
2724 |
-
|
2725 |
-
# @ backwpup
|
2726 |
-
#: ../inc/class-destination-rsc.php:68
|
2727 |
-
msgid "Chicago (ORD)"
|
2728 |
-
msgstr "Chicago (ORD)"
|
2729 |
-
|
2730 |
-
# @ backwpup
|
2731 |
-
#: ../inc/class-destination-rsc.php:69
|
2732 |
-
msgid "Sydney (SYD)"
|
2733 |
-
msgstr "Sydney (SYD)"
|
2734 |
-
|
2735 |
-
# @ backwpup
|
2736 |
-
#: ../inc/class-destination-rsc.php:70
|
2737 |
-
msgid "London (LON)"
|
2738 |
-
msgstr "London (LON)"
|
2739 |
-
|
2740 |
-
# @ backwpup
|
2741 |
-
#: ../inc/class-destination-rsc.php:71
|
2742 |
-
msgid "Northern Virginia (IAD)"
|
2743 |
-
msgstr "Northern Virginia (IAD)"
|
2744 |
-
|
2745 |
-
# @ backwpup
|
2746 |
-
#: ../inc/class-destination-rsc.php:72
|
2747 |
-
msgid "Hong Kong (HKG)"
|
2748 |
-
msgstr "Hong Kong (HKG)"
|
2749 |
-
|
2750 |
-
# @ backwpup
|
2751 |
-
#: ../inc/class-destination-rsc.php:155
|
2752 |
-
#, php-format
|
2753 |
-
msgid "Rackspace Cloud container \"%s\" created."
|
2754 |
-
msgstr "Rackspace Cloud Container\"%s\" erstellt."
|
2755 |
-
|
2756 |
-
# @ backwpup
|
2757 |
-
#: ../inc/class-destination-rsc.php:159
|
2758 |
-
#: ../inc/class-destination-rsc.php:267
|
2759 |
-
#: ../inc/class-destination-rsc.php:302
|
2760 |
-
#: ../inc/class-destination-rsc.php:347
|
2761 |
-
#, php-format
|
2762 |
-
msgid "Rackspace Cloud API: %s"
|
2763 |
-
msgstr "Rackspace Cloud API: %s"
|
2764 |
-
|
2765 |
-
# @ backwpup
|
2766 |
-
#: ../inc/class-destination-rsc.php:250
|
2767 |
-
#, php-format
|
2768 |
-
msgid "%d. Trying to send backup file to Rackspace cloud …"
|
2769 |
-
msgstr "%d. Versuche, ein Backup zur Rackspace Cloud zu senden …"
|
2770 |
-
|
2771 |
-
# @ backwpup
|
2772 |
-
#: ../inc/class-destination-rsc.php:264
|
2773 |
-
#, php-format
|
2774 |
-
msgid "Connected to Rackspace cloud files container %s"
|
2775 |
-
msgstr "Verbunden mit Rackspace Cloud Container %s"
|
2776 |
-
|
2777 |
-
# @ backwpup
|
2778 |
-
#: ../inc/class-destination-rsc.php:276
|
2779 |
-
msgid "Upload to Rackspace cloud started …"
|
2780 |
-
msgstr "Upload zur Rackspace Cloud nun gestartet …"
|
2781 |
-
|
2782 |
-
# @ backwpup
|
2783 |
-
#: ../inc/class-destination-rsc.php:292
|
2784 |
-
msgid "Backup File transferred to RSC://"
|
2785 |
-
msgstr "Backup Archiv übertragen zu RSC://"
|
2786 |
-
|
2787 |
-
# @ backwpup
|
2788 |
-
#: ../inc/class-destination-rsc.php:296
|
2789 |
-
msgid "Cannot transfer backup to Rackspace cloud."
|
2790 |
-
msgstr "Kann das Backup nicht zur Rackspace Cloud transferieren"
|
2791 |
-
|
2792 |
-
# @ backwpup
|
2793 |
-
#: ../inc/class-destination-rsc.php:341
|
2794 |
-
#, php-format
|
2795 |
-
msgid "One file deleted on Rackspace cloud container."
|
2796 |
-
msgid_plural "%d files deleted on Rackspace cloud container."
|
2797 |
-
msgstr[0] "Eine Datei im Rackspace-Container gelöscht"
|
2798 |
-
msgstr[1] "%d Dateien im Rackspace-Container gelöscht"
|
2799 |
-
|
2800 |
-
# @ backwpup
|
2801 |
-
#: ../inc/class-destination-rsc.php:444
|
2802 |
-
msgid "Missing username!"
|
2803 |
-
msgstr "Fehlender Benutzername!"
|
2804 |
-
|
2805 |
-
# @ backwpup
|
2806 |
-
#: ../inc/class-destination-rsc.php:446
|
2807 |
-
msgid "Missing API Key!"
|
2808 |
-
msgstr "API-Schlüssel wird fehlt!"
|
2809 |
-
|
2810 |
-
# @ backwpup
|
2811 |
-
#: ../inc/class-destination-rsc.php:450
|
2812 |
-
msgid "A container could not be found!"
|
2813 |
-
msgstr "Kein Container gefunden!"
|
2814 |
-
|
2815 |
-
# @ backwpup
|
2816 |
-
#: ../inc/class-jobtype-dbcheck.php:13
|
2817 |
-
msgid "DB Check"
|
2818 |
-
msgstr "DB Check"
|
2819 |
-
|
2820 |
-
# @ backwpup
|
2821 |
-
#: ../inc/class-jobtype-dbcheck.php:14
|
2822 |
-
msgid "Check database tables"
|
2823 |
-
msgstr "Datenbank-Tabellen prüfen"
|
2824 |
-
|
2825 |
-
# @ backwpup
|
2826 |
-
#: ../inc/class-jobtype-dbcheck.php:35
|
2827 |
-
msgid "Settings for database check"
|
2828 |
-
msgstr "Einstellungen für den Datenbank Check"
|
2829 |
-
|
2830 |
-
# @ backwpup
|
2831 |
-
#: ../inc/class-jobtype-dbcheck.php:39
|
2832 |
-
msgid "WordPress tables only"
|
2833 |
-
msgstr "Nur WordPress Tabellen"
|
2834 |
-
|
2835 |
-
# @ backwpup
|
2836 |
-
#: ../inc/class-jobtype-dbcheck.php:44
|
2837 |
-
msgid "Check WordPress database tables only"
|
2838 |
-
msgstr "Teste nur die WordPress-Tabellen"
|
2839 |
-
|
2840 |
-
# @ backwpup
|
2841 |
-
#: ../inc/class-jobtype-dbcheck.php:49
|
2842 |
-
msgid "Repair"
|
2843 |
-
msgstr "Reparieren"
|
2844 |
-
|
2845 |
-
# @ backwpup
|
2846 |
-
#: ../inc/class-jobtype-dbcheck.php:54
|
2847 |
-
msgid "Try to repair defect table"
|
2848 |
-
msgstr "Versuche, definierte Tabellen zu reparieren"
|
2849 |
-
|
2850 |
-
# @ backwpup
|
2851 |
-
#: ../inc/class-jobtype-dbcheck.php:79
|
2852 |
-
#, php-format
|
2853 |
-
msgid "%d. Trying to check database …"
|
2854 |
-
msgstr "%d. Versuche, die Datenbank zu prüfen …"
|
2855 |
-
|
2856 |
-
# @ backwpup
|
2857 |
-
#: ../inc/class-jobtype-dbcheck.php:111
|
2858 |
-
#, php-format
|
2859 |
-
msgid "Table %1$s is a view. Not checked."
|
2860 |
-
msgstr "Tabelle %1$s ist ein View. Nicht geprüft."
|
2861 |
-
|
2862 |
-
# @ backwpup
|
2863 |
-
#: ../inc/class-jobtype-dbcheck.php:116
|
2864 |
-
#, php-format
|
2865 |
-
msgid "Table %1$s is not a MyISAM/InnoDB table. Not checked."
|
2866 |
-
msgstr "Tabelle %1$s ist keine MyISAM/InnoDB Tabelle. Nicht geprüft"
|
2867 |
-
|
2868 |
-
# @ backwpup
|
2869 |
-
#: ../inc/class-jobtype-dbcheck.php:123
|
2870 |
-
#: ../inc/class-jobtype-dbcheck.php:125
|
2871 |
-
#: ../inc/class-jobtype-dbcheck.php:127
|
2872 |
-
#, php-format
|
2873 |
-
msgid "Result of table check for %1$s is: %2$s"
|
2874 |
-
msgstr "Ergebnis der Tabellenprüfung für %1$s ist: %2$s"
|
2875 |
-
|
2876 |
-
# @ backwpup
|
2877 |
-
#: ../inc/class-jobtype-dbcheck.php:133
|
2878 |
-
#: ../inc/class-jobtype-dbcheck.php:135
|
2879 |
-
#: ../inc/class-jobtype-dbcheck.php:137
|
2880 |
-
#, php-format
|
2881 |
-
msgid "Result of table repair for %1$s is: %2$s"
|
2882 |
-
msgstr "Ergebnis der Tabellenreparatur für %1$s ist: %2$s"
|
2883 |
-
|
2884 |
-
# @ backwpup
|
2885 |
-
#: ../inc/class-jobtype-dbcheck.php:142
|
2886 |
-
msgid "Database check done!"
|
2887 |
-
msgstr "Datenbank-Check fertig!"
|
2888 |
-
|
2889 |
-
# @ backwpup
|
2890 |
-
#: ../inc/class-jobtype-dbcheck.php:145
|
2891 |
-
msgid "No tables to check."
|
2892 |
-
msgstr "Keine Tabellen zum checken."
|
2893 |
-
|
2894 |
-
# @ backwpup
|
2895 |
-
#: ../inc/class-page-settings.php:60
|
2896 |
-
msgid "Settings reset to default"
|
2897 |
-
msgstr "Die Einstellungen wurden zurückgesetzt."
|
2898 |
-
|
2899 |
-
# @ backwpup
|
2900 |
-
#: ../inc/class-page-settings.php:101
|
2901 |
-
msgid "Settings saved"
|
2902 |
-
msgstr "Einstellungen gespeichert"
|
2903 |
-
|
2904 |
-
# @ backwpup
|
2905 |
-
#: ../inc/class-page-settings.php:112
|
2906 |
-
#, php-format
|
2907 |
-
msgid "%s Settings"
|
2908 |
-
msgstr "%s Einstellungen"
|
2909 |
-
|
2910 |
-
# @ backwpup
|
2911 |
-
#: ../inc/class-page-settings.php:114
|
2912 |
-
#: ../inc/class-page-editjob.php:386
|
2913 |
-
msgid "General"
|
2914 |
-
msgstr "Allgemein"
|
2915 |
-
|
2916 |
-
# @ backwpup
|
2917 |
-
#: ../inc/class-page-settings.php:114
|
2918 |
-
msgid "Network"
|
2919 |
-
msgstr "Netzwerk"
|
2920 |
-
|
2921 |
-
# @ backwpup
|
2922 |
-
#: ../inc/class-page-settings.php:114
|
2923 |
-
msgid "API Keys"
|
2924 |
-
msgstr "API-Schlüssel"
|
2925 |
-
|
2926 |
-
# @ backwpup
|
2927 |
-
#: ../inc/class-page-settings.php:114
|
2928 |
-
msgid "Information"
|
2929 |
-
msgstr "Informationen"
|
2930 |
-
|
2931 |
-
# @ backwpup
|
2932 |
-
#: ../inc/class-page-settings.php:131
|
2933 |
-
msgid "Display Settings"
|
2934 |
-
msgstr "Einstellungen anzeigen"
|
2935 |
-
|
2936 |
-
# @ backwpup
|
2937 |
-
#: ../inc/class-page-settings.php:132
|
2938 |
-
msgid "Do you want to see BackWPup in the WordPress admin bar?"
|
2939 |
-
msgstr "Möchten Sie BackWPup-Menüpunkte in der WordPress-Adminbar sehen?"
|
2940 |
-
|
2941 |
-
# @ backwpup
|
2942 |
-
#: ../inc/class-page-settings.php:135
|
2943 |
-
msgid "Admin bar"
|
2944 |
-
msgstr "Adminbar"
|
2945 |
-
|
2946 |
-
# @ backwpup
|
2947 |
-
#: ../inc/class-page-settings.php:138
|
2948 |
-
msgid "Admin Bar"
|
2949 |
-
msgstr "Adminbar"
|
2950 |
-
|
2951 |
-
# @ backwpup
|
2952 |
-
#: ../inc/class-page-settings.php:143
|
2953 |
-
msgid "Show BackWPup links in admin bar."
|
2954 |
-
msgstr "BackWPup-Links in der Adminbar anzeigen."
|
2955 |
-
|
2956 |
-
# @ backwpup
|
2957 |
-
#: ../inc/class-page-settings.php:148
|
2958 |
-
#: ../inc/class-page-settings.php:151
|
2959 |
-
msgid "Folder sizes"
|
2960 |
-
msgstr "Verzeichnisgrößen"
|
2961 |
-
|
2962 |
-
# @ backwpup
|
2963 |
-
#: ../inc/class-page-settings.php:156
|
2964 |
-
msgid "Display folder sizes in the files tab when editing a job. (Might increase loading time of files tab.)"
|
2965 |
-
msgstr "Ordnergrößen im Tab Dateien anzeigen, wenn ein Auftrag bearbeitet wird. (Kann die Ladezeit des Tab erhöhen.)"
|
2966 |
-
|
2967 |
-
# @ backwpup
|
2968 |
-
#: ../inc/class-page-settings.php:161
|
2969 |
-
msgid "Security"
|
2970 |
-
msgstr "Sicherheit"
|
2971 |
-
|
2972 |
-
# @ backwpup
|
2973 |
-
#: ../inc/class-page-settings.php:162
|
2974 |
-
msgid "Security option for BackWPup"
|
2975 |
-
msgstr "Sicherheitseinstellungen für BackWPup"
|
2976 |
-
|
2977 |
-
# @ backwpup
|
2978 |
-
#: ../inc/class-page-settings.php:165
|
2979 |
-
#: ../inc/class-page-settings.php:168
|
2980 |
-
msgid "Protect folders"
|
2981 |
-
msgstr "Ordner schützen"
|
2982 |
-
|
2983 |
-
# @ backwpup
|
2984 |
-
#: ../inc/class-page-settings.php:173
|
2985 |
-
msgid "Protect BackWPup folders ( Temp, Log and Backups ) with <code>.htaccess</code> and <code>index.php</code>"
|
2986 |
-
msgstr "Schütze BackWPup-Verzeichnis (Temp, Log und Backups) mit den Dateien .htaccess und index.php"
|
2987 |
-
|
2988 |
-
# @ backwpup
|
2989 |
-
#: ../inc/class-page-settings.php:186
|
2990 |
-
msgid "Every time BackWPup runs a backup job, a log file is being generated. Choose where to store your log files and how many of them."
|
2991 |
-
msgstr "Jedes Mal, wenn BackWPup einen Auftrag ausführt, wird eine Protokolldatei erzeugt. Wählen Sie aus, wo und wie viele dieser Protokolldateien Sie speichern möchten."
|
2992 |
-
|
2993 |
-
# @ backwpup
|
2994 |
-
#: ../inc/class-page-settings.php:189
|
2995 |
-
msgid "Log file folder"
|
2996 |
-
msgstr "Protokolldateien-Ordner"
|
2997 |
-
|
2998 |
-
# @ backwpup
|
2999 |
-
#: ../inc/class-page-settings.php:197
|
3000 |
-
msgid "Maximum number of log files in folder"
|
3001 |
-
msgstr "Anzahl der Dateien, die im Ordner behalten werden"
|
3002 |
-
|
3003 |
-
# @ backwpup
|
3004 |
-
#: ../inc/class-page-settings.php:205
|
3005 |
-
#: ../inc/class-page-settings.php:208
|
3006 |
-
msgid "Compression"
|
3007 |
-
msgstr "Komprimierung"
|
3008 |
-
|
3009 |
-
# @ backwpup
|
3010 |
-
#: ../inc/class-page-settings.php:213
|
3011 |
-
msgid "Compress log files with GZip."
|
3012 |
-
msgstr "Komprimiere Logdateien mit Gzip."
|
3013 |
-
|
3014 |
-
# @ backwpup
|
3015 |
-
#: ../inc/class-page-settings.php:222
|
3016 |
-
msgid "There are a couple of general options for backup jobs. Set them here."
|
3017 |
-
msgstr "Es gibt einige allgemeine Optionen für Backup-Aufträge, die Sie hier setzen können."
|
3018 |
-
|
3019 |
-
# @ backwpup
|
3020 |
-
#: ../inc/class-page-settings.php:226
|
3021 |
-
msgid "Maximum number of retries for job steps"
|
3022 |
-
msgstr "Maximale Anzahl für Neuversuche der Arbeitsschritte"
|
3023 |
-
|
3024 |
-
# @ backwpup
|
3025 |
-
#: ../inc/class-page-settings.php:234
|
3026 |
-
msgid "Maximum script execution time"
|
3027 |
-
msgstr "Maximale Script Ausführungszeit"
|
3028 |
-
|
3029 |
-
# @ backwpup
|
3030 |
-
#: ../inc/class-page-settings.php:237
|
3031 |
-
msgid "Maximum PHP Script execution time"
|
3032 |
-
msgstr "Maximale PHP-Script Ausführungszeit"
|
3033 |
-
|
3034 |
-
# @ backwpup
|
3035 |
-
#: ../inc/class-page-settings.php:242
|
3036 |
-
msgid "seconds. 0 = disabled."
|
3037 |
-
msgstr "Sekunden. 0 = deaktiviert."
|
3038 |
-
|
3039 |
-
# @ backwpup
|
3040 |
-
#: ../inc/class-page-settings.php:248
|
3041 |
-
#: ../inc/class-page-settings.php:251
|
3042 |
-
msgid "Method for creating ZIP-file archives"
|
3043 |
-
msgstr "Methode für das erstellen von ZIP Dateien ist"
|
3044 |
-
|
3045 |
-
# @ backwpup
|
3046 |
-
#: ../inc/class-page-settings.php:255
|
3047 |
-
msgid "Auto"
|
3048 |
-
msgstr "Auto"
|
3049 |
-
|
3050 |
-
# @ backwpup
|
3051 |
-
#: ../inc/class-page-settings.php:256
|
3052 |
-
msgid "ZipArchive"
|
3053 |
-
msgstr "ZipArchive"
|
3054 |
-
|
3055 |
-
# @ backwpup
|
3056 |
-
#: ../inc/class-page-settings.php:257
|
3057 |
-
msgid "PclZip"
|
3058 |
-
msgstr "PclZip"
|
3059 |
-
|
3060 |
-
# @ backwpup
|
3061 |
-
#: ../inc/class-page-settings.php:265
|
3062 |
-
msgid "Key to start jobs externally with an URL"
|
3063 |
-
msgstr "Schlüssel für den Start eines Auftrags über eine externe URL"
|
3064 |
-
|
3065 |
-
# @ backwpup
|
3066 |
-
#: ../inc/class-page-settings.php:273
|
3067 |
-
msgid "No translation"
|
3068 |
-
msgstr "Keine Übersetzung"
|
3069 |
-
|
3070 |
-
# @ backwpup
|
3071 |
-
#: ../inc/class-page-settings.php:276
|
3072 |
-
msgid "No Translation"
|
3073 |
-
msgstr "Keine Übersetzung"
|
3074 |
-
|
3075 |
-
# @ backwpup
|
3076 |
-
#: ../inc/class-page-settings.php:281
|
3077 |
-
msgid "No translation for the job, the log will be written in English"
|
3078 |
-
msgstr "Keine Übersetzung für diesen Auftrag verwenden, die Log-Dateien werden in Englisch geschrieben. "
|
3079 |
-
|
3080 |
-
# @ backwpup
|
3081 |
-
#: ../inc/class-page-settings.php:287
|
3082 |
-
#: ../inc/class-page-settings.php:290
|
3083 |
-
msgid "Reduce server load"
|
3084 |
-
msgstr "Reduziere Server-Auslastung"
|
3085 |
-
|
3086 |
-
# @ backwpup
|
3087 |
-
#: ../inc/class-page-settings.php:294
|
3088 |
-
msgid "disabled"
|
3089 |
-
msgstr "deaktiviert"
|
3090 |
-
|
3091 |
-
# @ backwpup
|
3092 |
-
#: ../inc/class-page-settings.php:295
|
3093 |
-
msgid "minimum"
|
3094 |
-
msgstr "minimum"
|
3095 |
-
|
3096 |
-
# @ backwpup
|
3097 |
-
#: ../inc/class-page-settings.php:296
|
3098 |
-
msgid "medium"
|
3099 |
-
msgstr "medium"
|
3100 |
-
|
3101 |
-
# @ backwpup
|
3102 |
-
#: ../inc/class-page-settings.php:297
|
3103 |
-
msgid "maximum"
|
3104 |
-
msgstr "maximum"
|
3105 |
-
|
3106 |
-
# @ backwpup
|
3107 |
-
#: ../inc/class-page-settings.php:310
|
3108 |
-
msgid "Is your blog protected with HTTP basic authentication (.htaccess)? If yes, please set the username and password for authentication here."
|
3109 |
-
msgstr "Ist deine Wesbite mit einer HTTP-Authentifizierung geschützt (.htaccess)? Wenn ja, trage hier bitte die Zugangsdaten ein."
|
3110 |
-
|
3111 |
-
# @ backwpup
|
3112 |
-
#: ../inc/class-page-settings.php:313
|
3113 |
-
msgid "Username:"
|
3114 |
-
msgstr "Benutzername:"
|
3115 |
-
|
3116 |
-
# @ backwpup
|
3117 |
-
#: ../inc/class-page-settings.php:321
|
3118 |
-
#: ../inc/class-destination-sugarsync.php:34
|
3119 |
-
msgid "Password:"
|
3120 |
-
msgstr "Passwort:"
|
3121 |
-
|
3122 |
-
# @ backwpup
|
3123 |
-
#: ../inc/class-page-settings.php:341
|
3124 |
-
#: ../inc/class-page-settings.php:342
|
3125 |
-
msgid "Setting"
|
3126 |
-
msgstr "Einstellung"
|
3127 |
-
|
3128 |
-
# @ backwpup
|
3129 |
-
#: ../inc/class-page-settings.php:341
|
3130 |
-
#: ../inc/class-page-settings.php:342
|
3131 |
-
msgid "Value"
|
3132 |
-
msgstr "Wert"
|
3133 |
-
|
3134 |
-
# @ backwpup
|
3135 |
-
#: ../inc/class-page-settings.php:343
|
3136 |
-
msgid "WordPress version"
|
3137 |
-
msgstr "WordPress-Version"
|
3138 |
-
|
3139 |
-
# @ backwpup
|
3140 |
-
#: ../inc/class-page-settings.php:345
|
3141 |
-
msgid "BackWPup version"
|
3142 |
-
msgstr "BackWPup-Version"
|
3143 |
-
|
3144 |
-
# @ backwpup
|
3145 |
-
#: ../inc/class-page-settings.php:345
|
3146 |
-
msgid "Get pro."
|
3147 |
-
msgstr "Pro-Version kaufen"
|
3148 |
-
|
3149 |
-
# @ backwpup
|
3150 |
-
#: ../inc/class-page-settings.php:347
|
3151 |
-
msgid "BackWPup Pro version"
|
3152 |
-
msgstr "BackWPup-Pro-Version"
|
3153 |
-
|
3154 |
-
# @ backwpup
|
3155 |
-
#: ../inc/class-page-settings.php:348
|
3156 |
-
msgid "PHP version"
|
3157 |
-
msgstr "PHP-Version"
|
3158 |
-
|
3159 |
-
# @ backwpup
|
3160 |
-
#: ../inc/class-page-settings.php:349
|
3161 |
-
msgid "MySQL version"
|
3162 |
-
msgstr "MySQL-Version"
|
3163 |
-
|
3164 |
-
# @ backwpup
|
3165 |
-
#: ../inc/class-page-settings.php:352
|
3166 |
-
#: ../inc/class-page-settings.php:356
|
3167 |
-
msgid "cURL version"
|
3168 |
-
msgstr "cURL-Version"
|
3169 |
-
|
3170 |
-
# @ backwpup
|
3171 |
-
#: ../inc/class-page-settings.php:353
|
3172 |
-
msgid "cURL SSL version"
|
3173 |
-
msgstr "cURL-SSL-Version"
|
3174 |
-
|
3175 |
-
# @ backwpup
|
3176 |
-
#: ../inc/class-page-settings.php:356
|
3177 |
-
msgid "unavailable"
|
3178 |
-
msgstr "unerreichbar"
|
3179 |
-
|
3180 |
-
# @ backwpup
|
3181 |
-
#: ../inc/class-page-settings.php:358
|
3182 |
-
msgid "WP-Cron url:"
|
3183 |
-
msgstr "WP-Cron URL:"
|
3184 |
-
|
3185 |
-
# @ backwpup
|
3186 |
-
#: ../inc/class-page-settings.php:360
|
3187 |
-
msgid "Server self connect:"
|
3188 |
-
msgstr "Verbindung zum Server selbst:"
|
3189 |
-
|
3190 |
-
# @ backwpup
|
3191 |
-
#: ../inc/class-page-settings.php:364
|
3192 |
-
#: ../inc/class-page-jobs.php:347
|
3193 |
-
#, php-format
|
3194 |
-
msgid "The HTTP response test get an error \"%s\""
|
3195 |
-
msgstr "Der HTTP Antwort Test bekommt diesen Fehler \"%s\""
|
3196 |
-
|
3197 |
-
# @ backwpup
|
3198 |
-
#: ../inc/class-page-settings.php:366
|
3199 |
-
#: ../inc/class-page-jobs.php:349
|
3200 |
-
#, php-format
|
3201 |
-
msgid "The HTTP response test get a false http status (%s)"
|
3202 |
-
msgstr "Der HTTP Antwort Test bekommt den falschen http Status (%s)"
|
3203 |
-
|
3204 |
-
# @ backwpup
|
3205 |
-
#: ../inc/class-page-settings.php:369
|
3206 |
-
#: ../inc/pro/class-wizard-systemtest.php:180
|
3207 |
-
#, php-format
|
3208 |
-
msgid "The BackWPup HTTP response header returns a false value: \"%s\""
|
3209 |
-
msgstr "Der HTTP Response Header in BackWPup gibt einen fehlerhaften Wert zurück: \"%s\""
|
3210 |
-
|
3211 |
-
# @ backwpup
|
3212 |
-
#: ../inc/class-page-settings.php:372
|
3213 |
-
msgid "Response Test O.K."
|
3214 |
-
msgstr "Response Test O.K."
|
3215 |
-
|
3216 |
-
# @ backwpup
|
3217 |
-
#: ../inc/class-page-settings.php:377
|
3218 |
-
msgid "Temp folder:"
|
3219 |
-
msgstr "Temp Verzeichnis:"
|
3220 |
-
|
3221 |
-
# @ backwpup
|
3222 |
-
#: ../inc/class-page-settings.php:379
|
3223 |
-
#, php-format
|
3224 |
-
msgid "Temp folder %s doesn't exist."
|
3225 |
-
msgstr "Temp Verzeichnis %s existiert nicht."
|
3226 |
-
|
3227 |
-
# @ backwpup
|
3228 |
-
#: ../inc/class-page-settings.php:381
|
3229 |
-
#, php-format
|
3230 |
-
msgid "Temporary folder %s is not writable."
|
3231 |
-
msgstr "Temporärer Ordner %s ist nicht beschreibbar."
|
3232 |
-
|
3233 |
-
# @ backwpup
|
3234 |
-
#: ../inc/class-page-settings.php:386
|
3235 |
-
msgid "Log folder:"
|
3236 |
-
msgstr "Protokoll-Ordner:"
|
3237 |
-
|
3238 |
-
# @ backwpup
|
3239 |
-
#: ../inc/class-page-settings.php:388
|
3240 |
-
#, php-format
|
3241 |
-
msgid "Logs folder %s not exist."
|
3242 |
-
msgstr "Log Dateien %s Verzeichnis existiert nicht"
|
3243 |
-
|
3244 |
-
# @ backwpup
|
3245 |
-
#: ../inc/class-page-settings.php:390
|
3246 |
-
#, php-format
|
3247 |
-
msgid "Log folder %s is not writable."
|
3248 |
-
msgstr "Protokoll-Ordner %s ist nicht beschreibbar."
|
3249 |
-
|
3250 |
-
# @ backwpup
|
3251 |
-
#: ../inc/class-page-settings.php:394
|
3252 |
-
msgid "Server"
|
3253 |
-
msgstr "Server"
|
3254 |
-
|
3255 |
-
# @ backwpup
|
3256 |
-
#: ../inc/class-page-settings.php:395
|
3257 |
-
msgid "Operating System"
|
3258 |
-
msgstr "Betriebssystem"
|
3259 |
-
|
3260 |
-
# @ backwpup
|
3261 |
-
#: ../inc/class-page-settings.php:396
|
3262 |
-
msgid "PHP SAPI"
|
3263 |
-
msgstr "PHP SAPI"
|
3264 |
-
|
3265 |
-
# @ backwpup
|
3266 |
-
#: ../inc/class-page-settings.php:397
|
3267 |
-
msgid "Current PHP user"
|
3268 |
-
msgstr "Aktueller PHP user"
|
3269 |
-
|
3270 |
-
# @ backwpup
|
3271 |
-
#: ../inc/class-page-settings.php:398
|
3272 |
-
#: ../inc/class-page-settings.php:402
|
3273 |
-
#: ../inc/class-page-settings.php:406
|
3274 |
-
msgid "On"
|
3275 |
-
msgstr "An"
|
3276 |
-
|
3277 |
-
# @ backwpup
|
3278 |
-
#: ../inc/class-page-settings.php:398
|
3279 |
-
#: ../inc/class-page-settings.php:404
|
3280 |
-
#: ../inc/class-page-settings.php:408
|
3281 |
-
msgid "Off"
|
3282 |
-
msgstr "Aus"
|
3283 |
-
|
3284 |
-
# @ backwpup
|
3285 |
-
#: ../inc/class-page-settings.php:399
|
3286 |
-
msgid "Safe Mode"
|
3287 |
-
msgstr "Safe Mode"
|
3288 |
-
|
3289 |
-
# @ backwpup
|
3290 |
-
#: ../inc/class-page-settings.php:400
|
3291 |
-
msgid "Maximum execution time"
|
3292 |
-
msgstr "Max. Ausführungszeit"
|
3293 |
-
|
3294 |
-
# @ backwpup
|
3295 |
-
#: ../inc/class-page-settings.php:402
|
3296 |
-
#: ../inc/class-page-settings.php:404
|
3297 |
-
msgid "Alternative WP Cron"
|
3298 |
-
msgstr "Alternative WP Cron"
|
3299 |
-
|
3300 |
-
# @ backwpup
|
3301 |
-
#: ../inc/class-page-settings.php:406
|
3302 |
-
#: ../inc/class-page-settings.php:408
|
3303 |
-
msgid "Disabled WP Cron"
|
3304 |
-
msgstr "WP Cron abgeschaltet"
|
3305 |
-
|
3306 |
-
# @ backwpup
|
3307 |
-
#: ../inc/class-page-settings.php:410
|
3308 |
-
#: ../inc/class-page-settings.php:412
|
3309 |
-
msgid "CHMOD Dir"
|
3310 |
-
msgstr "CHMOD Verzeichnis"
|
3311 |
-
|
3312 |
-
# @ backwpup
|
3313 |
-
#: ../inc/class-page-settings.php:414
|
3314 |
-
msgid "Server Time"
|
3315 |
-
msgstr "Server Zeit"
|
3316 |
-
|
3317 |
-
# @ backwpup
|
3318 |
-
#: ../inc/class-page-settings.php:415
|
3319 |
-
msgid "Blog Time"
|
3320 |
-
msgstr "Webseite Zeit"
|
3321 |
-
|
3322 |
-
# @ backwpup
|
3323 |
-
#: ../inc/class-page-settings.php:416
|
3324 |
-
msgid "Blog Timezone"
|
3325 |
-
msgstr "Webseite Zeitzone"
|
3326 |
-
|
3327 |
-
# @ backwpup
|
3328 |
-
#: ../inc/class-page-settings.php:417
|
3329 |
-
msgid "Blog Time offset"
|
3330 |
-
msgstr "Webseite Zeitversetzung"
|
3331 |
-
|
3332 |
-
# @ backwpup
|
3333 |
-
#: ../inc/class-page-settings.php:417
|
3334 |
-
#, php-format
|
3335 |
-
msgid "%s hours"
|
3336 |
-
msgstr "%s Stunden"
|
3337 |
-
|
3338 |
-
# @ backwpup
|
3339 |
-
#: ../inc/class-page-settings.php:418
|
3340 |
-
msgid "Blog language"
|
3341 |
-
msgstr "Webseiten Sprache"
|
3342 |
-
|
3343 |
-
# @ backwpup
|
3344 |
-
#: ../inc/class-page-settings.php:419
|
3345 |
-
msgid "MySQL Client encoding"
|
3346 |
-
msgstr "MySQL Client Encoding"
|
3347 |
-
|
3348 |
-
# @ backwpup
|
3349 |
-
#: ../inc/class-page-settings.php:422
|
3350 |
-
msgid "Blog charset"
|
3351 |
-
msgstr "Webseiten Charset"
|
3352 |
-
|
3353 |
-
# @ backwpup
|
3354 |
-
#: ../inc/class-page-settings.php:423
|
3355 |
-
msgid "PHP Memory limit"
|
3356 |
-
msgstr "PHP Memory Limit"
|
3357 |
-
|
3358 |
-
# @ backwpup
|
3359 |
-
#: ../inc/class-page-settings.php:424
|
3360 |
-
msgid "WP memory limit"
|
3361 |
-
msgstr "WordPress-Memory-Limit"
|
3362 |
-
|
3363 |
-
# @ backwpup
|
3364 |
-
#: ../inc/class-page-settings.php:425
|
3365 |
-
msgid "WP maximum memory limit"
|
3366 |
-
msgstr "Maximales WordPress-Memory-Limit"
|
3367 |
-
|
3368 |
-
# @ backwpup
|
3369 |
-
#: ../inc/class-page-settings.php:426
|
3370 |
-
msgid "Memory in use"
|
3371 |
-
msgstr "Speicher in Benutzung"
|
3372 |
-
|
3373 |
-
# @ backwpup
|
3374 |
-
#: ../inc/class-page-settings.php:431
|
3375 |
-
msgid "Disabled PHP Functions:"
|
3376 |
-
msgstr "Deaktivierte PHP Funktionen:"
|
3377 |
-
|
3378 |
-
# @ backwpup
|
3379 |
-
#: ../inc/class-page-settings.php:436
|
3380 |
-
msgid "Loaded PHP Extensions:"
|
3381 |
-
msgstr "Geladene PHP Erweiterungen"
|
3382 |
-
|
3383 |
-
# @ backwpup
|
3384 |
-
#: ../inc/class-page-settings.php:448
|
3385 |
-
msgid "Save Changes"
|
3386 |
-
msgstr "Änderungen speichern"
|
3387 |
-
|
3388 |
-
# @ backwpup
|
3389 |
-
#: ../inc/class-page-settings.php:450
|
3390 |
-
msgid "Reset all settings to default"
|
3391 |
-
msgstr "Alle Einstellungen zurücksetzen"
|
3392 |
-
|
3393 |
-
# @ backwpup
|
3394 |
-
#: ../inc/class-page-editjob.php:37
|
3395 |
-
msgid "Overview"
|
3396 |
-
msgstr "Überblick"
|
3397 |
-
|
3398 |
-
# @ backwpup
|
3399 |
-
#: ../inc/class-page-editjob.php:102
|
3400 |
-
#, php-format
|
3401 |
-
msgid "Job with ID %d"
|
3402 |
-
msgstr "Auftrag mit der ID %d"
|
3403 |
-
|
3404 |
-
# @ backwpup
|
3405 |
-
#: ../inc/class-page-editjob.php:191
|
3406 |
-
#, php-format
|
3407 |
-
msgid "Changes for job <i>%s</i> saved."
|
3408 |
-
msgstr "Änderungen für den Auftrag <i>%s</i> gesichert."
|
3409 |
-
|
3410 |
-
# @ backwpup
|
3411 |
-
#: ../inc/class-page-editjob.php:192
|
3412 |
-
msgid "Jobs overview"
|
3413 |
-
msgstr "Auftragsübersicht"
|
3414 |
-
|
3415 |
-
# @ backwpup
|
3416 |
-
#: ../inc/class-page-editjob.php:192
|
3417 |
-
#: ../inc/class-page-jobs.php:117
|
3418 |
-
msgid "Run now"
|
3419 |
-
msgstr "Jetzt starten"
|
3420 |
-
|
3421 |
-
# @ backwpup
|
3422 |
-
#: ../inc/class-page-editjob.php:331
|
3423 |
-
msgid "Working as <a href=\"http://wikipedia.org/wiki/Cron\">Cron</a> schedule:"
|
3424 |
-
msgstr "Als <a href=\\\"http://de.wikipedia.org/wiki/Cron\\\">Cron-Job</a> ausführen:"
|
3425 |
-
|
3426 |
-
# @ backwpup
|
3427 |
-
#: ../inc/class-page-editjob.php:340
|
3428 |
-
#, php-format
|
3429 |
-
msgid "ATTENTION: Job runs every %d minutes!"
|
3430 |
-
msgstr "ACHTUNG: Auftrag läuft alle %d Minuten!"
|
3431 |
-
|
3432 |
-
# @ backwpup
|
3433 |
-
#: ../inc/class-page-editjob.php:346
|
3434 |
-
#, php-format
|
3435 |
-
msgid "ATTENTION: Job runs every %d hours!"
|
3436 |
-
msgstr "ACHTUNG: Auftrag läuft alle %d Stunden!"
|
3437 |
-
|
3438 |
-
# @ backwpup
|
3439 |
-
#: ../inc/class-page-editjob.php:350
|
3440 |
-
msgid "ATTENTION: Can't calculate cron!"
|
3441 |
-
msgstr "ACHTUNG: Kann cron nicht berechnen!"
|
3442 |
-
|
3443 |
-
# @ backwpup
|
3444 |
-
#: ../inc/class-page-editjob.php:353
|
3445 |
-
msgid "Next runtime:"
|
3446 |
-
msgstr "Nächster Durchlauf:"
|
3447 |
-
|
3448 |
-
# @ backwpup
|
3449 |
-
#: ../inc/class-page-editjob.php:386
|
3450 |
-
msgid "Schedule"
|
3451 |
-
msgstr "Planen"
|
3452 |
-
|
3453 |
-
# @ backwpup
|
3454 |
-
#: ../inc/class-page-editjob.php:401
|
3455 |
-
#, php-format
|
3456 |
-
msgid "To: %s"
|
3457 |
-
msgstr "Zu: %s"
|
3458 |
-
|
3459 |
-
# @ backwpup
|
3460 |
-
#: ../inc/class-page-editjob.php:407
|
3461 |
-
#, php-format
|
3462 |
-
msgid "%s Job:"
|
3463 |
-
msgstr "%s Auftrag: "
|
3464 |
-
|
3465 |
-
# @ backwpup
|
3466 |
-
#: ../inc/class-page-editjob.php:434
|
3467 |
-
#: ../inc/class-page-jobs.php:76
|
3468 |
-
msgid "Job Name"
|
3469 |
-
msgstr "Auftragsname"
|
3470 |
-
|
3471 |
-
# @ backwpup
|
3472 |
-
#: ../inc/class-page-editjob.php:438
|
3473 |
-
msgid "Please name this job."
|
3474 |
-
msgstr "Bitte benennen Sie diesen Auftrag."
|
3475 |
-
|
3476 |
-
# @ backwpup
|
3477 |
-
#: ../inc/class-page-editjob.php:446
|
3478 |
-
msgid "Job Tasks"
|
3479 |
-
msgstr "Auftragsdetails"
|
3480 |
-
|
3481 |
-
# @ backwpup
|
3482 |
-
#: ../inc/class-page-editjob.php:450
|
3483 |
-
msgid "This job is a …"
|
3484 |
-
msgstr "Dieser Auftrag ist ein …"
|
3485 |
-
|
3486 |
-
# @ backwpup
|
3487 |
-
#: ../inc/class-page-editjob.php:453
|
3488 |
-
msgid "Job tasks"
|
3489 |
-
msgstr "Auftragsdetails"
|
3490 |
-
|
3491 |
-
# @ backwpup
|
3492 |
-
#: ../inc/class-page-editjob.php:471
|
3493 |
-
msgid "Backup File Creation"
|
3494 |
-
msgstr "Erstellen der Backup-Datei"
|
3495 |
-
|
3496 |
-
# @ backwpup
|
3497 |
-
#: ../inc/class-page-editjob.php:476
|
3498 |
-
#: ../inc/class-page-editjob.php:479
|
3499 |
-
msgid "Backup type"
|
3500 |
-
msgstr "Backup Typ"
|
3501 |
-
|
3502 |
-
# @ backwpup
|
3503 |
-
#: ../inc/class-page-editjob.php:483
|
3504 |
-
msgid "Synchronize file by file to destination"
|
3505 |
-
msgstr "Synchronisiere Datei für Datei zum Auftragsziel"
|
3506 |
-
|
3507 |
-
# @ backwpup
|
3508 |
-
#: ../inc/class-page-editjob.php:487
|
3509 |
-
msgid "Create a backup archive"
|
3510 |
-
msgstr "Backup erstellen"
|
3511 |
-
|
3512 |
-
# @ backwpup
|
3513 |
-
#: ../inc/class-page-editjob.php:493
|
3514 |
-
msgid "Archive name"
|
3515 |
-
msgstr "Archivname"
|
3516 |
-
|
3517 |
-
# @ backwpup
|
3518 |
-
#: ../inc/class-page-editjob.php:525
|
3519 |
-
#: ../inc/class-page-editjob.php:528
|
3520 |
-
msgid "Archive Format"
|
3521 |
-
msgstr "Archiv Format"
|
3522 |
-
|
3523 |
-
# @ backwpup
|
3524 |
-
#: ../inc/class-page-editjob.php:531
|
3525 |
-
msgid "PHP Zip functions will be used if available (needs less memory). Otherwise the PCLZip class will be used."
|
3526 |
-
msgstr "PHP-Zip-Funktionen werden verwendet, sofern verfügbar (schneller). Ansonsten wird die Klasse PCLZip verwendet."
|
3527 |
-
|
3528 |
-
# @ backwpup
|
3529 |
-
#: ../inc/class-page-editjob.php:531
|
3530 |
-
#: ../inc/class-page-editjob.php:533
|
3531 |
-
msgid "Zip"
|
3532 |
-
msgstr "Zip"
|
3533 |
-
|
3534 |
-
# @ backwpup
|
3535 |
-
#: ../inc/class-page-editjob.php:533
|
3536 |
-
#: ../inc/class-page-editjob.php:538
|
3537 |
-
#: ../inc/class-page-editjob.php:542
|
3538 |
-
msgid "Disabled due to missing PHP function."
|
3539 |
-
msgstr "Deaktiviert wegen nicht verfügbarer PHP-Funktion."
|
3540 |
-
|
3541 |
-
# @ backwpup
|
3542 |
-
#: ../inc/class-page-editjob.php:534
|
3543 |
-
msgid "A tarballed, not compressed archive (fast and less memory)"
|
3544 |
-
msgstr "Ein TAR-Archiv, nicht komprimiert (schnell und speicherschonend)"
|
3545 |
-
|
3546 |
-
# @ backwpup
|
3547 |
-
#: ../inc/class-page-editjob.php:534
|
3548 |
-
msgid "Tar"
|
3549 |
-
msgstr "Tar"
|
3550 |
-
|
3551 |
-
# @ backwpup
|
3552 |
-
#: ../inc/class-page-editjob.php:536
|
3553 |
-
msgid "A tarballed, GZipped archive (fast and less memory)"
|
3554 |
-
msgstr "Ein TAR-GZ-Archiv (schnell und speicherschonend)"
|
3555 |
-
|
3556 |
-
# @ backwpup
|
3557 |
-
#: ../inc/class-page-editjob.php:536
|
3558 |
-
#: ../inc/class-page-editjob.php:538
|
3559 |
-
msgid "Tar GZip"
|
3560 |
-
msgstr "Tar GZip"
|
3561 |
-
|
3562 |
-
# @ backwpup
|
3563 |
-
#: ../inc/class-page-editjob.php:540
|
3564 |
-
msgid "A tarballed, BZipped archive (fast and less memory)"
|
3565 |
-
msgstr "Ein TAR-BZ-Archiv (schnell und speicherschonend)"
|
3566 |
-
|
3567 |
-
# @ backwpup
|
3568 |
-
#: ../inc/class-page-editjob.php:540
|
3569 |
-
#: ../inc/class-page-editjob.php:542
|
3570 |
-
msgid "Tar BZip2"
|
3571 |
-
msgstr "Tar BZip2"
|
3572 |
-
|
3573 |
-
# @ backwpup
|
3574 |
-
#: ../inc/class-page-editjob.php:548
|
3575 |
-
msgid "Job Destination"
|
3576 |
-
msgstr "Zielordner des Auftrags"
|
3577 |
-
|
3578 |
-
# @ backwpup
|
3579 |
-
#: ../inc/class-page-editjob.php:552
|
3580 |
-
#: ../inc/class-page-editjob.php:555
|
3581 |
-
msgid "Where should your backup file be stored?"
|
3582 |
-
msgstr "Wo soll die Backup-Datei gespeichert werden?"
|
3583 |
-
|
3584 |
-
# @ backwpup
|
3585 |
-
#: ../inc/class-page-editjob.php:576
|
3586 |
-
msgid "Log Files"
|
3587 |
-
msgstr "Protokoll-Dateien"
|
3588 |
-
|
3589 |
-
# @ backwpup
|
3590 |
-
#: ../inc/class-page-editjob.php:580
|
3591 |
-
msgid "Send log to email address"
|
3592 |
-
msgstr "Protokoll-Datei an E-Mail-Adresse senden"
|
3593 |
-
|
3594 |
-
# @ backwpup
|
3595 |
-
#: ../inc/class-page-editjob.php:588
|
3596 |
-
msgid "Email FROM field"
|
3597 |
-
msgstr "VON-Feld der E-Mail"
|
3598 |
-
|
3599 |
-
# @ backwpup
|
3600 |
-
#: ../inc/class-page-editjob.php:596
|
3601 |
-
msgid "Errors only"
|
3602 |
-
msgstr "Nur Fehler"
|
3603 |
-
|
3604 |
-
# @ backwpup
|
3605 |
-
#: ../inc/class-page-editjob.php:601
|
3606 |
-
msgid "Send email with log only when errors occur during job execution."
|
3607 |
-
msgstr "Sende eine E-Mail mit Protokoll nur, wenn während des Auftrags ein Fehler aufgetreten ist."
|
3608 |
-
|
3609 |
-
# @ backwpup
|
3610 |
-
#: ../inc/class-page-editjob.php:612
|
3611 |
-
msgid "Job Schedule"
|
3612 |
-
msgstr "Auftragsplanung"
|
3613 |
-
|
3614 |
-
# @ backwpup
|
3615 |
-
#: ../inc/class-page-editjob.php:616
|
3616 |
-
#: ../inc/class-page-editjob.php:619
|
3617 |
-
msgid "Start job"
|
3618 |
-
msgstr "Auftrag starten"
|
3619 |
-
|
3620 |
-
# @ backwpup
|
3621 |
-
#: ../inc/class-page-editjob.php:623
|
3622 |
-
msgid "manually only"
|
3623 |
-
msgstr "nur manuell"
|
3624 |
-
|
3625 |
-
# @ backwpup
|
3626 |
-
#: ../inc/class-page-editjob.php:627
|
3627 |
-
msgid "with WordPress cron"
|
3628 |
-
msgstr "mit WordPress Cron"
|
3629 |
-
|
3630 |
-
# @ backwpup
|
3631 |
-
#: ../inc/class-page-editjob.php:634
|
3632 |
-
msgid "with a link"
|
3633 |
-
msgstr "mit einem Link"
|
3634 |
-
|
3635 |
-
# @ backwpup
|
3636 |
-
#: ../inc/class-page-editjob.php:640
|
3637 |
-
msgid "Start job with CLI"
|
3638 |
-
msgstr "Auftrag per CLI starten"
|
3639 |
-
|
3640 |
-
# @ backwpup
|
3641 |
-
#: ../inc/class-page-editjob.php:643
|
3642 |
-
#, php-format
|
3643 |
-
msgid "Use <a href=\"http://wp-cli.org/\">WP-CLI</a> to run jobs from commandline or <a href=\"%s\">get the start script</a>."
|
3644 |
-
msgstr "Verwenden Sie <a href=\"http://wp-cli.org/\">WP-CLI</a>, um Aufträge per Kommandozeile auszulösen, oder <a href=\"%s\">dieses Start-Script</a>."
|
3645 |
-
|
3646 |
-
# @ backwpup
|
3647 |
-
#: ../inc/class-page-editjob.php:648
|
3648 |
-
msgid "Schedule execution time"
|
3649 |
-
msgstr "Plane Ausführungszeit"
|
3650 |
-
|
3651 |
-
# @ backwpup
|
3652 |
-
#: ../inc/class-page-editjob.php:652
|
3653 |
-
#: ../inc/class-page-editjob.php:655
|
3654 |
-
msgid "Scheduler type"
|
3655 |
-
msgstr "Planungstyp"
|
3656 |
-
|
3657 |
-
# @ backwpup
|
3658 |
-
#: ../inc/class-page-editjob.php:659
|
3659 |
-
msgid "basic"
|
3660 |
-
msgstr "einfach"
|
3661 |
-
|
3662 |
-
# @ backwpup
|
3663 |
-
#: ../inc/class-page-editjob.php:663
|
3664 |
-
msgid "advanced"
|
3665 |
-
msgstr "erweitert"
|
3666 |
-
|
3667 |
-
# @ backwpup
|
3668 |
-
#: ../inc/class-page-editjob.php:692
|
3669 |
-
#: ../inc/class-page-editjob.php:760
|
3670 |
-
msgid "Scheduler"
|
3671 |
-
msgstr "Planer"
|
3672 |
-
|
3673 |
-
# @ backwpup
|
3674 |
-
#: ../inc/class-page-editjob.php:702
|
3675 |
-
msgid "Hour"
|
3676 |
-
msgstr "Stunde"
|
3677 |
-
|
3678 |
-
# @ backwpup
|
3679 |
-
#: ../inc/class-page-editjob.php:705
|
3680 |
-
msgid "Minute"
|
3681 |
-
msgstr "Minute"
|
3682 |
-
|
3683 |
-
# @ backwpup
|
3684 |
-
#: ../inc/class-page-editjob.php:709
|
3685 |
-
msgid "monthly"
|
3686 |
-
msgstr "monatlich"
|
3687 |
-
|
3688 |
-
# @ backwpup
|
3689 |
-
#: ../inc/class-page-editjob.php:711
|
3690 |
-
msgid "on"
|
3691 |
-
msgstr "am"
|
3692 |
-
|
3693 |
-
# @ backwpup
|
3694 |
-
#: ../inc/class-page-editjob.php:721
|
3695 |
-
msgid "weekly"
|
3696 |
-
msgstr "wöchentlich"
|
3697 |
-
|
3698 |
-
# @ backwpup
|
3699 |
-
#: ../inc/class-page-editjob.php:723
|
3700 |
-
#: ../inc/class-page-editjob.php:830
|
3701 |
-
msgid "Sunday"
|
3702 |
-
msgstr "Sonntag"
|
3703 |
-
|
3704 |
-
# @ backwpup
|
3705 |
-
#: ../inc/class-page-editjob.php:724
|
3706 |
-
#: ../inc/class-page-editjob.php:831
|
3707 |
-
msgid "Monday"
|
3708 |
-
msgstr "Montag"
|
3709 |
-
|
3710 |
-
# @ backwpup
|
3711 |
-
#: ../inc/class-page-editjob.php:725
|
3712 |
-
#: ../inc/class-page-editjob.php:832
|
3713 |
-
msgid "Tuesday"
|
3714 |
-
msgstr "Dienstag"
|
3715 |
-
|
3716 |
-
# @ backwpup
|
3717 |
-
#: ../inc/class-page-editjob.php:726
|
3718 |
-
#: ../inc/class-page-editjob.php:833
|
3719 |
-
msgid "Wednesday"
|
3720 |
-
msgstr "Mittwoch"
|
3721 |
-
|
3722 |
-
# @ backwpup
|
3723 |
-
#: ../inc/class-page-editjob.php:727
|
3724 |
-
#: ../inc/class-page-editjob.php:834
|
3725 |
-
msgid "Thursday"
|
3726 |
-
msgstr "Donnerstag"
|
3727 |
-
|
3728 |
-
# @ backwpup
|
3729 |
-
#: ../inc/class-page-editjob.php:728
|
3730 |
-
#: ../inc/class-page-editjob.php:835
|
3731 |
-
msgid "Friday"
|
3732 |
-
msgstr "Freitag"
|
3733 |
-
|
3734 |
-
# @ backwpup
|
3735 |
-
#: ../inc/class-page-editjob.php:729
|
3736 |
-
#: ../inc/class-page-editjob.php:836
|
3737 |
-
msgid "Saturday"
|
3738 |
-
msgstr "Samstag"
|
3739 |
-
|
3740 |
-
# @ backwpup
|
3741 |
-
#: ../inc/class-page-editjob.php:739
|
3742 |
-
msgid "daily"
|
3743 |
-
msgstr "täglich"
|
3744 |
-
|
3745 |
-
# @ backwpup
|
3746 |
-
#: ../inc/class-page-editjob.php:749
|
3747 |
-
msgid "hourly"
|
3748 |
-
msgstr "stündlich"
|
3749 |
-
|
3750 |
-
# @ backwpup
|
3751 |
-
#: ../inc/class-page-editjob.php:763
|
3752 |
-
msgid "Minutes:"
|
3753 |
-
msgstr "Minuten:"
|
3754 |
-
|
3755 |
-
# @ backwpup
|
3756 |
-
#: ../inc/class-page-editjob.php:765
|
3757 |
-
#: ../inc/class-page-editjob.php:778
|
3758 |
-
#: ../inc/class-page-editjob.php:790
|
3759 |
-
#: ../inc/class-page-editjob.php:804
|
3760 |
-
#: ../inc/class-page-editjob.php:826
|
3761 |
-
msgid "Any (*)"
|
3762 |
-
msgstr "Alle (*)"
|
3763 |
-
|
3764 |
-
# @ backwpup
|
3765 |
-
#: ../inc/class-page-editjob.php:775
|
3766 |
-
msgid "Hours:"
|
3767 |
-
msgstr "Stunden:"
|
3768 |
-
|
3769 |
-
# @ backwpup
|
3770 |
-
#: ../inc/class-page-editjob.php:788
|
3771 |
-
msgid "Day of Month:"
|
3772 |
-
msgstr "Tag des Monats:"
|
3773 |
-
|
3774 |
-
# @ backwpup
|
3775 |
-
#: ../inc/class-page-editjob.php:802
|
3776 |
-
msgid "Month:"
|
3777 |
-
msgstr "Monat:"
|
3778 |
-
|
3779 |
-
# @ backwpup
|
3780 |
-
#: ../inc/class-page-editjob.php:808
|
3781 |
-
msgid "January"
|
3782 |
-
msgstr "Januar"
|
3783 |
-
|
3784 |
-
# @ backwpup
|
3785 |
-
#: ../inc/class-page-editjob.php:809
|
3786 |
-
msgid "February"
|
3787 |
-
msgstr "Februar"
|
3788 |
-
|
3789 |
-
# @ backwpup
|
3790 |
-
#: ../inc/class-page-editjob.php:810
|
3791 |
-
msgid "March"
|
3792 |
-
msgstr "März"
|
3793 |
-
|
3794 |
-
# @ backwpup
|
3795 |
-
#: ../inc/class-page-editjob.php:811
|
3796 |
-
msgid "April"
|
3797 |
-
msgstr "April"
|
3798 |
-
|
3799 |
-
# @ backwpup
|
3800 |
-
#: ../inc/class-page-editjob.php:812
|
3801 |
-
msgid "May"
|
3802 |
-
msgstr "Mai"
|
3803 |
-
|
3804 |
-
# @ backwpup
|
3805 |
-
#: ../inc/class-page-editjob.php:813
|
3806 |
-
msgid "June"
|
3807 |
-
msgstr "Juni"
|
3808 |
-
|
3809 |
-
# @ backwpup
|
3810 |
-
#: ../inc/class-page-editjob.php:814
|
3811 |
-
msgid "July"
|
3812 |
-
msgstr "Juli"
|
3813 |
-
|
3814 |
-
# @ backwpup
|
3815 |
-
#: ../inc/class-page-editjob.php:815
|
3816 |
-
msgid "August"
|
3817 |
-
msgstr "August"
|
3818 |
-
|
3819 |
-
# @ backwpup
|
3820 |
-
#: ../inc/class-page-editjob.php:816
|
3821 |
-
msgid "September"
|
3822 |
-
msgstr "September"
|
3823 |
-
|
3824 |
-
# @ backwpup
|
3825 |
-
#: ../inc/class-page-editjob.php:817
|
3826 |
-
msgid "October"
|
3827 |
-
msgstr "Oktober"
|
3828 |
-
|
3829 |
-
# @ backwpup
|
3830 |
-
#: ../inc/class-page-editjob.php:818
|
3831 |
-
msgid "November"
|
3832 |
-
msgstr "November"
|
3833 |
-
|
3834 |
-
# @ backwpup
|
3835 |
-
#: ../inc/class-page-editjob.php:819
|
3836 |
-
msgid "December"
|
3837 |
-
msgstr "Dezember"
|
3838 |
-
|
3839 |
-
# @ backwpup
|
3840 |
-
#: ../inc/class-page-editjob.php:824
|
3841 |
-
msgid "Day of Week:"
|
3842 |
-
msgstr "Wochentag:"
|
3843 |
-
|
3844 |
-
# @ backwpup
|
3845 |
-
#: ../inc/class-page-editjob.php:860
|
3846 |
-
msgid "Save changes"
|
3847 |
-
msgstr "Änderungen speichern"
|
3848 |
-
|
3849 |
-
# @ backwpup
|
3850 |
-
#: ../inc/class-jobtype-wpplugin.php:13
|
3851 |
-
msgid "Plugins"
|
3852 |
-
msgstr "Plugins"
|
3853 |
-
|
3854 |
-
# @ backwpup
|
3855 |
-
#: ../inc/class-jobtype-wpplugin.php:14
|
3856 |
-
msgid "Installed plugins list"
|
3857 |
-
msgstr "Liste der installierten Plugins"
|
3858 |
-
|
3859 |
-
# @ backwpup
|
3860 |
-
#: ../inc/class-jobtype-wpplugin.php:45
|
3861 |
-
msgid "Plugin list file name"
|
3862 |
-
msgstr "Dateiname der Plugin-Liste"
|
3863 |
-
|
3864 |
-
# @ backwpup
|
3865 |
-
#: ../inc/class-jobtype-wpplugin.php:93
|
3866 |
-
#, php-format
|
3867 |
-
msgid "%d. Trying to generate a file with installed plugin names …"
|
3868 |
-
msgstr "%d. Versuche, eine Liste der installierten Plugins zu erstellen …"
|
3869 |
-
|
3870 |
-
# @ backwpup
|
3871 |
-
#: ../inc/class-jobtype-wpplugin.php:120
|
3872 |
-
msgid "All plugin information:"
|
3873 |
-
msgstr "Alle Plugin-Informationen"
|
3874 |
-
|
3875 |
-
# @ backwpup
|
3876 |
-
#: ../inc/class-jobtype-wpplugin.php:122
|
3877 |
-
#, php-format
|
3878 |
-
msgid "from %s"
|
3879 |
-
msgstr "von %s"
|
3880 |
-
|
3881 |
-
# @ backwpup
|
3882 |
-
#: ../inc/class-jobtype-wpplugin.php:124
|
3883 |
-
msgid "Active plugins:"
|
3884 |
-
msgstr "Aktive Plugins:"
|
3885 |
-
|
3886 |
-
# @ backwpup
|
3887 |
-
#: ../inc/class-jobtype-wpplugin.php:130
|
3888 |
-
msgid "Inactive plugins:"
|
3889 |
-
msgstr "Inaktive Plugins:"
|
3890 |
-
|
3891 |
-
# @ backwpup
|
3892 |
-
#: ../inc/class-jobtype-wpplugin.php:142
|
3893 |
-
#, php-format
|
3894 |
-
msgid "Added plugin list file \"%1$s\" with %2$s to backup file list."
|
3895 |
-
msgstr "Plugin Listendatei \"%1$s\" mit %2$s zur Backup-Datei-Liste hinzugefügt."
|
3896 |
-
|
3897 |
-
# @ backwpup
|
3898 |
-
#: ../inc/class-destination-sugarsync.php:22
|
3899 |
-
msgid "Sugarsync Login"
|
3900 |
-
msgstr "SugarSync Login"
|
3901 |
-
|
3902 |
-
# @ backwpup
|
3903 |
-
#: ../inc/class-destination-sugarsync.php:30
|
3904 |
-
msgid "Email address:"
|
3905 |
-
msgstr "E-Mail-Adresse"
|
3906 |
-
|
3907 |
-
# @ backwpup
|
3908 |
-
#: ../inc/class-destination-sugarsync.php:40
|
3909 |
-
#: ../inc/class-destination-sugarsync.php:121
|
3910 |
-
msgid "Authenticate with Sugarsync!"
|
3911 |
-
msgstr "Mit SugarSync authentifizieren!"
|
3912 |
-
|
3913 |
-
# @ backwpup
|
3914 |
-
#: ../inc/class-destination-sugarsync.php:42
|
3915 |
-
#: ../inc/class-destination-sugarsync.php:137
|
3916 |
-
msgid "Create Sugarsync account"
|
3917 |
-
msgstr "SugarSync-Konto erstellen"
|
3918 |
-
|
3919 |
-
# @ backwpup
|
3920 |
-
#: ../inc/class-destination-sugarsync.php:51
|
3921 |
-
#: ../inc/class-destination-sugarsync.php:133
|
3922 |
-
msgid "Delete Sugarsync authentication!"
|
3923 |
-
msgstr "Lösche SugarSync Authentifizierung"
|
3924 |
-
|
3925 |
-
# @ backwpup
|
3926 |
-
#: ../inc/class-destination-sugarsync.php:57
|
3927 |
-
msgid "SugarSync Root"
|
3928 |
-
msgstr "SugarSync-Wurzelverzeichnis"
|
3929 |
-
|
3930 |
-
# @ backwpup
|
3931 |
-
#: ../inc/class-destination-sugarsync.php:61
|
3932 |
-
msgid "Sync folder selection"
|
3933 |
-
msgstr "Sync Ordner Auswahl"
|
3934 |
-
|
3935 |
-
# @ backwpup
|
3936 |
-
#: ../inc/class-destination-sugarsync.php:69
|
3937 |
-
msgid "No Syncfolders found!"
|
3938 |
-
msgstr "Keine Sync-Ordner gefunden!"
|
3939 |
-
|
3940 |
-
# @ backwpup
|
3941 |
-
#: ../inc/class-destination-sugarsync.php:90
|
3942 |
-
msgid "Folder in root"
|
3943 |
-
msgstr "Ordner im Wurzelverzeichnis"
|
3944 |
-
|
3945 |
-
# @ backwpup
|
3946 |
-
#: ../inc/class-destination-sugarsync.php:227
|
3947 |
-
#, php-format
|
3948 |
-
msgid "%d. Try to send backup to SugarSync …"
|
3949 |
-
msgstr "%d. Versuche, ein Backup zu SugarSync zu senden …"
|
3950 |
-
|
3951 |
-
# @ backwpup
|
3952 |
-
#: ../inc/class-destination-sugarsync.php:234
|
3953 |
-
#, php-format
|
3954 |
-
msgid "Authenticated to SugarSync with nickname %s"
|
3955 |
-
msgstr "Authentifiziert bei SugarSync mit dem Namen %s"
|
3956 |
-
|
3957 |
-
# @ backwpup
|
3958 |
-
#: ../inc/class-destination-sugarsync.php:237
|
3959 |
-
#, php-format
|
3960 |
-
msgctxt "Available space on SugarSync"
|
3961 |
-
msgid "Not enough disk space available on SugarSync. Available: %s."
|
3962 |
-
msgstr "Nicht genug Speicherplatz verfügbar bei SugarSync. Verfügbar: %s."
|
3963 |
-
|
3964 |
-
# @ backwpup
|
3965 |
-
#: ../inc/class-destination-sugarsync.php:243
|
3966 |
-
#, php-format
|
3967 |
-
msgid "%s available at SugarSync"
|
3968 |
-
msgstr "%s verfügbar bei SugarSync"
|
3969 |
-
|
3970 |
-
# @ backwpup
|
3971 |
-
#: ../inc/class-destination-sugarsync.php:250
|
3972 |
-
msgid "Starting upload to SugarSync …"
|
3973 |
-
msgstr "Hochladen zu SugarSync hat begonnen …"
|
3974 |
-
|
3975 |
-
# @ backwpup
|
3976 |
-
#: ../inc/class-destination-sugarsync.php:260
|
3977 |
-
msgid "Cannot transfer backup to SugarSync!"
|
3978 |
-
msgstr "Backup kann nicht zu SugarSync übertragen werden!"
|
3979 |
-
|
3980 |
-
# @ backwpup
|
3981 |
-
#: ../inc/class-destination-sugarsync.php:299
|
3982 |
-
#, php-format
|
3983 |
-
msgid "One file deleted on SugarSync folder"
|
3984 |
-
msgid_plural "%d files deleted on SugarSync folder"
|
3985 |
-
msgstr[0] "Eine Datei im SugarSync-Ordner gelöscht"
|
3986 |
-
msgstr[1] "%d Dateien im SugarSync-Ordner gelöscht"
|
3987 |
-
|
3988 |
-
# @ backwpup
|
3989 |
-
#: ../inc/class-destination-sugarsync.php:305
|
3990 |
-
#, php-format
|
3991 |
-
msgid "SugarSync API: %s"
|
3992 |
-
msgstr "SugarSync API: %s"
|
3993 |
-
|
3994 |
-
# @ backwpup
|
3995 |
-
#: ../inc/class-page-jobs.php:52
|
3996 |
-
msgid "No Jobs."
|
3997 |
-
msgstr "Keine Aufträge."
|
3998 |
-
|
3999 |
-
# @ backwpup
|
4000 |
-
#: ../inc/class-page-jobs.php:78
|
4001 |
-
msgid "Destinations"
|
4002 |
-
msgstr "Zielordner"
|
4003 |
-
|
4004 |
-
# @ backwpup
|
4005 |
-
#: ../inc/class-page-jobs.php:79
|
4006 |
-
msgid "Next Run"
|
4007 |
-
msgstr "Nächster Durchlauf"
|
4008 |
-
|
4009 |
-
# @ backwpup
|
4010 |
-
#: ../inc/class-page-jobs.php:80
|
4011 |
-
msgid "Last Run"
|
4012 |
-
msgstr "Letzter Durchlauf"
|
4013 |
-
|
4014 |
-
# @ backwpup
|
4015 |
-
#: ../inc/class-page-jobs.php:111
|
4016 |
-
msgid "Edit"
|
4017 |
-
msgstr "Bearbeiten"
|
4018 |
-
|
4019 |
-
# @ backwpup
|
4020 |
-
#: ../inc/class-page-jobs.php:112
|
4021 |
-
msgid "Copy"
|
4022 |
-
msgstr "Kopieren"
|
4023 |
-
|
4024 |
-
# @ backwpup
|
4025 |
-
#: ../inc/class-page-jobs.php:123
|
4026 |
-
msgid "Last log"
|
4027 |
-
msgstr "Letztes Log"
|
4028 |
-
|
4029 |
-
# @ backwpup
|
4030 |
-
#: ../inc/class-page-jobs.php:185
|
4031 |
-
msgid "Not needed or set"
|
4032 |
-
msgstr "Nicht gebraucht oder eingestellt"
|
4033 |
-
|
4034 |
-
# @ backwpup
|
4035 |
-
#: ../inc/class-page-jobs.php:207
|
4036 |
-
#, php-format
|
4037 |
-
msgid "Running for: %s seconds"
|
4038 |
-
msgstr "Läuft seit %s Sekunden"
|
4039 |
-
|
4040 |
-
# @ backwpup
|
4041 |
-
#: ../inc/class-page-jobs.php:213
|
4042 |
-
#, php-format
|
4043 |
-
msgid "Cron: %s"
|
4044 |
-
msgstr "Cron: %s"
|
4045 |
-
|
4046 |
-
# @ backwpup
|
4047 |
-
#: ../inc/class-page-jobs.php:213
|
4048 |
-
#, php-format
|
4049 |
-
msgid "%1$s at %2$s by WP-Cron"
|
4050 |
-
msgstr "%1$s um %2$s mit WP-Cron"
|
4051 |
-
|
4052 |
-
# @ backwpup
|
4053 |
-
#: ../inc/class-page-jobs.php:218
|
4054 |
-
msgid "Inactive"
|
4055 |
-
msgstr "Inaktiv"
|
4056 |
-
|
4057 |
-
# @ backwpup
|
4058 |
-
#: ../inc/class-page-jobs.php:240
|
4059 |
-
#, php-format
|
4060 |
-
msgid "Runtime: %d seconds"
|
4061 |
-
msgstr "Ausführungszeit: %d Sekunden"
|
4062 |
-
|
4063 |
-
# @ backwpup
|
4064 |
-
#: ../inc/class-page-jobs.php:243
|
4065 |
-
msgid "not yet"
|
4066 |
-
msgstr "noch nicht"
|
4067 |
-
|
4068 |
-
# @ backwpup
|
4069 |
-
#: ../inc/class-page-jobs.php:247
|
4070 |
-
msgid "Download last backup"
|
4071 |
-
msgstr "Letztes Backup herunterladen"
|
4072 |
-
|
4073 |
-
# @ backwpup
|
4074 |
-
#: ../inc/class-page-jobs.php:252
|
4075 |
-
msgid "Log"
|
4076 |
-
msgstr "Protokoll"
|
4077 |
-
|
4078 |
-
# @ backwpup
|
4079 |
-
#: ../inc/class-page-jobs.php:295
|
4080 |
-
msgid "Copy of"
|
4081 |
-
msgstr "Kopie von"
|
4082 |
-
|
4083 |
-
# @ backwpup
|
4084 |
-
#: ../inc/class-page-jobs.php:367
|
4085 |
-
#, php-format
|
4086 |
-
msgid "Job “%s” has started, but not responded for 10 seconds."
|
4087 |
-
msgstr "Auftrag „%s“ wurde gestartet, hat jedoch seit 10 Sekunden nicht geantwortet."
|
4088 |
-
|
4089 |
-
# @ backwpup
|
4090 |
-
#: ../inc/class-page-jobs.php:372
|
4091 |
-
#, php-format
|
4092 |
-
msgid "Job \"%s\" started."
|
4093 |
-
msgstr "Auftrag \"%s\" wurde gestartet."
|
4094 |
-
|
4095 |
-
# @ backwpup
|
4096 |
-
#: ../inc/class-page-jobs.php:497
|
4097 |
-
#, php-format
|
4098 |
-
msgid "%s Jobs"
|
4099 |
-
msgstr "%s Aufträge"
|
4100 |
-
|
4101 |
-
# @ backwpup
|
4102 |
-
#: ../inc/class-page-jobs.php:517
|
4103 |
-
#, php-format
|
4104 |
-
msgid "Job currently running: %s"
|
4105 |
-
msgstr "Aktueller Auftrag wird bearbeitet: %s"
|
4106 |
-
|
4107 |
-
# @ backwpup
|
4108 |
-
#: ../inc/class-page-jobs.php:518
|
4109 |
-
msgid "Warnings:"
|
4110 |
-
msgstr "Warnungen:"
|
4111 |
-
|
4112 |
-
# @ backwpup
|
4113 |
-
#: ../inc/class-page-jobs.php:519
|
4114 |
-
msgid "Errors:"
|
4115 |
-
msgstr "Fehler:"
|
4116 |
-
|
4117 |
-
# @ backwpup
|
4118 |
-
#: ../inc/class-page-jobs.php:520
|
4119 |
-
msgid "Log of running job"
|
4120 |
-
msgstr "Protokoll des laufenden Auftrags"
|
4121 |
-
|
4122 |
-
# @ backwpup
|
4123 |
-
#: ../inc/class-page-jobs.php:520
|
4124 |
-
msgid "Display working log"
|
4125 |
-
msgstr "Zeige Auftragslog"
|
4126 |
-
|
4127 |
-
# @ backwpup
|
4128 |
-
#: ../inc/class-page-jobs.php:521
|
4129 |
-
#: ../inc/class-page-backwpup.php:349
|
4130 |
-
msgid "Abort"
|
4131 |
-
msgstr "Abbrechen"
|
4132 |
-
|
4133 |
-
# @ backwpup
|
4134 |
-
#: ../inc/class-page-jobs.php:522
|
4135 |
-
msgid "Close working screen"
|
4136 |
-
msgstr "Arbeitsfläche schließen"
|
4137 |
-
|
4138 |
-
# @ backwpup
|
4139 |
-
#: ../inc/class-page-jobs.php:522
|
4140 |
-
msgid "close"
|
4141 |
-
msgstr "schließen"
|
4142 |
-
|
4143 |
-
# @ backwpup
|
4144 |
-
#: ../inc/class-page-jobs.php:672
|
4145 |
-
msgid "Job completed"
|
4146 |
-
msgstr "Auftrag vollständig"
|
4147 |
-
|
4148 |
-
# @ backwpup
|
4149 |
-
#: ../inc/class-page-jobs.php:676
|
4150 |
-
#, php-format
|
4151 |
-
msgid "Job has done with warnings in %s seconds. Please resolve them for correct execution."
|
4152 |
-
msgstr "Auftrag wurde mit Warnungen in %s Sekunden erledigt. Bitte beheben sie diese, für eine korrekte Ausführung."
|
4153 |
-
|
4154 |
-
# @ backwpup
|
4155 |
-
#: ../inc/class-page-backwpup.php:67
|
4156 |
-
#, php-format
|
4157 |
-
msgid "%s Dashboard"
|
4158 |
-
msgstr "%s Dashboard"
|
4159 |
-
|
4160 |
-
# @ backwpup
|
4161 |
-
#: ../inc/class-page-backwpup.php:74
|
4162 |
-
#: ../inc/class-page-backwpup.php:83
|
4163 |
-
msgctxt "Dashboard heading"
|
4164 |
-
msgid "Planning backups"
|
4165 |
-
msgstr "Backups planen"
|
4166 |
-
|
4167 |
-
# @ backwpup
|
4168 |
-
#: ../inc/class-page-backwpup.php:75
|
4169 |
-
#: ../inc/class-page-backwpup.php:84
|
4170 |
-
msgid "Use your backup archives to save your entire WordPress installation including <code>/wp-content/</code>. Push them to an external storage service if you don’t want to save the backups on the same server."
|
4171 |
-
msgstr "Benutze deine Backup-Archive, um deine gesamte WordPress-Installation zu sichern, einschließlich <code>/wp-content/</code>. Lade sie zu einem externen Dienst hoch, wenn du deine Backups nicht auf demselben Server speichern möchtest."
|
4172 |
-
|
4173 |
-
# @ backwpup
|
4174 |
-
#: ../inc/class-page-backwpup.php:76
|
4175 |
-
#: ../inc/class-page-backwpup.php:85
|
4176 |
-
msgctxt "Dashboard heading"
|
4177 |
-
msgid "Restoring backups"
|
4178 |
-
msgstr "Backups wiederherstellen"
|
4179 |
-
|
4180 |
-
# @ backwpup
|
4181 |
-
#: ../inc/class-page-backwpup.php:77
|
4182 |
-
#: ../inc/class-page-backwpup.php:86
|
4183 |
-
msgid "With a single backup archive you are able to restore an installation. Use a tool like phpMyAdmin or a plugin like <a href=\"http://wordpress.org/plugins/adminer/\" target=\"_blank\">Adminer</a> to restore your database backup files."
|
4184 |
-
msgstr "Mit einem einzigen Backup-Archiv kannst du deine Installation wiederherstellen. Benutze ein serverseitiges Tool wie phpMyAdmin, oder ein Plugin wie <a href=\"http://wordpress.org/plugins/adminer/\" target=\"_blank\">Adminer</a>, um deine Datenbanksicherung wiederherzustellen."
|
4185 |
-
|
4186 |
-
# @ backwpup
|
4187 |
-
#: ../inc/class-page-backwpup.php:78
|
4188 |
-
#: ../inc/class-page-backwpup.php:87
|
4189 |
-
msgctxt "Dashboard heading"
|
4190 |
-
msgid "Ready to set up a backup job?"
|
4191 |
-
msgstr "Bereit, einen Backup-Auftrag zu erstellen?"
|
4192 |
-
|
4193 |
-
# @ backwpup
|
4194 |
-
#: ../inc/class-page-backwpup.php:79
|
4195 |
-
#, php-format
|
4196 |
-
msgid "Use one of the wizards to plan a backup, or use <a href=\"%s\">expert mode</a> for full control over all options."
|
4197 |
-
msgstr "Verwende einen der Assistenten, um dein Backup zu planen, oder den <a href=\"%s\">Expertenmodus</a> für die volle Übersicht über alle Optionen."
|
4198 |
-
|
4199 |
-
# @ backwpup
|
4200 |
-
#: ../inc/class-page-backwpup.php:79
|
4201 |
-
#: ../inc/class-page-backwpup.php:89
|
4202 |
-
msgid "<strong>Please note: You are solely responsible for the security of your data; the authors of this plugin are not.</strong>"
|
4203 |
-
msgstr "<strong>Bitte beachte: Für die Sicherheit deiner Daten bist du allein verantwortlich; die Autoren dieses Plugins sind es nicht.</strong>"
|
4204 |
-
|
4205 |
-
# @ backwpup
|
4206 |
-
#: ../inc/class-page-backwpup.php:84
|
4207 |
-
msgid "Use the short links in the <strong>First steps</strong> box to plan and schedule backup jobs."
|
4208 |
-
msgstr "Benutze die Schnellverweise in <strong>Erste Schritte</strong>, um einen Backup-Auftrag zu planen und zu terminieren."
|
4209 |
-
|
4210 |
-
# @ backwpup
|
4211 |
-
#: ../inc/class-page-backwpup.php:88
|
4212 |
-
#, php-format
|
4213 |
-
msgid "<a href=\"%s\">Add a new backup job</a> and plan what you want to save."
|
4214 |
-
msgstr "<a href=\"%s\">Erstelle einen Backup-Auftrag</a> und plane deine Sicherung."
|
4215 |
-
|
4216 |
-
# @ backwpup
|
4217 |
-
#: ../inc/class-page-backwpup.php:96
|
4218 |
-
msgid "First Steps"
|
4219 |
-
msgstr "Erste Schritte"
|
4220 |
-
|
4221 |
-
# @ backwpup
|
4222 |
-
#: ../inc/class-page-backwpup.php:100
|
4223 |
-
msgid "Test the installation"
|
4224 |
-
msgstr "Die Installation testen"
|
4225 |
-
|
4226 |
-
# @ backwpup
|
4227 |
-
#: ../inc/class-page-backwpup.php:101
|
4228 |
-
#: ../inc/class-page-backwpup.php:104
|
4229 |
-
msgid "Create a Job"
|
4230 |
-
msgstr "Auftrag erstellen"
|
4231 |
-
|
4232 |
-
# @ backwpup
|
4233 |
-
#: ../inc/class-page-backwpup.php:103
|
4234 |
-
msgid "Check the installation"
|
4235 |
-
msgstr "Überprüfe die Installation"
|
4236 |
-
|
4237 |
-
# @ backwpup
|
4238 |
-
#: ../inc/class-page-backwpup.php:106
|
4239 |
-
msgid "Run the created job"
|
4240 |
-
msgstr "Erstellten Auftrag starten"
|
4241 |
-
|
4242 |
-
# @ backwpup
|
4243 |
-
#: ../inc/class-page-backwpup.php:107
|
4244 |
-
msgid "Check the job log"
|
4245 |
-
msgstr "Logs des Auftrages prüfen"
|
4246 |
-
|
4247 |
-
# @ backwpup
|
4248 |
-
#: ../inc/class-page-backwpup.php:115
|
4249 |
-
msgid "One click backup"
|
4250 |
-
msgstr "Ein-Klick-Backup"
|
4251 |
-
|
4252 |
-
# @ backwpup
|
4253 |
-
#: ../inc/class-page-backwpup.php:117
|
4254 |
-
msgid "Generate a database backup of WordPress tables and download it right away!"
|
4255 |
-
msgstr "Generieren Sie ein Datenbank-Backup der WordPress-Tabellen und laden Sie es gleich herunter!"
|
4256 |
-
|
4257 |
-
# @ backwpup
|
4258 |
-
#: ../inc/class-page-backwpup.php:117
|
4259 |
-
msgid "Download database backup"
|
4260 |
-
msgstr "Datenbank-Backup herunterladen"
|
4261 |
-
|
4262 |
-
# @ backwpup
|
4263 |
-
#: ../inc/class-page-backwpup.php:123
|
4264 |
-
msgid "BackWPup News"
|
4265 |
-
msgstr "BackWPup Neuigkeiten"
|
4266 |
-
|
4267 |
-
# @ backwpup
|
4268 |
-
#: ../inc/class-page-backwpup.php:128
|
4269 |
-
msgctxt "BackWPup News RSS Feed URL"
|
4270 |
-
msgid "http://marketpress.com/news/plugins/backwpup/feed/"
|
4271 |
-
msgstr "http://marketpress.de/news/plugins/backwpup/feed/"
|
4272 |
-
|
4273 |
-
# @ backwpup
|
4274 |
-
#: ../inc/class-page-backwpup.php:133
|
4275 |
-
#, php-format
|
4276 |
-
msgid "<strong>RSS Error</strong>: %s"
|
4277 |
-
msgstr "<strong>RSS Fehler</strong>: %s"
|
4278 |
-
|
4279 |
-
# @ backwpup
|
4280 |
-
#: ../inc/class-page-backwpup.php:138
|
4281 |
-
msgid "An error has occurred, which probably means the feed is down. Try again later."
|
4282 |
-
msgstr "Ein Fehler ist aufgetreten, der wahrscheinlich bedeutet, das der Feed Offline ist. Versuchen Sie es später erneut."
|
4283 |
-
|
4284 |
-
# @ backwpup
|
4285 |
-
#: ../inc/class-page-backwpup.php:153
|
4286 |
-
msgid "Untitled"
|
4287 |
-
msgstr "Ohne Titel"
|
4288 |
-
|
4289 |
-
# @ backwpup
|
4290 |
-
#: ../inc/class-page-backwpup.php:216
|
4291 |
-
msgid "Start wizard"
|
4292 |
-
msgstr "Assistenten starten"
|
4293 |
-
|
4294 |
-
# @ backwpup
|
4295 |
-
#: ../inc/class-page-backwpup.php:232
|
4296 |
-
msgctxt "Pro teaser box"
|
4297 |
-
msgid "Thank you for using BackWPup!"
|
4298 |
-
msgstr "Danke, dass du BackWPup benutzt!"
|
4299 |
-
|
4300 |
-
# @ backwpup
|
4301 |
-
#: ../inc/class-page-backwpup.php:235
|
4302 |
-
msgctxt "Pro teaser box"
|
4303 |
-
msgid "Get access to:"
|
4304 |
-
msgstr "Erhalte Zugang zu:"
|
4305 |
-
|
4306 |
-
# @ backwpup
|
4307 |
-
#: ../inc/class-page-backwpup.php:237
|
4308 |
-
msgctxt "Pro teaser box"
|
4309 |
-
msgid "First-class <strong>dedicated support</strong> at MarketPress Helpdesk."
|
4310 |
-
msgstr "Erstklassigem <strong>persönlichen Support</strong> im Helpdesk bei MarketPress."
|
4311 |
-
|
4312 |
-
# @ backwpup
|
4313 |
-
#: ../inc/class-page-backwpup.php:238
|
4314 |
-
msgctxt "Pro teaser box"
|
4315 |
-
msgid "Differential backups to Google Drive and other cloud storage service."
|
4316 |
-
msgstr "Differenzielle Backups zu Google Drive anderen Cloud-Storage-Diensten."
|
4317 |
-
|
4318 |
-
# @ backwpup
|
4319 |
-
#: ../inc/class-page-backwpup.php:239
|
4320 |
-
msgctxt "Pro teaser box"
|
4321 |
-
msgid "Easy-peasy wizards to create and schedule backup jobs."
|
4322 |
-
msgstr "Kinderleichte Assistenten zum Erstellen und Planen von Backup-Aufträgen."
|
4323 |
-
|
4324 |
-
# @ backwpup
|
4325 |
-
#: ../inc/class-page-backwpup.php:240
|
4326 |
-
msgctxt "Pro teaser box, link text"
|
4327 |
-
msgid "And more…"
|
4328 |
-
msgstr "Und mehr…"
|
4329 |
-
|
4330 |
-
# @ backwpup
|
4331 |
-
#: ../inc/class-page-backwpup.php:242
|
4332 |
-
msgctxt "Pro teaser box, link title"
|
4333 |
-
msgid "Get BackWPup Pro now"
|
4334 |
-
msgstr "Wechsle jetzt zu BackWPup Pro"
|
4335 |
-
|
4336 |
-
# @ backwpup
|
4337 |
-
#: ../inc/class-page-backwpup.php:242
|
4338 |
-
msgctxt "Pro teaser box, link text"
|
4339 |
-
msgid "Get BackWPup Pro now"
|
4340 |
-
msgstr "Wechsle jetzt zu BackWPup Pro"
|
4341 |
-
|
4342 |
-
# @ backwpup
|
4343 |
-
#: ../inc/class-page-backwpup.php:260
|
4344 |
-
msgid "Last logs"
|
4345 |
-
msgstr "Letzte Logs"
|
4346 |
-
|
4347 |
-
# @ backwpup
|
4348 |
-
#: ../inc/class-page-backwpup.php:262
|
4349 |
-
msgid "Result"
|
4350 |
-
msgstr "Ergebnis"
|
4351 |
-
|
4352 |
-
# @ backwpup
|
4353 |
-
#: ../inc/class-page-backwpup.php:292
|
4354 |
-
#, php-format
|
4355 |
-
msgid "%d ERROR"
|
4356 |
-
msgid_plural "%d ERRORS"
|
4357 |
-
msgstr[0] "%d FEHLER"
|
4358 |
-
msgstr[1] "%d FEHLER"
|
4359 |
-
|
4360 |
-
# @ backwpup
|
4361 |
-
#: ../inc/class-page-backwpup.php:294
|
4362 |
-
#, php-format
|
4363 |
-
msgid "%d WARNING"
|
4364 |
-
msgid_plural "%d WARNINGS"
|
4365 |
-
msgstr[0] "%d WARNUNG"
|
4366 |
-
msgstr[1] "%d WARNUNGEN"
|
4367 |
-
|
4368 |
-
# @ backwpup
|
4369 |
-
#: ../inc/class-page-backwpup.php:296
|
4370 |
-
msgid "OK"
|
4371 |
-
msgstr "OK"
|
4372 |
-
|
4373 |
-
# @ backwpup
|
4374 |
-
#: ../inc/class-page-backwpup.php:320
|
4375 |
-
msgid "Next scheduled jobs"
|
4376 |
-
msgstr "Nächste geplante Aufträge"
|
4377 |
-
|
4378 |
-
# @ backwpup
|
4379 |
-
#: ../inc/class-page-backwpup.php:347
|
4380 |
-
#, php-format
|
4381 |
-
msgid "working since %d seconds"
|
4382 |
-
msgstr "in Arbeit seit %d Sek."
|
4383 |
-
|
4384 |
-
# @ backwpup
|
4385 |
-
#: ../inc/class-page-backwpup.php:365
|
4386 |
-
msgid "Edit Job"
|
4387 |
-
msgstr "Auftrag bearbeiten"
|
4388 |
-
|
4389 |
-
# @ backwpup
|
4390 |
-
#: ../inc/class-destination-email.php:38
|
4391 |
-
#: ../inc/class-destination-email.php:41
|
4392 |
-
msgid "Email address"
|
4393 |
-
msgstr "E-Mail-Adresse"
|
4394 |
-
|
4395 |
-
# @ backwpup
|
4396 |
-
#: ../inc/class-destination-email.php:48
|
4397 |
-
#: ../inc/class-destination-email.php:50
|
4398 |
-
msgid "Send test email"
|
4399 |
-
msgstr "Test-E-Mail senden"
|
4400 |
-
|
4401 |
-
# @ backwpup
|
4402 |
-
#: ../inc/class-destination-email.php:55
|
4403 |
-
msgid "Send email settings"
|
4404 |
-
msgstr "Absende-Einstellungen für E-Mails"
|
4405 |
-
|
4406 |
-
# @ backwpup
|
4407 |
-
#: ../inc/class-destination-email.php:58
|
4408 |
-
msgid "Maximum file size"
|
4409 |
-
msgstr "Maximale Dateigröße"
|
4410 |
-
|
4411 |
-
# @ backwpup
|
4412 |
-
#: ../inc/class-destination-email.php:59
|
4413 |
-
msgid "MB"
|
4414 |
-
msgstr "MB"
|
4415 |
-
|
4416 |
-
# @ backwpup
|
4417 |
-
#: ../inc/class-destination-email.php:63
|
4418 |
-
msgid "Sender email address"
|
4419 |
-
msgstr "E-Mail-Adresse des Absenders"
|
4420 |
-
|
4421 |
-
# @ backwpup
|
4422 |
-
#: ../inc/class-destination-email.php:70
|
4423 |
-
msgid "Sender name"
|
4424 |
-
msgstr "Absender NAme"
|
4425 |
-
|
4426 |
-
# @ backwpup
|
4427 |
-
#: ../inc/class-destination-email.php:77
|
4428 |
-
msgid "Sending method"
|
4429 |
-
msgstr "E-Mail-Versandmethode"
|
4430 |
-
|
4431 |
-
# @ backwpup
|
4432 |
-
#: ../inc/class-destination-email.php:81
|
4433 |
-
msgid "Use site settings"
|
4434 |
-
msgstr "Verwende Blogeinstellungen"
|
4435 |
-
|
4436 |
-
# @ backwpup
|
4437 |
-
#: ../inc/class-destination-email.php:82
|
4438 |
-
msgid "PHP: mail()"
|
4439 |
-
msgstr "PHP: mail()"
|
4440 |
-
|
4441 |
-
# @ backwpup
|
4442 |
-
#: ../inc/class-destination-email.php:83
|
4443 |
-
msgid "Sendmail"
|
4444 |
-
msgstr "Sendmail"
|
4445 |
-
|
4446 |
-
# @ backwpup
|
4447 |
-
#: ../inc/class-destination-email.php:84
|
4448 |
-
msgid "SMTP"
|
4449 |
-
msgstr "SMTP"
|
4450 |
-
|
4451 |
-
# @ backwpup
|
4452 |
-
#: ../inc/class-destination-email.php:91
|
4453 |
-
msgid "Sendmail path"
|
4454 |
-
msgstr "Sendmail Pfad"
|
4455 |
-
|
4456 |
-
# @ backwpup
|
4457 |
-
#: ../inc/class-destination-email.php:99
|
4458 |
-
msgid "SMTP host name"
|
4459 |
-
msgstr "SMTP Hostname"
|
4460 |
-
|
4461 |
-
# @ backwpup
|
4462 |
-
#: ../inc/class-destination-email.php:110
|
4463 |
-
msgid "SMTP secure connection"
|
4464 |
-
msgstr "SMTP Sichere Verbindung"
|
4465 |
-
|
4466 |
-
# @ backwpup
|
4467 |
-
#: ../inc/class-destination-email.php:115
|
4468 |
-
msgid "SSL"
|
4469 |
-
msgstr "SSL"
|
4470 |
-
|
4471 |
-
# @ backwpup
|
4472 |
-
#: ../inc/class-destination-email.php:116
|
4473 |
-
msgid "TLS"
|
4474 |
-
msgstr "TLS"
|
4475 |
-
|
4476 |
-
# @ backwpup
|
4477 |
-
#: ../inc/class-destination-email.php:121
|
4478 |
-
msgid "SMTP username"
|
4479 |
-
msgstr "SMTP Benutzername"
|
4480 |
-
|
4481 |
-
# @ backwpup
|
4482 |
-
#: ../inc/class-destination-email.php:128
|
4483 |
-
msgid "SMTP password"
|
4484 |
-
msgstr "SMTP Passwort"
|
4485 |
-
|
4486 |
-
# @ backwpup
|
4487 |
-
#: ../inc/class-destination-email.php:204
|
4488 |
-
#, php-format
|
4489 |
-
msgid "%d. Try to send backup with email …"
|
4490 |
-
msgstr "%d. Versuche, Backup als E-Mail zu senden …"
|
4491 |
-
|
4492 |
-
# @ backwpup
|
4493 |
-
#: ../inc/class-destination-email.php:209
|
4494 |
-
msgid "Backup archive too big to be sent by email!"
|
4495 |
-
msgstr "Das Backup Archiv ist zu groß zum Senden via E-Mail!"
|
4496 |
-
|
4497 |
-
# @ backwpup
|
4498 |
-
#: ../inc/class-destination-email.php:216
|
4499 |
-
#, php-format
|
4500 |
-
msgid "Sending email to %s…"
|
4501 |
-
msgstr "Sende E-Mail an %s…"
|
4502 |
-
|
4503 |
-
# @ backwpup
|
4504 |
-
#: ../inc/class-destination-email.php:292
|
4505 |
-
#, php-format
|
4506 |
-
msgid "BackWPup archive from %1$s: %2$s"
|
4507 |
-
msgstr "BackWPup-Archiv vom %1$s: %2$s"
|
4508 |
-
|
4509 |
-
# @ backwpup
|
4510 |
-
#: ../inc/class-destination-email.php:295
|
4511 |
-
#, php-format
|
4512 |
-
msgid "Backup archive: %s"
|
4513 |
-
msgstr "Backup Archiv: %s"
|
4514 |
-
|
4515 |
-
# @ backwpup
|
4516 |
-
#: ../inc/class-destination-email.php:309
|
4517 |
-
#: ../inc/class-destination-email.php:431
|
4518 |
-
msgid "Error while sending email!"
|
4519 |
-
msgstr "Fehler beim Senden der E-Mail"
|
4520 |
-
|
4521 |
-
# @ backwpup
|
4522 |
-
#: ../inc/class-destination-email.php:315
|
4523 |
-
#: ../inc/class-destination-email.php:433
|
4524 |
-
msgid "Email sent."
|
4525 |
-
msgstr "E-Mail gesendet."
|
4526 |
-
|
4527 |
-
# @ backwpup
|
4528 |
-
#: ../inc/class-destination-email.php:415
|
4529 |
-
msgid "BackWPup archive sending TEST Message"
|
4530 |
-
msgstr "BackWPup Archiv TEST Nachricht senden"
|
4531 |
-
|
4532 |
-
# @ backwpup
|
4533 |
-
#: ../inc/class-destination-email.php:418
|
4534 |
-
msgid "If this message reaches your inbox, sending backup archives via email should work for you."
|
4535 |
-
msgstr "Wenn dich diese Nachricht erreicht, funktioniert das Senden der Sicherungsarchive per E-Mail."
|
4536 |
-
|
4537 |
-
# @ backwpup
|
4538 |
-
#: ../inc/pro/class-settings-apikeys.php:42
|
4539 |
-
msgid "Hash key"
|
4540 |
-
msgstr "Hash key"
|
4541 |
-
|
4542 |
-
# @ backwpup
|
4543 |
-
#: ../inc/pro/class-settings-apikeys.php:43
|
4544 |
-
msgid "Hash Key for BackWPup. It will be used to have hashes in folder and file names. It must at least 6 chars long."
|
4545 |
-
msgstr "Hash Key für BackWPup. Es wird für Hashes in Ordner- und Dateinamen verwendet und muss mindestens 6 Zeichen lang sein."
|
4546 |
-
|
4547 |
-
# @ backwpup
|
4548 |
-
#: ../inc/pro/class-settings-apikeys.php:46
|
4549 |
-
msgid "Hash key:"
|
4550 |
-
msgstr "Hash key:"
|
4551 |
-
|
4552 |
-
# @ backwpup
|
4553 |
-
#: ../inc/pro/class-settings-apikeys.php:59
|
4554 |
-
msgid "Dropbox API Keys"
|
4555 |
-
msgstr "Dropbox API Keys"
|
4556 |
-
|
4557 |
-
# @ backwpup
|
4558 |
-
#: ../inc/pro/class-settings-apikeys.php:60
|
4559 |
-
msgid "If you want to set your own Dropbox API Keys, you can do it here. Leave empty for default."
|
4560 |
-
msgstr "Wenn du deinen eigenen Dropbox API Schlüssel setzen willst, kannst du es hier tun. Lass es leer für Standard-Einstellungen."
|
4561 |
-
|
4562 |
-
# @ backwpup
|
4563 |
-
#: ../inc/pro/class-settings-apikeys.php:63
|
4564 |
-
msgid "Full Dropbox App key:"
|
4565 |
-
msgstr "Voller Dropbox app Key"
|
4566 |
-
|
4567 |
-
# @ backwpup
|
4568 |
-
#: ../inc/pro/class-settings-apikeys.php:71
|
4569 |
-
msgid "Full Dropbox App secret:"
|
4570 |
-
msgstr "Voller Dropbox App secret:"
|
4571 |
-
|
4572 |
-
# @ backwpup
|
4573 |
-
#: ../inc/pro/class-settings-apikeys.php:79
|
4574 |
-
msgid "Sandbox App key:"
|
4575 |
-
msgstr "Sandbox App key:"
|
4576 |
-
|
4577 |
-
# @ backwpup
|
4578 |
-
#: ../inc/pro/class-settings-apikeys.php:87
|
4579 |
-
msgid "Sandbox App secret:"
|
4580 |
-
msgstr "Sandbox App secret:"
|
4581 |
-
|
4582 |
-
# @ backwpup
|
4583 |
-
#: ../inc/pro/class-settings-apikeys.php:100
|
4584 |
-
msgid "SugarSync API Keys"
|
4585 |
-
msgstr "SugarSync API Keys"
|
4586 |
-
|
4587 |
-
# @ backwpup
|
4588 |
-
#: ../inc/pro/class-settings-apikeys.php:101
|
4589 |
-
msgid "If you want to set your own SugarSync API keys you can do that here. Leave empty for default."
|
4590 |
-
msgstr "Wenn du deinen eigenen SugarSync API Schlüssel setzen willst, kannst du es hier tun. Lass es leer für Standard-Einstellungen."
|
4591 |
-
|
4592 |
-
# @ backwpup
|
4593 |
-
#: ../inc/pro/class-settings-apikeys.php:104
|
4594 |
-
msgid "Access Key ID:"
|
4595 |
-
msgstr "Access Key ID (Zugangsschlüssel-ID):"
|
4596 |
-
|
4597 |
-
# @ backwpup
|
4598 |
-
#: ../inc/pro/class-settings-apikeys.php:112
|
4599 |
-
msgid "Private Access Key:"
|
4600 |
-
msgstr "Private Access Key:"
|
4601 |
-
|
4602 |
-
# @ backwpup
|
4603 |
-
#: ../inc/pro/class-settings-apikeys.php:119
|
4604 |
-
msgid "App ID:"
|
4605 |
-
msgstr "App ID:"
|
4606 |
-
|
4607 |
-
# @ backwpup
|
4608 |
-
#: ../inc/pro/class-settings-apikeys.php:132
|
4609 |
-
msgid "Google API Keys"
|
4610 |
-
msgstr "Google API Keys"
|
4611 |
-
|
4612 |
-
# @ backwpup
|
4613 |
-
#: ../inc/pro/class-settings-apikeys.php:136
|
4614 |
-
msgid "Client ID:"
|
4615 |
-
msgstr "Client ID:"
|
4616 |
-
|
4617 |
-
# @ backwpup
|
4618 |
-
#: ../inc/pro/class-settings-apikeys.php:144
|
4619 |
-
msgid "Client secret:"
|
4620 |
-
msgstr "Client secret:"
|
4621 |
-
|
4622 |
-
# @ backwpup
|
4623 |
-
#: ../inc/pro/class-settings-apikeys.php:151
|
4624 |
-
msgid "Redirect URIs:"
|
4625 |
-
msgstr "Redirect URIs:"
|
4626 |
-
|
4627 |
-
# @ backwpup
|
4628 |
-
#: ../inc/pro/class-settings-apikeys.php:155
|
4629 |
-
msgid "Add this URI in a new line to the field."
|
4630 |
-
msgstr "Füge diese URI in einer neuen Zeile zum Feld hinzu."
|
4631 |
-
|
4632 |
-
# @ backwpup
|
4633 |
-
#: ../inc/pro/class-destination-folder.php:18
|
4634 |
-
msgid "Absolute path to folder for backup files:"
|
4635 |
-
msgstr "Absoluter Ordner-Pfad für Backup-Dateien:"
|
4636 |
-
|
4637 |
-
# @ backwpup
|
4638 |
-
#: ../inc/pro/class-destination-folder.php:72
|
4639 |
-
#, php-format
|
4640 |
-
msgid "%d. Try to sync files to folder …"
|
4641 |
-
msgstr "%d. Versuche Dateien mit Ordner zu synchronisieren …"
|
4642 |
-
|
4643 |
-
# @ backwpup
|
4644 |
-
#: ../inc/pro/class-destination-folder.php:76
|
4645 |
-
msgid "Retrieving file list from folder"
|
4646 |
-
msgstr "Ruft Datei-Liste vom Ordner ab"
|
4647 |
-
|
4648 |
-
# @ backwpup
|
4649 |
-
#: ../inc/pro/class-destination-folder.php:82
|
4650 |
-
msgid "Copy changed files to folder"
|
4651 |
-
msgstr "Kopiere geänderte Dateien in den Ordner"
|
4652 |
-
|
4653 |
-
# @ backwpup
|
4654 |
-
#: ../inc/pro/class-destination-folder.php:95
|
4655 |
-
#, php-format
|
4656 |
-
msgid "File %s copied"
|
4657 |
-
msgstr "Datei %s kopiert"
|
4658 |
-
|
4659 |
-
# @ backwpup
|
4660 |
-
#: ../inc/pro/class-destination-folder.php:108
|
4661 |
-
msgid "Delete not existing files from folder"
|
4662 |
-
msgstr "Lösche nicht existierende Dateien aus dem Ordner"
|
4663 |
-
|
4664 |
-
# @ backwpup
|
4665 |
-
#: ../inc/pro/class-destination-folder.php:116
|
4666 |
-
#, php-format
|
4667 |
-
msgid "Extra file %s copied"
|
4668 |
-
msgstr "Extra Datei %s kopiert"
|
4669 |
-
|
4670 |
-
# @ backwpup
|
4671 |
-
#: ../inc/pro/class-destination-folder.php:129
|
4672 |
-
#, php-format
|
4673 |
-
msgid "File %s deleted from folder"
|
4674 |
-
msgstr "File %s aus Ordner gelöscht"
|
4675 |
-
|
4676 |
-
# @ backwpup
|
4677 |
-
#: ../inc/pro/class-destination-folder.php:186
|
4678 |
-
#, php-format
|
4679 |
-
msgid "Empty folder %s deleted"
|
4680 |
-
msgstr "Leerer Ordner %s gelöscht"
|
4681 |
-
|
4682 |
-
# @ backwpup
|
4683 |
-
#: ../inc/pro/class-wizard-jobimport.php:14
|
4684 |
-
msgid "XML job import"
|
4685 |
-
msgstr "XML Auftrag Import"
|
4686 |
-
|
4687 |
-
# @ backwpup
|
4688 |
-
#: ../inc/pro/class-wizard-jobimport.php:15
|
4689 |
-
msgid "Wizard for importing BackWPup jobs from an XML file"
|
4690 |
-
msgstr "Assistent zum Importieren von BackWPup Aufträgen aus einer XML Datei"
|
4691 |
-
|
4692 |
-
# @ backwpup
|
4693 |
-
#: ../inc/pro/class-wizard-jobimport.php:32
|
4694 |
-
#: ../inc/pro/class-wizard-jobimport.php:93
|
4695 |
-
msgid "Import"
|
4696 |
-
msgstr "Import"
|
4697 |
-
|
4698 |
-
# @ backwpup
|
4699 |
-
#: ../inc/pro/class-wizard-jobimport.php:41
|
4700 |
-
msgid "Import File"
|
4701 |
-
msgstr "Import-Datei"
|
4702 |
-
|
4703 |
-
# @ backwpup
|
4704 |
-
#: ../inc/pro/class-wizard-jobimport.php:41
|
4705 |
-
msgid "Upload XML job file for import"
|
4706 |
-
msgstr "XML Arbeitsauftrag Datei hochladen zum Importieren"
|
4707 |
-
|
4708 |
-
# @ backwpup
|
4709 |
-
#: ../inc/pro/class-wizard-jobimport.php:42
|
4710 |
-
msgid "Select items to import"
|
4711 |
-
msgstr "Wähle ein Item für den Import"
|
4712 |
-
|
4713 |
-
# @ backwpup
|
4714 |
-
#: ../inc/pro/class-wizard-jobimport.php:42
|
4715 |
-
msgid "Select which job should be imported or overwritten."
|
4716 |
-
msgstr "Wähle einen Auftrag, der importiert oder überschrieben werden soll."
|
4717 |
-
|
4718 |
-
# @ backwpup
|
4719 |
-
#: ../inc/pro/class-wizard-jobimport.php:62
|
4720 |
-
msgid "Please upload your BackWPup job XML export file and we’ll import the jobs into BackWPup."
|
4721 |
-
msgstr "Bitte lade deine BackWPup-Auftrags-XML-Export-Datei hoch und wir importieren sie in BackWPup."
|
4722 |
-
|
4723 |
-
# @ backwpup
|
4724 |
-
#: ../inc/pro/class-wizard-jobimport.php:64
|
4725 |
-
msgid "Choose a file from your computer:"
|
4726 |
-
msgstr "Wähle eine Datei von deinem Computer:"
|
4727 |
-
|
4728 |
-
# @ backwpup
|
4729 |
-
#: ../inc/pro/class-wizard-jobimport.php:64
|
4730 |
-
#, php-format
|
4731 |
-
msgid "Maximum size: %s"
|
4732 |
-
msgstr "Maximale Größe: %s"
|
4733 |
-
|
4734 |
-
# @ backwpup
|
4735 |
-
#: ../inc/pro/class-wizard-jobimport.php:86
|
4736 |
-
msgid "Import Jobs"
|
4737 |
-
msgstr "Importiere Aufträge"
|
4738 |
-
|
4739 |
-
# @ backwpup
|
4740 |
-
#: ../inc/pro/class-wizard-jobimport.php:89
|
4741 |
-
msgid "Import Type"
|
4742 |
-
msgstr "Import-Typ"
|
4743 |
-
|
4744 |
-
# @ backwpup
|
4745 |
-
#: ../inc/pro/class-wizard-jobimport.php:89
|
4746 |
-
msgid "No Import"
|
4747 |
-
msgstr "Kein Import"
|
4748 |
-
|
4749 |
-
# @ backwpup
|
4750 |
-
#: ../inc/pro/class-wizard-jobimport.php:91
|
4751 |
-
msgid "Overwrite"
|
4752 |
-
msgstr "Überschreiben"
|
4753 |
-
|
4754 |
-
# @ backwpup
|
4755 |
-
#: ../inc/pro/class-wizard-jobimport.php:91
|
4756 |
-
msgid "Append"
|
4757 |
-
msgstr "Anhängen"
|
4758 |
-
|
4759 |
-
# @ backwpup
|
4760 |
-
#: ../inc/pro/class-wizard-jobimport.php:105
|
4761 |
-
msgid "Import Config"
|
4762 |
-
msgstr "Konfiguration importieren"
|
4763 |
-
|
4764 |
-
# @ backwpup
|
4765 |
-
#: ../inc/pro/class-wizard-jobimport.php:108
|
4766 |
-
msgid "Import BackWPup configuration"
|
4767 |
-
msgstr "Importiere BackWPup Konfiguration"
|
4768 |
-
|
4769 |
-
# @ backwpup
|
4770 |
-
#: ../inc/pro/class-wizard-jobimport.php:129
|
4771 |
-
msgid "File is empty. Please upload something more substantial. This error could also caused by uploads being disabled in your php.ini or by post_max_size being defined as smaller than upload_max_filesize in php.ini."
|
4772 |
-
msgstr "Datei ist leer. Bitte lade etwas mit Substanz hoch. Dieser Fehler kann begründet sein weil uploads in der php.ini oder durch post_max_size kleiner definiert sind als upload_max_filesize in php.ini."
|
4773 |
-
|
4774 |
-
# @ backwpup
|
4775 |
-
#: ../inc/pro/class-wizard-jobimport.php:144
|
4776 |
-
#, php-format
|
4777 |
-
msgid "The export file could not be found at <code>%s</code>. This is likely due to an issue with permissions."
|
4778 |
-
msgstr "Die Export-Datei konnte nicht gefunden werden <code>%s</code>. Das liegt möglicherweise an Problemen mit der Berechtigung."
|
4779 |
-
|
4780 |
-
# @ backwpup
|
4781 |
-
#: ../inc/pro/class-wizard-jobimport.php:151
|
4782 |
-
msgid "Sorry, there has been a phrase error."
|
4783 |
-
msgstr "Sorry, es gab ein Problem mit dem Begriff."
|
4784 |
-
|
4785 |
-
# @ backwpup
|
4786 |
-
#: ../inc/pro/class-wizard-jobimport.php:158
|
4787 |
-
#, php-format
|
4788 |
-
msgid "This Export file (version %s) may not be supported by this version of the importer."
|
4789 |
-
msgstr "Die Export Datei (version %s) wird wahrscheinlich nicht von dieser Version des Importers unterstützt"
|
4790 |
-
|
4791 |
-
# @ backwpup
|
4792 |
-
#: ../inc/pro/class-wizard-jobimport.php:164
|
4793 |
-
msgid "This is not a BackWPup XML file"
|
4794 |
-
msgstr "Das ist keine BackWPup XML Datei"
|
4795 |
-
|
4796 |
-
# @ backwpup
|
4797 |
-
#: ../inc/pro/class-wizard-jobimport.php:225
|
4798 |
-
#, php-format
|
4799 |
-
msgid "Job %1$s with id %2$d imported"
|
4800 |
-
msgstr "Job %1$s mit ID %2$d wurde importiert"
|
4801 |
-
|
4802 |
-
# @ backwpup
|
4803 |
-
#: ../inc/pro/class-wizard-jobimport.php:233
|
4804 |
-
msgid "BackWPup config imported"
|
4805 |
-
msgstr "BackWPup Konfiguration wurde importiert"
|
4806 |
-
|
4807 |
-
# @ backwpup
|
4808 |
-
#: ../inc/pro/class-wizard-systemtest.php:14
|
4809 |
-
msgid "System Test"
|
4810 |
-
msgstr "System Test"
|
4811 |
-
|
4812 |
-
# @ backwpup
|
4813 |
-
#: ../inc/pro/class-wizard-systemtest.php:15
|
4814 |
-
msgid "Wizard to test if BackWPup can work properly"
|
4815 |
-
msgstr "Dieser Assistent testet, ob BackWPup problemlos arbeiten kann."
|
4816 |
-
|
4817 |
-
# @ backwpup
|
4818 |
-
#: ../inc/pro/class-wizard-systemtest.php:32
|
4819 |
-
msgid "Run tests"
|
4820 |
-
msgstr "Starte die Tests"
|
4821 |
-
|
4822 |
-
# @ backwpup
|
4823 |
-
#: ../inc/pro/class-wizard-systemtest.php:41
|
4824 |
-
msgid "Environment"
|
4825 |
-
msgstr "Voraussetzungen"
|
4826 |
-
|
4827 |
-
# @ backwpup
|
4828 |
-
#: ../inc/pro/class-wizard-systemtest.php:41
|
4829 |
-
msgid "System Environment"
|
4830 |
-
msgstr "System Voraussetzungen"
|
4831 |
-
|
4832 |
-
# @ backwpup
|
4833 |
-
#: ../inc/pro/class-wizard-systemtest.php:54
|
4834 |
-
msgid "Test if BackWPup can work without problems."
|
4835 |
-
msgstr "Teste, ob BackWPup problemlos funktioniert."
|
4836 |
-
|
4837 |
-
# @ backwpup
|
4838 |
-
#: ../inc/pro/class-wizard-systemtest.php:86
|
4839 |
-
#, php-format
|
4840 |
-
msgid "You must run WordPress version 3.4 or higher to use this plugin. You are using version %s now."
|
4841 |
-
msgstr "Um dieses Plugin nutzen zu können, benötigst du mindestens WordPress 3.4, du verwendest derzeit die Version %s."
|
4842 |
-
|
4843 |
-
# @ backwpup
|
4844 |
-
#: ../inc/pro/class-wizard-systemtest.php:91
|
4845 |
-
#, php-format
|
4846 |
-
msgid "You must run PHP version 5.2.6 or higher to use this plugin. You are using version %s now."
|
4847 |
-
msgstr "Es wird die PHP Version 5.2.6 oder höher benötigt um dieses Plugin nutzen zu können. Du benutzt Version %s."
|
4848 |
-
|
4849 |
-
# @ backwpup
|
4850 |
-
#: ../inc/pro/class-wizard-systemtest.php:95
|
4851 |
-
#, php-format
|
4852 |
-
msgid "We recommend to run a PHP version above 5.3.2 to get the full plugin functionality. You are using version %s now."
|
4853 |
-
msgstr "Wir empfehlen eine PHP Version von 5.3.2 oder höher um die volle Funktionalität des Plugins nutzen zu können. Du nutzt Version %s."
|
4854 |
-
|
4855 |
-
# @ backwpup
|
4856 |
-
#: ../inc/pro/class-wizard-systemtest.php:100
|
4857 |
-
#, php-format
|
4858 |
-
msgid "You must have the MySQLi extension installed and a MySQL server version of 5.0.7 or higher to use this plugin. You are using version %s now."
|
4859 |
-
msgstr "Um dieses Plugin nutzen zu können, muss die MySQLi Erweiterung und der MySQL Server der Version 5.0.7 oder höher vorhanden sein. Du nutzt Version %s."
|
4860 |
-
|
4861 |
-
# @ backwpup
|
4862 |
-
#: ../inc/pro/class-wizard-systemtest.php:105
|
4863 |
-
msgid "PHP cURL extension must be installed to use the full plugin functionality."
|
4864 |
-
msgstr "Die cURL-Erweiterung für PHP muss installiert sein, um das Plugin im Vollem Umfang zu nutzen."
|
4865 |
-
|
4866 |
-
# @ backwpup
|
4867 |
-
#: ../inc/pro/class-wizard-systemtest.php:110
|
4868 |
-
#, php-format
|
4869 |
-
msgctxt "%1 = extension name, %2 = file suffix"
|
4870 |
-
msgid "We recommend to install the %1$s extension to generate %2$s archives."
|
4871 |
-
msgstr "Wir empfehlen die %1$s Erweiterung um %2$s Archive zu generieren."
|
4872 |
-
|
4873 |
-
# @ backwpup
|
4874 |
-
#: ../inc/pro/class-wizard-systemtest.php:133
|
4875 |
-
#, php-format
|
4876 |
-
msgctxt "Link to PHP manual"
|
4877 |
-
msgid "Please disable the deprecated <a href=\"%s\">PHP safe mode</a>."
|
4878 |
-
msgstr "Bitte schalte den veralteten <a href=\"%s\">PHP Safe-Mode</a>."
|
4879 |
-
|
4880 |
-
# @ backwpup
|
4881 |
-
#: ../inc/pro/class-wizard-systemtest.php:141
|
4882 |
-
msgid "We recommend to install the PHP FTP extension to use the FTP backup destination."
|
4883 |
-
msgstr "Wir empfehlen die PHP FTP Erweiterung zu installieren um FTP als Backup-Ziel nutzen zu können."
|
4884 |
-
|
4885 |
-
# @ backwpup
|
4886 |
-
#: ../inc/pro/class-wizard-systemtest.php:149
|
4887 |
-
#, php-format
|
4888 |
-
msgid "Temp folder %s is not read or writable. Please set proper writing permissions."
|
4889 |
-
msgstr "Temporärer Ordner %s ist weder lesbar noch beschreibbar. Bitte setze passende Berechtigungen."
|
4890 |
-
|
4891 |
-
# @ backwpup
|
4892 |
-
#: ../inc/pro/class-wizard-systemtest.php:154
|
4893 |
-
#, php-format
|
4894 |
-
msgid "Temp folder %s does not exist and cannot be created. Please create it and set proper writing permissions."
|
4895 |
-
msgstr "Temporärer Ordner %s existiert nicht oder kann nicht erstellt werden. Bitte erstelle ihn und setze passende Berechtigungen."
|
4896 |
-
|
4897 |
-
# @ backwpup
|
4898 |
-
#: ../inc/pro/class-wizard-systemtest.php:161
|
4899 |
-
#, php-format
|
4900 |
-
msgid "Log folder %s is not readable or writable. Please set proper writing permissions."
|
4901 |
-
msgstr "Log-Ordner %s ist weder lesbar noch beschreibbar. Bitte setze passende Berechtigungen."
|
4902 |
-
|
4903 |
-
# @ backwpup
|
4904 |
-
#: ../inc/pro/class-wizard-systemtest.php:165
|
4905 |
-
#, php-format
|
4906 |
-
msgid "Log folder %s does not exist and cannot be created. Please create it and set proper writing permissions."
|
4907 |
-
msgstr "Log-Ordner %s existiert nicht oder kann nicht erstellt werden. Bitte erstelle ihn und setze passende Berechtigungen."
|
4908 |
-
|
4909 |
-
# @ backwpup
|
4910 |
-
#: ../inc/pro/class-wizard-systemtest.php:171
|
4911 |
-
#, php-format
|
4912 |
-
msgid "The HTTP response test result is an error: \"%s\"."
|
4913 |
-
msgstr "Das Ergebnis des HTTP-Response-Tests ist ein Fehler: \"%s\"."
|
4914 |
-
|
4915 |
-
# @ backwpup
|
4916 |
-
#: ../inc/pro/class-wizard-systemtest.php:175
|
4917 |
-
#, php-format
|
4918 |
-
msgid "The HTTP response test result is a wrong HTTP status: %s. It should be status 200."
|
4919 |
-
msgstr "Der HTTP-Response-Test hat einen falschen HTTP-Status ergeben: %s. Es sollte Status 200 sein."
|
4920 |
-
|
4921 |
-
# @ backwpup
|
4922 |
-
#: ../inc/pro/class-wizard-systemtest.php:193
|
4923 |
-
msgid "WP-Cron seems to be broken. But it is needed to run scheduled jobs."
|
4924 |
-
msgstr "WP-Cron scheint beschädigt zu sein. Aber es wird benötigt um Aufträge planmäßig ausführen zu können."
|
4925 |
-
|
4926 |
-
# @ backwpup
|
4927 |
-
#: ../inc/pro/class-wizard-systemtest.php:198
|
4928 |
-
msgid "All tests passed without errors."
|
4929 |
-
msgstr "Alle Tests fehlerfrei bestanden."
|
4930 |
-
|
4931 |
-
# @ backwpup
|
4932 |
-
#: ../inc/pro/class-wizard-systemtest.php:201
|
4933 |
-
msgid "There is no error, but some warnings. BackWPup will work, but with limitations."
|
4934 |
-
msgstr "Keine Fehler, nur Warnungen. BackWPup funktioniert mit Einschränkungen."
|
4935 |
-
|
4936 |
-
# @ backwpup
|
4937 |
-
#: ../inc/pro/class-wizard-systemtest.php:204
|
4938 |
-
msgid "There are errors. Please correct them, or BackWPup cannot work."
|
4939 |
-
msgstr "Es sind Fehler aufgetreten. Bitte behebe sie, damit BackWPup ordnungsgemäß funktioniert."
|
4940 |
-
|
4941 |
-
# @ backwpup
|
4942 |
-
#: ../inc/pro/class-destination-s3.php:17
|
4943 |
-
#: ../inc/pro/class-destination-s3-v1.php:17
|
4944 |
-
msgid "Select a S3 service:"
|
4945 |
-
msgstr "Wähle einen S3 Service:"
|
4946 |
-
|
4947 |
-
# @ backwpup
|
4948 |
-
#: ../inc/pro/class-destination-s3.php:33
|
4949 |
-
#: ../inc/pro/class-destination-s3-v1.php:33
|
4950 |
-
msgid "or set an S3 Server URL:"
|
4951 |
-
msgstr "oder setze eine S3 Server URL:"
|
4952 |
-
|
4953 |
-
# @ backwpup
|
4954 |
-
#: ../inc/pro/class-destination-s3.php:36
|
4955 |
-
#: ../inc/pro/class-destination-msazure.php:19
|
4956 |
-
#: ../inc/pro/class-destination-s3-v1.php:36
|
4957 |
-
msgid "Access Key:"
|
4958 |
-
msgstr "Zugangsschlüssel (Access Key):"
|
4959 |
-
|
4960 |
-
# @ backwpup
|
4961 |
-
#: ../inc/pro/class-destination-s3.php:39
|
4962 |
-
#: ../inc/pro/class-destination-s3-v1.php:39
|
4963 |
-
msgid "Secret Key:"
|
4964 |
-
msgstr "Secret Key:"
|
4965 |
-
|
4966 |
-
# @ backwpup
|
4967 |
-
#: ../inc/pro/class-destination-s3.php:42
|
4968 |
-
#: ../inc/pro/class-destination-s3-v1.php:42
|
4969 |
-
msgid "Bucket:"
|
4970 |
-
msgstr "Bucket:"
|
4971 |
-
|
4972 |
-
# @ backwpup
|
4973 |
-
#: ../inc/pro/class-destination-s3.php:52
|
4974 |
-
#: ../inc/pro/class-destination-s3-v1.php:52
|
4975 |
-
msgid "New Bucket:"
|
4976 |
-
msgstr "Neues Bucket: "
|
4977 |
-
|
4978 |
-
# @ backwpup
|
4979 |
-
#: ../inc/pro/class-destination-s3.php:54
|
4980 |
-
#: ../inc/pro/class-destination-s3-v1.php:54
|
4981 |
-
msgid "Folder in bucket:"
|
4982 |
-
msgstr "Ordner im Bucket:"
|
4983 |
-
|
4984 |
-
# @ backwpup
|
4985 |
-
#: ../inc/pro/class-destination-s3.php:154
|
4986 |
-
#: ../inc/pro/class-destination-s3-v1.php:156
|
4987 |
-
#, php-format
|
4988 |
-
msgid "%d. Trying to sync files to S3 Service …"
|
4989 |
-
msgstr "%d. Versuche Dateien mit dem S3 Service zu synchronisieren …"
|
4990 |
-
|
4991 |
-
# @ backwpup
|
4992 |
-
#: ../inc/pro/class-destination-s3.php:188
|
4993 |
-
#: ../inc/pro/class-destination-s3-v1.php:195
|
4994 |
-
msgid "Retrieving file list from S3."
|
4995 |
-
msgstr "Rufe Dateiliste von S3 ab."
|
4996 |
-
|
4997 |
-
# @ backwpup
|
4998 |
-
#: ../inc/pro/class-destination-s3.php:246
|
4999 |
-
#: ../inc/pro/class-destination-s3-v1.php:251
|
5000 |
-
msgid "Upload changed files to S3."
|
5001 |
-
msgstr "Upload der geänderten Dateien zu S3."
|
5002 |
-
|
5003 |
-
# @ backwpup
|
5004 |
-
#: ../inc/pro/class-destination-s3.php:261
|
5005 |
-
#: ../inc/pro/class-destination-s3-v1.php:263
|
5006 |
-
#, php-format
|
5007 |
-
msgid "File %s uploaded to S3."
|
5008 |
-
msgstr "Datei %s zu S3 hochgeladen."
|
5009 |
-
|
5010 |
-
# @ backwpup
|
5011 |
-
#: ../inc/pro/class-destination-s3.php:289
|
5012 |
-
#: ../inc/pro/class-destination-s3-v1.php:288
|
5013 |
-
#, php-format
|
5014 |
-
msgid "Extra file %s uploaded to S3."
|
5015 |
-
msgstr "Extra Datei %s zu S3 hochgeladen."
|
5016 |
-
|
5017 |
-
# @ backwpup
|
5018 |
-
#: ../inc/pro/class-destination-s3.php:302
|
5019 |
-
#: ../inc/pro/class-destination-s3-v1.php:301
|
5020 |
-
msgid "Delete nonexistent files on S3"
|
5021 |
-
msgstr "Lösche nicht existierende Dateien von S3"
|
5022 |
-
|
5023 |
-
# @ backwpup
|
5024 |
-
#: ../inc/pro/class-destination-s3.php:309
|
5025 |
-
#: ../inc/pro/class-destination-s3-v1.php:304
|
5026 |
-
#, php-format
|
5027 |
-
msgid "File %s deleted from S3."
|
5028 |
-
msgstr "Datei %s von S3 gelöscht."
|
5029 |
-
|
5030 |
-
# @ backwpup
|
5031 |
-
#: ../inc/pro/class-destination-ftp.php:17
|
5032 |
-
msgid "Hostname:"
|
5033 |
-
msgstr "Hostname:"
|
5034 |
-
|
5035 |
-
# @ backwpup
|
5036 |
-
#: ../inc/pro/class-destination-ftp.php:33
|
5037 |
-
msgid "Folder on server:"
|
5038 |
-
msgstr "Ordner auf dem Server:"
|
5039 |
-
|
5040 |
-
# @ backwpup
|
5041 |
-
#: ../inc/pro/class-destination-ftp.php:39
|
5042 |
-
msgid "Maximum number of backup files to keep in folder:"
|
5043 |
-
msgstr "Maximale Anzahl an Backup-Dateien im Ordner:"
|
5044 |
-
|
5045 |
-
# @ backwpup
|
5046 |
-
#: ../inc/pro/class-destination-ftp.php:42
|
5047 |
-
msgid "(Oldest files will be deleted first.)"
|
5048 |
-
msgstr "(Älteste Dateien werden zuerst gelöscht.)"
|
5049 |
-
|
5050 |
-
# @ backwpup
|
5051 |
-
#: ../inc/pro/class-jobtype-file.php:19
|
5052 |
-
msgid "Backup WordPress main files"
|
5053 |
-
msgstr "Backup der Wordpress Hauptdateien"
|
5054 |
-
|
5055 |
-
# @ backwpup
|
5056 |
-
#: ../inc/pro/class-jobtype-file.php:23
|
5057 |
-
msgid "Backup blog content folder"
|
5058 |
-
msgstr "Backup des Blog-Content Ordners"
|
5059 |
-
|
5060 |
-
# @ backwpup
|
5061 |
-
#: ../inc/pro/class-jobtype-file.php:27
|
5062 |
-
msgid "Backup blog plugins"
|
5063 |
-
msgstr "Backup Blog Plugins"
|
5064 |
-
|
5065 |
-
# @ backwpup
|
5066 |
-
#: ../inc/pro/class-jobtype-file.php:31
|
5067 |
-
msgid "Backup blog themes"
|
5068 |
-
msgstr "Backup der Blog-Themes"
|
5069 |
-
|
5070 |
-
# @ backwpup
|
5071 |
-
#: ../inc/pro/class-jobtype-file.php:35
|
5072 |
-
msgid "Backup blog uploads folder"
|
5073 |
-
msgstr "Backup der Blog-Uploads Ordner"
|
5074 |
-
|
5075 |
-
# @ backwpup
|
5076 |
-
#: ../inc/pro/class-wizard-job.php:15
|
5077 |
-
msgid "Create a job"
|
5078 |
-
msgstr "Job erstellen"
|
5079 |
-
|
5080 |
-
# @ backwpup
|
5081 |
-
#: ../inc/pro/class-wizard-job.php:16
|
5082 |
-
msgid "Choose a job"
|
5083 |
-
msgstr "Job auswählen"
|
5084 |
-
|
5085 |
-
# @ backwpup
|
5086 |
-
#: ../inc/pro/class-wizard-job.php:37
|
5087 |
-
msgid "Job Types"
|
5088 |
-
msgstr "Arbeitsauftrag Typen"
|
5089 |
-
|
5090 |
-
# @ backwpup
|
5091 |
-
#: ../inc/pro/class-wizard-job.php:37
|
5092 |
-
msgid "Select a task for your job."
|
5093 |
-
msgstr "Wähle eine Aufgabe für deinen Auftrag."
|
5094 |
-
|
5095 |
-
# @ backwpup
|
5096 |
-
#: ../inc/pro/class-wizard-job.php:51
|
5097 |
-
msgid "Archive Settings"
|
5098 |
-
msgstr "Archiv Einstellungen"
|
5099 |
-
|
5100 |
-
# @ backwpup
|
5101 |
-
#: ../inc/pro/class-wizard-job.php:51
|
5102 |
-
msgid "Settings for the Backup Archive"
|
5103 |
-
msgstr "Einstellungen für das Backup Archiv"
|
5104 |
-
|
5105 |
-
# @ backwpup
|
5106 |
-
#: ../inc/pro/class-wizard-job.php:53
|
5107 |
-
msgid "Where would you like to store the backup file?"
|
5108 |
-
msgstr "Wo wollen Sie die Backup-Datei speichern?"
|
5109 |
-
|
5110 |
-
# @ backwpup
|
5111 |
-
#: ../inc/pro/class-wizard-job.php:63
|
5112 |
-
#: ../inc/pro/class-wizard-job.php:272
|
5113 |
-
msgid "Scheduling"
|
5114 |
-
msgstr "Planung"
|
5115 |
-
|
5116 |
-
# @ backwpup
|
5117 |
-
#: ../inc/pro/class-wizard-job.php:63
|
5118 |
-
msgid "When would you like to start the job?"
|
5119 |
-
msgstr "Wann soll der Auftrag gestartet werden?"
|
5120 |
-
|
5121 |
-
# @ backwpup
|
5122 |
-
#: ../inc/pro/class-wizard-job.php:218
|
5123 |
-
msgid "Select one or more tasks for your backup job."
|
5124 |
-
msgstr "Wähle eine zusätzliche Aufgabe für deinen Backup-Auftrag."
|
5125 |
-
|
5126 |
-
# @ backwpup
|
5127 |
-
#: ../inc/pro/class-wizard-job.php:273
|
5128 |
-
msgid "Activate scheduling"
|
5129 |
-
msgstr "Aktive Planung"
|
5130 |
-
|
5131 |
-
# @ backwpup
|
5132 |
-
#: ../inc/pro/class-wizard-job.php:365
|
5133 |
-
msgid "Sync file by file to destination"
|
5134 |
-
msgstr "Synchronisiere Datei für Datei zum Zielverzeichnis"
|
5135 |
-
|
5136 |
-
# @ backwpup
|
5137 |
-
#: ../inc/pro/class-wizard-job.php:376
|
5138 |
-
msgid "Select a compression type for the backup archive"
|
5139 |
-
msgstr "Wähle einen Kompressions-Typ für das Backup Archiv"
|
5140 |
-
|
5141 |
-
# @ backwpup
|
5142 |
-
#: ../inc/pro/class-wizard-job.php:379
|
5143 |
-
msgid "Archive compression type"
|
5144 |
-
msgstr "Archiv Kompressions-Typ"
|
5145 |
-
|
5146 |
-
# @ backwpup
|
5147 |
-
#: ../inc/pro/class-wizard-job.php:411
|
5148 |
-
msgid "Where to store the files"
|
5149 |
-
msgstr "Wo die Dateien abgelegt werden"
|
5150 |
-
|
5151 |
-
# @ backwpup
|
5152 |
-
#: ../inc/pro/class-wizard-job.php:586
|
5153 |
-
#, php-format
|
5154 |
-
msgid "Wizard: %1$s"
|
5155 |
-
msgstr "Assistent: %1$s"
|
5156 |
-
|
5157 |
-
# @ backwpup
|
5158 |
-
#: ../inc/pro/class-wizard-job.php:605
|
5159 |
-
#, php-format
|
5160 |
-
msgid "New job %s generated."
|
5161 |
-
msgstr "Neuer Auftrag %s erstellt."
|
5162 |
-
|
5163 |
-
# @ backwpup
|
5164 |
-
#: ../inc/pro/class-wizard-job.php:617
|
5165 |
-
msgid "Create Job"
|
5166 |
-
msgstr "Erstelle Auftrag"
|
5167 |
-
|
5168 |
-
# @ backwpup
|
5169 |
-
#: ../inc/pro/class-wizard-job.php:642
|
5170 |
-
#: ../inc/pro/class-wizard-job.php:643
|
5171 |
-
msgid "Database Backup and XML Export (Daily)"
|
5172 |
-
msgstr "DB Sicherung & XML Export (täglich)"
|
5173 |
-
|
5174 |
-
# @ backwpup
|
5175 |
-
#: ../inc/pro/class-wizard-job.php:660
|
5176 |
-
#: ../inc/pro/class-wizard-job.php:661
|
5177 |
-
msgid "Database Check (Weekly)"
|
5178 |
-
msgstr "Datenbank Überprüfung (wöchentlich)"
|
5179 |
-
|
5180 |
-
# @ backwpup
|
5181 |
-
#: ../inc/pro/class-wizard-job.php:685
|
5182 |
-
#: ../inc/pro/class-wizard-job.php:686
|
5183 |
-
msgid "Backup all files"
|
5184 |
-
msgstr "Sicherung aller Dateien"
|
5185 |
-
|
5186 |
-
# @ backwpup
|
5187 |
-
#: ../inc/pro/class-wizard-job.php:700
|
5188 |
-
msgid "Essential files + list of plugins"
|
5189 |
-
msgstr "Wichtige Dateien + Pluginliste"
|
5190 |
-
|
5191 |
-
# @ backwpup
|
5192 |
-
#: ../inc/pro/class-wizard-job.php:701
|
5193 |
-
msgid "Backup essential files and folders, plus a list of installed plugins."
|
5194 |
-
msgstr "Backup von wichtigen Dateien und Ordner, plus einer Liste von installierten Plugins."
|
5195 |
-
|
5196 |
-
# @ backwpup
|
5197 |
-
#: ../inc/pro/class-wizard-job.php:716
|
5198 |
-
#: ../inc/pro/class-wizard-job.php:717
|
5199 |
-
msgid "Custom configuration"
|
5200 |
-
msgstr "Angepasste Konfiguration"
|
5201 |
-
|
5202 |
-
# @ backwpup
|
5203 |
-
#: ../inc/pro/class-pro.php:102
|
5204 |
-
msgid "Glacier"
|
5205 |
-
msgstr "Glacier"
|
5206 |
-
|
5207 |
-
# @ backwpup
|
5208 |
-
#: ../inc/pro/class-pro.php:121
|
5209 |
-
msgid "GDrive"
|
5210 |
-
msgstr "GDrive"
|
5211 |
-
|
5212 |
-
# @ backwpup
|
5213 |
-
#: ../inc/pro/class-pro.php:174
|
5214 |
-
#: ../inc/pro/class-pro.php:210
|
5215 |
-
msgid "Wizards"
|
5216 |
-
msgstr "Assistenten"
|
5217 |
-
|
5218 |
-
# @ backwpup
|
5219 |
-
#: ../inc/pro/class-jobtype-wpexp.php:17
|
5220 |
-
msgid "Items to export:"
|
5221 |
-
msgstr "Zu exportierendes Item:"
|
5222 |
-
|
5223 |
-
# @ backwpup
|
5224 |
-
#: ../inc/pro/class-destination-msazure.php:17
|
5225 |
-
msgid "Account Name:"
|
5226 |
-
msgstr "Kontoname/ Benutzername:"
|
5227 |
-
|
5228 |
-
# @ backwpup
|
5229 |
-
#: ../inc/pro/class-destination-msazure.php:21
|
5230 |
-
#: ../inc/pro/class-destination-rsc.php:38
|
5231 |
-
msgid "Container:"
|
5232 |
-
msgstr "Container:"
|
5233 |
-
|
5234 |
-
# @ backwpup
|
5235 |
-
#: ../inc/pro/class-destination-msazure.php:28
|
5236 |
-
#: ../inc/pro/class-destination-rsc.php:47
|
5237 |
-
msgid "Create container:"
|
5238 |
-
msgstr "Container erstellen:"
|
5239 |
-
|
5240 |
-
# @ backwpup
|
5241 |
-
#: ../inc/pro/class-destination-msazure.php:30
|
5242 |
-
#: ../inc/pro/class-destination-rsc.php:49
|
5243 |
-
msgid "Folder in container:"
|
5244 |
-
msgstr "Ordner im Container:"
|
5245 |
-
|
5246 |
-
# @ backwpup
|
5247 |
-
#: ../inc/pro/class-destination-msazure.php:100
|
5248 |
-
#, php-format
|
5249 |
-
msgid "%d. Trying to sync files with Microsoft Azure (Blob) …"
|
5250 |
-
msgstr "%d. Versuche Dateien mit Microsoft Azure (Blob) zu synchronisieren …"
|
5251 |
-
|
5252 |
-
# @ backwpup
|
5253 |
-
#: ../inc/pro/class-destination-msazure.php:135
|
5254 |
-
msgid "Retrieving file list from MS Azure."
|
5255 |
-
msgstr "Rufe Dateiliste von MS Azure ab."
|
5256 |
-
|
5257 |
-
# @ backwpup
|
5258 |
-
#: ../inc/pro/class-destination-msazure.php:151
|
5259 |
-
msgid "Upload changed files to MS Azure."
|
5260 |
-
msgstr "Upload der geänderten Dateien zu MS Azure."
|
5261 |
-
|
5262 |
-
# @ backwpup
|
5263 |
-
#: ../inc/pro/class-destination-msazure.php:163
|
5264 |
-
#, php-format
|
5265 |
-
msgid "File %s uploaded to MS Azure."
|
5266 |
-
msgstr "Datei %s zu MS Azure hochgeladen."
|
5267 |
-
|
5268 |
-
# @ backwpup
|
5269 |
-
#: ../inc/pro/class-destination-msazure.php:189
|
5270 |
-
#, php-format
|
5271 |
-
msgid "Extra file %s uploaded to MS Azure."
|
5272 |
-
msgstr "Extra Datei %s zu MS Azure hochgeladen."
|
5273 |
-
|
5274 |
-
# @ backwpup
|
5275 |
-
#: ../inc/pro/class-destination-msazure.php:202
|
5276 |
-
msgid "Delete nonexistent files on MS Azure."
|
5277 |
-
msgstr "Lösche nicht existierende Dateien auf MS Azure."
|
5278 |
-
|
5279 |
-
# @ backwpup
|
5280 |
-
#: ../inc/pro/class-destination-msazure.php:205
|
5281 |
-
#, php-format
|
5282 |
-
msgid "File %s deleted from MS Azure."
|
5283 |
-
msgstr "Datei %s von MS Azure gelöscht."
|
5284 |
-
|
5285 |
-
# @ backwpup
|
5286 |
-
#: ../inc/pro/class-destination-dropbox.php:24
|
5287 |
-
msgid "Auth Code:"
|
5288 |
-
msgstr "Auth Code:"
|
5289 |
-
|
5290 |
-
# @ backwpup
|
5291 |
-
#: ../inc/pro/class-destination-dropbox.php:27
|
5292 |
-
msgid "Get auth code"
|
5293 |
-
msgstr "Hole Authentifizierungscode"
|
5294 |
-
|
5295 |
-
# @ backwpup
|
5296 |
-
#: ../inc/pro/class-destination-dropbox.php:34
|
5297 |
-
#: ../inc/pro/class-destination-gdrive.php:249
|
5298 |
-
#: ../inc/pro/class-destination-gdrive.php:255
|
5299 |
-
msgid "Login:"
|
5300 |
-
msgstr "Anmelden:"
|
5301 |
-
|
5302 |
-
# @ backwpup
|
5303 |
-
#: ../inc/pro/class-destination-dropbox.php:38
|
5304 |
-
#: ../inc/pro/class-destination-gdrive.php:260
|
5305 |
-
msgid "Folder:"
|
5306 |
-
msgstr "Ordner:"
|
5307 |
-
|
5308 |
-
# @ backwpup
|
5309 |
-
#: ../inc/pro/class-destination-dropbox.php:105
|
5310 |
-
#, php-format
|
5311 |
-
msgid "%d. Try to sync files to Dropbox …"
|
5312 |
-
msgstr "%d. Versuche Dateien mit Dropbox zu synchronisieren …"
|
5313 |
-
|
5314 |
-
# @ backwpup
|
5315 |
-
#: ../inc/pro/class-destination-dropbox.php:138
|
5316 |
-
msgid "Retrieving file list from Dropbox"
|
5317 |
-
msgstr "Empfange Dateiliste von Dropbox"
|
5318 |
-
|
5319 |
-
# @ backwpup
|
5320 |
-
#: ../inc/pro/class-destination-dropbox.php:152
|
5321 |
-
msgid "Upload changed files to Dropbox"
|
5322 |
-
msgstr "Lade geänderte Datei in die Dropbox"
|
5323 |
-
|
5324 |
-
# @ backwpup
|
5325 |
-
#: ../inc/pro/class-destination-dropbox.php:174
|
5326 |
-
#, php-format
|
5327 |
-
msgid "File %s uploaded to Dropbox"
|
5328 |
-
msgstr "Datei %s zu Dropbox hochgeladen"
|
5329 |
-
|
5330 |
-
# @ backwpup
|
5331 |
-
#: ../inc/pro/class-destination-dropbox.php:201
|
5332 |
-
#, php-format
|
5333 |
-
msgid "Extra file %s uploaded to Dropbox"
|
5334 |
-
msgstr "Extra Datei %s zu Dropbox hochgeladen"
|
5335 |
-
|
5336 |
-
# @ backwpup
|
5337 |
-
#: ../inc/pro/class-destination-dropbox.php:210
|
5338 |
-
msgid "Delete not existing files from Dropbox"
|
5339 |
-
msgstr "Lösche nicht existierende Dateien aus Dropbox"
|
5340 |
-
|
5341 |
-
# @ backwpup
|
5342 |
-
#: ../inc/pro/class-destination-dropbox.php:217
|
5343 |
-
#, php-format
|
5344 |
-
msgid "Folder %s deleted from Dropbox"
|
5345 |
-
msgstr "Ordner %s aus Dropbox gelöscht"
|
5346 |
-
|
5347 |
-
# @ backwpup
|
5348 |
-
#: ../inc/pro/class-destination-dropbox.php:235
|
5349 |
-
#, php-format
|
5350 |
-
msgid "File %s deleted from Dropbox"
|
5351 |
-
msgstr "Datei %s aus Dropbox gelöscht"
|
5352 |
-
|
5353 |
-
# @ backwpup
|
5354 |
-
#: ../inc/pro/class-jobtype-dbdump.php:89
|
5355 |
-
msgid "Backup only WordPress Database tables"
|
5356 |
-
msgstr "Nur die WordPress Datenbank Tabellen sichern"
|
5357 |
-
|
5358 |
-
# @ backwpup
|
5359 |
-
#: ../inc/pro/class-jobtype-dbdump.php:109
|
5360 |
-
msgid "Database connection"
|
5361 |
-
msgstr "Datenbank Verbindung"
|
5362 |
-
|
5363 |
-
# @ backwpup
|
5364 |
-
#: ../inc/pro/class-jobtype-dbdump.php:113
|
5365 |
-
msgid "Use WordPress database connection."
|
5366 |
-
msgstr "Nutze WordPress-Datenbankverbindung"
|
5367 |
-
|
5368 |
-
# @ backwpup
|
5369 |
-
#: ../inc/pro/class-jobtype-dbdump.php:117
|
5370 |
-
msgid "Host:"
|
5371 |
-
msgstr "Host (Server):"
|
5372 |
-
|
5373 |
-
# @ backwpup
|
5374 |
-
#: ../inc/pro/class-jobtype-dbdump.php:120
|
5375 |
-
msgid "User:"
|
5376 |
-
msgstr "Benutzer: "
|
5377 |
-
|
5378 |
-
# @ backwpup
|
5379 |
-
#: ../inc/pro/class-jobtype-dbdump.php:127
|
5380 |
-
msgid "Charset:"
|
5381 |
-
msgstr "Charset: "
|
5382 |
-
|
5383 |
-
# @ backwpup
|
5384 |
-
#: ../inc/pro/class-jobtype-dbdump.php:138
|
5385 |
-
msgid "Database:"
|
5386 |
-
msgstr "Datenbank:"
|
5387 |
-
|
5388 |
-
# @ backwpup
|
5389 |
-
#: ../inc/pro/class-jobtype-dbdump.php:166
|
5390 |
-
msgid "Database Backup type"
|
5391 |
-
msgstr "Datenbank Backup Typ"
|
5392 |
-
|
5393 |
-
# @ backwpup
|
5394 |
-
#: ../inc/pro/class-jobtype-dbdump.php:170
|
5395 |
-
msgid "SQL File (with mysqli)"
|
5396 |
-
msgstr "SQL-Datei (mit mysqli)"
|
5397 |
-
|
5398 |
-
# @ backwpup
|
5399 |
-
#: ../inc/pro/class-jobtype-dbdump.php:171
|
5400 |
-
msgid "SQL File (with mysqldump)"
|
5401 |
-
msgstr "SQL-Datei (mit mysqldump)"
|
5402 |
-
|
5403 |
-
# @ backwpup
|
5404 |
-
#: ../inc/pro/class-jobtype-dbdump.php:172
|
5405 |
-
msgid "XML File (phpMyAdmin schema)"
|
5406 |
-
msgstr "XML Datei (phpMyAdmin Schema)"
|
5407 |
-
|
5408 |
-
# @ backwpup
|
5409 |
-
#: ../inc/pro/class-jobtype-dbdump.php:178
|
5410 |
-
msgid "Path to <em>mysqldump</em> file"
|
5411 |
-
msgstr "Pfad zur <em>mysqldump</em> Datei"
|
5412 |
-
|
5413 |
-
# @ backwpup
|
5414 |
-
#: ../inc/pro/class-jobtype-dbdump.php:555
|
5415 |
-
#, php-format
|
5416 |
-
msgid "Added database backup \"%1$s\" with %2$s to backup file list"
|
5417 |
-
msgstr "Datenbank-Backup \"%1$s\" mit %2$s zur Backup-Datei-Liste hinzugefügt"
|
5418 |
-
|
5419 |
-
# @ backwpup
|
5420 |
-
#: ../inc/pro/class-jobtype-dbdump.php:576
|
5421 |
-
#, php-format
|
5422 |
-
msgid "%d. Try to backup MySQL system …"
|
5423 |
-
msgstr "%d. Versuche, das MySQL-System zu sichern …"
|
5424 |
-
|
5425 |
-
# @ backwpup
|
5426 |
-
#: ../inc/pro/class-jobtype-dbdump.php:583
|
5427 |
-
msgid "Executing of system commands not allowed. Please use backup with mysqli."
|
5428 |
-
msgstr "Ausführung von Systembefehlen nicht erlaubt. Bitte nutze Backup mit mysqli."
|
5429 |
-
|
5430 |
-
# @ backwpup
|
5431 |
-
#: ../inc/pro/class-jobtype-dbdump.php:588
|
5432 |
-
#, php-format
|
5433 |
-
msgid "%s file not in open basedir of PHP."
|
5434 |
-
msgstr "Datei %s nicht im open basedir von PHP."
|
5435 |
-
|
5436 |
-
# @ backwpup
|
5437 |
-
#: ../inc/pro/class-jobtype-dbdump.php:593
|
5438 |
-
#, php-format
|
5439 |
-
msgid "%s file not found. Please correct the path for the mysqldump file."
|
5440 |
-
msgstr "Datei %s nicht gefunden. Bitte korrigiere den Pfad für die mysqldump-Datei."
|
5441 |
-
|
5442 |
-
# @ backwpup
|
5443 |
-
#: ../inc/pro/class-jobtype-dbdump.php:670
|
5444 |
-
#, php-format
|
5445 |
-
msgctxt "Executed exec() command"
|
5446 |
-
msgid "CLI Exec: %s"
|
5447 |
-
msgstr "CLI Exec: %s"
|
5448 |
-
|
5449 |
-
# @ backwpup
|
5450 |
-
#: ../inc/pro/class-jobtype-dbdump.php:676
|
5451 |
-
msgid "Usage error."
|
5452 |
-
msgstr "Usage-Fehler"
|
5453 |
-
|
5454 |
-
# @ backwpup
|
5455 |
-
#: ../inc/pro/class-jobtype-dbdump.php:677
|
5456 |
-
msgid "MySQL Server Error. This could be an issue with permissions. Try using database backup with mysqli."
|
5457 |
-
msgstr "Fehler des MySQL-Servers. Dies könnte ein Problem mit Berechtigungen sein. Versuche ein Datenbank mit mysqli."
|
5458 |
-
|
5459 |
-
# @ backwpup
|
5460 |
-
#: ../inc/pro/class-jobtype-dbdump.php:678
|
5461 |
-
msgid "Error during consistency checks."
|
5462 |
-
msgstr "Fehler während Konsistenzprüfung."
|
5463 |
-
|
5464 |
-
# @ backwpup
|
5465 |
-
#: ../inc/pro/class-jobtype-dbdump.php:679
|
5466 |
-
msgid "Not enough memory."
|
5467 |
-
msgstr "Nicht genug Speicher."
|
5468 |
-
|
5469 |
-
# @ backwpup
|
5470 |
-
#: ../inc/pro/class-jobtype-dbdump.php:680
|
5471 |
-
msgid "Error during writing of SQL backup file."
|
5472 |
-
msgstr "Fehler beim Schreiben der SQL-Backup-Datei."
|
5473 |
-
|
5474 |
-
# @ backwpup
|
5475 |
-
#: ../inc/pro/class-jobtype-dbdump.php:681
|
5476 |
-
msgid "Illegal table"
|
5477 |
-
msgstr "Ungültige Tabelle"
|
5478 |
-
|
5479 |
-
# @ backwpup
|
5480 |
-
#: ../inc/pro/class-jobtype-dbdump.php:686
|
5481 |
-
#, php-format
|
5482 |
-
msgid "mysqldump returned: (%d) %s"
|
5483 |
-
msgstr "mysqldump hat zurückgegeben: (%d) %s"
|
5484 |
-
|
5485 |
-
# @ backwpup
|
5486 |
-
#: ../inc/pro/class-jobtype-dbdump.php:699
|
5487 |
-
msgid "Can not create mysql backup with mysqldump command"
|
5488 |
-
msgstr "Keine Datenbanksicherung mit System-Kommando mysqldump möglich"
|
5489 |
-
|
5490 |
-
# @ backwpup
|
5491 |
-
#: ../inc/pro/class-jobtype-dbdump.php:747
|
5492 |
-
#, php-format
|
5493 |
-
msgid "%d. Try to backup database as XML …"
|
5494 |
-
msgstr "%d. Versuche, Datenbank als XML zu sichern …"
|
5495 |
-
|
5496 |
-
# @ backwpup
|
5497 |
-
#: ../inc/pro/class-jobtype-dbdump.php:800
|
5498 |
-
msgid "No tables for XML backup"
|
5499 |
-
msgstr "Es gibt keine Tabellen für einen XML Backup"
|
5500 |
-
|
5501 |
-
# @ backwpup
|
5502 |
-
#: ../inc/pro/class-jobtype-dbdump.php:837
|
5503 |
-
#, php-format
|
5504 |
-
msgid "Dump database create view \"%s\""
|
5505 |
-
msgstr "Datenbank Backup CREATE VIEW \"%s\""
|
5506 |
-
|
5507 |
-
# @ backwpup
|
5508 |
-
#: ../inc/pro/class-jobtype-dbdump.php:854
|
5509 |
-
#, php-format
|
5510 |
-
msgid "Dump database structure \"%s\""
|
5511 |
-
msgstr "Backup der Datenbank Struktur \"%s\""
|
5512 |
-
|
5513 |
-
# @ backwpup
|
5514 |
-
#: ../inc/pro/class-jobtype-dbdump.php:894
|
5515 |
-
#, php-format
|
5516 |
-
msgid "Dump table \"%s\" data"
|
5517 |
-
msgstr "Backup der Tabellen Daten von \"%s\""
|
5518 |
-
|
5519 |
-
# @ backwpup
|
5520 |
-
#: ../inc/pro/class-jobtype-dbdump.php:963
|
5521 |
-
#, php-format
|
5522 |
-
msgid "Added database XML dump \"%1$s\" with %2$s to backup file list"
|
5523 |
-
msgstr "XML Datenbank Backup \"%1$s\" mit %2$s zur Backup Datei Liste hinzugefügt"
|
5524 |
-
|
5525 |
-
# @ backwpup
|
5526 |
-
#: ../inc/pro/class-jobtype-dbdump.php:966
|
5527 |
-
msgid "Database XML backup done!"
|
5528 |
-
msgstr "Datenbank XML Backup erstellt!"
|
5529 |
-
|
5530 |
-
# @ backwpup
|
5531 |
-
#: ../inc/pro/class-destination-s3-v1.php:29
|
5532 |
-
msgid "Hosteurope Cloud Storage"
|
5533 |
-
msgstr "Hosteurope Cloud Storage"
|
5534 |
-
|
5535 |
-
# @ backwpup
|
5536 |
-
#: ../inc/pro/class-marketpress-documentation.php:175
|
5537 |
-
msgid "Loading Menu ..."
|
5538 |
-
msgstr "Lade Menü..."
|
5539 |
-
|
5540 |
-
# @ backwpup
|
5541 |
-
#: ../inc/pro/class-marketpress-documentation.php:219
|
5542 |
-
#: ../inc/pro/class-marketpress-documentation.php:335
|
5543 |
-
#, php-format
|
5544 |
-
msgctxt "%s = Remote Code"
|
5545 |
-
msgid "Could not connect to remote host, code %d. Please try again later."
|
5546 |
-
msgstr "Verbindung zum Remote Host nicht möglich, Code %d. Bitte versuche es später noch einmal."
|
5547 |
-
|
5548 |
-
# @ backwpup
|
5549 |
-
#: ../inc/pro/class-marketpress-documentation.php:230
|
5550 |
-
#: ../inc/pro/class-marketpress-documentation.php:346
|
5551 |
-
msgid "Could not find content for this page. Please try again later."
|
5552 |
-
msgstr "Für diese Seite konnten kein Inhalte gefunden werden. Bitte versuche es später nocheinmal."
|
5553 |
-
|
5554 |
-
# @ backwpup
|
5555 |
-
#: ../inc/pro/class-marketpress-documentation.php:236
|
5556 |
-
#: ../inc/pro/class-marketpress-documentation.php:351
|
5557 |
-
msgid "Could not connect to remote host. Please try again later."
|
5558 |
-
msgstr "Konnte nicht zum Remote-Host verbinden. Bitte versuche es später noch einmal."
|
5559 |
-
|
5560 |
-
# @ backwpup
|
5561 |
-
#: ../inc/pro/class-marketpress-documentation.php:282
|
5562 |
-
#: ../inc/pro/class-marketpress-documentation.php:290
|
5563 |
-
msgid "Loading Content ..."
|
5564 |
-
msgstr "Lade Inhalt..."
|
5565 |
-
|
5566 |
-
# @ backwpup
|
5567 |
-
#: ../inc/pro/class-page-wizard.php:122
|
5568 |
-
msgid "No BackWPup Wizard Session found!"
|
5569 |
-
msgstr "Keine BackWPup-Assistent-Sitzung gefunden!"
|
5570 |
-
|
5571 |
-
# @ backwpup
|
5572 |
-
#: ../inc/pro/class-page-wizard.php:134
|
5573 |
-
#: ../inc/pro/class-page-wizard.php:442
|
5574 |
-
msgid "Cancel"
|
5575 |
-
msgstr "Abbrechen"
|
5576 |
-
|
5577 |
-
# @ backwpup
|
5578 |
-
#: ../inc/pro/class-page-wizard.php:169
|
5579 |
-
#: ../inc/pro/class-page-wizard.php:437
|
5580 |
-
#: ../inc/pro/class-page-wizard.php:470
|
5581 |
-
msgid "Next ›"
|
5582 |
-
msgstr "Weiter ›"
|
5583 |
-
|
5584 |
-
# @ backwpup
|
5585 |
-
#: ../inc/pro/class-page-wizard.php:186
|
5586 |
-
#: ../inc/pro/class-page-wizard.php:433
|
5587 |
-
msgid "‹ Previous"
|
5588 |
-
msgstr "‹ Zurück"
|
5589 |
-
|
5590 |
-
# @ backwpup
|
5591 |
-
#: ../inc/pro/class-page-wizard.php:335
|
5592 |
-
#, php-format
|
5593 |
-
msgctxt "Plugin Name"
|
5594 |
-
msgid "%s Wizards"
|
5595 |
-
msgstr "%s Assistenten"
|
5596 |
-
|
5597 |
-
# @ backwpup
|
5598 |
-
#: ../inc/pro/class-page-wizard.php:373
|
5599 |
-
#, php-format
|
5600 |
-
msgctxt "Plugin Name"
|
5601 |
-
msgid "%s Wizard:"
|
5602 |
-
msgstr "%s Assistent:"
|
5603 |
-
|
5604 |
-
# @ backwpup
|
5605 |
-
#: ../inc/pro/class-page-wizard.php:445
|
5606 |
-
msgid "Back to overview"
|
5607 |
-
msgstr "Zurück zur Übersicht"
|
5608 |
-
|
5609 |
-
# @ backwpup
|
5610 |
-
#: ../inc/pro/class-destination-rsc.php:26
|
5611 |
-
msgid "API Key:"
|
5612 |
-
msgstr "API-Schlüssel"
|
5613 |
-
|
5614 |
-
# @ backwpup
|
5615 |
-
#: ../inc/pro/class-destination-rsc.php:29
|
5616 |
-
msgid "Select region:"
|
5617 |
-
msgstr "Region wählen:"
|
5618 |
-
|
5619 |
-
# @ backwpup
|
5620 |
-
#: ../inc/pro/class-destination-rsc.php:134
|
5621 |
-
#, php-format
|
5622 |
-
msgid "%d. Trying to sync files to Rackspace cloud …"
|
5623 |
-
msgstr "%d. Versuche Dateien mit der Rackspace Cloud zu synchronisieren …"
|
5624 |
-
|
5625 |
-
# @ backwpup
|
5626 |
-
#: ../inc/pro/class-destination-rsc.php:154
|
5627 |
-
#, php-format
|
5628 |
-
msgid "Connected to Rackspace cloud files container %s."
|
5629 |
-
msgstr "Verbunden mit Rackspace Cloud Datei-Container %s."
|
5630 |
-
|
5631 |
-
# @ backwpup
|
5632 |
-
#: ../inc/pro/class-destination-rsc.php:168
|
5633 |
-
msgid "Retrieving files list from Rackspace Cloud."
|
5634 |
-
msgstr "Rufe Dateiliste von Rackspace Cloud ab."
|
5635 |
-
|
5636 |
-
# @ backwpup
|
5637 |
-
#: ../inc/pro/class-destination-rsc.php:199
|
5638 |
-
msgid "Upload changed files to Rackspace Cloud."
|
5639 |
-
msgstr "Upload der geänderten Dateien zur Rackspace Cloud."
|
5640 |
-
|
5641 |
-
# @ backwpup
|
5642 |
-
#: ../inc/pro/class-destination-rsc.php:213
|
5643 |
-
#, php-format
|
5644 |
-
msgid "File %s uploaded to Rackspace Cloud."
|
5645 |
-
msgstr "Datei %s zu zur Rackspace Cloud hochgeladen."
|
5646 |
-
|
5647 |
-
# @ backwpup
|
5648 |
-
#: ../inc/pro/class-destination-rsc.php:241
|
5649 |
-
#, php-format
|
5650 |
-
msgid "Extra file %s uploaded to Rackspace Cloud."
|
5651 |
-
msgstr "Extra Datei %s zur Rackspace Cloud hochgeladen."
|
5652 |
-
|
5653 |
-
# @ backwpup
|
5654 |
-
#: ../inc/pro/class-destination-rsc.php:254
|
5655 |
-
msgid "Delete nonexistent files on Rackspace Cloud."
|
5656 |
-
msgstr "Lösche nicht existierende Dateien von Rackspace Cloud"
|
5657 |
-
|
5658 |
-
# @ backwpup
|
5659 |
-
#: ../inc/pro/class-destination-rsc.php:258
|
5660 |
-
#, php-format
|
5661 |
-
msgid "File %s deleted from Rackspace Cloud."
|
5662 |
-
msgstr "File %s von Rackspace Cloud gelöscht."
|
5663 |
-
|
5664 |
-
# @ backwpup
|
5665 |
-
#: ../inc/pro/class-jobtype-dbcheck.php:21
|
5666 |
-
msgid "Check only WordPress Database tables"
|
5667 |
-
msgstr "Teste nur die WordPress Datenbank Tabellen"
|
5668 |
-
|
5669 |
-
# @ backwpup
|
5670 |
-
#: ../inc/pro/class-destination-gdrive.php:33
|
5671 |
-
#: ../inc/pro/class-destination-gdrive.php:219
|
5672 |
-
#, php-format
|
5673 |
-
msgid "Looks like you haven’t set up any API keys yet. Head over to <a href=\"%s\">Settings | API-Keys</a> and get Google Drive all set up, then come back here."
|
5674 |
-
msgstr "Sieht so aus, als hättest du bis jetzt noch keine API-Schlüssel erstellt. Gehe zu <a href=\"%s\">Einstellungen | API-Schlüssel</a> und setze die Verbindung zu Google Drive auf, kann komm’ hierhin zurück."
|
5675 |
-
|
5676 |
-
# @ backwpup
|
5677 |
-
#: ../inc/pro/class-destination-gdrive.php:47
|
5678 |
-
#: ../inc/pro/class-destination-gdrive.php:251
|
5679 |
-
msgid "Authenticate"
|
5680 |
-
msgstr "Authentifizieren"
|
5681 |
-
|
5682 |
-
# @ backwpup
|
5683 |
-
#: ../inc/pro/class-destination-gdrive.php:53
|
5684 |
-
#: ../inc/pro/class-destination-gdrive.php:257
|
5685 |
-
msgid "Reauthenticate"
|
5686 |
-
msgstr "Neu authentifizieren"
|
5687 |
-
|
5688 |
-
# @ backwpup
|
5689 |
-
#: ../inc/pro/class-destination-gdrive.php:63
|
5690 |
-
msgid "Folder in Google Drive"
|
5691 |
-
msgstr "Ordner in Google Drive"
|
5692 |
-
|
5693 |
-
# @ backwpup
|
5694 |
-
#: ../inc/pro/class-destination-gdrive.php:83
|
5695 |
-
msgid "Consider using trash to delete files. If trash is not enabled, files will be deleted permanently."
|
5696 |
-
msgstr "Überlege dir, den Papierkorb zu nutzen um Dateien zu löschen. Bei deaktiviertem Papierkorb werden Dateien unwiderruflich gelöscht."
|
5697 |
-
|
5698 |
-
# @ backwpup
|
5699 |
-
#: ../inc/pro/class-destination-gdrive.php:132
|
5700 |
-
#: ../inc/pro/class-destination-gdrive.php:156
|
5701 |
-
msgid "GDrive: Authenticated."
|
5702 |
-
msgstr "GDrive: Authentifiziert."
|
5703 |
-
|
5704 |
-
# @ backwpup
|
5705 |
-
#: ../inc/pro/class-destination-gdrive.php:134
|
5706 |
-
#: ../inc/pro/class-destination-gdrive.php:158
|
5707 |
-
msgid "GDrive: No refresh token received."
|
5708 |
-
msgstr "GDrive: Kein Refresh Token empfangen."
|
5709 |
-
|
5710 |
-
# @ backwpup
|
5711 |
-
#: ../inc/pro/class-destination-gdrive.php:140
|
5712 |
-
#: ../inc/pro/class-destination-gdrive.php:163
|
5713 |
-
#: ../inc/pro/class-destination-gdrive.php:184
|
5714 |
-
#: ../inc/pro/class-destination-gdrive.php:237
|
5715 |
-
#, php-format
|
5716 |
-
msgid "GDrive API: %s"
|
5717 |
-
msgstr "GDrive API: %s"
|
5718 |
-
|
5719 |
-
# @ backwpup
|
5720 |
-
#: ../inc/pro/class-destination-gdrive.php:362
|
5721 |
-
#, php-format
|
5722 |
-
msgid "%d. Try to send backup file to Google Drive …"
|
5723 |
-
msgstr "%d. Versuche das Backup zu Google Drive zu senden …"
|
5724 |
-
|
5725 |
-
# @ backwpup
|
5726 |
-
#: ../inc/pro/class-destination-gdrive.php:395
|
5727 |
-
msgid "Uploading to Google Drive …"
|
5728 |
-
msgstr "Upload zu Google Drive …"
|
5729 |
-
|
5730 |
-
# @ backwpup
|
5731 |
-
#: ../inc/pro/class-destination-gdrive.php:439
|
5732 |
-
msgid "Google Drive API: could not create resumable file"
|
5733 |
-
msgstr "Google Drive API: kann keine fortsetzbare Datei generieren"
|
5734 |
-
|
5735 |
-
# @ backwpup
|
5736 |
-
#: ../inc/pro/class-destination-gdrive.php:473
|
5737 |
-
msgid "Can not resume transfer backup to Google Drive!"
|
5738 |
-
msgstr "Kann den Backup-Transfer zu Google Drive nicht fortsetzen!"
|
5739 |
-
|
5740 |
-
# @ backwpup
|
5741 |
-
#: ../inc/pro/class-destination-gdrive.php:530
|
5742 |
-
#, php-format
|
5743 |
-
msgid "Error transfering file chunks to %s."
|
5744 |
-
msgstr "Fehler beim Übertragen von Datei-Teilen zu %s."
|
5745 |
-
|
5746 |
-
# @ backwpup
|
5747 |
-
#: ../inc/pro/class-destination-gdrive.php:530
|
5748 |
-
#: ../inc/pro/class-destination-gdrive.php:548
|
5749 |
-
msgid "Google Drive"
|
5750 |
-
msgstr "Google Drive"
|
5751 |
-
|
5752 |
-
# @ backwpup
|
5753 |
-
#: ../inc/pro/class-destination-gdrive.php:592
|
5754 |
-
#, php-format
|
5755 |
-
msgid "One file deleted from Google Drive"
|
5756 |
-
msgid_plural "%d files deleted on Google Drive"
|
5757 |
-
msgstr[0] "Eine Datei von Google Drive gelöscht"
|
5758 |
-
msgstr[1] "%d Dateien von Google Drive gelöscht"
|
5759 |
-
|
5760 |
-
# @ backwpup
|
5761 |
-
#: ../inc/pro/class-destination-gdrive.php:598
|
5762 |
-
#: ../inc/pro/class-destination-gdrive.php:836
|
5763 |
-
#, php-format
|
5764 |
-
msgid "Google Drive API: %s"
|
5765 |
-
msgstr "Google Drive API: %s"
|
5766 |
-
|
5767 |
-
# @ backwpup
|
5768 |
-
#: ../inc/pro/class-destination-gdrive.php:633
|
5769 |
-
#, php-format
|
5770 |
-
msgid "%d. Try to sync files to Google Drive …"
|
5771 |
-
msgstr "%d. Versuche Dateien mit Google Drive zu synchronisieren …"
|
5772 |
-
|
5773 |
-
# @ backwpup
|
5774 |
-
#: ../inc/pro/class-destination-gdrive.php:662
|
5775 |
-
msgid "Retrieving folder list from Google Drive"
|
5776 |
-
msgstr "Abrufen der Ordnerliste von Google Drive"
|
5777 |
-
|
5778 |
-
# @ backwpup
|
5779 |
-
#: ../inc/pro/class-destination-gdrive.php:679
|
5780 |
-
msgid "Syncing changed files to Google Drive"
|
5781 |
-
msgstr "Synchronisiere geänderte Dateien mit Google Drive"
|
5782 |
-
|
5783 |
-
# @ backwpup
|
5784 |
-
#: ../inc/pro/class-destination-gdrive.php:717
|
5785 |
-
#, php-format
|
5786 |
-
msgid "File %s updated on Google Drive"
|
5787 |
-
msgstr "Datei %s auf Google Drive aktualisiert"
|
5788 |
-
|
5789 |
-
# @ backwpup
|
5790 |
-
#: ../inc/pro/class-destination-gdrive.php:737
|
5791 |
-
#, php-format
|
5792 |
-
msgid "File %s uploaded to Google Drive"
|
5793 |
-
msgstr "Datei %s zu Google Drive hochgeladen"
|
5794 |
-
|
5795 |
-
# @ backwpup
|
5796 |
-
#: ../inc/pro/class-destination-gdrive.php:758
|
5797 |
-
#, php-format
|
5798 |
-
msgid "File %s moved to trash in Google Drive"
|
5799 |
-
msgstr "Datei %s in den Papierkorb bei Google Drive verschoben"
|
5800 |
-
|
5801 |
-
# @ backwpup
|
5802 |
-
#: ../inc/pro/class-destination-gdrive.php:761
|
5803 |
-
#, php-format
|
5804 |
-
msgid "File %s deleted permanently in Google Drive"
|
5805 |
-
msgstr "Datei %s unwiderruflich gelöscht aus Google Drive"
|
5806 |
-
|
5807 |
-
# @ backwpup
|
5808 |
-
#: ../inc/pro/class-destination-gdrive.php:777
|
5809 |
-
#, php-format
|
5810 |
-
msgid "Folder %s moved to trash in Google Drive"
|
5811 |
-
msgstr "Ordner %s in den Papierkorb bei Google Drive verschoben"
|
5812 |
-
|
5813 |
-
# @ backwpup
|
5814 |
-
#: ../inc/pro/class-destination-gdrive.php:780
|
5815 |
-
#, php-format
|
5816 |
-
msgid "Folder %s deleted permanently in Google Drive"
|
5817 |
-
msgstr "Ordner %s unwiderruflich gelöscht aus Google Drive"
|
5818 |
-
|
5819 |
-
# @ backwpup
|
5820 |
-
#: ../inc/pro/class-destination-gdrive.php:807
|
5821 |
-
#, php-format
|
5822 |
-
msgid "Extra file %s updated on Google Drive"
|
5823 |
-
msgstr "Extra Datei %s auf Google Drive aktualisiert"
|
5824 |
-
|
5825 |
-
# @ backwpup
|
5826 |
-
#: ../inc/pro/class-destination-gdrive.php:826
|
5827 |
-
#, php-format
|
5828 |
-
msgid "Extra file %s uploaded to Google Drive"
|
5829 |
-
msgstr "Extra Datei %s auf Google Drive hochgeladen"
|
5830 |
-
|
5831 |
-
# @ backwpup
|
5832 |
-
#: ../inc/pro/class-jobtype-wpplugin.php:13
|
5833 |
-
msgid "Nothing to configure"
|
5834 |
-
msgstr "Nichts zu konfiguieren"
|
5835 |
-
|
5836 |
-
# @ backwpup
|
5837 |
-
#: ../inc/pro/class-export-jobs.php:12
|
5838 |
-
#: ../inc/pro/class-export-jobs.php:23
|
5839 |
-
msgid "Export"
|
5840 |
-
msgstr "Export"
|
5841 |
-
|
5842 |
-
# @ backwpup
|
5843 |
-
#: ../inc/pro/class-destination-glacier.php:26
|
5844 |
-
msgid "Amazon Glacier"
|
5845 |
-
msgstr "Amazon Glacier"
|
5846 |
-
|
5847 |
-
# @ backwpup
|
5848 |
-
#: ../inc/pro/class-destination-glacier.php:30
|
5849 |
-
msgid "Select a region:"
|
5850 |
-
msgstr "Wähle eine Region:"
|
5851 |
-
|
5852 |
-
# @ backwpup
|
5853 |
-
#: ../inc/pro/class-destination-glacier.php:32
|
5854 |
-
#: ../inc/pro/class-destination-glacier.php:154
|
5855 |
-
msgid "Amazon Glacier Region"
|
5856 |
-
msgstr "Amazon Glacier Region"
|
5857 |
-
|
5858 |
-
# @ backwpup
|
5859 |
-
#: ../inc/pro/class-destination-glacier.php:33
|
5860 |
-
#: ../inc/pro/class-destination-glacier.php:155
|
5861 |
-
msgid "US Standard"
|
5862 |
-
msgstr "US Standard"
|
5863 |
-
|
5864 |
-
# @ backwpup
|
5865 |
-
#: ../inc/pro/class-destination-glacier.php:34
|
5866 |
-
#: ../inc/pro/class-destination-glacier.php:156
|
5867 |
-
msgid "US West (Northern California)"
|
5868 |
-
msgstr "US West (Northern California)"
|
5869 |
-
|
5870 |
-
# @ backwpup
|
5871 |
-
#: ../inc/pro/class-destination-glacier.php:35
|
5872 |
-
#: ../inc/pro/class-destination-glacier.php:157
|
5873 |
-
msgid "US West (Oregon)"
|
5874 |
-
msgstr "US West (Oregon)"
|
5875 |
-
|
5876 |
-
# @ backwpup
|
5877 |
-
#: ../inc/pro/class-destination-glacier.php:36
|
5878 |
-
#: ../inc/pro/class-destination-glacier.php:158
|
5879 |
-
msgid "EU (Ireland)"
|
5880 |
-
msgstr "EU (Ireland)"
|
5881 |
-
|
5882 |
-
# @ backwpup
|
5883 |
-
#: ../inc/pro/class-destination-glacier.php:37
|
5884 |
-
#: ../inc/pro/class-destination-glacier.php:159
|
5885 |
-
msgid "EU (Germany)"
|
5886 |
-
msgstr "EU (Germany)"
|
5887 |
-
|
5888 |
-
# @ backwpup
|
5889 |
-
#: ../inc/pro/class-destination-glacier.php:38
|
5890 |
-
#: ../inc/pro/class-destination-glacier.php:160
|
5891 |
-
msgid "Asia Pacific (Tokyo)"
|
5892 |
-
msgstr "Asia Pacific (Tokyo)"
|
5893 |
-
|
5894 |
-
# @ backwpup
|
5895 |
-
#: ../inc/pro/class-destination-glacier.php:39
|
5896 |
-
#: ../inc/pro/class-destination-glacier.php:161
|
5897 |
-
msgid "Asia Pacific (Singapore)"
|
5898 |
-
msgstr "Asia Pacific (Singapore)"
|
5899 |
-
|
5900 |
-
# @ backwpup
|
5901 |
-
#: ../inc/pro/class-destination-glacier.php:40
|
5902 |
-
#: ../inc/pro/class-destination-glacier.php:162
|
5903 |
-
msgid "Asia Pacific (Sydney)"
|
5904 |
-
msgstr "Asia Pacific (Sydney)"
|
5905 |
-
|
5906 |
-
# @ backwpup
|
5907 |
-
#: ../inc/pro/class-destination-glacier.php:41
|
5908 |
-
#: ../inc/pro/class-destination-glacier.php:163
|
5909 |
-
msgid "South America (Sao Paulo)"
|
5910 |
-
msgstr "South America (Sao Paulo)"
|
5911 |
-
|
5912 |
-
# @ backwpup
|
5913 |
-
#: ../inc/pro/class-destination-glacier.php:42
|
5914 |
-
msgid "China (Beijing)"
|
5915 |
-
msgstr "China (Beijing)"
|
5916 |
-
|
5917 |
-
# @ backwpup
|
5918 |
-
#: ../inc/pro/class-destination-glacier.php:48
|
5919 |
-
msgid "Amazon Access Keys"
|
5920 |
-
msgstr "Amazon Zugriffsschlüssel"
|
5921 |
-
|
5922 |
-
# @ backwpup
|
5923 |
-
#: ../inc/pro/class-destination-glacier.php:67
|
5924 |
-
msgid "Vault"
|
5925 |
-
msgstr "Tresor"
|
5926 |
-
|
5927 |
-
# @ backwpup
|
5928 |
-
#: ../inc/pro/class-destination-glacier.php:71
|
5929 |
-
msgid "Vault selection"
|
5930 |
-
msgstr "Tresorauswahl"
|
5931 |
-
|
5932 |
-
# @ backwpup
|
5933 |
-
#: ../inc/pro/class-destination-glacier.php:83
|
5934 |
-
msgid "Create a new vault"
|
5935 |
-
msgstr "Neuen Tresor erstellen"
|
5936 |
-
|
5937 |
-
# @ backwpup
|
5938 |
-
#: ../inc/pro/class-destination-glacier.php:90
|
5939 |
-
msgid "Glacier Backup settings"
|
5940 |
-
msgstr "Glacier Backup Einstellungen"
|
5941 |
-
|
5942 |
-
# @ backwpup
|
5943 |
-
#: ../inc/pro/class-destination-glacier.php:97
|
5944 |
-
#: ../inc/pro/class-destination-glacier.php:181
|
5945 |
-
msgid "Number of files to keep in folder. (Archives deleted before 3 months after they have been stored may cause extra costs when deleted.)"
|
5946 |
-
msgstr "Anzahl der im Ordner verbleibenden Dateien. (Archive, die vor Ablauf von 3 Monaten gelöscht werden, können zusätzliche Kosten verursachen.)"
|
5947 |
-
|
5948 |
-
# @ backwpup
|
5949 |
-
#: ../inc/pro/class-destination-glacier.php:130
|
5950 |
-
#: ../inc/pro/class-destination-glacier.php:215
|
5951 |
-
#, php-format
|
5952 |
-
msgid "Vault %1$s created."
|
5953 |
-
msgstr "Tresor %1$s erstellt."
|
5954 |
-
|
5955 |
-
# @ backwpup
|
5956 |
-
#: ../inc/pro/class-destination-glacier.php:132
|
5957 |
-
#: ../inc/pro/class-destination-glacier.php:217
|
5958 |
-
#, php-format
|
5959 |
-
msgid "Vault %s could not be created."
|
5960 |
-
msgstr "Tresor %s konnte nicht erstellt werden."
|
5961 |
-
|
5962 |
-
# @ backwpup
|
5963 |
-
#: ../inc/pro/class-destination-glacier.php:153
|
5964 |
-
msgid "Select an Amazon Glacier region:"
|
5965 |
-
msgstr "Wähle Amazon Glacier Region:"
|
5966 |
-
|
5967 |
-
# @ backwpup
|
5968 |
-
#: ../inc/pro/class-destination-glacier.php:169
|
5969 |
-
msgid "Vault:"
|
5970 |
-
msgstr "Tresor:"
|
5971 |
-
|
5972 |
-
# @ backwpup
|
5973 |
-
#: ../inc/pro/class-destination-glacier.php:178
|
5974 |
-
msgid "New Vault:"
|
5975 |
-
msgstr "Neuer Tresor:"
|
5976 |
-
|
5977 |
-
# @ backwpup
|
5978 |
-
#: ../inc/pro/class-destination-glacier.php:258
|
5979 |
-
#: ../inc/pro/class-destination-glacier.php:374
|
5980 |
-
#: ../inc/pro/class-destination-glacier.php:390
|
5981 |
-
#: ../inc/pro/class-destination-glacier.php:430
|
5982 |
-
#, php-format
|
5983 |
-
msgid "AWS API: %s"
|
5984 |
-
msgstr "AWS API: %s"
|
5985 |
-
|
5986 |
-
# @ backwpup
|
5987 |
-
#: ../inc/pro/class-destination-glacier.php:282
|
5988 |
-
#, php-format
|
5989 |
-
msgid "%d. Trying to send backup file to Amazon Glacier …"
|
5990 |
-
msgstr "%d. Versuche Backup-Datei zu Amazon Glacier zu senden …"
|
5991 |
-
|
5992 |
-
# @ backwpup
|
5993 |
-
#: ../inc/pro/class-destination-glacier.php:295
|
5994 |
-
#, php-format
|
5995 |
-
msgid "Connected to Glacier vault \"%1$s\" with %2$d archives and size of %3$d"
|
5996 |
-
msgstr "Verbunden mit Glacier-Vault \"%1$s\" mit %2$d archives einer Größe von %3$d"
|
5997 |
-
|
5998 |
-
# @ backwpup
|
5999 |
-
#: ../inc/pro/class-destination-glacier.php:297
|
6000 |
-
#, php-format
|
6001 |
-
msgid "Glacier vault \"%s\" does not exist!"
|
6002 |
-
msgstr "Glacier Tresor \"%s\" existiert nicht!"
|
6003 |
-
|
6004 |
-
# @ backwpup
|
6005 |
-
#: ../inc/pro/class-destination-glacier.php:303
|
6006 |
-
msgid "Starting upload to Amazon Glacier …"
|
6007 |
-
msgstr "Upload zu Amazon Glacier wird gestartet …"
|
6008 |
-
|
6009 |
-
# @ backwpup
|
6010 |
-
#: ../inc/pro/class-destination-glacier.php:356
|
6011 |
-
#, php-format
|
6012 |
-
msgid "Archive ID: %s"
|
6013 |
-
msgstr "Archiv ID: %s"
|
6014 |
-
|
6015 |
-
# @ backwpup
|
6016 |
-
#: ../inc/pro/class-destination-glacier.php:420
|
6017 |
-
#, php-format
|
6018 |
-
msgid "Cannot delete archive from %s."
|
6019 |
-
msgstr "Kann das Archiv aus %s nicht löschen."
|
6020 |
-
|
6021 |
-
# @ backwpup
|
6022 |
-
#: ../inc/pro/class-destination-glacier.php:424
|
6023 |
-
#, php-format
|
6024 |
-
msgid "One file deleted on vault."
|
6025 |
-
msgid_plural "%d files deleted on vault"
|
6026 |
-
msgstr[0] "Eine Datei aus Tresor entfernt."
|
6027 |
-
msgstr[1] "%d Dateien aus Tresor entfernt"
|
6028 |
-
|
6029 |
-
# @ backwpup
|
6030 |
-
#: ../inc/pro/class-destination-glacier.php:538
|
6031 |
-
msgid "No vault found!"
|
6032 |
-
msgstr "Kein Tresor gefunden!"
|
6033 |
-
|
6034 |
-
# @ backwpup
|
6035 |
-
#: ../inc/pro/class-destination-sugarsync.php:25
|
6036 |
-
#: ../inc/pro/class-destination-sugarsync.php:84
|
6037 |
-
msgid "Sugarsync authenticate!"
|
6038 |
-
msgstr "Sugarsync Authentifizierung!"
|
6039 |
-
|
6040 |
-
# @ backwpup
|
6041 |
-
#: ../inc/pro/class-destination-sugarsync.php:36
|
6042 |
-
msgid "Root:"
|
6043 |
-
msgstr "Root:"
|
6044 |
-
|
6045 |
-
# @ backwpup
|
6046 |
-
#: ../inc/pro/class-marketpress-autoupdate.php:344
|
6047 |
-
#, php-format
|
6048 |
-
msgctxt "%s = plugin name"
|
6049 |
-
msgid "Your license for the plugin %s is not valid. The auto-update has been deactivated. Please insert a valid key on MarketPress Dashboard. Or if you want to add an other valid code use the form below."
|
6050 |
-
msgstr "Dein Lizenzschlüssel für das Plugin %s ist ungültig. Automatische Updates wurden deaktiviert. Gib bitte einen gültigen Schlüssel im MarketPress Dashboard ein. Wenn du einen anderen gültigen Schlüssel hinzufügen möchtest, nutze bitte das Formular (unten)."
|
6051 |
-
|
6052 |
-
# @ backwpup
|
6053 |
-
#: ../inc/pro/class-marketpress-autoupdate.php:356
|
6054 |
-
msgid "You are currently using a valid key for this plugin. You are able to renew the key in MarketPress Dashboard. Or if you want to add another valid code use the form below."
|
6055 |
-
msgstr "Du verwendest derzeit einen gültigen Lizenzschlüssel für dieses Plugin. Du kannst die Lizenzen im MarketPress Dashboard erneuern. Oder einen anderen gültigen Schlüssel eintragen."
|
6056 |
-
|
6057 |
-
# @ backwpup
|
6058 |
-
#: ../inc/pro/class-marketpress-autoupdate.php:367
|
6059 |
-
#, php-format
|
6060 |
-
msgctxt "%s = plugin name"
|
6061 |
-
msgid "Your license for the plugin %s is not valid. The auto-update has been deactivated."
|
6062 |
-
msgstr "Deine Lizenz für das Plugin %s ist ungültig. Automatische Updates wurden deaktiviert."
|
6063 |
-
|
6064 |
-
# @ backwpup
|
6065 |
-
#: ../inc/pro/class-marketpress-autoupdate.php:379
|
6066 |
-
#, php-format
|
6067 |
-
msgid "You are currently using a valid key for this plugin. You are able to renew the key below or you can delete the key by <a href=\"%s\">clicking here</a>."
|
6068 |
-
msgstr "Du verwendest einen gültigen Lizenzschlüssel für dieses Plugin. Du kannst den Schlüssel unten erneuern oder Löschen <a href=\"%s\">zum Löschen hier klicken</a>."
|
6069 |
-
|
6070 |
-
# @ backwpup
|
6071 |
-
#: ../inc/pro/class-marketpress-autoupdate.php:386
|
6072 |
-
msgid "License Key"
|
6073 |
-
msgstr "Lizenzschlüssel"
|
6074 |
-
|
6075 |
-
# @ backwpup
|
6076 |
-
#: ../inc/pro/class-marketpress-autoupdate.php:389
|
6077 |
-
msgid "Activate"
|
6078 |
-
msgstr "Aktivieren"
|
6079 |
-
|
6080 |
-
# @ backwpup
|
6081 |
-
#: ../inc/pro/class-marketpress-autoupdate.php:558
|
6082 |
-
msgid "The License has been deleted."
|
6083 |
-
msgstr "Die Lizenz wurde gelöscht."
|
6084 |
-
|
6085 |
-
# @ backwpup
|
6086 |
-
#: ../inc/pro/class-marketpress-autoupdate.php:565
|
6087 |
-
msgid "Plugin successfully activated."
|
6088 |
-
msgstr "Plugin erfolgreich aktiviert."
|
6089 |
-
|
6090 |
-
# @ backwpup
|
6091 |
-
#: ../inc/pro/class-marketpress-autoupdate.php:572
|
6092 |
-
msgid "The entered license key is wrong."
|
6093 |
-
msgstr "Der eingegebene Lizenzschlüssel ist falsch."
|
6094 |
-
|
6095 |
-
# @ backwpup
|
6096 |
-
#: ../inc/pro/class-marketpress-autoupdate.php:579
|
6097 |
-
msgid "You have reached the limit of urls. Please update your license at <a href=\"http://marketpress.com\">marketpress.com</a>."
|
6098 |
-
msgstr "Du hast das Limit der URLs erreicht. Bitte aktualisiere deine Lizenz auf <a href=\"http://marketpress.de\">marketpress.de</a>."
|
6099 |
-
|
6100 |
-
# @ backwpup
|
6101 |
-
#: ../inc/pro/class-marketpress-autoupdate.php:586
|
6102 |
-
msgid "Something went wrong. Please try again later or contact the <a href=\"http://marketpress.com/support/\">MarketPress Team</a>."
|
6103 |
-
msgstr "Etwas ist falsch gelaufen. Bitte versuche es erneut oder kontaktiere das <a href=\"http://marketpress.de/support/\">MarketPress Team</a>."
|
6104 |
-
|
6105 |
-
# @ backwpup
|
6106 |
-
#: ../inc/pro/class-marketpress-autoupdate.php:593
|
6107 |
-
msgid "Due to a wrong license you are not allowed to activate this plugin. Please update your license at <a href=\"http://marketpress.com\">marketpress.com</a>."
|
6108 |
-
msgstr "Dir ist nicht erlaubt, das Plugin zu aktivieren, mit einer falschen Lizenz. Bitte aktualisiere deine Lizenz auf <a href=\"http://marketpress.de\">MarketPress.de</a>."
|
6109 |
-
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: BackWPup Pro v3.1.3\n"
|
4 |
+
"Report-Msgid-Bugs-To: \n"
|
5 |
+
"POT-Creation-Date: 2014-11-12 13:25+0100\n"
|
6 |
+
"PO-Revision-Date: 2014-11-12 13:26+0100\n"
|
7 |
+
"Last-Translator: Robert Windisch <r.windisch@inpsyde.com>\n"
|
8 |
+
"Language-Team: \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 |
+
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
14 |
+
"X-Generator: GlotPress/0.1\n"
|
15 |
+
"X-Poedit-SourceCharset: utf-8\n"
|
16 |
+
"X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
|
17 |
+
"X-Poedit-Basepath: .\n"
|
18 |
+
"X-Textdomain-Support: yes\n"
|
19 |
+
"X-Poedit-SearchPath-0: .\n"
|
20 |
+
"X-Poedit-SearchPath-1: ..\n"
|
21 |
+
|
22 |
+
# @ backwpup
|
23 |
+
#: ../backwpup.php:42
|
24 |
+
msgid "BackWPup requires PHP version 5.2.7 with spl extension or greater and WordPress 3.4 or greater."
|
25 |
+
msgstr "BackWPup benötigt PHP Version 5.2.7 oder höher mit der SPL-Erweiterung und WordPress 3.4 oder höher."
|
26 |
+
|
27 |
+
# @ backwpup
|
28 |
+
#: ../backwpup.php:289
|
29 |
+
msgid "Folder"
|
30 |
+
msgstr "Ordner"
|
31 |
+
|
32 |
+
# @ backwpup
|
33 |
+
#: ../backwpup.php:290
|
34 |
+
msgid "Backup to Folder"
|
35 |
+
msgstr "Backup in Ordner"
|
36 |
+
|
37 |
+
# @ backwpup
|
38 |
+
#: ../backwpup.php:305
|
39 |
+
msgid "Email"
|
40 |
+
msgstr "E-Mail"
|
41 |
+
|
42 |
+
# @ backwpup
|
43 |
+
#: ../backwpup.php:306
|
44 |
+
msgid "Backup sent via email"
|
45 |
+
msgstr "Backup als E-Mail versendet"
|
46 |
+
|
47 |
+
# @ backwpup
|
48 |
+
#: ../backwpup.php:321
|
49 |
+
msgid "FTP"
|
50 |
+
msgstr "FTP"
|
51 |
+
|
52 |
+
# @ backwpup
|
53 |
+
#: ../backwpup.php:322
|
54 |
+
msgid "Backup to FTP"
|
55 |
+
msgstr "Backup zu FTP"
|
56 |
+
|
57 |
+
# @ backwpup
|
58 |
+
#: ../backwpup.php:337
|
59 |
+
msgid "Dropbox"
|
60 |
+
msgstr "Dropbox"
|
61 |
+
|
62 |
+
# @ backwpup
|
63 |
+
#: ../backwpup.php:338
|
64 |
+
msgid "Backup to Dropbox"
|
65 |
+
msgstr "Backup in die Dropbox"
|
66 |
+
|
67 |
+
# @ backwpup
|
68 |
+
#: ../backwpup.php:354
|
69 |
+
#: ../backwpup.php:373
|
70 |
+
msgid "S3 Service"
|
71 |
+
msgstr "S3 Service"
|
72 |
+
|
73 |
+
# @ backwpup
|
74 |
+
#: ../backwpup.php:355
|
75 |
+
msgid "Backup to an S3 Service"
|
76 |
+
msgstr "Backup zu einem S3 Service"
|
77 |
+
|
78 |
+
# @ backwpup
|
79 |
+
#: ../backwpup.php:374
|
80 |
+
msgid "Backup to an S3 Service v1"
|
81 |
+
msgstr "Backup auf S3 Service v1"
|
82 |
+
|
83 |
+
# @ backwpup
|
84 |
+
#: ../backwpup.php:390
|
85 |
+
msgid "MS Azure"
|
86 |
+
msgstr "MS Azure"
|
87 |
+
|
88 |
+
# @ backwpup
|
89 |
+
#: ../backwpup.php:391
|
90 |
+
msgid "Backup to Microsoft Azure (Blob)"
|
91 |
+
msgstr "Backup zu Microsoft Azure (Blob)"
|
92 |
+
|
93 |
+
# @ backwpup
|
94 |
+
#: ../backwpup.php:406
|
95 |
+
msgid "RSC"
|
96 |
+
msgstr "RSC"
|
97 |
+
|
98 |
+
# @ backwpup
|
99 |
+
#: ../backwpup.php:407
|
100 |
+
msgid "Backup to Rackspace Cloud Files"
|
101 |
+
msgstr "Backup in die Rackspace Cloud"
|
102 |
+
|
103 |
+
# @ backwpup
|
104 |
+
#: ../backwpup.php:423
|
105 |
+
msgid "SugarSync"
|
106 |
+
msgstr "SugarSync"
|
107 |
+
|
108 |
+
# @ backwpup
|
109 |
+
#: ../backwpup.php:424
|
110 |
+
msgid "Backup to SugarSync"
|
111 |
+
msgstr "Backup zu SugarSync"
|
112 |
+
|
113 |
+
# @ backwpup
|
114 |
+
#: ../backwpup.php:443
|
115 |
+
#, php-format
|
116 |
+
msgid "PHP Version %1$s is to low, you need Version %2$s or above."
|
117 |
+
msgstr "Du nutzt die veraltete PHP Version %1$s. Es wird aber mindestens die Version %2$s benötigt."
|
118 |
+
|
119 |
+
# @ backwpup
|
120 |
+
#: ../backwpup.php:450
|
121 |
+
#, php-format
|
122 |
+
msgid "Missing function \"%s\"."
|
123 |
+
msgstr "Fehlende Funktion \"%s\"."
|
124 |
+
|
125 |
+
# @ backwpup
|
126 |
+
#: ../backwpup.php:459
|
127 |
+
#, php-format
|
128 |
+
msgid "Missing class \"%s\"."
|
129 |
+
msgstr "Fehlende Klasse \"%s\"."
|
130 |
+
|
131 |
+
# @ backwpup
|
132 |
+
#: ../inc/class-destination-folder.php:26
|
133 |
+
#: ../inc/class-destination-ftp.php:52
|
134 |
+
msgid "Backup settings"
|
135 |
+
msgstr "Backup-Einstellungen"
|
136 |
+
|
137 |
+
# @ backwpup
|
138 |
+
#: ../inc/class-destination-folder.php:30
|
139 |
+
msgid "Folder to store backups in"
|
140 |
+
msgstr "Order für Dateien"
|
141 |
+
|
142 |
+
# @ backwpup
|
143 |
+
#: ../inc/class-destination-folder.php:36
|
144 |
+
#: ../inc/class-destination-ftp.php:62
|
145 |
+
msgid "File Deletion"
|
146 |
+
msgstr "Dateilöschung"
|
147 |
+
|
148 |
+
# @ backwpup
|
149 |
+
#: ../inc/class-destination-folder.php:42
|
150 |
+
#: ../inc/class-destination-s3.php:160
|
151 |
+
msgid "Number of files to keep in folder."
|
152 |
+
msgstr "Anzahl der Dateien, die im Ordner behalten werden"
|
153 |
+
|
154 |
+
# @ backwpup
|
155 |
+
#: ../inc/class-destination-folder.php:46
|
156 |
+
#: ../inc/class-destination-s3.php:164
|
157 |
+
#: ../inc/class-destination-ftp.php:72
|
158 |
+
msgid "Do not delete files while syncing to destination!"
|
159 |
+
msgstr "Keine Dateien im Sync-Zielverzeichnis löschen!"
|
160 |
+
|
161 |
+
# @ backwpup
|
162 |
+
#: ../inc/class-destination-folder.php:194
|
163 |
+
#, php-format
|
164 |
+
msgid "One backup file deleted"
|
165 |
+
msgid_plural "%d backup files deleted"
|
166 |
+
msgstr[0] "Eine Sicherungsdatei gelöscht"
|
167 |
+
msgstr[1] "%d Sicherungsdateien gelöscht"
|
168 |
+
|
169 |
+
# @ backwpup
|
170 |
+
#: ../inc/class-destination-s3.php:74
|
171 |
+
msgid "Select a S3 service"
|
172 |
+
msgstr "Wähle einen S3 Service"
|
173 |
+
|
174 |
+
# @ backwpup
|
175 |
+
#: ../inc/class-destination-s3.php:76
|
176 |
+
msgid "Amazon S3 Region"
|
177 |
+
msgstr "Amazon S3 Region"
|
178 |
+
|
179 |
+
# @ backwpup
|
180 |
+
#: ../inc/class-destination-s3.php:77
|
181 |
+
msgid "Amazon S3: US Standard"
|
182 |
+
msgstr "Amazon S3: US Standard"
|
183 |
+
|
184 |
+
# @ backwpup
|
185 |
+
#: ../inc/class-destination-s3.php:78
|
186 |
+
msgid "Amazon S3: US West (Northern California)"
|
187 |
+
msgstr "Amazon S3: US West (Northern California)"
|
188 |
+
|
189 |
+
# @ backwpup
|
190 |
+
#: ../inc/class-destination-s3.php:79
|
191 |
+
msgid "Amazon S3: US West (Oregon)"
|
192 |
+
msgstr "Amazon S3: US West (Oregon)"
|
193 |
+
|
194 |
+
# @ backwpup
|
195 |
+
#: ../inc/class-destination-s3.php:80
|
196 |
+
msgid "Amazon S3: EU (Ireland)"
|
197 |
+
msgstr "Amazon S3: EU (Ireland)"
|
198 |
+
|
199 |
+
# @ backwpup
|
200 |
+
#: ../inc/class-destination-s3.php:81
|
201 |
+
msgid "Amazon S3: EU (Germany)"
|
202 |
+
msgstr "Amazon S3: EU (Germany)"
|
203 |
+
|
204 |
+
# @ backwpup
|
205 |
+
#: ../inc/class-destination-s3.php:82
|
206 |
+
msgid "Amazon S3: Asia Pacific (Tokyo)"
|
207 |
+
msgstr "Amazon S3: Asia Pacific (Tokyo)"
|
208 |
+
|
209 |
+
# @ backwpup
|
210 |
+
#: ../inc/class-destination-s3.php:83
|
211 |
+
msgid "Amazon S3: Asia Pacific (Singapore)"
|
212 |
+
msgstr "Amazon S3: Asia Pacific (Singapore)"
|
213 |
+
|
214 |
+
# @ backwpup
|
215 |
+
#: ../inc/class-destination-s3.php:84
|
216 |
+
msgid "Amazon S3: Asia Pacific (Sydney)"
|
217 |
+
msgstr "Amazon S3: Asia Pacific (Sydney)"
|
218 |
+
|
219 |
+
# @ backwpup
|
220 |
+
#: ../inc/class-destination-s3.php:85
|
221 |
+
msgid "Amazon S3: South America (Sao Paulo)"
|
222 |
+
msgstr "Amazon S3: South America (Sao Paulo)"
|
223 |
+
|
224 |
+
# @ backwpup
|
225 |
+
#: ../inc/class-destination-s3.php:86
|
226 |
+
msgid "Amazon S3: China (Beijing)"
|
227 |
+
msgstr "Amazon S3: China (Beijing)"
|
228 |
+
|
229 |
+
# @ backwpup
|
230 |
+
#: ../inc/class-destination-s3.php:87
|
231 |
+
msgid "Google Storage (Interoperable Access)"
|
232 |
+
msgstr "Google Storage (Interoperable Access)"
|
233 |
+
|
234 |
+
# @ backwpup
|
235 |
+
#: ../inc/class-destination-s3.php:88
|
236 |
+
msgid "Dream Host Cloud Storage"
|
237 |
+
msgstr "Dream Host Cloud Storage"
|
238 |
+
|
239 |
+
# @ backwpup
|
240 |
+
#: ../inc/class-destination-s3.php:89
|
241 |
+
msgid "GreenQloud Storage Qloud"
|
242 |
+
msgstr "GreenQloud Storage Qloud"
|
243 |
+
|
244 |
+
# @ backwpup
|
245 |
+
#: ../inc/class-destination-s3.php:94
|
246 |
+
msgid "Or a S3 Server URL"
|
247 |
+
msgstr "oder eine S3 Server URL"
|
248 |
+
|
249 |
+
# @ backwpup
|
250 |
+
#: ../inc/class-destination-s3.php:101
|
251 |
+
msgid "S3 Access Keys"
|
252 |
+
msgstr "S3 Access Keys"
|
253 |
+
|
254 |
+
# @ backwpup
|
255 |
+
#: ../inc/class-destination-s3.php:105
|
256 |
+
msgid "Access Key"
|
257 |
+
msgstr "Access Key"
|
258 |
+
|
259 |
+
# @ backwpup
|
260 |
+
#: ../inc/class-destination-s3.php:112
|
261 |
+
msgid "Secret Key"
|
262 |
+
msgstr "Secret Key"
|
263 |
+
|
264 |
+
# @ backwpup
|
265 |
+
#: ../inc/class-destination-s3.php:120
|
266 |
+
msgid "S3 Bucket"
|
267 |
+
msgstr "S3 Bucket"
|
268 |
+
|
269 |
+
# @ backwpup
|
270 |
+
#: ../inc/class-destination-s3.php:124
|
271 |
+
msgid "Bucket selection"
|
272 |
+
msgstr "Bucket Auswahl"
|
273 |
+
|
274 |
+
# @ backwpup
|
275 |
+
#: ../inc/class-destination-s3.php:137
|
276 |
+
msgid "Create a new bucket"
|
277 |
+
msgstr "Neues Bucket erstellen"
|
278 |
+
|
279 |
+
# @ backwpup
|
280 |
+
#: ../inc/class-destination-s3.php:144
|
281 |
+
msgid "S3 Backup settings"
|
282 |
+
msgstr "S3 Backup Einstellungen"
|
283 |
+
|
284 |
+
# @ backwpup
|
285 |
+
#: ../inc/class-destination-s3.php:148
|
286 |
+
msgid "Folder in bucket"
|
287 |
+
msgstr "Ordner im Bucket"
|
288 |
+
|
289 |
+
# @ backwpup
|
290 |
+
#: ../inc/class-destination-s3.php:154
|
291 |
+
msgid "File deletion"
|
292 |
+
msgstr "Datei Löschung"
|
293 |
+
|
294 |
+
# @ backwpup
|
295 |
+
#: ../inc/class-destination-s3.php:170
|
296 |
+
msgid "Multipart Upload"
|
297 |
+
msgstr "Multipart Upload"
|
298 |
+
|
299 |
+
# @ backwpup
|
300 |
+
#: ../inc/class-destination-s3.php:174
|
301 |
+
msgid "Use multipart upload for uploading a file"
|
302 |
+
msgstr "Benutze Multipart Upload zu hochladen der Datei"
|
303 |
+
|
304 |
+
# @ backwpup
|
305 |
+
#: ../inc/class-destination-s3.php:180
|
306 |
+
msgid "Amazon specific settings"
|
307 |
+
msgstr "Amazon spezifische Einstellungen"
|
308 |
+
|
309 |
+
# @ backwpup
|
310 |
+
#: ../inc/class-destination-s3.php:184
|
311 |
+
#: ../inc/class-destination-s3.php:186
|
312 |
+
msgid "Amazon: Storage Class"
|
313 |
+
msgstr "Amazon: Storage Class"
|
314 |
+
|
315 |
+
# @ backwpup
|
316 |
+
#: ../inc/class-destination-s3.php:187
|
317 |
+
msgid "none"
|
318 |
+
msgstr "keine"
|
319 |
+
|
320 |
+
# @ backwpup
|
321 |
+
#: ../inc/class-destination-s3.php:188
|
322 |
+
msgid "Reduced Redundancy"
|
323 |
+
msgstr "Reduzierte Redundanz"
|
324 |
+
|
325 |
+
# @ backwpup
|
326 |
+
#: ../inc/class-destination-s3.php:193
|
327 |
+
msgid "Server side encryption"
|
328 |
+
msgstr "Serverseitige Enkryption"
|
329 |
+
|
330 |
+
# @ backwpup
|
331 |
+
#: ../inc/class-destination-s3.php:197
|
332 |
+
msgid "Save files encrypted (AES256) on server."
|
333 |
+
msgstr "Speicher Dateien Server Side Encrypted (AES256)"
|
334 |
+
|
335 |
+
# @ backwpup
|
336 |
+
#: ../inc/class-destination-s3.php:253
|
337 |
+
#, php-format
|
338 |
+
msgid "Bucket %1$s created in %2$s."
|
339 |
+
msgstr "Bucket %1$s in %2$s erstellt."
|
340 |
+
|
341 |
+
# @ backwpup
|
342 |
+
#: ../inc/class-destination-s3.php:255
|
343 |
+
#, php-format
|
344 |
+
msgid "Bucket %s could not be created."
|
345 |
+
msgstr "Bucket %s konnte nicht erstellt werden."
|
346 |
+
|
347 |
+
# @ backwpup
|
348 |
+
#: ../inc/class-destination-s3.php:257
|
349 |
+
#, php-format
|
350 |
+
msgid " %s is not a valid bucket name."
|
351 |
+
msgstr "%s ist kein gültiger Bucket Name"
|
352 |
+
|
353 |
+
# @ backwpup
|
354 |
+
#: ../inc/class-destination-s3.php:297
|
355 |
+
#: ../inc/class-destination-s3.php:418
|
356 |
+
#: ../inc/class-destination-s3.php:471
|
357 |
+
#: ../inc/class-destination-s3.php:501
|
358 |
+
#: ../inc/class-destination-s3.php:561
|
359 |
+
#, php-format
|
360 |
+
msgid "S3 Service API: %s"
|
361 |
+
msgstr "S3 Service API: %s"
|
362 |
+
|
363 |
+
# @ backwpup
|
364 |
+
#: ../inc/class-destination-s3.php:361
|
365 |
+
#, php-format
|
366 |
+
msgid "%d. Trying to send backup file to S3 Service …"
|
367 |
+
msgstr "%d. Versuche, ein Backup zum S3-Service zu senden …"
|
368 |
+
|
369 |
+
# @ backwpup
|
370 |
+
#: ../inc/class-destination-s3.php:374
|
371 |
+
#, php-format
|
372 |
+
msgid "Connected to S3 Bucket \"%1$s\" in %2$s"
|
373 |
+
msgstr "Verbunden zum S3 Bucket \"%1$s\" in %2$s"
|
374 |
+
|
375 |
+
# @ backwpup
|
376 |
+
#: ../inc/class-destination-s3.php:377
|
377 |
+
#, php-format
|
378 |
+
msgid "S3 Bucket \"%s\" does not exist!"
|
379 |
+
msgstr "Amazon S3 Bucket \"%s\" existiert nicht!"
|
380 |
+
|
381 |
+
# @ backwpup
|
382 |
+
#: ../inc/class-destination-s3.php:384
|
383 |
+
msgid "Checking for not aborted multipart Uploads …"
|
384 |
+
msgstr "Prüfe auf nicht abgebrochene, mehrteilige Uploads …"
|
385 |
+
|
386 |
+
# @ backwpup
|
387 |
+
#: ../inc/class-destination-s3.php:390
|
388 |
+
#, php-format
|
389 |
+
msgid "Upload for %s aborted."
|
390 |
+
msgstr "Upload für %s abgebrochen."
|
391 |
+
|
392 |
+
# @ backwpup
|
393 |
+
#: ../inc/class-destination-s3.php:396
|
394 |
+
msgid "Starting upload to S3 Service …"
|
395 |
+
msgstr "Upload zum S3 Service begonnen …"
|
396 |
+
|
397 |
+
# @ backwpup
|
398 |
+
#: ../inc/class-destination-s3.php:492
|
399 |
+
#, php-format
|
400 |
+
msgid "Backup transferred to %s."
|
401 |
+
msgstr "Backup übertragen zu %s"
|
402 |
+
|
403 |
+
# @ backwpup
|
404 |
+
#: ../inc/class-destination-s3.php:497
|
405 |
+
#, php-format
|
406 |
+
msgid "Cannot transfer backup to S3! (%1$d) %2$s"
|
407 |
+
msgstr "Backup kann nicht zu Amazon S3 übertragen werden! (%1$d) %2$s"
|
408 |
+
|
409 |
+
# @ backwpup
|
410 |
+
#: ../inc/class-destination-s3.php:525
|
411 |
+
#, php-format
|
412 |
+
msgid "Storage Class: %s"
|
413 |
+
msgstr "Speicher-Klasse: %s"
|
414 |
+
|
415 |
+
# @ backwpup
|
416 |
+
#: ../inc/class-destination-s3.php:551
|
417 |
+
#, php-format
|
418 |
+
msgid "Cannot delete backup from %s."
|
419 |
+
msgstr "Kann das Backup auf %s nicht löschen"
|
420 |
+
|
421 |
+
# @ backwpup
|
422 |
+
#: ../inc/class-destination-s3.php:555
|
423 |
+
#, php-format
|
424 |
+
msgid "One file deleted on S3 Bucket."
|
425 |
+
msgid_plural "%d files deleted on S3 Bucket"
|
426 |
+
msgstr[0] "Eine Datei im S3-Bucket gelöscht"
|
427 |
+
msgstr[1] "%d Dateien im S3-Bucket gelöscht"
|
428 |
+
|
429 |
+
# @ backwpup
|
430 |
+
#: ../inc/class-destination-s3.php:658
|
431 |
+
msgid "Missing access key!"
|
432 |
+
msgstr "Der Zugangsschlüssel (Access Key) fehlt!"
|
433 |
+
|
434 |
+
# @ backwpup
|
435 |
+
#: ../inc/class-destination-s3.php:660
|
436 |
+
msgid "Missing secret access key!"
|
437 |
+
msgstr "Der geheime Zugangsschlüssel (Secret Access Key) fehlt!"
|
438 |
+
|
439 |
+
# @ backwpup
|
440 |
+
#: ../inc/class-destination-s3.php:666
|
441 |
+
msgid "No bucket found!"
|
442 |
+
msgstr "Kein Bucket gefunden!"
|
443 |
+
|
444 |
+
# @ backwpup
|
445 |
+
#: ../inc/class-page-about.php:394
|
446 |
+
#, php-format
|
447 |
+
msgid "%s Welcome"
|
448 |
+
msgstr "%s Willkommen"
|
449 |
+
|
450 |
+
# @ backwpup
|
451 |
+
#: ../inc/class-page-about.php:401
|
452 |
+
msgid "Heads up! You have updated from version 2.x"
|
453 |
+
msgstr "Achtung! Sie haben von Version 2.x aktualisiert"
|
454 |
+
|
455 |
+
# @ backwpup
|
456 |
+
#: ../inc/class-page-about.php:402
|
457 |
+
#, php-format
|
458 |
+
msgid "Please <a href=\"%s\">check your settings</a> after updating from version 2.x:"
|
459 |
+
msgstr "Bitte <a href=\"%s\">prüfen Sie Ihre Einstellungen</a> nach dem Update von Version 2.x."
|
460 |
+
|
461 |
+
# @ backwpup
|
462 |
+
#: ../inc/class-page-about.php:403
|
463 |
+
msgid "Dropbox authentication must be re-entered"
|
464 |
+
msgstr "Die Drohbox-Authentifizierung muss wiederholt werden."
|
465 |
+
|
466 |
+
# @ backwpup
|
467 |
+
#: ../inc/class-page-about.php:404
|
468 |
+
msgid "SugarSync authentication must be re-entered"
|
469 |
+
msgstr "Die SugarSync-Authentifizierung muss wiederholt werden"
|
470 |
+
|
471 |
+
# @ backwpup
|
472 |
+
#: ../inc/class-page-about.php:405
|
473 |
+
msgid "S3 Settings"
|
474 |
+
msgstr "S3-Einstellungen"
|
475 |
+
|
476 |
+
# @ backwpup
|
477 |
+
#: ../inc/class-page-about.php:406
|
478 |
+
msgid "Google Storage is now a part of S3 service settings"
|
479 |
+
msgstr "Google Storage ist jetzt Teil der S3-Einstellungen"
|
480 |
+
|
481 |
+
# @ backwpup
|
482 |
+
#: ../inc/class-page-about.php:407
|
483 |
+
msgid "All your passwords"
|
484 |
+
msgstr "All Ihre Passwörter"
|
485 |
+
|
486 |
+
# @ backwpup
|
487 |
+
#: ../inc/class-page-about.php:416
|
488 |
+
msgid "Welcome to BackWPup Pro"
|
489 |
+
msgstr "Willkommen zu BackWPup Pro"
|
490 |
+
|
491 |
+
# @ backwpup
|
492 |
+
#: ../inc/class-page-about.php:417
|
493 |
+
msgid "BackWPup’s job wizards make planning and scheduling your backup jobs a breeze."
|
494 |
+
msgstr "Die Assistenten in BackWPup machen das Planen und terminieren deiner Sicherungen zu einem Spaziergang."
|
495 |
+
|
496 |
+
# @ backwpup
|
497 |
+
#: ../inc/class-page-about.php:418
|
498 |
+
#: ../inc/class-page-about.php:428
|
499 |
+
msgid "Use your backup archives to save your entire WordPress installation including <code>/wp-content/</code>. Push them to an external storage service if you don’t want to save the backups on the same server. With a single backup archive you are able to restore an installation. Use a tool like phpMyAdmin or a plugin like <a href=\"http://wordpress.org/plugins/adminer/\" target=\"_blank\">Adminer</a> to restore your database backup files."
|
500 |
+
msgstr "Benutze deine Backup-Archive, um deine gesamte WordPress-Installation zu sichern, einschließlich <code>/wp-content/</code>. Lade sie zu einem externen Dienst hoch, wenn du deine Backups nicht auf demselben Server speichern möchtest. Mit einem einzigen Backup-Archiv kannst du deine Installation wiederherstellen. Benutze ein serverseitiges Tool wie phpMyAdmin, oder ein Plugin wie <a href=\"http://wordpress.org/plugins/adminer/\" target=\"_blank\">Adminer</a>, um deine Datenbanksicherung wiederherzustellen."
|
501 |
+
|
502 |
+
# @ backwpup
|
503 |
+
#: ../inc/class-page-about.php:419
|
504 |
+
#, php-format
|
505 |
+
msgid "Ready to <a href=\"%1$s\">set up a backup job</a>? You can <a href=\"%2$s\">use the wizards</a> or plan your backup in expert mode."
|
506 |
+
msgstr "<a href=\"%1$s\">Bereit, einen Backup-Auftrag anzulegen</a>? Benutze die <a href=\"%2$s\">Assistenten</a>, oder plane dein Backup im Expertenmodus."
|
507 |
+
|
508 |
+
# @ backwpup
|
509 |
+
#: ../inc/class-page-about.php:426
|
510 |
+
msgid "Welcome to BackWPup"
|
511 |
+
msgstr "Willkommen bei BackWPup"
|
512 |
+
|
513 |
+
# @ backwpup
|
514 |
+
#: ../inc/class-page-about.php:429
|
515 |
+
msgid "Ready to set up a backup job? Use one of the wizards to plan what you want to save."
|
516 |
+
msgstr "Bereit, einen Backup-Auftrag anzulegen? Benutze einen der Assistenten, um deine Sicherung zu planen."
|
517 |
+
|
518 |
+
# @ backwpup
|
519 |
+
#: ../inc/class-page-about.php:446
|
520 |
+
msgid "Please activate your license"
|
521 |
+
msgstr "Bitte aktivieren Sie Ihre Lizenz."
|
522 |
+
|
523 |
+
# @ backwpup
|
524 |
+
#: ../inc/class-page-about.php:447
|
525 |
+
msgid "Please go to your plugin page and active the license to have the autoupdates enabled."
|
526 |
+
msgstr "Bitte gehen Sie auf die Plugin-Seite, und aktivieren Sie die Lizenz, um automatische Aktualisierungen zu aktivieren."
|
527 |
+
|
528 |
+
# @ backwpup
|
529 |
+
#: ../inc/class-page-about.php:456
|
530 |
+
msgid "Save your database"
|
531 |
+
msgstr "Sichern Sie Ihre Datenbank"
|
532 |
+
|
533 |
+
# @ backwpup
|
534 |
+
#: ../inc/class-page-about.php:459
|
535 |
+
msgid "Save your database regularly"
|
536 |
+
msgstr "Sichern Sie Ihre Datenbank regelmäßig"
|
537 |
+
|
538 |
+
# @ backwpup
|
539 |
+
#: ../inc/class-page-about.php:460
|
540 |
+
#, php-format
|
541 |
+
msgid "With BackWPup you can schedule the database backup to run automatically. With a single backup file you can restore your database. You should <a href=\"%s\">set up a backup job</a>, so you will never forget it. There is also an option to repair and optimize the database after each backup."
|
542 |
+
msgstr "Mit BackWPup können Sie automatische Datenbank-Backups planen. Mit einer einzigen Backup-Datei können Sie Ihre Datenbank wiederherstellen. Sie sollten einen <a href=\\\"%s\\\">Backup-Auftrag einrichten</a>, damit Sie es nie mehr vergessen. Es gibt auch eine Option, um die Datenbank anschließend zu reparieren und zu optimieren."
|
543 |
+
|
544 |
+
# @ backwpup
|
545 |
+
#: ../inc/class-page-about.php:465
|
546 |
+
#: ../inc/class-page-about.php:469
|
547 |
+
msgid "WordPress XML Export"
|
548 |
+
msgstr "WordPress-XML-Export"
|
549 |
+
|
550 |
+
# @ backwpup
|
551 |
+
#: ../inc/class-page-about.php:466
|
552 |
+
msgid "You can choose the built-in WordPress export format in addition or exclusive to save your data. This works in automated backups too of course. The advantage is: you can import these files into a blog with the regular WordPress importer."
|
553 |
+
msgstr "Sie können das interne WordPress-Export-Format zusätzlich oder ausschließlich wählen, um Ihre Daten zu sichern. Das funktioniert natürlich auch in automatischen Backups. Der Vorteil: Sie können dieses Format mit dem normalen WordPress-Importer-Plugin importieren."
|
554 |
+
|
555 |
+
# @ backwpup
|
556 |
+
#: ../inc/class-page-about.php:474
|
557 |
+
msgid "Save all data from the webserver"
|
558 |
+
msgstr "Sichern Sie alle Daten vom Webserver"
|
559 |
+
|
560 |
+
# @ backwpup
|
561 |
+
#: ../inc/class-page-about.php:477
|
562 |
+
msgid "Save all files"
|
563 |
+
msgstr "Sichern Sie alle Dateien"
|
564 |
+
|
565 |
+
# @ backwpup
|
566 |
+
#: ../inc/class-page-about.php:478
|
567 |
+
#, php-format
|
568 |
+
msgid "You can backup all your attachments, also all system files, plugins and themes in a single file. You can <a href=\"%s\">create a job</a> to update a backup copy of your file system only when files are changed."
|
569 |
+
msgstr "Sie können all Ihre Anhänge sichern, ebenso alle Systemdateien, Plugins und Themes – in einer einzigen Datei. Sie können einen <a href=\\\"%s\\\">Auftrag erstellen</a>, um die Sicherungskopie nur dann zu aktualisieren, wenn sich tatsächlich eine Datei geändert hat."
|
570 |
+
|
571 |
+
# @ backwpup
|
572 |
+
#: ../inc/class-page-about.php:483
|
573 |
+
#: ../inc/class-page-about.php:487
|
574 |
+
msgid "Security!"
|
575 |
+
msgstr "Sicherheit!"
|
576 |
+
|
577 |
+
# @ backwpup
|
578 |
+
#: ../inc/class-page-about.php:484
|
579 |
+
msgid "By default everything is encrypted: connections to external services, local files and access to directories."
|
580 |
+
msgstr "In der Grundeinstellung ist alles verschlüsselt: Verbindungen zu externen Diensten, lokale Dateien und der Zugriff auf die Verzeichnisse."
|
581 |
+
|
582 |
+
# @ backwpup
|
583 |
+
#: ../inc/class-page-about.php:492
|
584 |
+
#: ../inc/class-page-about.php:495
|
585 |
+
msgid "Cloud Support"
|
586 |
+
msgstr "Cloud-Support"
|
587 |
+
|
588 |
+
# @ backwpup
|
589 |
+
#: ../inc/class-page-about.php:496
|
590 |
+
msgid "BackWPup supports multiple cloud services in parallel. This ensures backups are redundant."
|
591 |
+
msgstr "BackWPup unterstützt mehrere Cloud-Dienste parallel. Damit wird sichergestellt, dass Sie redundante Backups anlegen können."
|
592 |
+
|
593 |
+
# @ backwpup
|
594 |
+
#: ../inc/class-page-about.php:504
|
595 |
+
msgid "Features / differences between Free and Pro"
|
596 |
+
msgstr "Features / Unterschiede zwischen Free und Pro"
|
597 |
+
|
598 |
+
# @ backwpup
|
599 |
+
#: ../inc/class-page-about.php:507
|
600 |
+
msgid "Features"
|
601 |
+
msgstr "Features"
|
602 |
+
|
603 |
+
# @ backwpup
|
604 |
+
#: ../inc/class-page-about.php:508
|
605 |
+
msgid "FREE"
|
606 |
+
msgstr "FREE"
|
607 |
+
|
608 |
+
# @ backwpup
|
609 |
+
#: ../inc/class-page-about.php:509
|
610 |
+
msgid "PRO"
|
611 |
+
msgstr "PRO"
|
612 |
+
|
613 |
+
# @ backwpup
|
614 |
+
#: ../inc/class-page-about.php:512
|
615 |
+
msgid "Complete database backup"
|
616 |
+
msgstr "Vollständige Datenbanksicherung"
|
617 |
+
|
618 |
+
# @ backwpup
|
619 |
+
#: ../inc/class-page-about.php:517
|
620 |
+
msgid "Complete file backup"
|
621 |
+
msgstr "Vollständige Dateisicherung"
|
622 |
+
|
623 |
+
# @ backwpup
|
624 |
+
#: ../inc/class-page-about.php:522
|
625 |
+
msgid "Database check"
|
626 |
+
msgstr "Datenbanküberprüfung"
|
627 |
+
|
628 |
+
# @ backwpup
|
629 |
+
#: ../inc/class-page-about.php:527
|
630 |
+
msgid "Data compression"
|
631 |
+
msgstr "Datenbankoptimierung"
|
632 |
+
|
633 |
+
# @ backwpup
|
634 |
+
#: ../inc/class-page-about.php:532
|
635 |
+
msgid "WordPress XML export"
|
636 |
+
msgstr "WordPress XML Export"
|
637 |
+
|
638 |
+
# @ backwpup
|
639 |
+
#: ../inc/class-page-about.php:537
|
640 |
+
msgid "List of installed plugins"
|
641 |
+
msgstr "Liste installierter Plugins"
|
642 |
+
|
643 |
+
# @ backwpup
|
644 |
+
#: ../inc/class-page-about.php:542
|
645 |
+
msgid "Backup archives management"
|
646 |
+
msgstr "Verwaltung der Backup-Archive"
|
647 |
+
|
648 |
+
# @ backwpup
|
649 |
+
#: ../inc/class-page-about.php:547
|
650 |
+
msgid "Log file management"
|
651 |
+
msgstr "Verwaltung der Log-Dateien"
|
652 |
+
|
653 |
+
# @ backwpup
|
654 |
+
#: ../inc/class-page-about.php:552
|
655 |
+
msgid "Start jobs per WP-Cron, URL, system, backend or WP-CLI"
|
656 |
+
msgstr "Start der Aufträge über WP-Cron, URL, System, Backend, WP-CLI"
|
657 |
+
|
658 |
+
# @ backwpup
|
659 |
+
#: ../inc/class-page-about.php:557
|
660 |
+
msgid "Log report via email"
|
661 |
+
msgstr "Log-Report via E-Mail"
|
662 |
+
|
663 |
+
# @ backwpup
|
664 |
+
#: ../inc/class-page-about.php:562
|
665 |
+
msgid "Backup to Microsoft Azure"
|
666 |
+
msgstr "Backup zu Microsoft Azure"
|
667 |
+
|
668 |
+
# @ backwpup
|
669 |
+
#: ../inc/class-page-about.php:567
|
670 |
+
msgid "Backup as email"
|
671 |
+
msgstr "Backup per E-Mail"
|
672 |
+
|
673 |
+
# @ backwpup
|
674 |
+
#: ../inc/class-page-about.php:572
|
675 |
+
msgid "Backup to S3 services <small>(Amazon, Google Storage, Hosteurope and more)</small>"
|
676 |
+
msgstr "Backup zu S3-Dienstleistern <small>(Amazon, Google Storage, Hosteurope, usw)</small>"
|
677 |
+
|
678 |
+
# @ backwpup
|
679 |
+
#: ../inc/class-page-about.php:587
|
680 |
+
msgid "Backup to FTP server"
|
681 |
+
msgstr "Backup auf FTP-Server"
|
682 |
+
|
683 |
+
# @ backwpup
|
684 |
+
#: ../inc/class-page-about.php:592
|
685 |
+
msgid "Backup to your web space"
|
686 |
+
msgstr "Backup auf eigenem Webspace"
|
687 |
+
|
688 |
+
# @ backwpup
|
689 |
+
#: ../inc/class-page-about.php:602
|
690 |
+
msgid "Backup to Google Drive"
|
691 |
+
msgstr "Backup zu Google Drive"
|
692 |
+
|
693 |
+
# @ backwpup
|
694 |
+
#: ../inc/class-page-about.php:607
|
695 |
+
msgid "Backup to Amazon Glacier"
|
696 |
+
msgstr "Backup zu Amazon Glacier"
|
697 |
+
|
698 |
+
# @ backwpup
|
699 |
+
#: ../inc/class-page-about.php:612
|
700 |
+
msgid "Custom API keys for DropBox and SugarSync"
|
701 |
+
msgstr "Eigene API-Keys für DropBox und SugarSync hinterlegen"
|
702 |
+
|
703 |
+
# @ backwpup
|
704 |
+
#: ../inc/class-page-about.php:617
|
705 |
+
msgid "XML database backup as PHPMyAdmin schema"
|
706 |
+
msgstr "XML-Datenbanksicherung der Datenbank nach PHPMyAdmin-Schema"
|
707 |
+
|
708 |
+
# @ backwpup
|
709 |
+
#: ../inc/class-page-about.php:622
|
710 |
+
msgid "Database backup as mysqldump per command line"
|
711 |
+
msgstr "Datenbanksicherung mit System-Kommando mysqldump"
|
712 |
+
|
713 |
+
# @ backwpup
|
714 |
+
#: ../inc/class-page-about.php:627
|
715 |
+
msgid "Database backup for additional MySQL databases"
|
716 |
+
msgstr "Datenbanksicherung weiterer MySQL-Datenbanken"
|
717 |
+
|
718 |
+
# @ backwpup
|
719 |
+
#: ../inc/class-page-about.php:632
|
720 |
+
msgid "Import and export job settings as XML"
|
721 |
+
msgstr "Auftragseinstellungen als XML ex- und importieren"
|
722 |
+
|
723 |
+
# @ backwpup
|
724 |
+
#: ../inc/class-page-about.php:637
|
725 |
+
msgid "Wizard for system tests"
|
726 |
+
msgstr "Assistent zur Ausführung eines Systemtests"
|
727 |
+
|
728 |
+
# @ backwpup
|
729 |
+
#: ../inc/class-page-about.php:642
|
730 |
+
msgid "Wizard for scheduled backup jobs"
|
731 |
+
msgstr "Assistent zur Einrichtung von Sicherungsaufträgen"
|
732 |
+
|
733 |
+
# @ backwpup
|
734 |
+
#: ../inc/class-page-about.php:647
|
735 |
+
msgid "Wizard to import settings and backup jobs"
|
736 |
+
msgstr "Assistent zum Importieren von Einstellungen und Aufträgen"
|
737 |
+
|
738 |
+
# @ backwpup
|
739 |
+
#: ../inc/class-page-about.php:652
|
740 |
+
msgid "Differential backup of changed directories to Dropbox"
|
741 |
+
msgstr "Sicherung geänderter Verzeichnisse in einer Dropbox"
|
742 |
+
|
743 |
+
# @ backwpup
|
744 |
+
#: ../inc/class-page-about.php:657
|
745 |
+
msgid "Differential backup of changed directories to Rackspace Cloud Files"
|
746 |
+
msgstr "Sicherung geänderter Verzeichnisse nach Rackspace Cloud Files"
|
747 |
+
|
748 |
+
# @ backwpup
|
749 |
+
#: ../inc/class-page-about.php:662
|
750 |
+
msgid "Differential backup of changed directories to S3"
|
751 |
+
msgstr "Sicherung geänderter Verzeichnisse nach S3"
|
752 |
+
|
753 |
+
# @ backwpup
|
754 |
+
#: ../inc/class-page-about.php:667
|
755 |
+
msgid "Differential backup of changed directories to MS Azure"
|
756 |
+
msgstr "Sicherung geänderter Verzeichnisse nach MS Azure"
|
757 |
+
|
758 |
+
# @ backwpup
|
759 |
+
#: ../inc/class-page-about.php:672
|
760 |
+
msgid "<strong>Premium support</strong>"
|
761 |
+
msgstr "<strong>Premium-Support</strong>"
|
762 |
+
|
763 |
+
# @ backwpup
|
764 |
+
#: ../inc/class-page-about.php:677
|
765 |
+
msgid "<strong>Dynamically loaded documentation</strong>"
|
766 |
+
msgstr "<strong>Integration einer dynamischen Dokumentation</strong>"
|
767 |
+
|
768 |
+
# @ backwpup
|
769 |
+
#: ../inc/class-page-about.php:682
|
770 |
+
msgid "<strong>Automatic update from MarketPress</strong>"
|
771 |
+
msgstr "<strong>Automatische Aktualisierung durch MarketPress</strong>"
|
772 |
+
|
773 |
+
# @ backwpup
|
774 |
+
#: ../inc/class-page-about.php:689
|
775 |
+
msgid "http://marketpress.com/product/backwpup-pro/"
|
776 |
+
msgstr "http://marketpress.de/product/backwpup-pro/"
|
777 |
+
|
778 |
+
# @ backwpup
|
779 |
+
#: ../inc/class-page-about.php:689
|
780 |
+
msgid "GET PRO"
|
781 |
+
msgstr "GET PRO"
|
782 |
+
|
783 |
+
# @ backwpup
|
784 |
+
#: ../inc/class-install.php:71
|
785 |
+
msgid "BackWPup Admin"
|
786 |
+
msgstr "BackWPup Admin"
|
787 |
+
|
788 |
+
# @ backwpup
|
789 |
+
#: ../inc/class-install.php:84
|
790 |
+
msgid "BackWPup jobs checker"
|
791 |
+
msgstr "BackWPup Auftragsprüfung"
|
792 |
+
|
793 |
+
# @ backwpup
|
794 |
+
#: ../inc/class-install.php:97
|
795 |
+
msgid "BackWPup jobs helper"
|
796 |
+
msgstr "BackWPup Auftragshelfer"
|
797 |
+
|
798 |
+
# @ backwpup
|
799 |
+
#: ../inc/class-help.php:15
|
800 |
+
msgid "Plugin Info"
|
801 |
+
msgstr "Plugin Info"
|
802 |
+
|
803 |
+
# @ backwpup
|
804 |
+
#: ../inc/class-help.php:17
|
805 |
+
#, php-format
|
806 |
+
msgctxt "Plugin name and link; Plugin Version"
|
807 |
+
msgid "%1$s version %2$s. A project by <a href=\"http://inpsyde.com\">Inpsyde GmbH</a>."
|
808 |
+
msgstr "%1$s Version %2$s. Ein Projekt von <a href=\"http://inpsyde.com\">Inpsyde GmbH</a>."
|
809 |
+
|
810 |
+
# @ backwpup
|
811 |
+
#: ../inc/class-help.php:18
|
812 |
+
msgid "BackWPup comes with ABSOLUTELY NO WARRANTY. This is a free software, and you are welcome to redistribute it under certain conditions."
|
813 |
+
msgstr "BackWPup erhalten Sie OHNE JEDWEDE GARANTIE. Dies ist freie Software (quelloffen, im Sinne von Open Source) und Sie sind eingeladen, sie unter bestimmten Bedingungen weiterzugeben."
|
814 |
+
|
815 |
+
# @ backwpup
|
816 |
+
#: ../inc/class-help.php:21
|
817 |
+
msgid "For more information:"
|
818 |
+
msgstr "Für weitere Informationen:"
|
819 |
+
|
820 |
+
# @ backwpup
|
821 |
+
#: ../inc/class-help.php:23
|
822 |
+
msgid "Plugin on wordpress.org"
|
823 |
+
msgstr "Plugin auf wordpress.org"
|
824 |
+
|
825 |
+
# @ backwpup
|
826 |
+
#: ../inc/class-help.php:24
|
827 |
+
msgid "https://marketpress.com/news/"
|
828 |
+
msgstr "https://marketpress.de/news/"
|
829 |
+
|
830 |
+
# @ backwpup
|
831 |
+
#: ../inc/class-help.php:24
|
832 |
+
msgid "News"
|
833 |
+
msgstr "Neuigkeiten"
|
834 |
+
|
835 |
+
# @ backwpup
|
836 |
+
#: ../inc/class-help.php:26
|
837 |
+
msgid "https://marketpress.com/support/forum/plugins/backwpup-pro/"
|
838 |
+
msgstr "https://marketpress.de/support/forum/plugins/backwpup-pro/"
|
839 |
+
|
840 |
+
# @ backwpup
|
841 |
+
#: ../inc/class-help.php:26
|
842 |
+
msgid "Pro Support"
|
843 |
+
msgstr "Pro-Support"
|
844 |
+
|
845 |
+
# @ backwpup
|
846 |
+
#: ../inc/class-help.php:28
|
847 |
+
msgid "http://wordpress.org/support/plugin/backwpup/"
|
848 |
+
msgstr "http://wordpress.org/support/plugin/backwpup/"
|
849 |
+
|
850 |
+
# @ backwpup
|
851 |
+
#: ../inc/class-help.php:28
|
852 |
+
msgid "Support"
|
853 |
+
msgstr "Support"
|
854 |
+
|
855 |
+
# @ backwpup
|
856 |
+
#: ../inc/class-help.php:29
|
857 |
+
msgid "https://marketpress.com/documentation/backwpup-pro/"
|
858 |
+
msgstr "https://marketpress.de/dokumentation/backwpup-pro/"
|
859 |
+
|
860 |
+
# @ backwpup
|
861 |
+
#: ../inc/class-help.php:29
|
862 |
+
msgid "Manual"
|
863 |
+
msgstr "Handbuch"
|
864 |
+
|
865 |
+
# @ backwpup
|
866 |
+
#: ../inc/class-destination-ftp.php:23
|
867 |
+
msgid "FTP server and login"
|
868 |
+
msgstr "FTP-Server und -Anmeldung"
|
869 |
+
|
870 |
+
# @ backwpup
|
871 |
+
#: ../inc/class-destination-ftp.php:27
|
872 |
+
msgid "FTP server"
|
873 |
+
msgstr "FTP-Server"
|
874 |
+
|
875 |
+
# @ backwpup
|
876 |
+
#: ../inc/class-destination-ftp.php:31
|
877 |
+
msgid "Port:"
|
878 |
+
msgstr "Port:"
|
879 |
+
|
880 |
+
# @ backwpup
|
881 |
+
#: ../inc/class-destination-ftp.php:37
|
882 |
+
msgid "Username"
|
883 |
+
msgstr "Benutzername"
|
884 |
+
|
885 |
+
# @ backwpup
|
886 |
+
#: ../inc/class-destination-ftp.php:44
|
887 |
+
msgid "Password"
|
888 |
+
msgstr "Passwort"
|
889 |
+
|
890 |
+
# @ backwpup
|
891 |
+
#: ../inc/class-destination-ftp.php:56
|
892 |
+
msgid "Folder to store files in"
|
893 |
+
msgstr "Order für Dateien"
|
894 |
+
|
895 |
+
# @ backwpup
|
896 |
+
#: ../inc/class-destination-ftp.php:68
|
897 |
+
msgid "Maximum number of files to keep in folder."
|
898 |
+
msgstr "Maximale Anzahl von Dateien im Ordner."
|
899 |
+
|
900 |
+
# @ backwpup
|
901 |
+
#: ../inc/class-destination-ftp.php:78
|
902 |
+
msgid "FTP specific settings"
|
903 |
+
msgstr "FTP-Einstellungen"
|
904 |
+
|
905 |
+
# @ backwpup
|
906 |
+
#: ../inc/class-destination-ftp.php:82
|
907 |
+
msgid "Timeout for FTP connection"
|
908 |
+
msgstr "Zeitüberschreitung bei der FTP-Verbindung"
|
909 |
+
|
910 |
+
# @ backwpup
|
911 |
+
#: ../inc/class-destination-ftp.php:86
|
912 |
+
msgid "seconds"
|
913 |
+
msgstr "Sekunden"
|
914 |
+
|
915 |
+
# @ backwpup
|
916 |
+
#: ../inc/class-destination-ftp.php:90
|
917 |
+
msgid "SSL-FTP connection"
|
918 |
+
msgstr "SSL-FTP-Verbindung"
|
919 |
+
|
920 |
+
# @ backwpup
|
921 |
+
#: ../inc/class-destination-ftp.php:94
|
922 |
+
msgid "Use explicit SSL-FTP connection."
|
923 |
+
msgstr "Nutze explizit SSL-FTP Verbindung"
|
924 |
+
|
925 |
+
# @ backwpup
|
926 |
+
#: ../inc/class-destination-ftp.php:99
|
927 |
+
msgid "FTP Passive Mode"
|
928 |
+
msgstr "FTP-Passivmodus"
|
929 |
+
|
930 |
+
# @ backwpup
|
931 |
+
#: ../inc/class-destination-ftp.php:103
|
932 |
+
msgid "Use FTP Passive Mode."
|
933 |
+
msgstr "Nutze FTP-Passivmodus"
|
934 |
+
|
935 |
+
# @ backwpup
|
936 |
+
#: ../inc/class-destination-ftp.php:179
|
937 |
+
msgid "FTP: Login failure!"
|
938 |
+
msgstr "FTP: Anmeldung fehlgeschlagen!"
|
939 |
+
|
940 |
+
# @ backwpup
|
941 |
+
#: ../inc/class-destination-ftp.php:203
|
942 |
+
#, php-format
|
943 |
+
msgid "%d. Try to send backup file to an FTP server …"
|
944 |
+
msgstr "%d. Versuche, Backup an FTP-Server zu senden …"
|
945 |
+
|
946 |
+
# @ backwpup
|
947 |
+
#: ../inc/class-destination-ftp.php:209
|
948 |
+
#, php-format
|
949 |
+
msgid "Connected via explicit SSL-FTP to server: %s"
|
950 |
+
msgstr "Durch explizite SSL-FTP-Verbindung zum Server verbunden: %s"
|
951 |
+
|
952 |
+
# @ backwpup
|
953 |
+
#: ../inc/class-destination-ftp.php:211
|
954 |
+
#, php-format
|
955 |
+
msgid "Cannot connect via explicit SSL-FTP to server: %s"
|
956 |
+
msgstr "Kann nicht mit explizit SSL-FTP zum Server verbinden: %s"
|
957 |
+
|
958 |
+
# @ backwpup
|
959 |
+
#: ../inc/class-destination-ftp.php:217
|
960 |
+
msgid "PHP function to connect with explicit SSL-FTP to server does not exist!"
|
961 |
+
msgstr "PHP-Funktion für die Verbindung mit explizit SSL-FTP zum Server existiert nicht!"
|
962 |
+
|
963 |
+
# @ backwpup
|
964 |
+
#: ../inc/class-destination-ftp.php:225
|
965 |
+
#, php-format
|
966 |
+
msgid "Connected to FTP server: %s"
|
967 |
+
msgstr "Verbunden mit dem FTP-Server: %s"
|
968 |
+
|
969 |
+
# @ backwpup
|
970 |
+
#: ../inc/class-destination-ftp.php:227
|
971 |
+
#, php-format
|
972 |
+
msgid "Cannot connect to FTP server: %s"
|
973 |
+
msgstr "Kann nicht mit dem FTP-Server verbinden: %s"
|
974 |
+
|
975 |
+
# @ backwpup
|
976 |
+
#: ../inc/class-destination-ftp.php:234
|
977 |
+
#: ../inc/class-destination-ftp.php:242
|
978 |
+
#: ../inc/class-destination-ftp.php:253
|
979 |
+
#: ../inc/class-destination-ftp.php:300
|
980 |
+
#, php-format
|
981 |
+
msgid "FTP client command: %s"
|
982 |
+
msgstr "FTP-Client-Befehl: %s"
|
983 |
+
|
984 |
+
# @ backwpup
|
985 |
+
#: ../inc/class-destination-ftp.php:236
|
986 |
+
#, php-format
|
987 |
+
msgid "FTP server response: %s"
|
988 |
+
msgstr "FTP-Server Antwort: %s"
|
989 |
+
|
990 |
+
# @ backwpup
|
991 |
+
#: ../inc/class-destination-ftp.php:240
|
992 |
+
#: ../inc/class-destination-ftp.php:244
|
993 |
+
#: ../inc/class-destination-ftp.php:256
|
994 |
+
#: ../inc/class-destination-ftp.php:258
|
995 |
+
#: ../inc/class-destination-ftp.php:303
|
996 |
+
#: ../inc/class-destination-ftp.php:305
|
997 |
+
#: ../inc/class-destination-ftp.php:309
|
998 |
+
#: ../inc/class-destination-ftp.php:311
|
999 |
+
#, php-format
|
1000 |
+
msgid "FTP server reply: %s"
|
1001 |
+
msgstr "Antwort des FTP-Servers: %s"
|
1002 |
+
|
1003 |
+
# @ backwpup
|
1004 |
+
#: ../inc/class-destination-ftp.php:258
|
1005 |
+
msgid "Error getting SYSTYPE"
|
1006 |
+
msgstr "Fehler, SYSTYPE wird angezeigt"
|
1007 |
+
|
1008 |
+
# @ backwpup
|
1009 |
+
#: ../inc/class-destination-ftp.php:276
|
1010 |
+
#, php-format
|
1011 |
+
msgid "FTP Folder \"%s\" created!"
|
1012 |
+
msgstr "FTP-Ordner \"%s\" erstellt!"
|
1013 |
+
|
1014 |
+
# @ backwpup
|
1015 |
+
#: ../inc/class-destination-ftp.php:280
|
1016 |
+
#, php-format
|
1017 |
+
msgid "FTP Folder \"%s\" cannot be created!"
|
1018 |
+
msgstr "FTP-Ordner \"%s\" kann nicht erstellt werden!"
|
1019 |
+
|
1020 |
+
# @ backwpup
|
1021 |
+
#: ../inc/class-destination-ftp.php:291
|
1022 |
+
#, php-format
|
1023 |
+
msgid "FTP current folder is: %s"
|
1024 |
+
msgstr "Aktueller FTP-Ordner ist: %s"
|
1025 |
+
|
1026 |
+
# @ backwpup
|
1027 |
+
#: ../inc/class-destination-ftp.php:303
|
1028 |
+
msgid "Entering passive mode"
|
1029 |
+
msgstr "Passivmodus gestartet"
|
1030 |
+
|
1031 |
+
# @ backwpup
|
1032 |
+
#: ../inc/class-destination-ftp.php:305
|
1033 |
+
msgid "Cannot enter passive mode"
|
1034 |
+
msgstr "Starten des passiven Modus’ nicht möglich"
|
1035 |
+
|
1036 |
+
# @ backwpup
|
1037 |
+
#: ../inc/class-destination-ftp.php:309
|
1038 |
+
msgid "Entering normal mode"
|
1039 |
+
msgstr "Starte Normalmodus"
|
1040 |
+
|
1041 |
+
# @ backwpup
|
1042 |
+
#: ../inc/class-destination-ftp.php:311
|
1043 |
+
msgid "Cannot enter normal mode"
|
1044 |
+
msgstr "Normalmodus kann nicht gestartet werden"
|
1045 |
+
|
1046 |
+
# @ backwpup
|
1047 |
+
#: ../inc/class-destination-ftp.php:315
|
1048 |
+
msgid "Starting upload to FTP  …"
|
1049 |
+
msgstr "Hochladen ins FTP-Verzeichnis hat begonnen …"
|
1050 |
+
|
1051 |
+
# @ backwpup
|
1052 |
+
#: ../inc/class-destination-ftp.php:327
|
1053 |
+
msgid "Cannot transfer backup to FTP server!"
|
1054 |
+
msgstr "Backup kann nicht zum FTP-Server übertragen werden!"
|
1055 |
+
|
1056 |
+
# @ backwpup
|
1057 |
+
#: ../inc/class-destination-ftp.php:333
|
1058 |
+
#, php-format
|
1059 |
+
msgid "Backup transferred to FTP server: %s"
|
1060 |
+
msgstr "Backup Archiv übertragen zum FTP-Server: %s"
|
1061 |
+
|
1062 |
+
# @ backwpup
|
1063 |
+
#: ../inc/class-destination-ftp.php:379
|
1064 |
+
#, php-format
|
1065 |
+
msgid "Cannot delete \"%s\" on FTP server!"
|
1066 |
+
msgstr "Kann \"%s\" auf dem FTP-Server nicht löschen!"
|
1067 |
+
|
1068 |
+
# @ backwpup
|
1069 |
+
#: ../inc/class-destination-ftp.php:382
|
1070 |
+
#, php-format
|
1071 |
+
msgid "One file deleted on FTP server"
|
1072 |
+
msgid_plural "%d files deleted on FTP server"
|
1073 |
+
msgstr[0] "Eine Datei vom FTP-Server gelöscht"
|
1074 |
+
msgstr[1] "%d Dateien vom FTP-Server gelöscht"
|
1075 |
+
|
1076 |
+
# @ backwpup
|
1077 |
+
#: ../inc/class-jobtype-file.php:15
|
1078 |
+
msgid "Files"
|
1079 |
+
msgstr "Dateien"
|
1080 |
+
|
1081 |
+
# @ backwpup
|
1082 |
+
#: ../inc/class-jobtype-file.php:16
|
1083 |
+
msgid "File backup"
|
1084 |
+
msgstr "Dateien Backup"
|
1085 |
+
|
1086 |
+
# @ backwpup
|
1087 |
+
#: ../inc/class-jobtype-file.php:64
|
1088 |
+
msgid "Folders to backup"
|
1089 |
+
msgstr "Zu sichernde Verzeichnisse"
|
1090 |
+
|
1091 |
+
# @ backwpup
|
1092 |
+
#: ../inc/class-jobtype-file.php:68
|
1093 |
+
msgid "Backup root folder"
|
1094 |
+
msgstr "Root Verzeichnis sichern"
|
1095 |
+
|
1096 |
+
# @ backwpup
|
1097 |
+
#: ../inc/class-jobtype-file.php:79
|
1098 |
+
#: ../inc/class-jobtype-file.php:116
|
1099 |
+
#: ../inc/class-jobtype-file.php:153
|
1100 |
+
#: ../inc/class-jobtype-file.php:190
|
1101 |
+
#: ../inc/class-jobtype-file.php:227
|
1102 |
+
#, php-format
|
1103 |
+
msgid "Path as set by user (symlink?): %s"
|
1104 |
+
msgstr "Pfad, wie vom User gesetzt (symlink?): %s"
|
1105 |
+
|
1106 |
+
# @ backwpup
|
1107 |
+
#: ../inc/class-jobtype-file.php:82
|
1108 |
+
#: ../inc/class-jobtype-file.php:119
|
1109 |
+
#: ../inc/class-jobtype-file.php:156
|
1110 |
+
#: ../inc/class-jobtype-file.php:193
|
1111 |
+
#: ../inc/class-jobtype-file.php:230
|
1112 |
+
msgid "Exclude:"
|
1113 |
+
msgstr "Ausschließen:"
|
1114 |
+
|
1115 |
+
# @ backwpup
|
1116 |
+
#: ../inc/class-jobtype-file.php:93
|
1117 |
+
#: ../inc/class-jobtype-file.php:130
|
1118 |
+
#: ../inc/class-jobtype-file.php:167
|
1119 |
+
#: ../inc/class-jobtype-file.php:204
|
1120 |
+
#: ../inc/class-jobtype-file.php:241
|
1121 |
+
msgid "Excluded by .donotbackup file!"
|
1122 |
+
msgstr "Ausgeschlossen durch .donotbackup Datei!"
|
1123 |
+
|
1124 |
+
# @ backwpup
|
1125 |
+
#: ../inc/class-jobtype-file.php:105
|
1126 |
+
msgid "Backup content folder"
|
1127 |
+
msgstr "Sicherung des Content Verzeichnisses"
|
1128 |
+
|
1129 |
+
# @ backwpup
|
1130 |
+
#: ../inc/class-jobtype-file.php:142
|
1131 |
+
msgid "Backup plugins"
|
1132 |
+
msgstr "Plugins sichern"
|
1133 |
+
|
1134 |
+
# @ backwpup
|
1135 |
+
#: ../inc/class-jobtype-file.php:179
|
1136 |
+
msgid "Backup themes"
|
1137 |
+
msgstr "Themes sichern"
|
1138 |
+
|
1139 |
+
# @ backwpup
|
1140 |
+
#: ../inc/class-jobtype-file.php:216
|
1141 |
+
msgid "Backup uploads folder"
|
1142 |
+
msgstr "Uploads Verzeichnis sichern"
|
1143 |
+
|
1144 |
+
# @ backwpup
|
1145 |
+
#: ../inc/class-jobtype-file.php:253
|
1146 |
+
msgid "Extra folders to backup"
|
1147 |
+
msgstr "Weitere Verzeichnisse sichern"
|
1148 |
+
|
1149 |
+
# @ backwpup
|
1150 |
+
#: ../inc/class-jobtype-file.php:260
|
1151 |
+
msgid "Exclude from backup"
|
1152 |
+
msgstr "Nicht mitsichern"
|
1153 |
+
|
1154 |
+
# @ backwpup
|
1155 |
+
#: ../inc/class-jobtype-file.php:264
|
1156 |
+
msgid "Thumbnails in uploads"
|
1157 |
+
msgstr "Thumbnails in uploads"
|
1158 |
+
|
1159 |
+
# @ backwpup
|
1160 |
+
#: ../inc/class-jobtype-file.php:268
|
1161 |
+
msgid "Don't backup thumbnails from the site's uploads folder."
|
1162 |
+
msgstr "Thumbnails im Uploads-Verzeichnis der Website nicht mitsichern."
|
1163 |
+
|
1164 |
+
# @ backwpup
|
1165 |
+
#: ../inc/class-jobtype-file.php:268
|
1166 |
+
msgid "All images with -???x???. will be excluded. Use a plugin like Regenerate Thumbnails to rebuild them after a restore."
|
1167 |
+
msgstr "Alle Bilder mit -???x??? im Dateinamen werden nicht mitgesichert. Benutze ein Plugin wir Regenerate Thumbnails um die Thumbnails wiederherzustellen."
|
1168 |
+
|
1169 |
+
# @ backwpup
|
1170 |
+
#: ../inc/class-jobtype-file.php:272
|
1171 |
+
msgid "Exclude files/folders from backup"
|
1172 |
+
msgstr "Datein/Verzeichnisse nicht mitsichern."
|
1173 |
+
|
1174 |
+
# @ backwpup
|
1175 |
+
#: ../inc/class-jobtype-file.php:279
|
1176 |
+
msgid "Special option"
|
1177 |
+
msgstr "Spezialoption"
|
1178 |
+
|
1179 |
+
# @ backwpup
|
1180 |
+
#: ../inc/class-jobtype-file.php:283
|
1181 |
+
msgid "Include special files"
|
1182 |
+
msgstr "Spezielle Dateien einschließen"
|
1183 |
+
|
1184 |
+
# @ backwpup
|
1185 |
+
#: ../inc/class-jobtype-file.php:287
|
1186 |
+
msgid "Backup wp-config.php, robots.txt, .htaccess, .htpasswd and favicon.ico from root."
|
1187 |
+
msgstr "Sichere wp-config.php, robots.txt, .htaccess, .htpasswd und favicon.ico vom Root"
|
1188 |
+
|
1189 |
+
# @ backwpup
|
1190 |
+
#: ../inc/class-jobtype-file.php:287
|
1191 |
+
msgid "If the WordPress root folder is not included in this backup job, check this option to additionally include wp-config.php, robots.txt, .htaccess, .htpasswd and favicon.ico into the backup. Your wp-config.php will be included even if you placed it in the parent directory of your root folder."
|
1192 |
+
msgstr "Sofern das WordPress-Wurzelverzeichnis nicht sowieso im Backup inkludiert ist, aktiviere diese Option, um zusätzlich die Dateien wp-config.php, robots.txt, .htaccess, .htpasswd und favicon.ico mitzusichern. Die wp-config-php-Datei wird in diesem Fall auch dann mitgesichert, wenn sie sich eine Ordner-Ebene höher als WordPress befindet."
|
1193 |
+
|
1194 |
+
# @ backwpup
|
1195 |
+
#: ../inc/class-jobtype-file.php:364
|
1196 |
+
#, php-format
|
1197 |
+
msgid "%d. Trying to make a list of folders to back up …"
|
1198 |
+
msgstr "%d. Versuche, eine Liste der Ordner für das Backup zu erstellen …"
|
1199 |
+
|
1200 |
+
# @ backwpup
|
1201 |
+
#: ../inc/class-jobtype-file.php:483
|
1202 |
+
#: ../inc/class-jobtype-file.php:490
|
1203 |
+
#: ../inc/class-jobtype-file.php:497
|
1204 |
+
#: ../inc/class-jobtype-file.php:503
|
1205 |
+
#: ../inc/class-jobtype-file.php:509
|
1206 |
+
#: ../inc/class-jobtype-file.php:515
|
1207 |
+
#, php-format
|
1208 |
+
msgid "Added \"%s\" to backup file list"
|
1209 |
+
msgstr "\"%s\" zur Backup-Datei-Liste hinzugefügt."
|
1210 |
+
|
1211 |
+
# @ backwpup
|
1212 |
+
#: ../inc/class-jobtype-file.php:520
|
1213 |
+
msgid "No files/folder for the backup."
|
1214 |
+
msgstr "Keine Dateien/Ordner für das Backup."
|
1215 |
+
|
1216 |
+
# @ backwpup
|
1217 |
+
#: ../inc/class-jobtype-file.php:522
|
1218 |
+
#, php-format
|
1219 |
+
msgid "%1$d folders to backup."
|
1220 |
+
msgstr "%1$d Ordner für Backup."
|
1221 |
+
|
1222 |
+
# @ backwpup
|
1223 |
+
#: ../inc/class-jobtype-file.php:561
|
1224 |
+
#, php-format
|
1225 |
+
msgid "Folder \"%s\" is not readable!"
|
1226 |
+
msgstr "Ordner \"%s\" ist nicht lesbar!"
|
1227 |
+
|
1228 |
+
# @ backwpup
|
1229 |
+
#: ../inc/class-create-archive.php:71
|
1230 |
+
msgid "The file name of an archive cannot be empty."
|
1231 |
+
msgstr "Der Dateiname eines Archivs kann nicht leer sein."
|
1232 |
+
|
1233 |
+
# @ backwpup
|
1234 |
+
#: ../inc/class-create-archive.php:79
|
1235 |
+
#, php-format
|
1236 |
+
msgctxt "%s = Folder name"
|
1237 |
+
msgid "Folder %s for archive not found"
|
1238 |
+
msgstr "Ordner %s für Archiv nicht gefunden"
|
1239 |
+
|
1240 |
+
# @ backwpup
|
1241 |
+
#: ../inc/class-create-archive.php:85
|
1242 |
+
#: ../inc/class-create-archive.php:120
|
1243 |
+
#: ../inc/class-create-archive.php:137
|
1244 |
+
#: ../inc/class-mysqldump.php:125
|
1245 |
+
msgid "Functions for gz compression not available"
|
1246 |
+
msgstr "Die Funktionen für die Gzip-Kompression sind nicht verfügbar."
|
1247 |
+
|
1248 |
+
# @ backwpup
|
1249 |
+
#: ../inc/class-create-archive.php:92
|
1250 |
+
#: ../inc/class-create-archive.php:143
|
1251 |
+
msgid "Functions for bz2 compression not available"
|
1252 |
+
msgstr "Die Funktionen für die Bz2-Kompression sind nicht verfügbar."
|
1253 |
+
|
1254 |
+
# @ backwpup
|
1255 |
+
#: ../inc/class-create-archive.php:116
|
1256 |
+
#, php-format
|
1257 |
+
msgctxt "ZipArchive open() result"
|
1258 |
+
msgid "Cannot create zip archive: %d"
|
1259 |
+
msgstr "Konte ZIP-Datei %d nicht erstellen"
|
1260 |
+
|
1261 |
+
# @ backwpup
|
1262 |
+
#: ../inc/class-create-archive.php:149
|
1263 |
+
#, php-format
|
1264 |
+
msgctxt "%s = file name"
|
1265 |
+
msgid "Method to archive file %s not detected"
|
1266 |
+
msgstr "Methode zum Archivieren der Datei %s nicht gefunden"
|
1267 |
+
|
1268 |
+
# @ backwpup
|
1269 |
+
#: ../inc/class-create-archive.php:154
|
1270 |
+
msgid "Cannot open archive file"
|
1271 |
+
msgstr "Kann Archivdatei nicht öffnen"
|
1272 |
+
|
1273 |
+
# @ backwpup
|
1274 |
+
#: ../inc/class-create-archive.php:174
|
1275 |
+
#: ../inc/class-create-archive.php:349
|
1276 |
+
#, php-format
|
1277 |
+
msgid "PclZip archive add error: %s"
|
1278 |
+
msgstr "Fehler beim Hinzufügen zum PclZip-Archive: %s"
|
1279 |
+
|
1280 |
+
# @ backwpup
|
1281 |
+
#: ../inc/class-create-archive.php:189
|
1282 |
+
msgid "ZIP archive cannot be closed correctly."
|
1283 |
+
msgstr "ZIP-Archiv kann nicht korrekt geschlossen werden."
|
1284 |
+
|
1285 |
+
# @ backwpup
|
1286 |
+
#: ../inc/class-create-archive.php:244
|
1287 |
+
msgid "File name cannot be empty"
|
1288 |
+
msgstr "Der Dateiname kann nicht leer sein."
|
1289 |
+
|
1290 |
+
# @ backwpup
|
1291 |
+
#: ../inc/class-create-archive.php:253
|
1292 |
+
#, php-format
|
1293 |
+
msgctxt "File to add to archive"
|
1294 |
+
msgid "File %s does not exist or is not readable"
|
1295 |
+
msgstr "Datei %s existiert nicht oder ist nicht lesbar"
|
1296 |
+
|
1297 |
+
# @ backwpup
|
1298 |
+
#: ../inc/class-create-archive.php:266
|
1299 |
+
#: ../inc/class-create-archive.php:282
|
1300 |
+
#: ../inc/class-create-archive.php:392
|
1301 |
+
#: ../inc/class-create-archive.php:396
|
1302 |
+
msgid "This archive method can only add one file"
|
1303 |
+
msgstr "Diese Archive-Methode kann nur eine einziges Datei sichern."
|
1304 |
+
|
1305 |
+
# @ backwpup
|
1306 |
+
#: ../inc/class-create-archive.php:271
|
1307 |
+
#: ../inc/class-create-archive.php:287
|
1308 |
+
#, php-format
|
1309 |
+
msgid "Cannot open source file %s to archive"
|
1310 |
+
msgstr "Konnte Quelle %s zum Archivieren nicht öffnen"
|
1311 |
+
|
1312 |
+
# @ backwpup
|
1313 |
+
#: ../inc/class-create-archive.php:311
|
1314 |
+
msgid "ZipArchive can not closed correctly"
|
1315 |
+
msgstr "ZIP-Archive kann nicht korrekt geschlossen werden"
|
1316 |
+
|
1317 |
+
# @ backwpup
|
1318 |
+
#: ../inc/class-create-archive.php:330
|
1319 |
+
#: ../inc/class-create-archive.php:338
|
1320 |
+
#: ../inc/class-create-archive.php:407
|
1321 |
+
#, php-format
|
1322 |
+
msgid "Cannot add \"%s\" to zip archive!"
|
1323 |
+
msgstr "\"%s\" kann dem ZIP-Archiv nicht hinzugefügt werden!"
|
1324 |
+
|
1325 |
+
# @ backwpup
|
1326 |
+
#: ../inc/class-create-archive.php:374
|
1327 |
+
msgid "Folder name cannot be empty"
|
1328 |
+
msgstr "Der Verzeichnis Name darf nicht leer sein"
|
1329 |
+
|
1330 |
+
# @ backwpup
|
1331 |
+
#: ../inc/class-create-archive.php:379
|
1332 |
+
#, php-format
|
1333 |
+
msgctxt "Folder path to add to archive"
|
1334 |
+
msgid "Folder %s does not exist or is not readable"
|
1335 |
+
msgstr "Verzeichnis %s existiert nicht oder ist nicht lesbar"
|
1336 |
+
|
1337 |
+
# @ backwpup
|
1338 |
+
#: ../inc/class-create-archive.php:429
|
1339 |
+
#, php-format
|
1340 |
+
msgctxt "Text of ZipArchive status Message"
|
1341 |
+
msgid "ZipArchive returns status: %s"
|
1342 |
+
msgstr "Das Zip-Archive liefert den Status: %s"
|
1343 |
+
|
1344 |
+
# @ backwpup
|
1345 |
+
#: ../inc/class-create-archive.php:459
|
1346 |
+
#, php-format
|
1347 |
+
msgid "File name \"%1$s\" is too long to be saved correctly in %2$s archive!"
|
1348 |
+
msgstr "Dateiname \"%1$s\" ist zu lang, um korrekt im %2$s Archiv zu speichern."
|
1349 |
+
|
1350 |
+
# @ backwpup
|
1351 |
+
#: ../inc/class-create-archive.php:462
|
1352 |
+
#, php-format
|
1353 |
+
msgid "File path \"%1$s\" is too long to be saved correctly in %2$s archive!"
|
1354 |
+
msgstr "Dateipfad \"%1$s\" ist zu lang, um korrekt in %2$s Archiv zu speichern"
|
1355 |
+
|
1356 |
+
# @ backwpup
|
1357 |
+
#: ../inc/class-create-archive.php:474
|
1358 |
+
#, php-format
|
1359 |
+
msgid "Cannot open source file %s for archiving"
|
1360 |
+
msgstr "Kann Quelldatei %s nicht zum Archivieren öffnen"
|
1361 |
+
|
1362 |
+
# @ backwpup
|
1363 |
+
#: ../inc/class-create-archive.php:479
|
1364 |
+
#: ../inc/class-create-archive.php:480
|
1365 |
+
#: ../inc/class-create-archive.php:579
|
1366 |
+
#: ../inc/class-create-archive.php:580
|
1367 |
+
msgid "Unknown"
|
1368 |
+
msgstr "Unbekannt"
|
1369 |
+
|
1370 |
+
# @ backwpup
|
1371 |
+
#: ../inc/class-create-archive.php:570
|
1372 |
+
#, php-format
|
1373 |
+
msgid "Folder name \"%1$s\" is too long to be saved correctly in %2$s archive!"
|
1374 |
+
msgstr "Verzeichnis Name \"%1$s\" ist zu lang um ihn koreckt zu speichern im %2$s Archiv"
|
1375 |
+
|
1376 |
+
# @ backwpup
|
1377 |
+
#: ../inc/class-create-archive.php:573
|
1378 |
+
#, php-format
|
1379 |
+
msgid "Folder path \"%1$s\" is too long to be saved correctly in %2$s archive!"
|
1380 |
+
msgstr "Verzeichnis Pfad \"%1$s\" ist zu lang um ihn koreckt zu speichern im %2$s Archiv"
|
1381 |
+
|
1382 |
+
# @ backwpup
|
1383 |
+
#: ../inc/class-create-archive.php:651
|
1384 |
+
#, php-format
|
1385 |
+
msgid "If %s will be added to your backup archive, the archive will be too large for many file systems (over 2GB). You might want to consider splitting the backup job in multiple jobs with less files each."
|
1386 |
+
msgstr "Wenn %s zu deinem Backup-Archiv hinzugefügt wird, wird das Archiv zu groß für etliche Dateisysteme (über 2GB). Vielleicht möchtest du den Backup-Auftrag in mehrere Aufträge mit jeweils weniger Dateien splitten?"
|
1387 |
+
|
1388 |
+
# @ backwpup
|
1389 |
+
#: ../inc/class-cron.php:62
|
1390 |
+
msgid "Aborted, because no progress for one hour!"
|
1391 |
+
msgstr "Abgebrochen, aufgrund keines Fortschrittes innerhalb der letzten Stunde!"
|
1392 |
+
|
1393 |
+
# @ backwpup
|
1394 |
+
#: ../inc/class-page-backups.php:173
|
1395 |
+
msgid "No files could be found. (List will be generated during next backup.)"
|
1396 |
+
msgstr "Keine Dateien gefunden. (Liste wird beim nächsten Backup generiert.)"
|
1397 |
+
|
1398 |
+
# @ backwpup
|
1399 |
+
#: ../inc/class-page-backups.php:185
|
1400 |
+
#: ../inc/class-page-backups.php:304
|
1401 |
+
#: ../inc/class-page-logs.php:114
|
1402 |
+
#: ../inc/class-page-logs.php:192
|
1403 |
+
msgid "Delete"
|
1404 |
+
msgstr "Löschen"
|
1405 |
+
|
1406 |
+
# @ backwpup
|
1407 |
+
#: ../inc/class-page-backups.php:219
|
1408 |
+
msgid "Change destination"
|
1409 |
+
msgstr "Ziel ändern"
|
1410 |
+
|
1411 |
+
# @ backwpup
|
1412 |
+
#: ../inc/class-page-backups.php:258
|
1413 |
+
#: ../inc/class-page-logs.php:125
|
1414 |
+
msgid "Time"
|
1415 |
+
msgstr "Zeit"
|
1416 |
+
|
1417 |
+
# @ backwpup
|
1418 |
+
#: ../inc/class-page-backups.php:259
|
1419 |
+
msgid "File"
|
1420 |
+
msgstr "Datei"
|
1421 |
+
|
1422 |
+
# @ backwpup
|
1423 |
+
#: ../inc/class-page-backups.php:261
|
1424 |
+
#: ../inc/class-page-logs.php:129
|
1425 |
+
msgid "Size"
|
1426 |
+
msgstr "Größe"
|
1427 |
+
|
1428 |
+
# @ backwpup
|
1429 |
+
#: ../inc/class-page-backups.php:304
|
1430 |
+
msgid ""
|
1431 |
+
"You are about to delete this backup archive. \n"
|
1432 |
+
" 'Cancel' to stop, 'OK' to delete."
|
1433 |
+
msgstr ""
|
1434 |
+
"Sie sind dabei dieses Backup Archiv zu löschen. \n"
|
1435 |
+
" 'Abbrechen' um zu stoppen, 'OK' um zu löschen."
|
1436 |
+
|
1437 |
+
# @ backwpup
|
1438 |
+
#: ../inc/class-page-backups.php:306
|
1439 |
+
#: ../inc/class-page-logs.php:193
|
1440 |
+
msgid "Download"
|
1441 |
+
msgstr "Herunterladen"
|
1442 |
+
|
1443 |
+
# @ backwpup
|
1444 |
+
#: ../inc/class-page-backups.php:335
|
1445 |
+
msgid "?"
|
1446 |
+
msgstr "?"
|
1447 |
+
|
1448 |
+
# @ backwpup
|
1449 |
+
#: ../inc/class-page-backups.php:348
|
1450 |
+
#: ../inc/class-page-logs.php:153
|
1451 |
+
#, php-format
|
1452 |
+
msgid "%1$s at %2$s"
|
1453 |
+
msgstr "%1$s um %2$s"
|
1454 |
+
|
1455 |
+
# @ backwpup
|
1456 |
+
#: ../inc/class-page-backups.php:365
|
1457 |
+
#: ../inc/class-page-backups.php:392
|
1458 |
+
msgid "Sorry, you don't have permissions to do that."
|
1459 |
+
msgstr "Sie haben nicht die notwendigen Berechtigungen für diese Aktion."
|
1460 |
+
|
1461 |
+
# @ backwpup
|
1462 |
+
#: ../inc/class-page-backups.php:413
|
1463 |
+
msgid "Backup Files"
|
1464 |
+
msgstr "Backup-Dateien"
|
1465 |
+
|
1466 |
+
# @ backwpup
|
1467 |
+
#: ../inc/class-page-backups.php:461
|
1468 |
+
#, php-format
|
1469 |
+
msgid "%s Manage Backup Archives"
|
1470 |
+
msgstr "%s Sicherungsarchive verwalten"
|
1471 |
+
|
1472 |
+
# @ backwpup
|
1473 |
+
#: ../inc/class-wp-cli.php:17
|
1474 |
+
msgid "A job is already running."
|
1475 |
+
msgstr "Ein Auftrag läuft gerade."
|
1476 |
+
|
1477 |
+
# @ backwpup
|
1478 |
+
#: ../inc/class-wp-cli.php:20
|
1479 |
+
msgid "No job ID specified!"
|
1480 |
+
msgstr "Keine Auftragsnummer angegeben!"
|
1481 |
+
|
1482 |
+
# @ backwpup
|
1483 |
+
#: ../inc/class-wp-cli.php:24
|
1484 |
+
msgid "Job ID does not exist!"
|
1485 |
+
msgstr "Auftragsnummer existiert nicht!"
|
1486 |
+
|
1487 |
+
# @ backwpup
|
1488 |
+
#: ../inc/class-wp-cli.php:38
|
1489 |
+
msgid "Nothing to abort!"
|
1490 |
+
msgstr "Es gibt nichts abzubrechen!"
|
1491 |
+
|
1492 |
+
# @ backwpup
|
1493 |
+
#: ../inc/class-wp-cli.php:42
|
1494 |
+
msgid "Job will be terminated."
|
1495 |
+
msgstr "Auftrag wird beendet."
|
1496 |
+
|
1497 |
+
# @ backwpup
|
1498 |
+
#: ../inc/class-wp-cli.php:54
|
1499 |
+
msgid "List of jobs"
|
1500 |
+
msgstr "Auftragsliste"
|
1501 |
+
|
1502 |
+
# @ backwpup
|
1503 |
+
#: ../inc/class-wp-cli.php:57
|
1504 |
+
#: ../inc/class-wp-cli.php:76
|
1505 |
+
#, php-format
|
1506 |
+
msgid "ID: %1$d Name: %2$s"
|
1507 |
+
msgstr "ID: %1$d Name: %2$s"
|
1508 |
+
|
1509 |
+
# @ backwpup
|
1510 |
+
#: ../inc/class-wp-cli.php:73
|
1511 |
+
msgid "No job running"
|
1512 |
+
msgstr "Kein laufender Auftrag"
|
1513 |
+
|
1514 |
+
# @ backwpup
|
1515 |
+
#: ../inc/class-wp-cli.php:74
|
1516 |
+
msgid "Running job"
|
1517 |
+
msgstr "Laufender Auftrag"
|
1518 |
+
|
1519 |
+
# @ backwpup
|
1520 |
+
#: ../inc/class-wp-cli.php:77
|
1521 |
+
#, php-format
|
1522 |
+
msgid "Warnings: %1$d Errors: %2$d"
|
1523 |
+
msgstr "Warnungen: %1$d Fehler: %2$d"
|
1524 |
+
|
1525 |
+
# @ backwpup
|
1526 |
+
#: ../inc/class-wp-cli.php:78
|
1527 |
+
#, php-format
|
1528 |
+
msgid "Steps in percent: %1$d percent of step: %2$d"
|
1529 |
+
msgstr "Schritte in Prozent: %1$d Prozent des Schritts: %2$d"
|
1530 |
+
|
1531 |
+
# @ backwpup
|
1532 |
+
#: ../inc/class-wp-cli.php:79
|
1533 |
+
#, php-format
|
1534 |
+
msgid "On step: %s"
|
1535 |
+
msgstr "Bei Schritt: %s"
|
1536 |
+
|
1537 |
+
# @ backwpup
|
1538 |
+
#: ../inc/class-wp-cli.php:80
|
1539 |
+
#, php-format
|
1540 |
+
msgid "Last message: %s"
|
1541 |
+
msgstr "Letzte Nachricht: %s"
|
1542 |
+
|
1543 |
+
# @ backwpup
|
1544 |
+
#: ../inc/class-option.php:102
|
1545 |
+
msgid "New Job"
|
1546 |
+
msgstr "Bitte geben Sie einen Namen ein"
|
1547 |
+
|
1548 |
+
# @ backwpup
|
1549 |
+
#: ../inc/class-page-logs.php:102
|
1550 |
+
msgid "No Logs."
|
1551 |
+
msgstr "Keine Protokolldateien."
|
1552 |
+
|
1553 |
+
# @ backwpup
|
1554 |
+
#: ../inc/class-page-logs.php:126
|
1555 |
+
msgid "Job"
|
1556 |
+
msgstr "Auftrag"
|
1557 |
+
|
1558 |
+
# @ backwpup
|
1559 |
+
#: ../inc/class-page-logs.php:127
|
1560 |
+
msgid "Status"
|
1561 |
+
msgstr "Status"
|
1562 |
+
|
1563 |
+
# @ backwpup
|
1564 |
+
#: ../inc/class-page-logs.php:128
|
1565 |
+
msgid "Type"
|
1566 |
+
msgstr "Typ"
|
1567 |
+
|
1568 |
+
# @ backwpup
|
1569 |
+
#: ../inc/class-page-logs.php:130
|
1570 |
+
msgid "Runtime"
|
1571 |
+
msgstr "Laufzeit"
|
1572 |
+
|
1573 |
+
# @ backwpup
|
1574 |
+
#: ../inc/class-page-logs.php:188
|
1575 |
+
#, php-format
|
1576 |
+
msgid "Job ID: %d"
|
1577 |
+
msgstr "Auftrags-ID: %d"
|
1578 |
+
|
1579 |
+
# @ backwpup
|
1580 |
+
#: ../inc/class-page-logs.php:190
|
1581 |
+
msgid "View"
|
1582 |
+
msgstr "Ansehen"
|
1583 |
+
|
1584 |
+
# @ backwpup
|
1585 |
+
#: ../inc/class-page-logs.php:209
|
1586 |
+
#, php-format
|
1587 |
+
msgid "1 ERROR"
|
1588 |
+
msgid_plural "%d ERRORS"
|
1589 |
+
msgstr[0] "1 FEHLER"
|
1590 |
+
msgstr[1] "%d FEHLER"
|
1591 |
+
|
1592 |
+
# @ backwpup
|
1593 |
+
#: ../inc/class-page-logs.php:211
|
1594 |
+
#, php-format
|
1595 |
+
msgid "1 WARNING"
|
1596 |
+
msgid_plural "%d WARNINGS"
|
1597 |
+
msgstr[0] "1 WARNUNG"
|
1598 |
+
msgstr[1] "%d WARNUNGEN"
|
1599 |
+
|
1600 |
+
# @ backwpup
|
1601 |
+
#: ../inc/class-page-logs.php:213
|
1602 |
+
msgid "O.K."
|
1603 |
+
msgstr "O.K."
|
1604 |
+
|
1605 |
+
# @ backwpup
|
1606 |
+
#: ../inc/class-page-logs.php:230
|
1607 |
+
msgid "Log only"
|
1608 |
+
msgstr "Nur Log"
|
1609 |
+
|
1610 |
+
# @ backwpup
|
1611 |
+
#: ../inc/class-page-logs.php:301
|
1612 |
+
#: ../inc/class-admin.php:202
|
1613 |
+
msgid "Logs"
|
1614 |
+
msgstr "Protokolle"
|
1615 |
+
|
1616 |
+
# @ backwpup
|
1617 |
+
#: ../inc/class-page-logs.php:364
|
1618 |
+
#, php-format
|
1619 |
+
msgid "%s Logs"
|
1620 |
+
msgstr "%s Logs"
|
1621 |
+
|
1622 |
+
# @ backwpup
|
1623 |
+
#: ../inc/class-mysqldump.php:55
|
1624 |
+
msgid "No MySQLi extension found. Please install it."
|
1625 |
+
msgstr "Keine MySQLi Erweiterung gefunden. Bitte installieren Sie diese"
|
1626 |
+
|
1627 |
+
# @ backwpup
|
1628 |
+
#: ../inc/class-mysqldump.php:93
|
1629 |
+
msgid "Cannot init MySQLi database connection"
|
1630 |
+
msgstr "MySQLi Datenbank-Verbindung kann nicht initialisiert werden."
|
1631 |
+
|
1632 |
+
# @ backwpup
|
1633 |
+
#: ../inc/class-mysqldump.php:97
|
1634 |
+
#, php-format
|
1635 |
+
msgid "Setting of MySQLi init command \"%s\" failed"
|
1636 |
+
msgstr "Einstellung vom MySQLi Initialisierungsbefehl \"%s\" ist fehlgeschlagen"
|
1637 |
+
|
1638 |
+
# @ backwpup
|
1639 |
+
#: ../inc/class-mysqldump.php:101
|
1640 |
+
msgid "Setting of MySQLi connection timeout failed"
|
1641 |
+
msgstr "Einstellung von der MySQLi Verbindungs-Zeitüberschreitung ist fehlgeschlagen"
|
1642 |
+
|
1643 |
+
# @ backwpup
|
1644 |
+
#: ../inc/class-mysqldump.php:105
|
1645 |
+
#, php-format
|
1646 |
+
msgid "Cannot connect to MySQL database %1$d: %2$s"
|
1647 |
+
msgstr "Kann keine Verbindung zur Datenbank %1$d herstellen: %2$s"
|
1648 |
+
|
1649 |
+
# @ backwpup
|
1650 |
+
#: ../inc/class-mysqldump.php:111
|
1651 |
+
#, php-format
|
1652 |
+
msgctxt "Database Charset"
|
1653 |
+
msgid "Cannot set DB charset to %s"
|
1654 |
+
msgstr "Kann Datenbank-Zeichenkodierung nicht auf %s setzen."
|
1655 |
+
|
1656 |
+
# @ backwpup
|
1657 |
+
#: ../inc/class-mysqldump.php:138
|
1658 |
+
msgid "Cannot open SQL backup file"
|
1659 |
+
msgstr "Kann SQL Backup Datei nicht öffnen"
|
1660 |
+
|
1661 |
+
# @ backwpup
|
1662 |
+
#: ../inc/class-mysqldump.php:144
|
1663 |
+
#: ../inc/class-mysqldump.php:155
|
1664 |
+
#: ../inc/class-mysqldump.php:237
|
1665 |
+
#: ../inc/class-mysqldump.php:250
|
1666 |
+
#: ../inc/class-mysqldump.php:264
|
1667 |
+
#: ../inc/class-mysqldump.php:277
|
1668 |
+
#: ../inc/class-mysqldump.php:320
|
1669 |
+
#: ../inc/class-mysqldump.php:342
|
1670 |
+
#: ../inc/class-mysqldump.php:404
|
1671 |
+
#, php-format
|
1672 |
+
msgid "Database error %1$s for query %2$s"
|
1673 |
+
msgstr "Datenbankfehler %1$s für die Abfrage (Query) %2$s"
|
1674 |
+
|
1675 |
+
# @ backwpup
|
1676 |
+
#: ../inc/class-mysqldump.php:388
|
1677 |
+
#, php-format
|
1678 |
+
msgid "Start for table backup is not correctly set: %1$s "
|
1679 |
+
msgstr "Start für den Tabellen Backup ist nicht richtig gesetzt: %1$s "
|
1680 |
+
|
1681 |
+
# @ backwpup
|
1682 |
+
#: ../inc/class-mysqldump.php:392
|
1683 |
+
#, php-format
|
1684 |
+
msgid "Length for table backup is not correctly set: %1$s "
|
1685 |
+
msgstr "Länge des Tabellen Backups ist nicht richtig gesetzt: %1$s "
|
1686 |
+
|
1687 |
+
# @ backwpup
|
1688 |
+
#: ../inc/class-mysqldump.php:460
|
1689 |
+
msgid "Error while writing file!"
|
1690 |
+
msgstr "Fehler beim Schreiben!"
|
1691 |
+
|
1692 |
+
# @ backwpup
|
1693 |
+
#: ../inc/class-admin.php:137
|
1694 |
+
msgid "Documentation"
|
1695 |
+
msgstr "Dokumentation"
|
1696 |
+
|
1697 |
+
# @ backwpup
|
1698 |
+
#: ../inc/class-admin.php:154
|
1699 |
+
msgid "BackWPup Dashboard"
|
1700 |
+
msgstr "BackWPup Dashboard"
|
1701 |
+
|
1702 |
+
# @ backwpup
|
1703 |
+
#: ../inc/class-admin.php:154
|
1704 |
+
msgid "Dashboard"
|
1705 |
+
msgstr "Dashboard"
|
1706 |
+
|
1707 |
+
# @ backwpup
|
1708 |
+
#: ../inc/class-admin.php:171
|
1709 |
+
msgid "Jobs"
|
1710 |
+
msgstr "Aufträge"
|
1711 |
+
|
1712 |
+
# @ backwpup
|
1713 |
+
#: ../inc/class-admin.php:186
|
1714 |
+
msgid "Add new job"
|
1715 |
+
msgstr "Neuer Auftrag"
|
1716 |
+
|
1717 |
+
# @ backwpup
|
1718 |
+
#: ../inc/class-admin.php:217
|
1719 |
+
msgid "Backups"
|
1720 |
+
msgstr "Backups"
|
1721 |
+
|
1722 |
+
# @ backwpup
|
1723 |
+
#: ../inc/class-admin.php:232
|
1724 |
+
msgid "Settings"
|
1725 |
+
msgstr "Einstellungen"
|
1726 |
+
|
1727 |
+
# @ backwpup
|
1728 |
+
#: ../inc/class-admin.php:245
|
1729 |
+
msgid "About"
|
1730 |
+
msgstr "Über"
|
1731 |
+
|
1732 |
+
# @ backwpup
|
1733 |
+
#: ../inc/class-admin.php:282
|
1734 |
+
#: ../inc/class-admin.php:288
|
1735 |
+
msgid "Cheating, huh?"
|
1736 |
+
msgstr "Mogeln, wie?"
|
1737 |
+
|
1738 |
+
# @ backwpup
|
1739 |
+
#: ../inc/class-admin.php:400
|
1740 |
+
msgid "http://marketpress.com"
|
1741 |
+
msgstr "http://marketpress.com"
|
1742 |
+
|
1743 |
+
# @ backwpup
|
1744 |
+
#: ../inc/class-admin.php:400
|
1745 |
+
msgid "MarketPress"
|
1746 |
+
msgstr "MarketPress"
|
1747 |
+
|
1748 |
+
# @ backwpup
|
1749 |
+
#: ../inc/class-admin.php:402
|
1750 |
+
#, php-format
|
1751 |
+
msgid "<a class=\"backwpup-get-pro\" href=\"%s\">Get BackWPup Pro now.</a>"
|
1752 |
+
msgstr "<a class=\"backwpup-get-pro\" href=\"%s\">Wechsle jetzt zu BackWPup Pro.</a>"
|
1753 |
+
|
1754 |
+
# @ backwpup
|
1755 |
+
#: ../inc/class-admin.php:421
|
1756 |
+
#, php-format
|
1757 |
+
msgid "version %s"
|
1758 |
+
msgstr "Version %s"
|
1759 |
+
|
1760 |
+
# @ backwpup
|
1761 |
+
#: ../inc/class-admin.php:445
|
1762 |
+
#: ../inc/class-admin.php:545
|
1763 |
+
msgid "BackWPup Role"
|
1764 |
+
msgstr "BackWPup Rolle"
|
1765 |
+
|
1766 |
+
# @ backwpup
|
1767 |
+
#: ../inc/class-admin.php:449
|
1768 |
+
msgid "— No role for BackWPup —"
|
1769 |
+
msgstr "— Keine Rolle für BackWPup —"
|
1770 |
+
|
1771 |
+
# @ backwpup
|
1772 |
+
#: ../inc/class-admin.php:459
|
1773 |
+
msgid "Role that the user have on BackWPup"
|
1774 |
+
msgstr "Rolle die dieser Benutzer hat bei BackWPup"
|
1775 |
+
|
1776 |
+
# @ backwpup
|
1777 |
+
#: ../inc/class-admin.php:509
|
1778 |
+
#, php-format
|
1779 |
+
msgid "<strong>Important:</strong> before updating, please <a href=\"%1$s\">back up your database and files</a> with <a href=\"http://marketpress.de/product/backwpup-pro/\">%2$s</a>. For help with updates, visit the <a href=\"http://codex.wordpress.org/Updating_WordPress\">Updating WordPress</a> Codex page."
|
1780 |
+
msgstr "<strong>Wichtig:</strong> Bitte erstelle ein Backup <a href=\"%1$s\">von der Datenbank und den Dateien</a> mit <a href=\"http://marketpress.de/product/backwpup-pro/\">%2$s</a> vor der Installation dieses Plugins. Um Hilfe für die Updates zu erhalten, besuche bitte die <a href=\"http://codex.wordpress.org/Updating_WordPress\">Updating WordPress</a> Codex-Seite."
|
1781 |
+
|
1782 |
+
# @ backwpup
|
1783 |
+
#: ../inc/class-admin.php:512
|
1784 |
+
#: ../inc/class-admin.php:515
|
1785 |
+
#, php-format
|
1786 |
+
msgid "<strong>Important:</strong> before installing this plugin, please <a href=\"%1$s\">back up your database and files</a> with <a href=\"http://marketpress.de/product/backwpup-pro/\">%2$s</a>."
|
1787 |
+
msgstr "<strong>Wichtig:</strong> Bitte erstelle ein Backup <a href=\"%1$s\">von der Datenbank und den Dateien</a> mit <a href=\"http://marketpress.de/product/backwpup-pro/\">%2$s</a> vor der Installation dieses Plugins."
|
1788 |
+
|
1789 |
+
# @ backwpup
|
1790 |
+
#: ../inc/class-jobtype-wpexp.php:13
|
1791 |
+
msgid "XML export"
|
1792 |
+
msgstr "XML Export"
|
1793 |
+
|
1794 |
+
# @ backwpup
|
1795 |
+
#: ../inc/class-jobtype-wpexp.php:46
|
1796 |
+
msgid "Items to export"
|
1797 |
+
msgstr "Objekte zum Exportieren"
|
1798 |
+
|
1799 |
+
# @ backwpup
|
1800 |
+
#: ../inc/class-jobtype-wpexp.php:49
|
1801 |
+
msgid "All content"
|
1802 |
+
msgstr "Gesamter Inhalt"
|
1803 |
+
|
1804 |
+
# @ backwpup
|
1805 |
+
#: ../inc/class-jobtype-wpexp.php:50
|
1806 |
+
msgid "Posts"
|
1807 |
+
msgstr "Beiträge"
|
1808 |
+
|
1809 |
+
# @ backwpup
|
1810 |
+
#: ../inc/class-jobtype-wpexp.php:51
|
1811 |
+
msgid "Pages"
|
1812 |
+
msgstr "Seiten"
|
1813 |
+
|
1814 |
+
# @ backwpup
|
1815 |
+
#: ../inc/class-jobtype-wpexp.php:61
|
1816 |
+
msgid "XML Export file name"
|
1817 |
+
msgstr "XML Export Datei Name"
|
1818 |
+
|
1819 |
+
# @ backwpup
|
1820 |
+
#: ../inc/class-jobtype-wpexp.php:69
|
1821 |
+
msgid "File compression"
|
1822 |
+
msgstr "Dateikomprimierung"
|
1823 |
+
|
1824 |
+
# @ backwpup
|
1825 |
+
#: ../inc/class-jobtype-wpexp.php:75
|
1826 |
+
#: ../inc/class-jobtype-wpexp.php:77
|
1827 |
+
#: ../inc/class-jobtype-dbdump.php:105
|
1828 |
+
#: ../inc/class-jobtype-dbdump.php:107
|
1829 |
+
msgid "GZip"
|
1830 |
+
msgstr "GZip"
|
1831 |
+
|
1832 |
+
# @ backwpup
|
1833 |
+
#: ../inc/class-jobtype-wpexp.php:79
|
1834 |
+
#: ../inc/class-jobtype-wpexp.php:81
|
1835 |
+
msgid "BZip2"
|
1836 |
+
msgstr "BZip2"
|
1837 |
+
|
1838 |
+
# @ backwpup
|
1839 |
+
#: ../inc/class-jobtype-wpexp.php:111
|
1840 |
+
#, php-format
|
1841 |
+
msgid "%d. Trying to create a WordPress export to XML file …"
|
1842 |
+
msgstr "%d. Versuche, einen WordPress-Export als XML-Datei zu erstellen …"
|
1843 |
+
|
1844 |
+
# @ backwpup
|
1845 |
+
#: ../inc/class-jobtype-wpexp.php:126
|
1846 |
+
#, php-format
|
1847 |
+
msgid "WP Export: Post type “%s” does not allow export."
|
1848 |
+
msgstr "WP Export: Post-Type „%s“ erlaubt keinen Export."
|
1849 |
+
|
1850 |
+
# @ backwpup
|
1851 |
+
#: ../inc/class-jobtype-wpexp.php:171
|
1852 |
+
#: ../inc/class-jobtype-wpexp.php:185
|
1853 |
+
#: ../inc/class-jobtype-wpexp.php:214
|
1854 |
+
#: ../inc/class-jobtype-wpexp.php:235
|
1855 |
+
#: ../inc/class-jobtype-wpexp.php:268
|
1856 |
+
#: ../inc/class-jobtype-wpexp.php:288
|
1857 |
+
#: ../inc/class-jobtype-wpexp.php:377
|
1858 |
+
#: ../inc/class-jobtype-wpexp.php:386
|
1859 |
+
msgid "WP Export file could not written."
|
1860 |
+
msgstr "WP-Exportdatei konnte nicht geschrieben werden."
|
1861 |
+
|
1862 |
+
# @ backwpup
|
1863 |
+
#: ../inc/class-jobtype-wpexp.php:401
|
1864 |
+
msgid "Check WP Export file …"
|
1865 |
+
msgstr "Prüfe WP Export-Datei …"
|
1866 |
+
|
1867 |
+
# @ backwpup
|
1868 |
+
#: ../inc/class-jobtype-wpexp.php:421
|
1869 |
+
#, php-format
|
1870 |
+
msgid "XML WARNING (%s): %s"
|
1871 |
+
msgstr "XML WARNUNG (%s): %s"
|
1872 |
+
|
1873 |
+
# @ backwpup
|
1874 |
+
#: ../inc/class-jobtype-wpexp.php:424
|
1875 |
+
#, php-format
|
1876 |
+
msgid "XML RECOVERABLE (%s): %s"
|
1877 |
+
msgstr "XML RECOVERABLE (%s): %s"
|
1878 |
+
|
1879 |
+
# @ backwpup
|
1880 |
+
#: ../inc/class-jobtype-wpexp.php:427
|
1881 |
+
#, php-format
|
1882 |
+
msgid "XML ERROR (%s): %s"
|
1883 |
+
msgstr "XML FEHLER (%s): %s"
|
1884 |
+
|
1885 |
+
# @ backwpup
|
1886 |
+
#: ../inc/class-jobtype-wpexp.php:437
|
1887 |
+
msgid "There was an error when reading this WXR file"
|
1888 |
+
msgstr "Fehler beim Lesen der WXR Datei"
|
1889 |
+
|
1890 |
+
# @ backwpup
|
1891 |
+
#: ../inc/class-jobtype-wpexp.php:443
|
1892 |
+
#: ../inc/class-jobtype-wpexp.php:450
|
1893 |
+
msgid "This does not appear to be a WXR file, missing/invalid WXR version number"
|
1894 |
+
msgstr "Es scheint nicht eine WXR Datei zu sein. Fehlende/ungültige Versionsnummer"
|
1895 |
+
|
1896 |
+
# @ backwpup
|
1897 |
+
#: ../inc/class-jobtype-wpexp.php:459
|
1898 |
+
msgid "WP Export file is a valid WXR file."
|
1899 |
+
msgstr "WP Export-Datei ist eine gültige WXR Datei."
|
1900 |
+
|
1901 |
+
# @ backwpup
|
1902 |
+
#: ../inc/class-jobtype-wpexp.php:461
|
1903 |
+
msgid "WP Export file can not checked, because no XML extension loaded with the file can checked."
|
1904 |
+
msgstr "WP Export-Datei kann nicht geprüft werden, da keine XML Erweiterung geladen wurde."
|
1905 |
+
|
1906 |
+
# @ backwpup
|
1907 |
+
#: ../inc/class-jobtype-wpexp.php:473
|
1908 |
+
msgid "Compressing file …"
|
1909 |
+
msgstr "Komprimiere Datei …"
|
1910 |
+
|
1911 |
+
# @ backwpup
|
1912 |
+
#: ../inc/class-jobtype-wpexp.php:480
|
1913 |
+
msgid "Compressing done."
|
1914 |
+
msgstr "Komprimierung erledigt."
|
1915 |
+
|
1916 |
+
# @ backwpup
|
1917 |
+
#: ../inc/class-jobtype-wpexp.php:501
|
1918 |
+
#, php-format
|
1919 |
+
msgid "Added XML export \"%1$s\" with %2$s to backup file list."
|
1920 |
+
msgstr "XML Export \"%1$s\" mit %2$s zur Backup-Datei-Liste hinzugefügt"
|
1921 |
+
|
1922 |
+
# @ backwpup
|
1923 |
+
#: ../inc/class-job.php:180
|
1924 |
+
msgid "Starting job"
|
1925 |
+
msgstr "Auftrag starten"
|
1926 |
+
|
1927 |
+
# @ backwpup
|
1928 |
+
#: ../inc/class-job.php:199
|
1929 |
+
msgid "Job Start"
|
1930 |
+
msgstr "Auftragsstart"
|
1931 |
+
|
1932 |
+
# @ backwpup
|
1933 |
+
#: ../inc/class-job.php:219
|
1934 |
+
msgid "Creates manifest file"
|
1935 |
+
msgstr "Erstellt Manifest-Datei"
|
1936 |
+
|
1937 |
+
# @ backwpup
|
1938 |
+
#: ../inc/class-job.php:238
|
1939 |
+
msgid "Creates archive"
|
1940 |
+
msgstr "erstellt Archiv"
|
1941 |
+
|
1942 |
+
# @ backwpup
|
1943 |
+
#: ../inc/class-job.php:277
|
1944 |
+
msgid "End of Job"
|
1945 |
+
msgstr "Auftragsende"
|
1946 |
+
|
1947 |
+
# @ backwpup
|
1948 |
+
#: ../inc/class-job.php:287
|
1949 |
+
#, php-format
|
1950 |
+
msgid "BackWPup log for %1$s from %2$s at %3$s"
|
1951 |
+
msgstr "BackWPup-Protokoll für %1$s von %2$s am %3$s"
|
1952 |
+
|
1953 |
+
# @ backwpup
|
1954 |
+
#: ../inc/class-job.php:305
|
1955 |
+
#, php-format
|
1956 |
+
msgctxt "Plugin name; Plugin Version"
|
1957 |
+
msgid "[INFO] %1$s version %2$s; A project of Inpsyde GmbH"
|
1958 |
+
msgstr "[INFO] %1$s Version %2$s; Ein Projekt der Inpsyde GmbH"
|
1959 |
+
|
1960 |
+
# @ backwpup
|
1961 |
+
#: ../inc/class-job.php:306
|
1962 |
+
#, php-format
|
1963 |
+
msgctxt "WordPress Version"
|
1964 |
+
msgid "[INFO] WordPress version %s"
|
1965 |
+
msgstr "[INFO] WordPress Version %s"
|
1966 |
+
|
1967 |
+
# @ backwpup
|
1968 |
+
#: ../inc/class-job.php:307
|
1969 |
+
#, php-format
|
1970 |
+
msgid "[INFO] Blog url: %s"
|
1971 |
+
msgstr "[INFO] Blog URL: %s"
|
1972 |
+
|
1973 |
+
# @ backwpup
|
1974 |
+
#: ../inc/class-job.php:308
|
1975 |
+
#, php-format
|
1976 |
+
msgid "[INFO] BackWPup job: %1$s; %2$s"
|
1977 |
+
msgstr "[INFO] BackWPup-Auftrag: %1$s; %2$s"
|
1978 |
+
|
1979 |
+
# @ backwpup
|
1980 |
+
#: ../inc/class-job.php:320
|
1981 |
+
msgid "Not scheduled!"
|
1982 |
+
msgstr "Nicht geplant!"
|
1983 |
+
|
1984 |
+
# @ backwpup
|
1985 |
+
#: ../inc/class-job.php:323
|
1986 |
+
#, php-format
|
1987 |
+
msgid "[INFO] BackWPup cron: %s; Next: %s "
|
1988 |
+
msgstr "[INFO] BackWPup Cron: %s; Nächste: %s "
|
1989 |
+
|
1990 |
+
# @ backwpup
|
1991 |
+
#: ../inc/class-job.php:326
|
1992 |
+
msgid "[INFO] BackWPup job start with link is active"
|
1993 |
+
msgstr "[INFO] BackWPup Auftragsstart mit aktivem Link gestartet"
|
1994 |
+
|
1995 |
+
# @ backwpup
|
1996 |
+
#: ../inc/class-job.php:328
|
1997 |
+
msgid "[INFO] BackWPup no automatic job start configured"
|
1998 |
+
msgstr "[INFO] BackWPup kein automatischer Auftragsstart konfiguriert"
|
1999 |
+
|
2000 |
+
# @ backwpup
|
2001 |
+
#: ../inc/class-job.php:330
|
2002 |
+
msgid "[INFO] BackWPup job started from wp-cron"
|
2003 |
+
msgstr "[INFO] BackWPup-Auftrag wurde per wp-cron gestartet"
|
2004 |
+
|
2005 |
+
# @ backwpup
|
2006 |
+
#: ../inc/class-job.php:332
|
2007 |
+
msgid "[INFO] BackWPup job started manually"
|
2008 |
+
msgstr "[INFO] BackWPup-Auftrag wurde manuell gestartet"
|
2009 |
+
|
2010 |
+
# @ backwpup
|
2011 |
+
#: ../inc/class-job.php:334
|
2012 |
+
msgid "[INFO] BackWPup job started from external url"
|
2013 |
+
msgstr "[INFO] BackWPup Auftrag wurde von externer URL gestartet"
|
2014 |
+
|
2015 |
+
# @ backwpup
|
2016 |
+
#: ../inc/class-job.php:336
|
2017 |
+
msgid "[INFO] BackWPup job started form commandline interface"
|
2018 |
+
msgstr "[INFO] BackWPup-Auftrag per Kommandozeile gestartet"
|
2019 |
+
|
2020 |
+
# @ backwpup
|
2021 |
+
#: ../inc/class-job.php:342
|
2022 |
+
msgid "[INFO] PHP ver.:"
|
2023 |
+
msgstr "[INFO] PHP ver.:"
|
2024 |
+
|
2025 |
+
# @ backwpup
|
2026 |
+
#: ../inc/class-job.php:343
|
2027 |
+
#, php-format
|
2028 |
+
msgid "[INFO] Maximum PHP script execution time is %1$d seconds"
|
2029 |
+
msgstr "[INFO] Maximum PHP script execution time ist %1$d Sekunden"
|
2030 |
+
|
2031 |
+
# @ backwpup
|
2032 |
+
#: ../inc/class-job.php:347
|
2033 |
+
#, php-format
|
2034 |
+
msgid "[INFO] Script restart time is configured to %1$d seconds"
|
2035 |
+
msgstr "[INFO] Skript-Restart-Zeit ist auf %1$d Sekunden konfiguriert"
|
2036 |
+
|
2037 |
+
# @ backwpup
|
2038 |
+
#: ../inc/class-job.php:350
|
2039 |
+
#, php-format
|
2040 |
+
msgid "[INFO] MySQL ver.: %s"
|
2041 |
+
msgstr "[INFO] MySQL ver.: %s"
|
2042 |
+
|
2043 |
+
# @ backwpup
|
2044 |
+
#: ../inc/class-job.php:352
|
2045 |
+
#, php-format
|
2046 |
+
msgid "[INFO] Web Server: %s"
|
2047 |
+
msgstr "[INFO] Webserver: %s"
|
2048 |
+
|
2049 |
+
# @ backwpup
|
2050 |
+
#: ../inc/class-job.php:355
|
2051 |
+
#, php-format
|
2052 |
+
msgid "[INFO] curl ver.: %1$s; %2$s"
|
2053 |
+
msgstr "[INFO] curl ver.: %1$s; %2$s"
|
2054 |
+
|
2055 |
+
# @ backwpup
|
2056 |
+
#: ../inc/class-job.php:357
|
2057 |
+
#, php-format
|
2058 |
+
msgid "[INFO] Temp folder is: %s"
|
2059 |
+
msgstr "[INFO] Temp Ordner ist: %s"
|
2060 |
+
|
2061 |
+
# @ backwpup
|
2062 |
+
#: ../inc/class-job.php:358
|
2063 |
+
#, php-format
|
2064 |
+
msgid "[INFO] Logfile is: %s"
|
2065 |
+
msgstr "[INFO] Logfile ist: %s"
|
2066 |
+
|
2067 |
+
# @ backwpup
|
2068 |
+
#: ../inc/class-job.php:359
|
2069 |
+
#, php-format
|
2070 |
+
msgid "[INFO] Backup type is: %s"
|
2071 |
+
msgstr "[INFO] Backup Typ ist: %s"
|
2072 |
+
|
2073 |
+
# @ backwpup
|
2074 |
+
#: ../inc/class-job.php:361
|
2075 |
+
#, php-format
|
2076 |
+
msgid "[INFO] Backup file is: %s"
|
2077 |
+
msgstr "[INFO] Backup Datei ist: %s"
|
2078 |
+
|
2079 |
+
# @ backwpup
|
2080 |
+
#: ../inc/class-job.php:376
|
2081 |
+
msgid "No destination correctly defined for backup! Please correct job settings."
|
2082 |
+
msgstr "Es wurde kein korrektes Backupziel definiert! Bitte überprüfe die Auftragseinstellungen."
|
2083 |
+
|
2084 |
+
# @ backwpup
|
2085 |
+
#: ../inc/class-job.php:552
|
2086 |
+
msgid "Wrong BackWPup JobID"
|
2087 |
+
msgstr "Falsche BackWPup JobID"
|
2088 |
+
|
2089 |
+
# @ backwpup
|
2090 |
+
#: ../inc/class-job.php:555
|
2091 |
+
msgid "Log folder does not exist or is not writable for BackWPup"
|
2092 |
+
msgstr "Log-Ordner existiert nicht oder ist nicht beschreibbar für BackWPup"
|
2093 |
+
|
2094 |
+
# @ backwpup
|
2095 |
+
#: ../inc/class-job.php:557
|
2096 |
+
msgid "Temp folder does not exist or is not writable for BackWPup"
|
2097 |
+
msgstr "Temp Ordner existiert nicht oder ist nicht beschreibbar für BackWPup!"
|
2098 |
+
|
2099 |
+
# @ backwpup
|
2100 |
+
#: ../inc/class-job.php:560
|
2101 |
+
msgid "A BackWPup job is already running"
|
2102 |
+
msgstr "Es läuft bereits ein BackWPup-Auftrag"
|
2103 |
+
|
2104 |
+
# @ backwpup
|
2105 |
+
#: ../inc/class-job.php:563
|
2106 |
+
msgid "Job started"
|
2107 |
+
msgstr "Auftrag begonnen"
|
2108 |
+
|
2109 |
+
# @ backwpup
|
2110 |
+
#: ../inc/class-job.php:637
|
2111 |
+
msgid "Job restarts due to inactivity for more than 5 minutes."
|
2112 |
+
msgstr "Auftrag durch Inaktivität von mehr als 5 Minuten neu gestartet"
|
2113 |
+
|
2114 |
+
# @ backwpup
|
2115 |
+
#: ../inc/class-job.php:727
|
2116 |
+
msgid "Step aborted: too many attempts!"
|
2117 |
+
msgstr "Schritt abgebrochen durch zu viele Versuche!"
|
2118 |
+
|
2119 |
+
# @ backwpup
|
2120 |
+
#: ../inc/class-job.php:808
|
2121 |
+
msgid "Restart will be executed now."
|
2122 |
+
msgstr "Neustart wird jetzt ausgeführt."
|
2123 |
+
|
2124 |
+
# @ backwpup
|
2125 |
+
#: ../inc/class-job.php:842
|
2126 |
+
#, php-format
|
2127 |
+
msgid "Restart after %1$d seconds."
|
2128 |
+
msgstr "Neustart nach %1$s Sekunden."
|
2129 |
+
|
2130 |
+
# @ backwpup
|
2131 |
+
#: ../inc/class-job.php:969
|
2132 |
+
#, php-format
|
2133 |
+
msgid "Signal %d is sent to script!"
|
2134 |
+
msgstr "Signal %d wurde zum Script gesendet!"
|
2135 |
+
|
2136 |
+
# @ backwpup
|
2137 |
+
#: ../inc/class-job.php:994
|
2138 |
+
#, php-format
|
2139 |
+
msgid "Folder %1$s not allowed, please use another folder."
|
2140 |
+
msgstr "Ordner %1$s ist nicht erlaubt, bitte wähle einen anderen."
|
2141 |
+
|
2142 |
+
# @ backwpup
|
2143 |
+
#: ../inc/class-job.php:1000
|
2144 |
+
#, php-format
|
2145 |
+
msgid "Cannot create folder: %1$s"
|
2146 |
+
msgstr "Kann keinen Ordner erstellen: %1$s"
|
2147 |
+
|
2148 |
+
# @ backwpup
|
2149 |
+
#: ../inc/class-job.php:1007
|
2150 |
+
#, php-format
|
2151 |
+
msgid "Folder \"%1$s\" is not writable"
|
2152 |
+
msgstr "Ordner \"%1$s\" ist nicht beschreibbar"
|
2153 |
+
|
2154 |
+
# @ backwpup
|
2155 |
+
#: ../inc/class-job.php:1019
|
2156 |
+
msgid "BackWPup will not backup folders and subfolders when this file is inside."
|
2157 |
+
msgstr "BackWPup wird keine Ordner und Unterordner sichern, die diese Datei enthalten."
|
2158 |
+
|
2159 |
+
# @ backwpup
|
2160 |
+
#: ../inc/class-job.php:1031
|
2161 |
+
#, php-format
|
2162 |
+
msgid "Exception caught in %1$s: %2$s"
|
2163 |
+
msgstr "Ausnahme eingefangen in %1$s: %2$s"
|
2164 |
+
|
2165 |
+
# @ backwpup
|
2166 |
+
#: ../inc/class-job.php:1088
|
2167 |
+
msgid "WARNING:"
|
2168 |
+
msgstr "WARNUNG:"
|
2169 |
+
|
2170 |
+
# @ backwpup
|
2171 |
+
#: ../inc/class-job.php:1097
|
2172 |
+
msgid "ERROR:"
|
2173 |
+
msgstr "FEHLER:"
|
2174 |
+
|
2175 |
+
# @ backwpup
|
2176 |
+
#: ../inc/class-job.php:1101
|
2177 |
+
msgid "DEPRECATED:"
|
2178 |
+
msgstr "ABGELEHNT:"
|
2179 |
+
|
2180 |
+
# @ backwpup
|
2181 |
+
#: ../inc/class-job.php:1104
|
2182 |
+
msgid "STRICT NOTICE:"
|
2183 |
+
msgstr "EXAKTE NOTIZ:"
|
2184 |
+
|
2185 |
+
# @ backwpup
|
2186 |
+
#: ../inc/class-job.php:1109
|
2187 |
+
msgid "RECOVERABLE ERROR:"
|
2188 |
+
msgstr "WIEDERHERSTELLUNGS FEHLER:"
|
2189 |
+
|
2190 |
+
# @ backwpup
|
2191 |
+
#: ../inc/class-job.php:1229
|
2192 |
+
msgid "Cannot write progress to working file. Job will be aborted."
|
2193 |
+
msgstr "Kann Fortschritt nicht in die Arbeitsdatei schreiben. Auftrag wird abgebrochen."
|
2194 |
+
|
2195 |
+
# @ backwpup
|
2196 |
+
#: ../inc/class-job.php:1247
|
2197 |
+
msgid "Aborted by user!"
|
2198 |
+
msgstr "Abgebrochen vom Benutzer!"
|
2199 |
+
|
2200 |
+
# @ backwpup
|
2201 |
+
#: ../inc/class-job.php:1272
|
2202 |
+
#, php-format
|
2203 |
+
msgid "One old log deleted"
|
2204 |
+
msgid_plural "%d old logs deleted"
|
2205 |
+
msgstr[0] "Eine alte Log-Datei gelöscht"
|
2206 |
+
msgstr[1] "%d alte Log-Dateien gelöscht"
|
2207 |
+
|
2208 |
+
# @ backwpup
|
2209 |
+
#: ../inc/class-job.php:1278
|
2210 |
+
#, php-format
|
2211 |
+
msgid "Job has ended with errors in %s seconds. You must resolve the errors for correct execution."
|
2212 |
+
msgstr "Job mit Fehlern beendet in %s Sekunden. Sie müssen die Fehler für eine korrekte Ausführung beheben."
|
2213 |
+
|
2214 |
+
# @ backwpup
|
2215 |
+
#: ../inc/class-job.php:1280
|
2216 |
+
#, php-format
|
2217 |
+
msgid "Job finished with warnings in %s seconds. Please resolve them for correct execution."
|
2218 |
+
msgstr "Job mit Warnungen beendet in %s Sekunden. Bitte beheben Sie die Warnungen für eine korrekte Ausführung."
|
2219 |
+
|
2220 |
+
# @ backwpup
|
2221 |
+
#: ../inc/class-job.php:1282
|
2222 |
+
#, php-format
|
2223 |
+
msgid "Job done in %s seconds."
|
2224 |
+
msgstr "Auftrag erledigt in %s Sekunden."
|
2225 |
+
|
2226 |
+
# @ backwpup
|
2227 |
+
#: ../inc/class-job.php:1325
|
2228 |
+
msgid "SUCCESSFUL"
|
2229 |
+
msgstr "ERFOLGREICH"
|
2230 |
+
|
2231 |
+
# @ backwpup
|
2232 |
+
#: ../inc/class-job.php:1328
|
2233 |
+
msgid "WARNING"
|
2234 |
+
msgstr "WARNUNG"
|
2235 |
+
|
2236 |
+
# @ backwpup
|
2237 |
+
#: ../inc/class-job.php:1332
|
2238 |
+
msgid "ERROR"
|
2239 |
+
msgstr "FEHLER"
|
2240 |
+
|
2241 |
+
# @ backwpup
|
2242 |
+
#: ../inc/class-job.php:1336
|
2243 |
+
#, php-format
|
2244 |
+
msgid "[%3$s] BackWPup log %1$s: %2$s"
|
2245 |
+
msgstr "[%3$s] BackWPup Log %1$s: %2$s"
|
2246 |
+
|
2247 |
+
# @ backwpup
|
2248 |
+
#: ../inc/class-job.php:1704
|
2249 |
+
#, php-format
|
2250 |
+
msgctxt "Folder name"
|
2251 |
+
msgid "Folder %s not exists"
|
2252 |
+
msgstr "Verzeichnis %s existiert nicht"
|
2253 |
+
|
2254 |
+
# @ backwpup
|
2255 |
+
#: ../inc/class-job.php:1709
|
2256 |
+
#, php-format
|
2257 |
+
msgctxt "Folder name"
|
2258 |
+
msgid "Folder %s not readable"
|
2259 |
+
msgstr "Verzeichnis %s ist nicht lesbar"
|
2260 |
+
|
2261 |
+
# @ backwpup
|
2262 |
+
#: ../inc/class-job.php:1726
|
2263 |
+
#, php-format
|
2264 |
+
msgid "Link \"%s\" not following."
|
2265 |
+
msgstr "Link \"%s\" wird nicht gefolgt"
|
2266 |
+
|
2267 |
+
# @ backwpup
|
2268 |
+
#: ../inc/class-job.php:1728
|
2269 |
+
#, php-format
|
2270 |
+
msgid "File \"%s\" is not readable!"
|
2271 |
+
msgstr "Datei \"%s\" ist nicht lesbar!"
|
2272 |
+
|
2273 |
+
# @ backwpup
|
2274 |
+
#: ../inc/class-job.php:1732
|
2275 |
+
#, php-format
|
2276 |
+
msgid "File size of “%s” cannot be retrieved. File might be too large and will not be added to queue."
|
2277 |
+
msgstr "Dateigröße von „%s“ kann nicht abgefragt werden. Die Datei könnte zu groß sein und wird nicht zur Warteschlange hinzugefügt."
|
2278 |
+
|
2279 |
+
# @ backwpup
|
2280 |
+
#: ../inc/class-job.php:1754
|
2281 |
+
#, php-format
|
2282 |
+
msgid "%d. Trying to generate a manifest file …"
|
2283 |
+
msgstr "%d. Versuche eine Manifest-Datei zu generieren …"
|
2284 |
+
|
2285 |
+
# @ backwpup
|
2286 |
+
#: ../inc/class-job.php:1804
|
2287 |
+
msgid "You may have noticed the manifest.json file in this archive."
|
2288 |
+
msgstr "Du wirst manifest.json in diesem Archiv bemerkt haben."
|
2289 |
+
|
2290 |
+
# @ backwpup
|
2291 |
+
#: ../inc/class-job.php:1805
|
2292 |
+
msgid "manifest.json might be needed for later restoring a backup from this archive."
|
2293 |
+
msgstr "manifest.json könnte für das spätere Wiederherstellen des Backups aus diesem Archiv benötigt werden."
|
2294 |
+
|
2295 |
+
# @ backwpup
|
2296 |
+
#: ../inc/class-job.php:1806
|
2297 |
+
msgid "Please leave manifest.json untouched and in place. Otherwise it is safe to be ignored."
|
2298 |
+
msgstr "Bitte lasse die manifest.json unberührt an ihrem Platz. Du kannst sie ansonsten einfach ignorieren."
|
2299 |
+
|
2300 |
+
# @ backwpup
|
2301 |
+
#: ../inc/class-job.php:1819
|
2302 |
+
#, php-format
|
2303 |
+
msgid "Added manifest.json file with %1$s to backup file list."
|
2304 |
+
msgstr "manifest.json mit %1$s wurde zur Backup-Datei-Liste hinzugefügt."
|
2305 |
+
|
2306 |
+
# @ backwpup
|
2307 |
+
#: ../inc/class-job.php:1849
|
2308 |
+
#, php-format
|
2309 |
+
msgid "%d. Trying to create backup archive …"
|
2310 |
+
msgstr "%d. Versuche, Backup zu erstellen …"
|
2311 |
+
|
2312 |
+
# @ backwpup
|
2313 |
+
#: ../inc/class-job.php:1856
|
2314 |
+
#, php-format
|
2315 |
+
msgctxt "Archive compression method"
|
2316 |
+
msgid "Compressing files as %s. Please be patient, this may take a moment."
|
2317 |
+
msgstr "Komprimiere Dateien als %s. Bitte habe einen Moment Geduld."
|
2318 |
+
|
2319 |
+
# @ backwpup
|
2320 |
+
#: ../inc/class-job.php:1870
|
2321 |
+
#: ../inc/class-job.php:1919
|
2322 |
+
msgid "Cannot create backup archive correctly. Aborting creation."
|
2323 |
+
msgstr "Backup-Archiv kann nicht korrekt angelegt werden. Anlegeprozess abgebrochen."
|
2324 |
+
|
2325 |
+
# @ backwpup
|
2326 |
+
#: ../inc/class-job.php:1916
|
2327 |
+
msgid "Aborting creation."
|
2328 |
+
msgstr "Anlegen abgebrochen."
|
2329 |
+
|
2330 |
+
# @ backwpup
|
2331 |
+
#: ../inc/class-job.php:1934
|
2332 |
+
msgid "Backup archive created."
|
2333 |
+
msgstr "Backup wurde erstellt."
|
2334 |
+
|
2335 |
+
# @ backwpup
|
2336 |
+
#: ../inc/class-job.php:1943
|
2337 |
+
#, php-format
|
2338 |
+
msgid "Archive size is %s."
|
2339 |
+
msgstr "Archivgröße ist %s"
|
2340 |
+
|
2341 |
+
# @ backwpup
|
2342 |
+
#: ../inc/class-job.php:1944
|
2343 |
+
#, php-format
|
2344 |
+
msgid "%1$d Files with %2$s in Archive."
|
2345 |
+
msgstr "%1$d Dateien mit %2$s in Archiven."
|
2346 |
+
|
2347 |
+
# @ backwpup
|
2348 |
+
#: ../inc/class-destination-msazure.php:25
|
2349 |
+
msgid "MS Azure access keys"
|
2350 |
+
msgstr "MS Azure Zugriff Schlüssel"
|
2351 |
+
|
2352 |
+
# @ backwpup
|
2353 |
+
#: ../inc/class-destination-msazure.php:29
|
2354 |
+
msgid "Account name"
|
2355 |
+
msgstr "Account Name"
|
2356 |
+
|
2357 |
+
# @ backwpup
|
2358 |
+
#: ../inc/class-destination-msazure.php:36
|
2359 |
+
msgid "Access key"
|
2360 |
+
msgstr "Access Key"
|
2361 |
+
|
2362 |
+
# @ backwpup
|
2363 |
+
#: ../inc/class-destination-msazure.php:44
|
2364 |
+
msgid "Blob container"
|
2365 |
+
msgstr "Blob Container"
|
2366 |
+
|
2367 |
+
# @ backwpup
|
2368 |
+
#: ../inc/class-destination-msazure.php:48
|
2369 |
+
msgid "Container selection"
|
2370 |
+
msgstr "Container Auswahl"
|
2371 |
+
|
2372 |
+
# @ backwpup
|
2373 |
+
#: ../inc/class-destination-msazure.php:60
|
2374 |
+
msgid "Create a new container"
|
2375 |
+
msgstr "Neuen Container erstellen"
|
2376 |
+
|
2377 |
+
# @ backwpup
|
2378 |
+
#: ../inc/class-destination-msazure.php:71
|
2379 |
+
msgid "Folder in container"
|
2380 |
+
msgstr "Ordner im Container"
|
2381 |
+
|
2382 |
+
# @ backwpup
|
2383 |
+
#: ../inc/class-destination-msazure.php:125
|
2384 |
+
#, php-format
|
2385 |
+
msgid "MS Azure container \"%s\" created."
|
2386 |
+
msgstr "MS Azure Container \"%s\" erstellt."
|
2387 |
+
|
2388 |
+
# @ backwpup
|
2389 |
+
#: ../inc/class-destination-msazure.php:128
|
2390 |
+
#, php-format
|
2391 |
+
msgid "MS Azure container create: %s"
|
2392 |
+
msgstr "MS Azure Container erstellen: %s"
|
2393 |
+
|
2394 |
+
# @ backwpup
|
2395 |
+
#: ../inc/class-destination-msazure.php:204
|
2396 |
+
#, php-format
|
2397 |
+
msgid "%d. Try sending backup to a Microsoft Azure (Blob) …"
|
2398 |
+
msgstr "%d. Versuche, das Backup zu Microsoft Azure (Blob) zu senden …"
|
2399 |
+
|
2400 |
+
# @ backwpup
|
2401 |
+
#: ../inc/class-destination-msazure.php:226
|
2402 |
+
#, php-format
|
2403 |
+
msgid "MS Azure container \"%s\" does not exist!"
|
2404 |
+
msgstr "MS Azure Container \"%s\" existiert nicht!"
|
2405 |
+
|
2406 |
+
# @ backwpup
|
2407 |
+
#: ../inc/class-destination-msazure.php:230
|
2408 |
+
#, php-format
|
2409 |
+
msgid "Connected to MS Azure container \"%s\"."
|
2410 |
+
msgstr "Verbunden mit MS Azure container \"%s\""
|
2411 |
+
|
2412 |
+
# @ backwpup
|
2413 |
+
#: ../inc/class-destination-msazure.php:233
|
2414 |
+
msgid "Starting upload to MS Azure …"
|
2415 |
+
msgstr "Hochladen zu MS Azure hat begonnen …"
|
2416 |
+
|
2417 |
+
# @ backwpup
|
2418 |
+
#: ../inc/class-destination-msazure.php:268
|
2419 |
+
#: ../inc/class-destination-dropbox.php:263
|
2420 |
+
#, php-format
|
2421 |
+
msgid "Backup transferred to %s"
|
2422 |
+
msgstr "Backup übertragen zu %s"
|
2423 |
+
|
2424 |
+
# @ backwpup
|
2425 |
+
#: ../inc/class-destination-msazure.php:273
|
2426 |
+
#: ../inc/class-destination-msazure.php:329
|
2427 |
+
#, php-format
|
2428 |
+
msgid "Microsoft Azure API: %s"
|
2429 |
+
msgstr "Microsoft Azure API: %s"
|
2430 |
+
|
2431 |
+
# @ backwpup
|
2432 |
+
#: ../inc/class-destination-msazure.php:322
|
2433 |
+
#, php-format
|
2434 |
+
msgid "One file deleted on Microsoft Azure container."
|
2435 |
+
msgid_plural "%d files deleted on Microsoft Azure container."
|
2436 |
+
msgstr[0] "Eine Datei im Microsoft-Azure-Container gelöscht"
|
2437 |
+
msgstr[1] "%d Dateien im Microsoft-Azure-Container gelöscht"
|
2438 |
+
|
2439 |
+
# @ backwpup
|
2440 |
+
#: ../inc/class-destination-msazure.php:415
|
2441 |
+
msgid "Missing account name!"
|
2442 |
+
msgstr "Kontoname (Benutzername) nicht angegeben!"
|
2443 |
+
|
2444 |
+
# @ backwpup
|
2445 |
+
#: ../inc/class-destination-msazure.php:421
|
2446 |
+
msgid "No container found!"
|
2447 |
+
msgstr "Kein Container gefunden!"
|
2448 |
+
|
2449 |
+
# @ backwpup
|
2450 |
+
#: ../inc/class-destination-dropbox.php:36
|
2451 |
+
#: ../inc/class-destination-dropbox.php:325
|
2452 |
+
#, php-format
|
2453 |
+
msgid "Dropbox API: %s"
|
2454 |
+
msgstr "Dropbox-API: %s"
|
2455 |
+
|
2456 |
+
# @ backwpup
|
2457 |
+
#: ../inc/class-destination-dropbox.php:51
|
2458 |
+
msgid "Login"
|
2459 |
+
msgstr "Anmelden"
|
2460 |
+
|
2461 |
+
# @ backwpup
|
2462 |
+
#: ../inc/class-destination-dropbox.php:55
|
2463 |
+
msgid "Authentication"
|
2464 |
+
msgstr "Authentifizierung"
|
2465 |
+
|
2466 |
+
# @ backwpup
|
2467 |
+
#: ../inc/class-destination-dropbox.php:57
|
2468 |
+
msgid "Not authenticated!"
|
2469 |
+
msgstr "Nicht authentifiziert!"
|
2470 |
+
|
2471 |
+
# @ backwpup
|
2472 |
+
#: ../inc/class-destination-dropbox.php:58
|
2473 |
+
msgid "Create Account"
|
2474 |
+
msgstr "Konto erstellen"
|
2475 |
+
|
2476 |
+
# @ backwpup
|
2477 |
+
#: ../inc/class-destination-dropbox.php:60
|
2478 |
+
msgid "Authenticated!"
|
2479 |
+
msgstr "Authentifiziert!"
|
2480 |
+
|
2481 |
+
# @ backwpup
|
2482 |
+
#: ../inc/class-destination-dropbox.php:61
|
2483 |
+
msgid "Delete Dropbox Authentication"
|
2484 |
+
msgstr "Lösche Dropbox-Authentifizierung"
|
2485 |
+
|
2486 |
+
# @ backwpup
|
2487 |
+
#: ../inc/class-destination-dropbox.php:68
|
2488 |
+
msgid "App Access to Dropbox"
|
2489 |
+
msgstr "App-Zugang zu Dropbox"
|
2490 |
+
|
2491 |
+
# @ backwpup
|
2492 |
+
#: ../inc/class-destination-dropbox.php:71
|
2493 |
+
msgid "Get Dropbox App auth code"
|
2494 |
+
msgstr "Hole Auth-Code für Apps-Ordner in Dropbox"
|
2495 |
+
|
2496 |
+
# @ backwpup
|
2497 |
+
#: ../inc/class-destination-dropbox.php:72
|
2498 |
+
msgid "Allows restricted access to Apps/BackWPup folder only."
|
2499 |
+
msgstr "Erlaubt beschränkten Zugriff ausschließlich zum Ordner Apps/BackWPup."
|
2500 |
+
|
2501 |
+
# @ backwpup
|
2502 |
+
#: ../inc/class-destination-dropbox.php:77
|
2503 |
+
msgid "— OR —"
|
2504 |
+
msgstr "— ODER —"
|
2505 |
+
|
2506 |
+
# @ backwpup
|
2507 |
+
#: ../inc/class-destination-dropbox.php:80
|
2508 |
+
msgid "Full Access to Dropbox"
|
2509 |
+
msgstr "Uneingeschränkter Zugang zur Dropbox."
|
2510 |
+
|
2511 |
+
# @ backwpup
|
2512 |
+
#: ../inc/class-destination-dropbox.php:82
|
2513 |
+
msgid "BackWPup will have full read and write access to your entire Dropbox. You can specify your backup destination wherever you want, just be aware that ANY files or folders inside of your Dropbox can be overridden or deleted by BackWPup."
|
2514 |
+
msgstr "BackWPup erhält uneingeschränkten Lese- und Schreibzugriff zu deiner gesamten Dropbox. Du kannst deinen Zielordner innerhalb deiner Dropbox frei wählen; bedenke jedoch, dass ALLE Dateien und Ordner in deiner Dropbox von BackWPup überschrieben oder gelöscht werden können."
|
2515 |
+
|
2516 |
+
# @ backwpup
|
2517 |
+
#: ../inc/class-destination-dropbox.php:83
|
2518 |
+
msgid "Get full Dropbox auth code "
|
2519 |
+
msgstr "Hole Auth-Code für gesamte Dropbox"
|
2520 |
+
|
2521 |
+
# @ backwpup
|
2522 |
+
#: ../inc/class-destination-dropbox.php:84
|
2523 |
+
msgid "Allows full access to your entire Dropbox."
|
2524 |
+
msgstr "Erlaubt uneingeschränkten Zugriff zu deiner gesamten Dropbox."
|
2525 |
+
|
2526 |
+
# @ backwpup
|
2527 |
+
#: ../inc/class-destination-dropbox.php:95
|
2528 |
+
msgid "Destination Folder"
|
2529 |
+
msgstr "Zielordner"
|
2530 |
+
|
2531 |
+
# @ theme_hamburg_textdomain
|
2532 |
+
#: ../inc/class-destination-dropbox.php:98
|
2533 |
+
msgid "Folder inside your Dropbox where your backup archives will be stored."
|
2534 |
+
msgstr "Ordner in deiner Dropbox, in dem deine Backup-Archive gespeichert werden."
|
2535 |
+
|
2536 |
+
# @ backwpup
|
2537 |
+
#: ../inc/class-destination-dropbox.php:225
|
2538 |
+
#, php-format
|
2539 |
+
msgid "%d. Try to send backup file to Dropbox …"
|
2540 |
+
msgstr "%d. Versuche, das Backup zur Dropbox zu senden …"
|
2541 |
+
|
2542 |
+
# @ backwpup
|
2543 |
+
#: ../inc/class-destination-dropbox.php:243
|
2544 |
+
#, php-format
|
2545 |
+
msgid "Authenticated with Dropbox of user %s"
|
2546 |
+
msgstr "Authentifiziert mit Dropbox von Benutzer %s"
|
2547 |
+
|
2548 |
+
# @ backwpup
|
2549 |
+
#: ../inc/class-destination-dropbox.php:246
|
2550 |
+
#, php-format
|
2551 |
+
msgid "%s available on your Dropbox"
|
2552 |
+
msgstr "%s verfügbar in deiner Dropbox"
|
2553 |
+
|
2554 |
+
# @ backwpup
|
2555 |
+
#: ../inc/class-destination-dropbox.php:248
|
2556 |
+
msgid "Not Authenticated with Dropbox!"
|
2557 |
+
msgstr "Nicht mit Dropbox Authentifiziert!"
|
2558 |
+
|
2559 |
+
# @ backwpup
|
2560 |
+
#: ../inc/class-destination-dropbox.php:251
|
2561 |
+
msgid "Uploading to Dropbox …"
|
2562 |
+
msgstr "Hochladen zur Dropbox hat begonnen …"
|
2563 |
+
|
2564 |
+
# @ backwpup
|
2565 |
+
#: ../inc/class-destination-dropbox.php:267
|
2566 |
+
msgid "Uploaded file size and local file size don't match."
|
2567 |
+
msgstr "Größe der lokalen und der hochgeladenen Datei ist nicht identisch."
|
2568 |
+
|
2569 |
+
# @ backwpup
|
2570 |
+
#: ../inc/class-destination-dropbox.php:271
|
2571 |
+
#, php-format
|
2572 |
+
msgid "Error transfering backup to %s."
|
2573 |
+
msgstr "Fehler beim Übertragen des Backups zu %s."
|
2574 |
+
|
2575 |
+
# @ backwpup
|
2576 |
+
#: ../inc/class-destination-dropbox.php:316
|
2577 |
+
#, php-format
|
2578 |
+
msgid "Error while deleting file from Dropbox: %s"
|
2579 |
+
msgstr "Fehler beim Löschen der Datei aus der Dropbox: %s"
|
2580 |
+
|
2581 |
+
# @ backwpup
|
2582 |
+
#: ../inc/class-destination-dropbox.php:319
|
2583 |
+
#, php-format
|
2584 |
+
msgid "One file deleted from Dropbox"
|
2585 |
+
msgid_plural "%d files deleted on Dropbox"
|
2586 |
+
msgstr[0] "Eine Datei aus der Dropbox gelöscht"
|
2587 |
+
msgstr[1] "%d Dateien aus der Dropbox gelöscht"
|
2588 |
+
|
2589 |
+
# @ backwpup
|
2590 |
+
#: ../inc/class-jobtype-dbdump.php:13
|
2591 |
+
msgid "DB Backup"
|
2592 |
+
msgstr "Datenbank-Backup"
|
2593 |
+
|
2594 |
+
# @ backwpup
|
2595 |
+
#: ../inc/class-jobtype-dbdump.php:14
|
2596 |
+
msgid "Database backup"
|
2597 |
+
msgstr "Datenbank Backup"
|
2598 |
+
|
2599 |
+
# @ backwpup
|
2600 |
+
#: ../inc/class-jobtype-dbdump.php:15
|
2601 |
+
msgid "Creates an .sql database backup file"
|
2602 |
+
msgstr "Erstellt ein Datenbank-Backup (.sql, .xml)"
|
2603 |
+
|
2604 |
+
# @ backwpup
|
2605 |
+
#: ../inc/class-jobtype-dbdump.php:61
|
2606 |
+
msgid "Settings for database backup"
|
2607 |
+
msgstr "Einstellungen für das Datenbank Backup"
|
2608 |
+
|
2609 |
+
# @ backwpup
|
2610 |
+
#: ../inc/class-jobtype-dbdump.php:65
|
2611 |
+
msgid "Tables to backup"
|
2612 |
+
msgstr "Tabellen zu sichern"
|
2613 |
+
|
2614 |
+
# @ backwpup
|
2615 |
+
#: ../inc/class-jobtype-dbdump.php:67
|
2616 |
+
msgid "all"
|
2617 |
+
msgstr "alle"
|
2618 |
+
|
2619 |
+
# @ backwpup
|
2620 |
+
#: ../inc/class-jobtype-dbdump.php:91
|
2621 |
+
msgid "Backup file name"
|
2622 |
+
msgstr "Backup Datei Name"
|
2623 |
+
|
2624 |
+
# @ backwpup
|
2625 |
+
#: ../inc/class-jobtype-dbdump.php:99
|
2626 |
+
msgid "Backup file compression"
|
2627 |
+
msgstr "Backup Datei Komprimierungsmethode"
|
2628 |
+
|
2629 |
+
# @ backwpup
|
2630 |
+
#: ../inc/class-jobtype-dbdump.php:155
|
2631 |
+
#, php-format
|
2632 |
+
msgid "%d. Try to backup database …"
|
2633 |
+
msgstr "%d. Versuche, die Datenbank zu sichern …"
|
2634 |
+
|
2635 |
+
# @ backwpup
|
2636 |
+
#: ../inc/class-jobtype-dbdump.php:169
|
2637 |
+
#, php-format
|
2638 |
+
msgid "Connected to database %1$s on %2$s"
|
2639 |
+
msgstr "Mit Datenbank %1$s auf %2$s verbunden"
|
2640 |
+
|
2641 |
+
# @ backwpup
|
2642 |
+
#: ../inc/class-jobtype-dbdump.php:182
|
2643 |
+
msgid "No tables to backup."
|
2644 |
+
msgstr "Es gibt keine Tabellen zu sichern"
|
2645 |
+
|
2646 |
+
# @ backwpup
|
2647 |
+
#: ../inc/class-jobtype-dbdump.php:204
|
2648 |
+
#, php-format
|
2649 |
+
msgid "Backup database table \"%s\" with \"%s\" records"
|
2650 |
+
msgstr "Sichere Datenbank-Tabelle „%s“ mit „%s“ Einträgen"
|
2651 |
+
|
2652 |
+
# @ backwpup
|
2653 |
+
#: ../inc/class-jobtype-dbdump.php:243
|
2654 |
+
msgid "MySQL backup file not created"
|
2655 |
+
msgstr "MySQL-Sicherungsdatei nicht erstellt"
|
2656 |
+
|
2657 |
+
# @ backwpup
|
2658 |
+
#: ../inc/class-jobtype-dbdump.php:249
|
2659 |
+
#, php-format
|
2660 |
+
msgid "Added database dump \"%1$s\" with %2$s to backup file list"
|
2661 |
+
msgstr "Datenbank Backup \"%1$s\" mit %2$s zur Backup Datei Liste hinzugefügt"
|
2662 |
+
|
2663 |
+
# @ backwpup
|
2664 |
+
#: ../inc/class-jobtype-dbdump.php:255
|
2665 |
+
msgid "Database backup done!"
|
2666 |
+
msgstr "Datenbank-Backup fertig!"
|
2667 |
+
|
2668 |
+
# @ backwpup
|
2669 |
+
#: ../inc/class-adminbar.php:53
|
2670 |
+
msgid "running"
|
2671 |
+
msgstr "läuft"
|
2672 |
+
|
2673 |
+
# @ backwpup
|
2674 |
+
#: ../inc/class-adminbar.php:69
|
2675 |
+
msgid "Now Running"
|
2676 |
+
msgstr "Jetzt läuft"
|
2677 |
+
|
2678 |
+
# @ backwpup
|
2679 |
+
#: ../inc/class-adminbar.php:75
|
2680 |
+
msgid "Abort!"
|
2681 |
+
msgstr "Abbrechen!"
|
2682 |
+
|
2683 |
+
# @ backwpup
|
2684 |
+
#: ../inc/class-adminbar.php:92
|
2685 |
+
msgid "Add new"
|
2686 |
+
msgstr "Erstellen"
|
2687 |
+
|
2688 |
+
# @ backwpup
|
2689 |
+
#: ../inc/class-adminbar.php:130
|
2690 |
+
msgid "Run Now"
|
2691 |
+
msgstr "Jetzt starten"
|
2692 |
+
|
2693 |
+
# @ backwpup
|
2694 |
+
#: ../inc/class-destination-s3-v1.php:249
|
2695 |
+
#, php-format
|
2696 |
+
msgid "Bucket %1$s created."
|
2697 |
+
msgstr "Bucket %1$s erstellt."
|
2698 |
+
|
2699 |
+
# @ backwpup
|
2700 |
+
#: ../inc/class-destination-rsc.php:41
|
2701 |
+
msgid "Rack Space Cloud Keys"
|
2702 |
+
msgstr "Rack Space Cloud Keys"
|
2703 |
+
|
2704 |
+
# @ backwpup
|
2705 |
+
#: ../inc/class-destination-rsc.php:52
|
2706 |
+
msgid "API Key"
|
2707 |
+
msgstr "API Key"
|
2708 |
+
|
2709 |
+
# @ backwpup
|
2710 |
+
#: ../inc/class-destination-rsc.php:60
|
2711 |
+
msgid "Select region"
|
2712 |
+
msgstr "Wähle Region"
|
2713 |
+
|
2714 |
+
# @ backwpup
|
2715 |
+
#: ../inc/class-destination-rsc.php:64
|
2716 |
+
#: ../inc/class-destination-rsc.php:66
|
2717 |
+
msgid "Rackspace Cloud Files Region"
|
2718 |
+
msgstr "Rackspace Cloud Verzeichnis"
|
2719 |
+
|
2720 |
+
# @ backwpup
|
2721 |
+
#: ../inc/class-destination-rsc.php:67
|
2722 |
+
msgid "Dallas (DFW)"
|
2723 |
+
msgstr "Dallas (DFW)"
|
2724 |
+
|
2725 |
+
# @ backwpup
|
2726 |
+
#: ../inc/class-destination-rsc.php:68
|
2727 |
+
msgid "Chicago (ORD)"
|
2728 |
+
msgstr "Chicago (ORD)"
|
2729 |
+
|
2730 |
+
# @ backwpup
|
2731 |
+
#: ../inc/class-destination-rsc.php:69
|
2732 |
+
msgid "Sydney (SYD)"
|
2733 |
+
msgstr "Sydney (SYD)"
|
2734 |
+
|
2735 |
+
# @ backwpup
|
2736 |
+
#: ../inc/class-destination-rsc.php:70
|
2737 |
+
msgid "London (LON)"
|
2738 |
+
msgstr "London (LON)"
|
2739 |
+
|
2740 |
+
# @ backwpup
|
2741 |
+
#: ../inc/class-destination-rsc.php:71
|
2742 |
+
msgid "Northern Virginia (IAD)"
|
2743 |
+
msgstr "Northern Virginia (IAD)"
|
2744 |
+
|
2745 |
+
# @ backwpup
|
2746 |
+
#: ../inc/class-destination-rsc.php:72
|
2747 |
+
msgid "Hong Kong (HKG)"
|
2748 |
+
msgstr "Hong Kong (HKG)"
|
2749 |
+
|
2750 |
+
# @ backwpup
|
2751 |
+
#: ../inc/class-destination-rsc.php:155
|
2752 |
+
#, php-format
|
2753 |
+
msgid "Rackspace Cloud container \"%s\" created."
|
2754 |
+
msgstr "Rackspace Cloud Container\"%s\" erstellt."
|
2755 |
+
|
2756 |
+
# @ backwpup
|
2757 |
+
#: ../inc/class-destination-rsc.php:159
|
2758 |
+
#: ../inc/class-destination-rsc.php:267
|
2759 |
+
#: ../inc/class-destination-rsc.php:302
|
2760 |
+
#: ../inc/class-destination-rsc.php:347
|
2761 |
+
#, php-format
|
2762 |
+
msgid "Rackspace Cloud API: %s"
|
2763 |
+
msgstr "Rackspace Cloud API: %s"
|
2764 |
+
|
2765 |
+
# @ backwpup
|
2766 |
+
#: ../inc/class-destination-rsc.php:250
|
2767 |
+
#, php-format
|
2768 |
+
msgid "%d. Trying to send backup file to Rackspace cloud …"
|
2769 |
+
msgstr "%d. Versuche, ein Backup zur Rackspace Cloud zu senden …"
|
2770 |
+
|
2771 |
+
# @ backwpup
|
2772 |
+
#: ../inc/class-destination-rsc.php:264
|
2773 |
+
#, php-format
|
2774 |
+
msgid "Connected to Rackspace cloud files container %s"
|
2775 |
+
msgstr "Verbunden mit Rackspace Cloud Container %s"
|
2776 |
+
|
2777 |
+
# @ backwpup
|
2778 |
+
#: ../inc/class-destination-rsc.php:276
|
2779 |
+
msgid "Upload to Rackspace cloud started …"
|
2780 |
+
msgstr "Upload zur Rackspace Cloud nun gestartet …"
|
2781 |
+
|
2782 |
+
# @ backwpup
|
2783 |
+
#: ../inc/class-destination-rsc.php:292
|
2784 |
+
msgid "Backup File transferred to RSC://"
|
2785 |
+
msgstr "Backup Archiv übertragen zu RSC://"
|
2786 |
+
|
2787 |
+
# @ backwpup
|
2788 |
+
#: ../inc/class-destination-rsc.php:296
|
2789 |
+
msgid "Cannot transfer backup to Rackspace cloud."
|
2790 |
+
msgstr "Kann das Backup nicht zur Rackspace Cloud transferieren"
|
2791 |
+
|
2792 |
+
# @ backwpup
|
2793 |
+
#: ../inc/class-destination-rsc.php:341
|
2794 |
+
#, php-format
|
2795 |
+
msgid "One file deleted on Rackspace cloud container."
|
2796 |
+
msgid_plural "%d files deleted on Rackspace cloud container."
|
2797 |
+
msgstr[0] "Eine Datei im Rackspace-Container gelöscht"
|
2798 |
+
msgstr[1] "%d Dateien im Rackspace-Container gelöscht"
|
2799 |
+
|
2800 |
+
# @ backwpup
|
2801 |
+
#: ../inc/class-destination-rsc.php:444
|
2802 |
+
msgid "Missing username!"
|
2803 |
+
msgstr "Fehlender Benutzername!"
|
2804 |
+
|
2805 |
+
# @ backwpup
|
2806 |
+
#: ../inc/class-destination-rsc.php:446
|
2807 |
+
msgid "Missing API Key!"
|
2808 |
+
msgstr "API-Schlüssel wird fehlt!"
|
2809 |
+
|
2810 |
+
# @ backwpup
|
2811 |
+
#: ../inc/class-destination-rsc.php:450
|
2812 |
+
msgid "A container could not be found!"
|
2813 |
+
msgstr "Kein Container gefunden!"
|
2814 |
+
|
2815 |
+
# @ backwpup
|
2816 |
+
#: ../inc/class-jobtype-dbcheck.php:13
|
2817 |
+
msgid "DB Check"
|
2818 |
+
msgstr "DB Check"
|
2819 |
+
|
2820 |
+
# @ backwpup
|
2821 |
+
#: ../inc/class-jobtype-dbcheck.php:14
|
2822 |
+
msgid "Check database tables"
|
2823 |
+
msgstr "Datenbank-Tabellen prüfen"
|
2824 |
+
|
2825 |
+
# @ backwpup
|
2826 |
+
#: ../inc/class-jobtype-dbcheck.php:35
|
2827 |
+
msgid "Settings for database check"
|
2828 |
+
msgstr "Einstellungen für den Datenbank Check"
|
2829 |
+
|
2830 |
+
# @ backwpup
|
2831 |
+
#: ../inc/class-jobtype-dbcheck.php:39
|
2832 |
+
msgid "WordPress tables only"
|
2833 |
+
msgstr "Nur WordPress Tabellen"
|
2834 |
+
|
2835 |
+
# @ backwpup
|
2836 |
+
#: ../inc/class-jobtype-dbcheck.php:44
|
2837 |
+
msgid "Check WordPress database tables only"
|
2838 |
+
msgstr "Teste nur die WordPress-Tabellen"
|
2839 |
+
|
2840 |
+
# @ backwpup
|
2841 |
+
#: ../inc/class-jobtype-dbcheck.php:49
|
2842 |
+
msgid "Repair"
|
2843 |
+
msgstr "Reparieren"
|
2844 |
+
|
2845 |
+
# @ backwpup
|
2846 |
+
#: ../inc/class-jobtype-dbcheck.php:54
|
2847 |
+
msgid "Try to repair defect table"
|
2848 |
+
msgstr "Versuche, definierte Tabellen zu reparieren"
|
2849 |
+
|
2850 |
+
# @ backwpup
|
2851 |
+
#: ../inc/class-jobtype-dbcheck.php:79
|
2852 |
+
#, php-format
|
2853 |
+
msgid "%d. Trying to check database …"
|
2854 |
+
msgstr "%d. Versuche, die Datenbank zu prüfen …"
|
2855 |
+
|
2856 |
+
# @ backwpup
|
2857 |
+
#: ../inc/class-jobtype-dbcheck.php:111
|
2858 |
+
#, php-format
|
2859 |
+
msgid "Table %1$s is a view. Not checked."
|
2860 |
+
msgstr "Tabelle %1$s ist ein View. Nicht geprüft."
|
2861 |
+
|
2862 |
+
# @ backwpup
|
2863 |
+
#: ../inc/class-jobtype-dbcheck.php:116
|
2864 |
+
#, php-format
|
2865 |
+
msgid "Table %1$s is not a MyISAM/InnoDB table. Not checked."
|
2866 |
+
msgstr "Tabelle %1$s ist keine MyISAM/InnoDB Tabelle. Nicht geprüft"
|
2867 |
+
|
2868 |
+
# @ backwpup
|
2869 |
+
#: ../inc/class-jobtype-dbcheck.php:123
|
2870 |
+
#: ../inc/class-jobtype-dbcheck.php:125
|
2871 |
+
#: ../inc/class-jobtype-dbcheck.php:127
|
2872 |
+
#, php-format
|
2873 |
+
msgid "Result of table check for %1$s is: %2$s"
|
2874 |
+
msgstr "Ergebnis der Tabellenprüfung für %1$s ist: %2$s"
|
2875 |
+
|
2876 |
+
# @ backwpup
|
2877 |
+
#: ../inc/class-jobtype-dbcheck.php:133
|
2878 |
+
#: ../inc/class-jobtype-dbcheck.php:135
|
2879 |
+
#: ../inc/class-jobtype-dbcheck.php:137
|
2880 |
+
#, php-format
|
2881 |
+
msgid "Result of table repair for %1$s is: %2$s"
|
2882 |
+
msgstr "Ergebnis der Tabellenreparatur für %1$s ist: %2$s"
|
2883 |
+
|
2884 |
+
# @ backwpup
|
2885 |
+
#: ../inc/class-jobtype-dbcheck.php:142
|
2886 |
+
msgid "Database check done!"
|
2887 |
+
msgstr "Datenbank-Check fertig!"
|
2888 |
+
|
2889 |
+
# @ backwpup
|
2890 |
+
#: ../inc/class-jobtype-dbcheck.php:145
|
2891 |
+
msgid "No tables to check."
|
2892 |
+
msgstr "Keine Tabellen zum checken."
|
2893 |
+
|
2894 |
+
# @ backwpup
|
2895 |
+
#: ../inc/class-page-settings.php:60
|
2896 |
+
msgid "Settings reset to default"
|
2897 |
+
msgstr "Die Einstellungen wurden zurückgesetzt."
|
2898 |
+
|
2899 |
+
# @ backwpup
|
2900 |
+
#: ../inc/class-page-settings.php:101
|
2901 |
+
msgid "Settings saved"
|
2902 |
+
msgstr "Einstellungen gespeichert"
|
2903 |
+
|
2904 |
+
# @ backwpup
|
2905 |
+
#: ../inc/class-page-settings.php:112
|
2906 |
+
#, php-format
|
2907 |
+
msgid "%s Settings"
|
2908 |
+
msgstr "%s Einstellungen"
|
2909 |
+
|
2910 |
+
# @ backwpup
|
2911 |
+
#: ../inc/class-page-settings.php:114
|
2912 |
+
#: ../inc/class-page-editjob.php:386
|
2913 |
+
msgid "General"
|
2914 |
+
msgstr "Allgemein"
|
2915 |
+
|
2916 |
+
# @ backwpup
|
2917 |
+
#: ../inc/class-page-settings.php:114
|
2918 |
+
msgid "Network"
|
2919 |
+
msgstr "Netzwerk"
|
2920 |
+
|
2921 |
+
# @ backwpup
|
2922 |
+
#: ../inc/class-page-settings.php:114
|
2923 |
+
msgid "API Keys"
|
2924 |
+
msgstr "API-Schlüssel"
|
2925 |
+
|
2926 |
+
# @ backwpup
|
2927 |
+
#: ../inc/class-page-settings.php:114
|
2928 |
+
msgid "Information"
|
2929 |
+
msgstr "Informationen"
|
2930 |
+
|
2931 |
+
# @ backwpup
|
2932 |
+
#: ../inc/class-page-settings.php:131
|
2933 |
+
msgid "Display Settings"
|
2934 |
+
msgstr "Einstellungen anzeigen"
|
2935 |
+
|
2936 |
+
# @ backwpup
|
2937 |
+
#: ../inc/class-page-settings.php:132
|
2938 |
+
msgid "Do you want to see BackWPup in the WordPress admin bar?"
|
2939 |
+
msgstr "Möchten Sie BackWPup-Menüpunkte in der WordPress-Adminbar sehen?"
|
2940 |
+
|
2941 |
+
# @ backwpup
|
2942 |
+
#: ../inc/class-page-settings.php:135
|
2943 |
+
msgid "Admin bar"
|
2944 |
+
msgstr "Adminbar"
|
2945 |
+
|
2946 |
+
# @ backwpup
|
2947 |
+
#: ../inc/class-page-settings.php:138
|
2948 |
+
msgid "Admin Bar"
|
2949 |
+
msgstr "Adminbar"
|
2950 |
+
|
2951 |
+
# @ backwpup
|
2952 |
+
#: ../inc/class-page-settings.php:143
|
2953 |
+
msgid "Show BackWPup links in admin bar."
|
2954 |
+
msgstr "BackWPup-Links in der Adminbar anzeigen."
|
2955 |
+
|
2956 |
+
# @ backwpup
|
2957 |
+
#: ../inc/class-page-settings.php:148
|
2958 |
+
#: ../inc/class-page-settings.php:151
|
2959 |
+
msgid "Folder sizes"
|
2960 |
+
msgstr "Verzeichnisgrößen"
|
2961 |
+
|
2962 |
+
# @ backwpup
|
2963 |
+
#: ../inc/class-page-settings.php:156
|
2964 |
+
msgid "Display folder sizes in the files tab when editing a job. (Might increase loading time of files tab.)"
|
2965 |
+
msgstr "Ordnergrößen im Tab Dateien anzeigen, wenn ein Auftrag bearbeitet wird. (Kann die Ladezeit des Tab erhöhen.)"
|
2966 |
+
|
2967 |
+
# @ backwpup
|
2968 |
+
#: ../inc/class-page-settings.php:161
|
2969 |
+
msgid "Security"
|
2970 |
+
msgstr "Sicherheit"
|
2971 |
+
|
2972 |
+
# @ backwpup
|
2973 |
+
#: ../inc/class-page-settings.php:162
|
2974 |
+
msgid "Security option for BackWPup"
|
2975 |
+
msgstr "Sicherheitseinstellungen für BackWPup"
|
2976 |
+
|
2977 |
+
# @ backwpup
|
2978 |
+
#: ../inc/class-page-settings.php:165
|
2979 |
+
#: ../inc/class-page-settings.php:168
|
2980 |
+
msgid "Protect folders"
|
2981 |
+
msgstr "Ordner schützen"
|
2982 |
+
|
2983 |
+
# @ backwpup
|
2984 |
+
#: ../inc/class-page-settings.php:173
|
2985 |
+
msgid "Protect BackWPup folders ( Temp, Log and Backups ) with <code>.htaccess</code> and <code>index.php</code>"
|
2986 |
+
msgstr "Schütze BackWPup-Verzeichnis (Temp, Log und Backups) mit den Dateien .htaccess und index.php"
|
2987 |
+
|
2988 |
+
# @ backwpup
|
2989 |
+
#: ../inc/class-page-settings.php:186
|
2990 |
+
msgid "Every time BackWPup runs a backup job, a log file is being generated. Choose where to store your log files and how many of them."
|
2991 |
+
msgstr "Jedes Mal, wenn BackWPup einen Auftrag ausführt, wird eine Protokolldatei erzeugt. Wählen Sie aus, wo und wie viele dieser Protokolldateien Sie speichern möchten."
|
2992 |
+
|
2993 |
+
# @ backwpup
|
2994 |
+
#: ../inc/class-page-settings.php:189
|
2995 |
+
msgid "Log file folder"
|
2996 |
+
msgstr "Protokolldateien-Ordner"
|
2997 |
+
|
2998 |
+
# @ backwpup
|
2999 |
+
#: ../inc/class-page-settings.php:197
|
3000 |
+
msgid "Maximum number of log files in folder"
|
3001 |
+
msgstr "Anzahl der Dateien, die im Ordner behalten werden"
|
3002 |
+
|
3003 |
+
# @ backwpup
|
3004 |
+
#: ../inc/class-page-settings.php:205
|
3005 |
+
#: ../inc/class-page-settings.php:208
|
3006 |
+
msgid "Compression"
|
3007 |
+
msgstr "Komprimierung"
|
3008 |
+
|
3009 |
+
# @ backwpup
|
3010 |
+
#: ../inc/class-page-settings.php:213
|
3011 |
+
msgid "Compress log files with GZip."
|
3012 |
+
msgstr "Komprimiere Logdateien mit Gzip."
|
3013 |
+
|
3014 |
+
# @ backwpup
|
3015 |
+
#: ../inc/class-page-settings.php:222
|
3016 |
+
msgid "There are a couple of general options for backup jobs. Set them here."
|
3017 |
+
msgstr "Es gibt einige allgemeine Optionen für Backup-Aufträge, die Sie hier setzen können."
|
3018 |
+
|
3019 |
+
# @ backwpup
|
3020 |
+
#: ../inc/class-page-settings.php:226
|
3021 |
+
msgid "Maximum number of retries for job steps"
|
3022 |
+
msgstr "Maximale Anzahl für Neuversuche der Arbeitsschritte"
|
3023 |
+
|
3024 |
+
# @ backwpup
|
3025 |
+
#: ../inc/class-page-settings.php:234
|
3026 |
+
msgid "Maximum script execution time"
|
3027 |
+
msgstr "Maximale Script Ausführungszeit"
|
3028 |
+
|
3029 |
+
# @ backwpup
|
3030 |
+
#: ../inc/class-page-settings.php:237
|
3031 |
+
msgid "Maximum PHP Script execution time"
|
3032 |
+
msgstr "Maximale PHP-Script Ausführungszeit"
|
3033 |
+
|
3034 |
+
# @ backwpup
|
3035 |
+
#: ../inc/class-page-settings.php:242
|
3036 |
+
msgid "seconds. 0 = disabled."
|
3037 |
+
msgstr "Sekunden. 0 = deaktiviert."
|
3038 |
+
|
3039 |
+
# @ backwpup
|
3040 |
+
#: ../inc/class-page-settings.php:248
|
3041 |
+
#: ../inc/class-page-settings.php:251
|
3042 |
+
msgid "Method for creating ZIP-file archives"
|
3043 |
+
msgstr "Methode für das erstellen von ZIP Dateien ist"
|
3044 |
+
|
3045 |
+
# @ backwpup
|
3046 |
+
#: ../inc/class-page-settings.php:255
|
3047 |
+
msgid "Auto"
|
3048 |
+
msgstr "Auto"
|
3049 |
+
|
3050 |
+
# @ backwpup
|
3051 |
+
#: ../inc/class-page-settings.php:256
|
3052 |
+
msgid "ZipArchive"
|
3053 |
+
msgstr "ZipArchive"
|
3054 |
+
|
3055 |
+
# @ backwpup
|
3056 |
+
#: ../inc/class-page-settings.php:257
|
3057 |
+
msgid "PclZip"
|
3058 |
+
msgstr "PclZip"
|
3059 |
+
|
3060 |
+
# @ backwpup
|
3061 |
+
#: ../inc/class-page-settings.php:265
|
3062 |
+
msgid "Key to start jobs externally with an URL"
|
3063 |
+
msgstr "Schlüssel für den Start eines Auftrags über eine externe URL"
|
3064 |
+
|
3065 |
+
# @ backwpup
|
3066 |
+
#: ../inc/class-page-settings.php:273
|
3067 |
+
msgid "No translation"
|
3068 |
+
msgstr "Keine Übersetzung"
|
3069 |
+
|
3070 |
+
# @ backwpup
|
3071 |
+
#: ../inc/class-page-settings.php:276
|
3072 |
+
msgid "No Translation"
|
3073 |
+
msgstr "Keine Übersetzung"
|
3074 |
+
|
3075 |
+
# @ backwpup
|
3076 |
+
#: ../inc/class-page-settings.php:281
|
3077 |
+
msgid "No translation for the job, the log will be written in English"
|
3078 |
+
msgstr "Keine Übersetzung für diesen Auftrag verwenden, die Log-Dateien werden in Englisch geschrieben. "
|
3079 |
+
|
3080 |
+
# @ backwpup
|
3081 |
+
#: ../inc/class-page-settings.php:287
|
3082 |
+
#: ../inc/class-page-settings.php:290
|
3083 |
+
msgid "Reduce server load"
|
3084 |
+
msgstr "Reduziere Server-Auslastung"
|
3085 |
+
|
3086 |
+
# @ backwpup
|
3087 |
+
#: ../inc/class-page-settings.php:294
|
3088 |
+
msgid "disabled"
|
3089 |
+
msgstr "deaktiviert"
|
3090 |
+
|
3091 |
+
# @ backwpup
|
3092 |
+
#: ../inc/class-page-settings.php:295
|
3093 |
+
msgid "minimum"
|
3094 |
+
msgstr "minimum"
|
3095 |
+
|
3096 |
+
# @ backwpup
|
3097 |
+
#: ../inc/class-page-settings.php:296
|
3098 |
+
msgid "medium"
|
3099 |
+
msgstr "medium"
|
3100 |
+
|
3101 |
+
# @ backwpup
|
3102 |
+
#: ../inc/class-page-settings.php:297
|
3103 |
+
msgid "maximum"
|
3104 |
+
msgstr "maximum"
|
3105 |
+
|
3106 |
+
# @ backwpup
|
3107 |
+
#: ../inc/class-page-settings.php:310
|
3108 |
+
msgid "Is your blog protected with HTTP basic authentication (.htaccess)? If yes, please set the username and password for authentication here."
|
3109 |
+
msgstr "Ist deine Wesbite mit einer HTTP-Authentifizierung geschützt (.htaccess)? Wenn ja, trage hier bitte die Zugangsdaten ein."
|
3110 |
+
|
3111 |
+
# @ backwpup
|
3112 |
+
#: ../inc/class-page-settings.php:313
|
3113 |
+
msgid "Username:"
|
3114 |
+
msgstr "Benutzername:"
|
3115 |
+
|
3116 |
+
# @ backwpup
|
3117 |
+
#: ../inc/class-page-settings.php:321
|
3118 |
+
#: ../inc/class-destination-sugarsync.php:34
|
3119 |
+
msgid "Password:"
|
3120 |
+
msgstr "Passwort:"
|
3121 |
+
|
3122 |
+
# @ backwpup
|
3123 |
+
#: ../inc/class-page-settings.php:341
|
3124 |
+
#: ../inc/class-page-settings.php:342
|
3125 |
+
msgid "Setting"
|
3126 |
+
msgstr "Einstellung"
|
3127 |
+
|
3128 |
+
# @ backwpup
|
3129 |
+
#: ../inc/class-page-settings.php:341
|
3130 |
+
#: ../inc/class-page-settings.php:342
|
3131 |
+
msgid "Value"
|
3132 |
+
msgstr "Wert"
|
3133 |
+
|
3134 |
+
# @ backwpup
|
3135 |
+
#: ../inc/class-page-settings.php:343
|
3136 |
+
msgid "WordPress version"
|
3137 |
+
msgstr "WordPress-Version"
|
3138 |
+
|
3139 |
+
# @ backwpup
|
3140 |
+
#: ../inc/class-page-settings.php:345
|
3141 |
+
msgid "BackWPup version"
|
3142 |
+
msgstr "BackWPup-Version"
|
3143 |
+
|
3144 |
+
# @ backwpup
|
3145 |
+
#: ../inc/class-page-settings.php:345
|
3146 |
+
msgid "Get pro."
|
3147 |
+
msgstr "Pro-Version kaufen"
|
3148 |
+
|
3149 |
+
# @ backwpup
|
3150 |
+
#: ../inc/class-page-settings.php:347
|
3151 |
+
msgid "BackWPup Pro version"
|
3152 |
+
msgstr "BackWPup-Pro-Version"
|
3153 |
+
|
3154 |
+
# @ backwpup
|
3155 |
+
#: ../inc/class-page-settings.php:348
|
3156 |
+
msgid "PHP version"
|
3157 |
+
msgstr "PHP-Version"
|
3158 |
+
|
3159 |
+
# @ backwpup
|
3160 |
+
#: ../inc/class-page-settings.php:349
|
3161 |
+
msgid "MySQL version"
|
3162 |
+
msgstr "MySQL-Version"
|
3163 |
+
|
3164 |
+
# @ backwpup
|
3165 |
+
#: ../inc/class-page-settings.php:352
|
3166 |
+
#: ../inc/class-page-settings.php:356
|
3167 |
+
msgid "cURL version"
|
3168 |
+
msgstr "cURL-Version"
|
3169 |
+
|
3170 |
+
# @ backwpup
|
3171 |
+
#: ../inc/class-page-settings.php:353
|
3172 |
+
msgid "cURL SSL version"
|
3173 |
+
msgstr "cURL-SSL-Version"
|
3174 |
+
|
3175 |
+
# @ backwpup
|
3176 |
+
#: ../inc/class-page-settings.php:356
|
3177 |
+
msgid "unavailable"
|
3178 |
+
msgstr "unerreichbar"
|
3179 |
+
|
3180 |
+
# @ backwpup
|
3181 |
+
#: ../inc/class-page-settings.php:358
|
3182 |
+
msgid "WP-Cron url:"
|
3183 |
+
msgstr "WP-Cron URL:"
|
3184 |
+
|
3185 |
+
# @ backwpup
|
3186 |
+
#: ../inc/class-page-settings.php:360
|
3187 |
+
msgid "Server self connect:"
|
3188 |
+
msgstr "Verbindung zum Server selbst:"
|
3189 |
+
|
3190 |
+
# @ backwpup
|
3191 |
+
#: ../inc/class-page-settings.php:364
|
3192 |
+
#: ../inc/class-page-jobs.php:347
|
3193 |
+
#, php-format
|
3194 |
+
msgid "The HTTP response test get an error \"%s\""
|
3195 |
+
msgstr "Der HTTP Antwort Test bekommt diesen Fehler \"%s\""
|
3196 |
+
|
3197 |
+
# @ backwpup
|
3198 |
+
#: ../inc/class-page-settings.php:366
|
3199 |
+
#: ../inc/class-page-jobs.php:349
|
3200 |
+
#, php-format
|
3201 |
+
msgid "The HTTP response test get a false http status (%s)"
|
3202 |
+
msgstr "Der HTTP Antwort Test bekommt den falschen http Status (%s)"
|
3203 |
+
|
3204 |
+
# @ backwpup
|
3205 |
+
#: ../inc/class-page-settings.php:369
|
3206 |
+
#: ../inc/pro/class-wizard-systemtest.php:180
|
3207 |
+
#, php-format
|
3208 |
+
msgid "The BackWPup HTTP response header returns a false value: \"%s\""
|
3209 |
+
msgstr "Der HTTP Response Header in BackWPup gibt einen fehlerhaften Wert zurück: \"%s\""
|
3210 |
+
|
3211 |
+
# @ backwpup
|
3212 |
+
#: ../inc/class-page-settings.php:372
|
3213 |
+
msgid "Response Test O.K."
|
3214 |
+
msgstr "Response Test O.K."
|
3215 |
+
|
3216 |
+
# @ backwpup
|
3217 |
+
#: ../inc/class-page-settings.php:377
|
3218 |
+
msgid "Temp folder:"
|
3219 |
+
msgstr "Temp Verzeichnis:"
|
3220 |
+
|
3221 |
+
# @ backwpup
|
3222 |
+
#: ../inc/class-page-settings.php:379
|
3223 |
+
#, php-format
|
3224 |
+
msgid "Temp folder %s doesn't exist."
|
3225 |
+
msgstr "Temp Verzeichnis %s existiert nicht."
|
3226 |
+
|
3227 |
+
# @ backwpup
|
3228 |
+
#: ../inc/class-page-settings.php:381
|
3229 |
+
#, php-format
|
3230 |
+
msgid "Temporary folder %s is not writable."
|
3231 |
+
msgstr "Temporärer Ordner %s ist nicht beschreibbar."
|
3232 |
+
|
3233 |
+
# @ backwpup
|
3234 |
+
#: ../inc/class-page-settings.php:386
|
3235 |
+
msgid "Log folder:"
|
3236 |
+
msgstr "Protokoll-Ordner:"
|
3237 |
+
|
3238 |
+
# @ backwpup
|
3239 |
+
#: ../inc/class-page-settings.php:388
|
3240 |
+
#, php-format
|
3241 |
+
msgid "Logs folder %s not exist."
|
3242 |
+
msgstr "Log Dateien %s Verzeichnis existiert nicht"
|
3243 |
+
|
3244 |
+
# @ backwpup
|
3245 |
+
#: ../inc/class-page-settings.php:390
|
3246 |
+
#, php-format
|
3247 |
+
msgid "Log folder %s is not writable."
|
3248 |
+
msgstr "Protokoll-Ordner %s ist nicht beschreibbar."
|
3249 |
+
|
3250 |
+
# @ backwpup
|
3251 |
+
#: ../inc/class-page-settings.php:394
|
3252 |
+
msgid "Server"
|
3253 |
+
msgstr "Server"
|
3254 |
+
|
3255 |
+
# @ backwpup
|
3256 |
+
#: ../inc/class-page-settings.php:395
|
3257 |
+
msgid "Operating System"
|
3258 |
+
msgstr "Betriebssystem"
|
3259 |
+
|
3260 |
+
# @ backwpup
|
3261 |
+
#: ../inc/class-page-settings.php:396
|
3262 |
+
msgid "PHP SAPI"
|
3263 |
+
msgstr "PHP SAPI"
|
3264 |
+
|
3265 |
+
# @ backwpup
|
3266 |
+
#: ../inc/class-page-settings.php:397
|
3267 |
+
msgid "Current PHP user"
|
3268 |
+
msgstr "Aktueller PHP user"
|
3269 |
+
|
3270 |
+
# @ backwpup
|
3271 |
+
#: ../inc/class-page-settings.php:398
|
3272 |
+
#: ../inc/class-page-settings.php:402
|
3273 |
+
#: ../inc/class-page-settings.php:406
|
3274 |
+
msgid "On"
|
3275 |
+
msgstr "An"
|
3276 |
+
|
3277 |
+
# @ backwpup
|
3278 |
+
#: ../inc/class-page-settings.php:398
|
3279 |
+
#: ../inc/class-page-settings.php:404
|
3280 |
+
#: ../inc/class-page-settings.php:408
|
3281 |
+
msgid "Off"
|
3282 |
+
msgstr "Aus"
|
3283 |
+
|
3284 |
+
# @ backwpup
|
3285 |
+
#: ../inc/class-page-settings.php:399
|
3286 |
+
msgid "Safe Mode"
|
3287 |
+
msgstr "Safe Mode"
|
3288 |
+
|
3289 |
+
# @ backwpup
|
3290 |
+
#: ../inc/class-page-settings.php:400
|
3291 |
+
msgid "Maximum execution time"
|
3292 |
+
msgstr "Max. Ausführungszeit"
|
3293 |
+
|
3294 |
+
# @ backwpup
|
3295 |
+
#: ../inc/class-page-settings.php:402
|
3296 |
+
#: ../inc/class-page-settings.php:404
|
3297 |
+
msgid "Alternative WP Cron"
|
3298 |
+
msgstr "Alternative WP Cron"
|
3299 |
+
|
3300 |
+
# @ backwpup
|
3301 |
+
#: ../inc/class-page-settings.php:406
|
3302 |
+
#: ../inc/class-page-settings.php:408
|
3303 |
+
msgid "Disabled WP Cron"
|
3304 |
+
msgstr "WP Cron abgeschaltet"
|
3305 |
+
|
3306 |
+
# @ backwpup
|
3307 |
+
#: ../inc/class-page-settings.php:410
|
3308 |
+
#: ../inc/class-page-settings.php:412
|
3309 |
+
msgid "CHMOD Dir"
|
3310 |
+
msgstr "CHMOD Verzeichnis"
|
3311 |
+
|
3312 |
+
# @ backwpup
|
3313 |
+
#: ../inc/class-page-settings.php:414
|
3314 |
+
msgid "Server Time"
|
3315 |
+
msgstr "Server Zeit"
|
3316 |
+
|
3317 |
+
# @ backwpup
|
3318 |
+
#: ../inc/class-page-settings.php:415
|
3319 |
+
msgid "Blog Time"
|
3320 |
+
msgstr "Webseite Zeit"
|
3321 |
+
|
3322 |
+
# @ backwpup
|
3323 |
+
#: ../inc/class-page-settings.php:416
|
3324 |
+
msgid "Blog Timezone"
|
3325 |
+
msgstr "Webseite Zeitzone"
|
3326 |
+
|
3327 |
+
# @ backwpup
|
3328 |
+
#: ../inc/class-page-settings.php:417
|
3329 |
+
msgid "Blog Time offset"
|
3330 |
+
msgstr "Webseite Zeitversetzung"
|
3331 |
+
|
3332 |
+
# @ backwpup
|
3333 |
+
#: ../inc/class-page-settings.php:417
|
3334 |
+
#, php-format
|
3335 |
+
msgid "%s hours"
|
3336 |
+
msgstr "%s Stunden"
|
3337 |
+
|
3338 |
+
# @ backwpup
|
3339 |
+
#: ../inc/class-page-settings.php:418
|
3340 |
+
msgid "Blog language"
|
3341 |
+
msgstr "Webseiten Sprache"
|
3342 |
+
|
3343 |
+
# @ backwpup
|
3344 |
+
#: ../inc/class-page-settings.php:419
|
3345 |
+
msgid "MySQL Client encoding"
|
3346 |
+
msgstr "MySQL Client Encoding"
|
3347 |
+
|
3348 |
+
# @ backwpup
|
3349 |
+
#: ../inc/class-page-settings.php:422
|
3350 |
+
msgid "Blog charset"
|
3351 |
+
msgstr "Webseiten Charset"
|
3352 |
+
|
3353 |
+
# @ backwpup
|
3354 |
+
#: ../inc/class-page-settings.php:423
|
3355 |
+
msgid "PHP Memory limit"
|
3356 |
+
msgstr "PHP Memory Limit"
|
3357 |
+
|
3358 |
+
# @ backwpup
|
3359 |
+
#: ../inc/class-page-settings.php:424
|
3360 |
+
msgid "WP memory limit"
|
3361 |
+
msgstr "WordPress-Memory-Limit"
|
3362 |
+
|
3363 |
+
# @ backwpup
|
3364 |
+
#: ../inc/class-page-settings.php:425
|
3365 |
+
msgid "WP maximum memory limit"
|
3366 |
+
msgstr "Maximales WordPress-Memory-Limit"
|
3367 |
+
|
3368 |
+
# @ backwpup
|
3369 |
+
#: ../inc/class-page-settings.php:426
|
3370 |
+
msgid "Memory in use"
|
3371 |
+
msgstr "Speicher in Benutzung"
|
3372 |
+
|
3373 |
+
# @ backwpup
|
3374 |
+
#: ../inc/class-page-settings.php:431
|
3375 |
+
msgid "Disabled PHP Functions:"
|
3376 |
+
msgstr "Deaktivierte PHP Funktionen:"
|
3377 |
+
|
3378 |
+
# @ backwpup
|
3379 |
+
#: ../inc/class-page-settings.php:436
|
3380 |
+
msgid "Loaded PHP Extensions:"
|
3381 |
+
msgstr "Geladene PHP Erweiterungen"
|
3382 |
+
|
3383 |
+
# @ backwpup
|
3384 |
+
#: ../inc/class-page-settings.php:448
|
3385 |
+
msgid "Save Changes"
|
3386 |
+
msgstr "Änderungen speichern"
|
3387 |
+
|
3388 |
+
# @ backwpup
|
3389 |
+
#: ../inc/class-page-settings.php:450
|
3390 |
+
msgid "Reset all settings to default"
|
3391 |
+
msgstr "Alle Einstellungen zurücksetzen"
|
3392 |
+
|
3393 |
+
# @ backwpup
|
3394 |
+
#: ../inc/class-page-editjob.php:37
|
3395 |
+
msgid "Overview"
|
3396 |
+
msgstr "Überblick"
|
3397 |
+
|
3398 |
+
# @ backwpup
|
3399 |
+
#: ../inc/class-page-editjob.php:102
|
3400 |
+
#, php-format
|
3401 |
+
msgid "Job with ID %d"
|
3402 |
+
msgstr "Auftrag mit der ID %d"
|
3403 |
+
|
3404 |
+
# @ backwpup
|
3405 |
+
#: ../inc/class-page-editjob.php:191
|
3406 |
+
#, php-format
|
3407 |
+
msgid "Changes for job <i>%s</i> saved."
|
3408 |
+
msgstr "Änderungen für den Auftrag <i>%s</i> gesichert."
|
3409 |
+
|
3410 |
+
# @ backwpup
|
3411 |
+
#: ../inc/class-page-editjob.php:192
|
3412 |
+
msgid "Jobs overview"
|
3413 |
+
msgstr "Auftragsübersicht"
|
3414 |
+
|
3415 |
+
# @ backwpup
|
3416 |
+
#: ../inc/class-page-editjob.php:192
|
3417 |
+
#: ../inc/class-page-jobs.php:117
|
3418 |
+
msgid "Run now"
|
3419 |
+
msgstr "Jetzt starten"
|
3420 |
+
|
3421 |
+
# @ backwpup
|
3422 |
+
#: ../inc/class-page-editjob.php:331
|
3423 |
+
msgid "Working as <a href=\"http://wikipedia.org/wiki/Cron\">Cron</a> schedule:"
|
3424 |
+
msgstr "Als <a href=\\\"http://de.wikipedia.org/wiki/Cron\\\">Cron-Job</a> ausführen:"
|
3425 |
+
|
3426 |
+
# @ backwpup
|
3427 |
+
#: ../inc/class-page-editjob.php:340
|
3428 |
+
#, php-format
|
3429 |
+
msgid "ATTENTION: Job runs every %d minutes!"
|
3430 |
+
msgstr "ACHTUNG: Auftrag läuft alle %d Minuten!"
|
3431 |
+
|
3432 |
+
# @ backwpup
|
3433 |
+
#: ../inc/class-page-editjob.php:346
|
3434 |
+
#, php-format
|
3435 |
+
msgid "ATTENTION: Job runs every %d hours!"
|
3436 |
+
msgstr "ACHTUNG: Auftrag läuft alle %d Stunden!"
|
3437 |
+
|
3438 |
+
# @ backwpup
|
3439 |
+
#: ../inc/class-page-editjob.php:350
|
3440 |
+
msgid "ATTENTION: Can't calculate cron!"
|
3441 |
+
msgstr "ACHTUNG: Kann cron nicht berechnen!"
|
3442 |
+
|
3443 |
+
# @ backwpup
|
3444 |
+
#: ../inc/class-page-editjob.php:353
|
3445 |
+
msgid "Next runtime:"
|
3446 |
+
msgstr "Nächster Durchlauf:"
|
3447 |
+
|
3448 |
+
# @ backwpup
|
3449 |
+
#: ../inc/class-page-editjob.php:386
|
3450 |
+
msgid "Schedule"
|
3451 |
+
msgstr "Planen"
|
3452 |
+
|
3453 |
+
# @ backwpup
|
3454 |
+
#: ../inc/class-page-editjob.php:401
|
3455 |
+
#, php-format
|
3456 |
+
msgid "To: %s"
|
3457 |
+
msgstr "Zu: %s"
|
3458 |
+
|
3459 |
+
# @ backwpup
|
3460 |
+
#: ../inc/class-page-editjob.php:407
|
3461 |
+
#, php-format
|
3462 |
+
msgid "%s Job:"
|
3463 |
+
msgstr "%s Auftrag: "
|
3464 |
+
|
3465 |
+
# @ backwpup
|
3466 |
+
#: ../inc/class-page-editjob.php:434
|
3467 |
+
#: ../inc/class-page-jobs.php:76
|
3468 |
+
msgid "Job Name"
|
3469 |
+
msgstr "Auftragsname"
|
3470 |
+
|
3471 |
+
# @ backwpup
|
3472 |
+
#: ../inc/class-page-editjob.php:438
|
3473 |
+
msgid "Please name this job."
|
3474 |
+
msgstr "Bitte benennen Sie diesen Auftrag."
|
3475 |
+
|
3476 |
+
# @ backwpup
|
3477 |
+
#: ../inc/class-page-editjob.php:446
|
3478 |
+
msgid "Job Tasks"
|
3479 |
+
msgstr "Auftragsdetails"
|
3480 |
+
|
3481 |
+
# @ backwpup
|
3482 |
+
#: ../inc/class-page-editjob.php:450
|
3483 |
+
msgid "This job is a …"
|
3484 |
+
msgstr "Dieser Auftrag ist ein …"
|
3485 |
+
|
3486 |
+
# @ backwpup
|
3487 |
+
#: ../inc/class-page-editjob.php:453
|
3488 |
+
msgid "Job tasks"
|
3489 |
+
msgstr "Auftragsdetails"
|
3490 |
+
|
3491 |
+
# @ backwpup
|
3492 |
+
#: ../inc/class-page-editjob.php:471
|
3493 |
+
msgid "Backup File Creation"
|
3494 |
+
msgstr "Erstellen der Backup-Datei"
|
3495 |
+
|
3496 |
+
# @ backwpup
|
3497 |
+
#: ../inc/class-page-editjob.php:476
|
3498 |
+
#: ../inc/class-page-editjob.php:479
|
3499 |
+
msgid "Backup type"
|
3500 |
+
msgstr "Backup Typ"
|
3501 |
+
|
3502 |
+
# @ backwpup
|
3503 |
+
#: ../inc/class-page-editjob.php:483
|
3504 |
+
msgid "Synchronize file by file to destination"
|
3505 |
+
msgstr "Synchronisiere Datei für Datei zum Auftragsziel"
|
3506 |
+
|
3507 |
+
# @ backwpup
|
3508 |
+
#: ../inc/class-page-editjob.php:487
|
3509 |
+
msgid "Create a backup archive"
|
3510 |
+
msgstr "Backup erstellen"
|
3511 |
+
|
3512 |
+
# @ backwpup
|
3513 |
+
#: ../inc/class-page-editjob.php:493
|
3514 |
+
msgid "Archive name"
|
3515 |
+
msgstr "Archivname"
|
3516 |
+
|
3517 |
+
# @ backwpup
|
3518 |
+
#: ../inc/class-page-editjob.php:525
|
3519 |
+
#: ../inc/class-page-editjob.php:528
|
3520 |
+
msgid "Archive Format"
|
3521 |
+
msgstr "Archiv Format"
|
3522 |
+
|
3523 |
+
# @ backwpup
|
3524 |
+
#: ../inc/class-page-editjob.php:531
|
3525 |
+
msgid "PHP Zip functions will be used if available (needs less memory). Otherwise the PCLZip class will be used."
|
3526 |
+
msgstr "PHP-Zip-Funktionen werden verwendet, sofern verfügbar (schneller). Ansonsten wird die Klasse PCLZip verwendet."
|
3527 |
+
|
3528 |
+
# @ backwpup
|
3529 |
+
#: ../inc/class-page-editjob.php:531
|
3530 |
+
#: ../inc/class-page-editjob.php:533
|
3531 |
+
msgid "Zip"
|
3532 |
+
msgstr "Zip"
|
3533 |
+
|
3534 |
+
# @ backwpup
|
3535 |
+
#: ../inc/class-page-editjob.php:533
|
3536 |
+
#: ../inc/class-page-editjob.php:538
|
3537 |
+
#: ../inc/class-page-editjob.php:542
|
3538 |
+
msgid "Disabled due to missing PHP function."
|
3539 |
+
msgstr "Deaktiviert wegen nicht verfügbarer PHP-Funktion."
|
3540 |
+
|
3541 |
+
# @ backwpup
|
3542 |
+
#: ../inc/class-page-editjob.php:534
|
3543 |
+
msgid "A tarballed, not compressed archive (fast and less memory)"
|
3544 |
+
msgstr "Ein TAR-Archiv, nicht komprimiert (schnell und speicherschonend)"
|
3545 |
+
|
3546 |
+
# @ backwpup
|
3547 |
+
#: ../inc/class-page-editjob.php:534
|
3548 |
+
msgid "Tar"
|
3549 |
+
msgstr "Tar"
|
3550 |
+
|
3551 |
+
# @ backwpup
|
3552 |
+
#: ../inc/class-page-editjob.php:536
|
3553 |
+
msgid "A tarballed, GZipped archive (fast and less memory)"
|
3554 |
+
msgstr "Ein TAR-GZ-Archiv (schnell und speicherschonend)"
|
3555 |
+
|
3556 |
+
# @ backwpup
|
3557 |
+
#: ../inc/class-page-editjob.php:536
|
3558 |
+
#: ../inc/class-page-editjob.php:538
|
3559 |
+
msgid "Tar GZip"
|
3560 |
+
msgstr "Tar GZip"
|
3561 |
+
|
3562 |
+
# @ backwpup
|
3563 |
+
#: ../inc/class-page-editjob.php:540
|
3564 |
+
msgid "A tarballed, BZipped archive (fast and less memory)"
|
3565 |
+
msgstr "Ein TAR-BZ-Archiv (schnell und speicherschonend)"
|
3566 |
+
|
3567 |
+
# @ backwpup
|
3568 |
+
#: ../inc/class-page-editjob.php:540
|
3569 |
+
#: ../inc/class-page-editjob.php:542
|
3570 |
+
msgid "Tar BZip2"
|
3571 |
+
msgstr "Tar BZip2"
|
3572 |
+
|
3573 |
+
# @ backwpup
|
3574 |
+
#: ../inc/class-page-editjob.php:548
|
3575 |
+
msgid "Job Destination"
|
3576 |
+
msgstr "Zielordner des Auftrags"
|
3577 |
+
|
3578 |
+
# @ backwpup
|
3579 |
+
#: ../inc/class-page-editjob.php:552
|
3580 |
+
#: ../inc/class-page-editjob.php:555
|
3581 |
+
msgid "Where should your backup file be stored?"
|
3582 |
+
msgstr "Wo soll die Backup-Datei gespeichert werden?"
|
3583 |
+
|
3584 |
+
# @ backwpup
|
3585 |
+
#: ../inc/class-page-editjob.php:576
|
3586 |
+
msgid "Log Files"
|
3587 |
+
msgstr "Protokoll-Dateien"
|
3588 |
+
|
3589 |
+
# @ backwpup
|
3590 |
+
#: ../inc/class-page-editjob.php:580
|
3591 |
+
msgid "Send log to email address"
|
3592 |
+
msgstr "Protokoll-Datei an E-Mail-Adresse senden"
|
3593 |
+
|
3594 |
+
# @ backwpup
|
3595 |
+
#: ../inc/class-page-editjob.php:588
|
3596 |
+
msgid "Email FROM field"
|
3597 |
+
msgstr "VON-Feld der E-Mail"
|
3598 |
+
|
3599 |
+
# @ backwpup
|
3600 |
+
#: ../inc/class-page-editjob.php:596
|
3601 |
+
msgid "Errors only"
|
3602 |
+
msgstr "Nur Fehler"
|
3603 |
+
|
3604 |
+
# @ backwpup
|
3605 |
+
#: ../inc/class-page-editjob.php:601
|
3606 |
+
msgid "Send email with log only when errors occur during job execution."
|
3607 |
+
msgstr "Sende eine E-Mail mit Protokoll nur, wenn während des Auftrags ein Fehler aufgetreten ist."
|
3608 |
+
|
3609 |
+
# @ backwpup
|
3610 |
+
#: ../inc/class-page-editjob.php:612
|
3611 |
+
msgid "Job Schedule"
|
3612 |
+
msgstr "Auftragsplanung"
|
3613 |
+
|
3614 |
+
# @ backwpup
|
3615 |
+
#: ../inc/class-page-editjob.php:616
|
3616 |
+
#: ../inc/class-page-editjob.php:619
|
3617 |
+
msgid "Start job"
|
3618 |
+
msgstr "Auftrag starten"
|
3619 |
+
|
3620 |
+
# @ backwpup
|
3621 |
+
#: ../inc/class-page-editjob.php:623
|
3622 |
+
msgid "manually only"
|
3623 |
+
msgstr "nur manuell"
|
3624 |
+
|
3625 |
+
# @ backwpup
|
3626 |
+
#: ../inc/class-page-editjob.php:627
|
3627 |
+
msgid "with WordPress cron"
|
3628 |
+
msgstr "mit WordPress Cron"
|
3629 |
+
|
3630 |
+
# @ backwpup
|
3631 |
+
#: ../inc/class-page-editjob.php:634
|
3632 |
+
msgid "with a link"
|
3633 |
+
msgstr "mit einem Link"
|
3634 |
+
|
3635 |
+
# @ backwpup
|
3636 |
+
#: ../inc/class-page-editjob.php:640
|
3637 |
+
msgid "Start job with CLI"
|
3638 |
+
msgstr "Auftrag per CLI starten"
|
3639 |
+
|
3640 |
+
# @ backwpup
|
3641 |
+
#: ../inc/class-page-editjob.php:643
|
3642 |
+
#, php-format
|
3643 |
+
msgid "Use <a href=\"http://wp-cli.org/\">WP-CLI</a> to run jobs from commandline or <a href=\"%s\">get the start script</a>."
|
3644 |
+
msgstr "Verwenden Sie <a href=\"http://wp-cli.org/\">WP-CLI</a>, um Aufträge per Kommandozeile auszulösen, oder <a href=\"%s\">dieses Start-Script</a>."
|
3645 |
+
|
3646 |
+
# @ backwpup
|
3647 |
+
#: ../inc/class-page-editjob.php:648
|
3648 |
+
msgid "Schedule execution time"
|
3649 |
+
msgstr "Plane Ausführungszeit"
|
3650 |
+
|
3651 |
+
# @ backwpup
|
3652 |
+
#: ../inc/class-page-editjob.php:652
|
3653 |
+
#: ../inc/class-page-editjob.php:655
|
3654 |
+
msgid "Scheduler type"
|
3655 |
+
msgstr "Planungstyp"
|
3656 |
+
|
3657 |
+
# @ backwpup
|
3658 |
+
#: ../inc/class-page-editjob.php:659
|
3659 |
+
msgid "basic"
|
3660 |
+
msgstr "einfach"
|
3661 |
+
|
3662 |
+
# @ backwpup
|
3663 |
+
#: ../inc/class-page-editjob.php:663
|
3664 |
+
msgid "advanced"
|
3665 |
+
msgstr "erweitert"
|
3666 |
+
|
3667 |
+
# @ backwpup
|
3668 |
+
#: ../inc/class-page-editjob.php:692
|
3669 |
+
#: ../inc/class-page-editjob.php:760
|
3670 |
+
msgid "Scheduler"
|
3671 |
+
msgstr "Planer"
|
3672 |
+
|
3673 |
+
# @ backwpup
|
3674 |
+
#: ../inc/class-page-editjob.php:702
|
3675 |
+
msgid "Hour"
|
3676 |
+
msgstr "Stunde"
|
3677 |
+
|
3678 |
+
# @ backwpup
|
3679 |
+
#: ../inc/class-page-editjob.php:705
|
3680 |
+
msgid "Minute"
|
3681 |
+
msgstr "Minute"
|
3682 |
+
|
3683 |
+
# @ backwpup
|
3684 |
+
#: ../inc/class-page-editjob.php:709
|
3685 |
+
msgid "monthly"
|
3686 |
+
msgstr "monatlich"
|
3687 |
+
|
3688 |
+
# @ backwpup
|
3689 |
+
#: ../inc/class-page-editjob.php:711
|
3690 |
+
msgid "on"
|
3691 |
+
msgstr "am"
|
3692 |
+
|
3693 |
+
# @ backwpup
|
3694 |
+
#: ../inc/class-page-editjob.php:721
|
3695 |
+
msgid "weekly"
|
3696 |
+
msgstr "wöchentlich"
|
3697 |
+
|
3698 |
+
# @ backwpup
|
3699 |
+
#: ../inc/class-page-editjob.php:723
|
3700 |
+
#: ../inc/class-page-editjob.php:830
|
3701 |
+
msgid "Sunday"
|
3702 |
+
msgstr "Sonntag"
|
3703 |
+
|
3704 |
+
# @ backwpup
|
3705 |
+
#: ../inc/class-page-editjob.php:724
|
3706 |
+
#: ../inc/class-page-editjob.php:831
|
3707 |
+
msgid "Monday"
|
3708 |
+
msgstr "Montag"
|
3709 |
+
|
3710 |
+
# @ backwpup
|
3711 |
+
#: ../inc/class-page-editjob.php:725
|
3712 |
+
#: ../inc/class-page-editjob.php:832
|
3713 |
+
msgid "Tuesday"
|
3714 |
+
msgstr "Dienstag"
|
3715 |
+
|
3716 |
+
# @ backwpup
|
3717 |
+
#: ../inc/class-page-editjob.php:726
|
3718 |
+
#: ../inc/class-page-editjob.php:833
|
3719 |
+
msgid "Wednesday"
|
3720 |
+
msgstr "Mittwoch"
|
3721 |
+
|
3722 |
+
# @ backwpup
|
3723 |
+
#: ../inc/class-page-editjob.php:727
|
3724 |
+
#: ../inc/class-page-editjob.php:834
|
3725 |
+
msgid "Thursday"
|
3726 |
+
msgstr "Donnerstag"
|
3727 |
+
|
3728 |
+
# @ backwpup
|
3729 |
+
#: ../inc/class-page-editjob.php:728
|
3730 |
+
#: ../inc/class-page-editjob.php:835
|
3731 |
+
msgid "Friday"
|
3732 |
+
msgstr "Freitag"
|
3733 |
+
|
3734 |
+
# @ backwpup
|
3735 |
+
#: ../inc/class-page-editjob.php:729
|
3736 |
+
#: ../inc/class-page-editjob.php:836
|
3737 |
+
msgid "Saturday"
|
3738 |
+
msgstr "Samstag"
|
3739 |
+
|
3740 |
+
# @ backwpup
|
3741 |
+
#: ../inc/class-page-editjob.php:739
|
3742 |
+
msgid "daily"
|
3743 |
+
msgstr "täglich"
|
3744 |
+
|
3745 |
+
# @ backwpup
|
3746 |
+
#: ../inc/class-page-editjob.php:749
|
3747 |
+
msgid "hourly"
|
3748 |
+
msgstr "stündlich"
|
3749 |
+
|
3750 |
+
# @ backwpup
|
3751 |
+
#: ../inc/class-page-editjob.php:763
|
3752 |
+
msgid "Minutes:"
|
3753 |
+
msgstr "Minuten:"
|
3754 |
+
|
3755 |
+
# @ backwpup
|
3756 |
+
#: ../inc/class-page-editjob.php:765
|
3757 |
+
#: ../inc/class-page-editjob.php:778
|
3758 |
+
#: ../inc/class-page-editjob.php:790
|
3759 |
+
#: ../inc/class-page-editjob.php:804
|
3760 |
+
#: ../inc/class-page-editjob.php:826
|
3761 |
+
msgid "Any (*)"
|
3762 |
+
msgstr "Alle (*)"
|
3763 |
+
|
3764 |
+
# @ backwpup
|
3765 |
+
#: ../inc/class-page-editjob.php:775
|
3766 |
+
msgid "Hours:"
|
3767 |
+
msgstr "Stunden:"
|
3768 |
+
|
3769 |
+
# @ backwpup
|
3770 |
+
#: ../inc/class-page-editjob.php:788
|
3771 |
+
msgid "Day of Month:"
|
3772 |
+
msgstr "Tag des Monats:"
|
3773 |
+
|
3774 |
+
# @ backwpup
|
3775 |
+
#: ../inc/class-page-editjob.php:802
|
3776 |
+
msgid "Month:"
|
3777 |
+
msgstr "Monat:"
|
3778 |
+
|
3779 |
+
# @ backwpup
|
3780 |
+
#: ../inc/class-page-editjob.php:808
|
3781 |
+
msgid "January"
|
3782 |
+
msgstr "Januar"
|
3783 |
+
|
3784 |
+
# @ backwpup
|
3785 |
+
#: ../inc/class-page-editjob.php:809
|
3786 |
+
msgid "February"
|
3787 |
+
msgstr "Februar"
|
3788 |
+
|
3789 |
+
# @ backwpup
|
3790 |
+
#: ../inc/class-page-editjob.php:810
|
3791 |
+
msgid "March"
|
3792 |
+
msgstr "März"
|
3793 |
+
|
3794 |
+
# @ backwpup
|
3795 |
+
#: ../inc/class-page-editjob.php:811
|
3796 |
+
msgid "April"
|
3797 |
+
msgstr "April"
|
3798 |
+
|
3799 |
+
# @ backwpup
|
3800 |
+
#: ../inc/class-page-editjob.php:812
|
3801 |
+
msgid "May"
|
3802 |
+
msgstr "Mai"
|
3803 |
+
|
3804 |
+
# @ backwpup
|
3805 |
+
#: ../inc/class-page-editjob.php:813
|
3806 |
+
msgid "June"
|
3807 |
+
msgstr "Juni"
|
3808 |
+
|
3809 |
+
# @ backwpup
|
3810 |
+
#: ../inc/class-page-editjob.php:814
|
3811 |
+
msgid "July"
|
3812 |
+
msgstr "Juli"
|
3813 |
+
|
3814 |
+
# @ backwpup
|
3815 |
+
#: ../inc/class-page-editjob.php:815
|
3816 |
+
msgid "August"
|
3817 |
+
msgstr "August"
|
3818 |
+
|
3819 |
+
# @ backwpup
|
3820 |
+
#: ../inc/class-page-editjob.php:816
|
3821 |
+
msgid "September"
|
3822 |
+
msgstr "September"
|
3823 |
+
|
3824 |
+
# @ backwpup
|
3825 |
+
#: ../inc/class-page-editjob.php:817
|
3826 |
+
msgid "October"
|
3827 |
+
msgstr "Oktober"
|
3828 |
+
|
3829 |
+
# @ backwpup
|
3830 |
+
#: ../inc/class-page-editjob.php:818
|
3831 |
+
msgid "November"
|
3832 |
+
msgstr "November"
|
3833 |
+
|
3834 |
+
# @ backwpup
|
3835 |
+
#: ../inc/class-page-editjob.php:819
|
3836 |
+
msgid "December"
|
3837 |
+
msgstr "Dezember"
|
3838 |
+
|
3839 |
+
# @ backwpup
|
3840 |
+
#: ../inc/class-page-editjob.php:824
|
3841 |
+
msgid "Day of Week:"
|
3842 |
+
msgstr "Wochentag:"
|
3843 |
+
|
3844 |
+
# @ backwpup
|
3845 |
+
#: ../inc/class-page-editjob.php:860
|
3846 |
+
msgid "Save changes"
|
3847 |
+
msgstr "Änderungen speichern"
|
3848 |
+
|
3849 |
+
# @ backwpup
|
3850 |
+
#: ../inc/class-jobtype-wpplugin.php:13
|
3851 |
+
msgid "Plugins"
|
3852 |
+
msgstr "Plugins"
|
3853 |
+
|
3854 |
+
# @ backwpup
|
3855 |
+
#: ../inc/class-jobtype-wpplugin.php:14
|
3856 |
+
msgid "Installed plugins list"
|
3857 |
+
msgstr "Liste der installierten Plugins"
|
3858 |
+
|
3859 |
+
# @ backwpup
|
3860 |
+
#: ../inc/class-jobtype-wpplugin.php:45
|
3861 |
+
msgid "Plugin list file name"
|
3862 |
+
msgstr "Dateiname der Plugin-Liste"
|
3863 |
+
|
3864 |
+
# @ backwpup
|
3865 |
+
#: ../inc/class-jobtype-wpplugin.php:93
|
3866 |
+
#, php-format
|
3867 |
+
msgid "%d. Trying to generate a file with installed plugin names …"
|
3868 |
+
msgstr "%d. Versuche, eine Liste der installierten Plugins zu erstellen …"
|
3869 |
+
|
3870 |
+
# @ backwpup
|
3871 |
+
#: ../inc/class-jobtype-wpplugin.php:120
|
3872 |
+
msgid "All plugin information:"
|
3873 |
+
msgstr "Alle Plugin-Informationen"
|
3874 |
+
|
3875 |
+
# @ backwpup
|
3876 |
+
#: ../inc/class-jobtype-wpplugin.php:122
|
3877 |
+
#, php-format
|
3878 |
+
msgid "from %s"
|
3879 |
+
msgstr "von %s"
|
3880 |
+
|
3881 |
+
# @ backwpup
|
3882 |
+
#: ../inc/class-jobtype-wpplugin.php:124
|
3883 |
+
msgid "Active plugins:"
|
3884 |
+
msgstr "Aktive Plugins:"
|
3885 |
+
|
3886 |
+
# @ backwpup
|
3887 |
+
#: ../inc/class-jobtype-wpplugin.php:130
|
3888 |
+
msgid "Inactive plugins:"
|
3889 |
+
msgstr "Inaktive Plugins:"
|
3890 |
+
|
3891 |
+
# @ backwpup
|
3892 |
+
#: ../inc/class-jobtype-wpplugin.php:142
|
3893 |
+
#, php-format
|
3894 |
+
msgid "Added plugin list file \"%1$s\" with %2$s to backup file list."
|
3895 |
+
msgstr "Plugin Listendatei \"%1$s\" mit %2$s zur Backup-Datei-Liste hinzugefügt."
|
3896 |
+
|
3897 |
+
# @ backwpup
|
3898 |
+
#: ../inc/class-destination-sugarsync.php:22
|
3899 |
+
msgid "Sugarsync Login"
|
3900 |
+
msgstr "SugarSync Login"
|
3901 |
+
|
3902 |
+
# @ backwpup
|
3903 |
+
#: ../inc/class-destination-sugarsync.php:30
|
3904 |
+
msgid "Email address:"
|
3905 |
+
msgstr "E-Mail-Adresse"
|
3906 |
+
|
3907 |
+
# @ backwpup
|
3908 |
+
#: ../inc/class-destination-sugarsync.php:40
|
3909 |
+
#: ../inc/class-destination-sugarsync.php:121
|
3910 |
+
msgid "Authenticate with Sugarsync!"
|
3911 |
+
msgstr "Mit SugarSync authentifizieren!"
|
3912 |
+
|
3913 |
+
# @ backwpup
|
3914 |
+
#: ../inc/class-destination-sugarsync.php:42
|
3915 |
+
#: ../inc/class-destination-sugarsync.php:137
|
3916 |
+
msgid "Create Sugarsync account"
|
3917 |
+
msgstr "SugarSync-Konto erstellen"
|
3918 |
+
|
3919 |
+
# @ backwpup
|
3920 |
+
#: ../inc/class-destination-sugarsync.php:51
|
3921 |
+
#: ../inc/class-destination-sugarsync.php:133
|
3922 |
+
msgid "Delete Sugarsync authentication!"
|
3923 |
+
msgstr "Lösche SugarSync Authentifizierung"
|
3924 |
+
|
3925 |
+
# @ backwpup
|
3926 |
+
#: ../inc/class-destination-sugarsync.php:57
|
3927 |
+
msgid "SugarSync Root"
|
3928 |
+
msgstr "SugarSync-Wurzelverzeichnis"
|
3929 |
+
|
3930 |
+
# @ backwpup
|
3931 |
+
#: ../inc/class-destination-sugarsync.php:61
|
3932 |
+
msgid "Sync folder selection"
|
3933 |
+
msgstr "Sync Ordner Auswahl"
|
3934 |
+
|
3935 |
+
# @ backwpup
|
3936 |
+
#: ../inc/class-destination-sugarsync.php:69
|
3937 |
+
msgid "No Syncfolders found!"
|
3938 |
+
msgstr "Keine Sync-Ordner gefunden!"
|
3939 |
+
|
3940 |
+
# @ backwpup
|
3941 |
+
#: ../inc/class-destination-sugarsync.php:90
|
3942 |
+
msgid "Folder in root"
|
3943 |
+
msgstr "Ordner im Wurzelverzeichnis"
|
3944 |
+
|
3945 |
+
# @ backwpup
|
3946 |
+
#: ../inc/class-destination-sugarsync.php:227
|
3947 |
+
#, php-format
|
3948 |
+
msgid "%d. Try to send backup to SugarSync …"
|
3949 |
+
msgstr "%d. Versuche, ein Backup zu SugarSync zu senden …"
|
3950 |
+
|
3951 |
+
# @ backwpup
|
3952 |
+
#: ../inc/class-destination-sugarsync.php:234
|
3953 |
+
#, php-format
|
3954 |
+
msgid "Authenticated to SugarSync with nickname %s"
|
3955 |
+
msgstr "Authentifiziert bei SugarSync mit dem Namen %s"
|
3956 |
+
|
3957 |
+
# @ backwpup
|
3958 |
+
#: ../inc/class-destination-sugarsync.php:237
|
3959 |
+
#, php-format
|
3960 |
+
msgctxt "Available space on SugarSync"
|
3961 |
+
msgid "Not enough disk space available on SugarSync. Available: %s."
|
3962 |
+
msgstr "Nicht genug Speicherplatz verfügbar bei SugarSync. Verfügbar: %s."
|
3963 |
+
|
3964 |
+
# @ backwpup
|
3965 |
+
#: ../inc/class-destination-sugarsync.php:243
|
3966 |
+
#, php-format
|
3967 |
+
msgid "%s available at SugarSync"
|
3968 |
+
msgstr "%s verfügbar bei SugarSync"
|
3969 |
+
|
3970 |
+
# @ backwpup
|
3971 |
+
#: ../inc/class-destination-sugarsync.php:250
|
3972 |
+
msgid "Starting upload to SugarSync …"
|
3973 |
+
msgstr "Hochladen zu SugarSync hat begonnen …"
|
3974 |
+
|
3975 |
+
# @ backwpup
|
3976 |
+
#: ../inc/class-destination-sugarsync.php:260
|
3977 |
+
msgid "Cannot transfer backup to SugarSync!"
|
3978 |
+
msgstr "Backup kann nicht zu SugarSync übertragen werden!"
|
3979 |
+
|
3980 |
+
# @ backwpup
|
3981 |
+
#: ../inc/class-destination-sugarsync.php:299
|
3982 |
+
#, php-format
|
3983 |
+
msgid "One file deleted on SugarSync folder"
|
3984 |
+
msgid_plural "%d files deleted on SugarSync folder"
|
3985 |
+
msgstr[0] "Eine Datei im SugarSync-Ordner gelöscht"
|
3986 |
+
msgstr[1] "%d Dateien im SugarSync-Ordner gelöscht"
|
3987 |
+
|
3988 |
+
# @ backwpup
|
3989 |
+
#: ../inc/class-destination-sugarsync.php:305
|
3990 |
+
#, php-format
|
3991 |
+
msgid "SugarSync API: %s"
|
3992 |
+
msgstr "SugarSync API: %s"
|
3993 |
+
|
3994 |
+
# @ backwpup
|
3995 |
+
#: ../inc/class-page-jobs.php:52
|
3996 |
+
msgid "No Jobs."
|
3997 |
+
msgstr "Keine Aufträge."
|
3998 |
+
|
3999 |
+
# @ backwpup
|
4000 |
+
#: ../inc/class-page-jobs.php:78
|
4001 |
+
msgid "Destinations"
|
4002 |
+
msgstr "Zielordner"
|
4003 |
+
|
4004 |
+
# @ backwpup
|
4005 |
+
#: ../inc/class-page-jobs.php:79
|
4006 |
+
msgid "Next Run"
|
4007 |
+
msgstr "Nächster Durchlauf"
|
4008 |
+
|
4009 |
+
# @ backwpup
|
4010 |
+
#: ../inc/class-page-jobs.php:80
|
4011 |
+
msgid "Last Run"
|
4012 |
+
msgstr "Letzter Durchlauf"
|
4013 |
+
|
4014 |
+
# @ backwpup
|
4015 |
+
#: ../inc/class-page-jobs.php:111
|
4016 |
+
msgid "Edit"
|
4017 |
+
msgstr "Bearbeiten"
|
4018 |
+
|
4019 |
+
# @ backwpup
|
4020 |
+
#: ../inc/class-page-jobs.php:112
|
4021 |
+
msgid "Copy"
|
4022 |
+
msgstr "Kopieren"
|
4023 |
+
|
4024 |
+
# @ backwpup
|
4025 |
+
#: ../inc/class-page-jobs.php:123
|
4026 |
+
msgid "Last log"
|
4027 |
+
msgstr "Letztes Log"
|
4028 |
+
|
4029 |
+
# @ backwpup
|
4030 |
+
#: ../inc/class-page-jobs.php:185
|
4031 |
+
msgid "Not needed or set"
|
4032 |
+
msgstr "Nicht gebraucht oder eingestellt"
|
4033 |
+
|
4034 |
+
# @ backwpup
|
4035 |
+
#: ../inc/class-page-jobs.php:207
|
4036 |
+
#, php-format
|
4037 |
+
msgid "Running for: %s seconds"
|
4038 |
+
msgstr "Läuft seit %s Sekunden"
|
4039 |
+
|
4040 |
+
# @ backwpup
|
4041 |
+
#: ../inc/class-page-jobs.php:213
|
4042 |
+
#, php-format
|
4043 |
+
msgid "Cron: %s"
|
4044 |
+
msgstr "Cron: %s"
|
4045 |
+
|
4046 |
+
# @ backwpup
|
4047 |
+
#: ../inc/class-page-jobs.php:213
|
4048 |
+
#, php-format
|
4049 |
+
msgid "%1$s at %2$s by WP-Cron"
|
4050 |
+
msgstr "%1$s um %2$s mit WP-Cron"
|
4051 |
+
|
4052 |
+
# @ backwpup
|
4053 |
+
#: ../inc/class-page-jobs.php:218
|
4054 |
+
msgid "Inactive"
|
4055 |
+
msgstr "Inaktiv"
|
4056 |
+
|
4057 |
+
# @ backwpup
|
4058 |
+
#: ../inc/class-page-jobs.php:240
|
4059 |
+
#, php-format
|
4060 |
+
msgid "Runtime: %d seconds"
|
4061 |
+
msgstr "Ausführungszeit: %d Sekunden"
|
4062 |
+
|
4063 |
+
# @ backwpup
|
4064 |
+
#: ../inc/class-page-jobs.php:243
|
4065 |
+
msgid "not yet"
|
4066 |
+
msgstr "noch nicht"
|
4067 |
+
|
4068 |
+
# @ backwpup
|
4069 |
+
#: ../inc/class-page-jobs.php:247
|
4070 |
+
msgid "Download last backup"
|
4071 |
+
msgstr "Letztes Backup herunterladen"
|
4072 |
+
|
4073 |
+
# @ backwpup
|
4074 |
+
#: ../inc/class-page-jobs.php:252
|
4075 |
+
msgid "Log"
|
4076 |
+
msgstr "Protokoll"
|
4077 |
+
|
4078 |
+
# @ backwpup
|
4079 |
+
#: ../inc/class-page-jobs.php:295
|
4080 |
+
msgid "Copy of"
|
4081 |
+
msgstr "Kopie von"
|
4082 |
+
|
4083 |
+
# @ backwpup
|
4084 |
+
#: ../inc/class-page-jobs.php:367
|
4085 |
+
#, php-format
|
4086 |
+
msgid "Job “%s” has started, but not responded for 10 seconds."
|
4087 |
+
msgstr "Auftrag „%s“ wurde gestartet, hat jedoch seit 10 Sekunden nicht geantwortet."
|
4088 |
+
|
4089 |
+
# @ backwpup
|
4090 |
+
#: ../inc/class-page-jobs.php:372
|
4091 |
+
#, php-format
|
4092 |
+
msgid "Job \"%s\" started."
|
4093 |
+
msgstr "Auftrag \"%s\" wurde gestartet."
|
4094 |
+
|
4095 |
+
# @ backwpup
|
4096 |
+
#: ../inc/class-page-jobs.php:497
|
4097 |
+
#, php-format
|
4098 |
+
msgid "%s Jobs"
|
4099 |
+
msgstr "%s Aufträge"
|
4100 |
+
|
4101 |
+
# @ backwpup
|
4102 |
+
#: ../inc/class-page-jobs.php:517
|
4103 |
+
#, php-format
|
4104 |
+
msgid "Job currently running: %s"
|
4105 |
+
msgstr "Aktueller Auftrag wird bearbeitet: %s"
|
4106 |
+
|
4107 |
+
# @ backwpup
|
4108 |
+
#: ../inc/class-page-jobs.php:518
|
4109 |
+
msgid "Warnings:"
|
4110 |
+
msgstr "Warnungen:"
|
4111 |
+
|
4112 |
+
# @ backwpup
|
4113 |
+
#: ../inc/class-page-jobs.php:519
|
4114 |
+
msgid "Errors:"
|
4115 |
+
msgstr "Fehler:"
|
4116 |
+
|
4117 |
+
# @ backwpup
|
4118 |
+
#: ../inc/class-page-jobs.php:520
|
4119 |
+
msgid "Log of running job"
|
4120 |
+
msgstr "Protokoll des laufenden Auftrags"
|
4121 |
+
|
4122 |
+
# @ backwpup
|
4123 |
+
#: ../inc/class-page-jobs.php:520
|
4124 |
+
msgid "Display working log"
|
4125 |
+
msgstr "Zeige Auftragslog"
|
4126 |
+
|
4127 |
+
# @ backwpup
|
4128 |
+
#: ../inc/class-page-jobs.php:521
|
4129 |
+
#: ../inc/class-page-backwpup.php:349
|
4130 |
+
msgid "Abort"
|
4131 |
+
msgstr "Abbrechen"
|
4132 |
+
|
4133 |
+
# @ backwpup
|
4134 |
+
#: ../inc/class-page-jobs.php:522
|
4135 |
+
msgid "Close working screen"
|
4136 |
+
msgstr "Arbeitsfläche schließen"
|
4137 |
+
|
4138 |
+
# @ backwpup
|
4139 |
+
#: ../inc/class-page-jobs.php:522
|
4140 |
+
msgid "close"
|
4141 |
+
msgstr "schließen"
|
4142 |
+
|
4143 |
+
# @ backwpup
|
4144 |
+
#: ../inc/class-page-jobs.php:672
|
4145 |
+
msgid "Job completed"
|
4146 |
+
msgstr "Auftrag vollständig"
|
4147 |
+
|
4148 |
+
# @ backwpup
|
4149 |
+
#: ../inc/class-page-jobs.php:676
|
4150 |
+
#, php-format
|
4151 |
+
msgid "Job has done with warnings in %s seconds. Please resolve them for correct execution."
|
4152 |
+
msgstr "Auftrag wurde mit Warnungen in %s Sekunden erledigt. Bitte beheben sie diese, für eine korrekte Ausführung."
|
4153 |
+
|
4154 |
+
# @ backwpup
|
4155 |
+
#: ../inc/class-page-backwpup.php:67
|
4156 |
+
#, php-format
|
4157 |
+
msgid "%s Dashboard"
|
4158 |
+
msgstr "%s Dashboard"
|
4159 |
+
|
4160 |
+
# @ backwpup
|
4161 |
+
#: ../inc/class-page-backwpup.php:74
|
4162 |
+
#: ../inc/class-page-backwpup.php:83
|
4163 |
+
msgctxt "Dashboard heading"
|
4164 |
+
msgid "Planning backups"
|
4165 |
+
msgstr "Backups planen"
|
4166 |
+
|
4167 |
+
# @ backwpup
|
4168 |
+
#: ../inc/class-page-backwpup.php:75
|
4169 |
+
#: ../inc/class-page-backwpup.php:84
|
4170 |
+
msgid "Use your backup archives to save your entire WordPress installation including <code>/wp-content/</code>. Push them to an external storage service if you don’t want to save the backups on the same server."
|
4171 |
+
msgstr "Benutze deine Backup-Archive, um deine gesamte WordPress-Installation zu sichern, einschließlich <code>/wp-content/</code>. Lade sie zu einem externen Dienst hoch, wenn du deine Backups nicht auf demselben Server speichern möchtest."
|
4172 |
+
|
4173 |
+
# @ backwpup
|
4174 |
+
#: ../inc/class-page-backwpup.php:76
|
4175 |
+
#: ../inc/class-page-backwpup.php:85
|
4176 |
+
msgctxt "Dashboard heading"
|
4177 |
+
msgid "Restoring backups"
|
4178 |
+
msgstr "Backups wiederherstellen"
|
4179 |
+
|
4180 |
+
# @ backwpup
|
4181 |
+
#: ../inc/class-page-backwpup.php:77
|
4182 |
+
#: ../inc/class-page-backwpup.php:86
|
4183 |
+
msgid "With a single backup archive you are able to restore an installation. Use a tool like phpMyAdmin or a plugin like <a href=\"http://wordpress.org/plugins/adminer/\" target=\"_blank\">Adminer</a> to restore your database backup files."
|
4184 |
+
msgstr "Mit einem einzigen Backup-Archiv kannst du deine Installation wiederherstellen. Benutze ein serverseitiges Tool wie phpMyAdmin, oder ein Plugin wie <a href=\"http://wordpress.org/plugins/adminer/\" target=\"_blank\">Adminer</a>, um deine Datenbanksicherung wiederherzustellen."
|
4185 |
+
|
4186 |
+
# @ backwpup
|
4187 |
+
#: ../inc/class-page-backwpup.php:78
|
4188 |
+
#: ../inc/class-page-backwpup.php:87
|
4189 |
+
msgctxt "Dashboard heading"
|
4190 |
+
msgid "Ready to set up a backup job?"
|
4191 |
+
msgstr "Bereit, einen Backup-Auftrag zu erstellen?"
|
4192 |
+
|
4193 |
+
# @ backwpup
|
4194 |
+
#: ../inc/class-page-backwpup.php:79
|
4195 |
+
#, php-format
|
4196 |
+
msgid "Use one of the wizards to plan a backup, or use <a href=\"%s\">expert mode</a> for full control over all options."
|
4197 |
+
msgstr "Verwende einen der Assistenten, um dein Backup zu planen, oder den <a href=\"%s\">Expertenmodus</a> für die volle Übersicht über alle Optionen."
|
4198 |
+
|
4199 |
+
# @ backwpup
|
4200 |
+
#: ../inc/class-page-backwpup.php:79
|
4201 |
+
#: ../inc/class-page-backwpup.php:89
|
4202 |
+
msgid "<strong>Please note: You are solely responsible for the security of your data; the authors of this plugin are not.</strong>"
|
4203 |
+
msgstr "<strong>Bitte beachte: Für die Sicherheit deiner Daten bist du allein verantwortlich; die Autoren dieses Plugins sind es nicht.</strong>"
|
4204 |
+
|
4205 |
+
# @ backwpup
|
4206 |
+
#: ../inc/class-page-backwpup.php:84
|
4207 |
+
msgid "Use the short links in the <strong>First steps</strong> box to plan and schedule backup jobs."
|
4208 |
+
msgstr "Benutze die Schnellverweise in <strong>Erste Schritte</strong>, um einen Backup-Auftrag zu planen und zu terminieren."
|
4209 |
+
|
4210 |
+
# @ backwpup
|
4211 |
+
#: ../inc/class-page-backwpup.php:88
|
4212 |
+
#, php-format
|
4213 |
+
msgid "<a href=\"%s\">Add a new backup job</a> and plan what you want to save."
|
4214 |
+
msgstr "<a href=\"%s\">Erstelle einen Backup-Auftrag</a> und plane deine Sicherung."
|
4215 |
+
|
4216 |
+
# @ backwpup
|
4217 |
+
#: ../inc/class-page-backwpup.php:96
|
4218 |
+
msgid "First Steps"
|
4219 |
+
msgstr "Erste Schritte"
|
4220 |
+
|
4221 |
+
# @ backwpup
|
4222 |
+
#: ../inc/class-page-backwpup.php:100
|
4223 |
+
msgid "Test the installation"
|
4224 |
+
msgstr "Die Installation testen"
|
4225 |
+
|
4226 |
+
# @ backwpup
|
4227 |
+
#: ../inc/class-page-backwpup.php:101
|
4228 |
+
#: ../inc/class-page-backwpup.php:104
|
4229 |
+
msgid "Create a Job"
|
4230 |
+
msgstr "Auftrag erstellen"
|
4231 |
+
|
4232 |
+
# @ backwpup
|
4233 |
+
#: ../inc/class-page-backwpup.php:103
|
4234 |
+
msgid "Check the installation"
|
4235 |
+
msgstr "Überprüfe die Installation"
|
4236 |
+
|
4237 |
+
# @ backwpup
|
4238 |
+
#: ../inc/class-page-backwpup.php:106
|
4239 |
+
msgid "Run the created job"
|
4240 |
+
msgstr "Erstellten Auftrag starten"
|
4241 |
+
|
4242 |
+
# @ backwpup
|
4243 |
+
#: ../inc/class-page-backwpup.php:107
|
4244 |
+
msgid "Check the job log"
|
4245 |
+
msgstr "Logs des Auftrages prüfen"
|
4246 |
+
|
4247 |
+
# @ backwpup
|
4248 |
+
#: ../inc/class-page-backwpup.php:115
|
4249 |
+
msgid "One click backup"
|
4250 |
+
msgstr "Ein-Klick-Backup"
|
4251 |
+
|
4252 |
+
# @ backwpup
|
4253 |
+
#: ../inc/class-page-backwpup.php:117
|
4254 |
+
msgid "Generate a database backup of WordPress tables and download it right away!"
|
4255 |
+
msgstr "Generieren Sie ein Datenbank-Backup der WordPress-Tabellen und laden Sie es gleich herunter!"
|
4256 |
+
|
4257 |
+
# @ backwpup
|
4258 |
+
#: ../inc/class-page-backwpup.php:117
|
4259 |
+
msgid "Download database backup"
|
4260 |
+
msgstr "Datenbank-Backup herunterladen"
|
4261 |
+
|
4262 |
+
# @ backwpup
|
4263 |
+
#: ../inc/class-page-backwpup.php:123
|
4264 |
+
msgid "BackWPup News"
|
4265 |
+
msgstr "BackWPup Neuigkeiten"
|
4266 |
+
|
4267 |
+
# @ backwpup
|
4268 |
+
#: ../inc/class-page-backwpup.php:128
|
4269 |
+
msgctxt "BackWPup News RSS Feed URL"
|
4270 |
+
msgid "http://marketpress.com/news/plugins/backwpup/feed/"
|
4271 |
+
msgstr "http://marketpress.de/news/plugins/backwpup/feed/"
|
4272 |
+
|
4273 |
+
# @ backwpup
|
4274 |
+
#: ../inc/class-page-backwpup.php:133
|
4275 |
+
#, php-format
|
4276 |
+
msgid "<strong>RSS Error</strong>: %s"
|
4277 |
+
msgstr "<strong>RSS Fehler</strong>: %s"
|
4278 |
+
|
4279 |
+
# @ backwpup
|
4280 |
+
#: ../inc/class-page-backwpup.php:138
|
4281 |
+
msgid "An error has occurred, which probably means the feed is down. Try again later."
|
4282 |
+
msgstr "Ein Fehler ist aufgetreten, der wahrscheinlich bedeutet, das der Feed Offline ist. Versuchen Sie es später erneut."
|
4283 |
+
|
4284 |
+
# @ backwpup
|
4285 |
+
#: ../inc/class-page-backwpup.php:153
|
4286 |
+
msgid "Untitled"
|
4287 |
+
msgstr "Ohne Titel"
|
4288 |
+
|
4289 |
+
# @ backwpup
|
4290 |
+
#: ../inc/class-page-backwpup.php:216
|
4291 |
+
msgid "Start wizard"
|
4292 |
+
msgstr "Assistenten starten"
|
4293 |
+
|
4294 |
+
# @ backwpup
|
4295 |
+
#: ../inc/class-page-backwpup.php:232
|
4296 |
+
msgctxt "Pro teaser box"
|
4297 |
+
msgid "Thank you for using BackWPup!"
|
4298 |
+
msgstr "Danke, dass du BackWPup benutzt!"
|
4299 |
+
|
4300 |
+
# @ backwpup
|
4301 |
+
#: ../inc/class-page-backwpup.php:235
|
4302 |
+
msgctxt "Pro teaser box"
|
4303 |
+
msgid "Get access to:"
|
4304 |
+
msgstr "Erhalte Zugang zu:"
|
4305 |
+
|
4306 |
+
# @ backwpup
|
4307 |
+
#: ../inc/class-page-backwpup.php:237
|
4308 |
+
msgctxt "Pro teaser box"
|
4309 |
+
msgid "First-class <strong>dedicated support</strong> at MarketPress Helpdesk."
|
4310 |
+
msgstr "Erstklassigem <strong>persönlichen Support</strong> im Helpdesk bei MarketPress."
|
4311 |
+
|
4312 |
+
# @ backwpup
|
4313 |
+
#: ../inc/class-page-backwpup.php:238
|
4314 |
+
msgctxt "Pro teaser box"
|
4315 |
+
msgid "Differential backups to Google Drive and other cloud storage service."
|
4316 |
+
msgstr "Differenzielle Backups zu Google Drive anderen Cloud-Storage-Diensten."
|
4317 |
+
|
4318 |
+
# @ backwpup
|
4319 |
+
#: ../inc/class-page-backwpup.php:239
|
4320 |
+
msgctxt "Pro teaser box"
|
4321 |
+
msgid "Easy-peasy wizards to create and schedule backup jobs."
|
4322 |
+
msgstr "Kinderleichte Assistenten zum Erstellen und Planen von Backup-Aufträgen."
|
4323 |
+
|
4324 |
+
# @ backwpup
|
4325 |
+
#: ../inc/class-page-backwpup.php:240
|
4326 |
+
msgctxt "Pro teaser box, link text"
|
4327 |
+
msgid "And more…"
|
4328 |
+
msgstr "Und mehr…"
|
4329 |
+
|
4330 |
+
# @ backwpup
|
4331 |
+
#: ../inc/class-page-backwpup.php:242
|
4332 |
+
msgctxt "Pro teaser box, link title"
|
4333 |
+
msgid "Get BackWPup Pro now"
|
4334 |
+
msgstr "Wechsle jetzt zu BackWPup Pro"
|
4335 |
+
|
4336 |
+
# @ backwpup
|
4337 |
+
#: ../inc/class-page-backwpup.php:242
|
4338 |
+
msgctxt "Pro teaser box, link text"
|
4339 |
+
msgid "Get BackWPup Pro now"
|
4340 |
+
msgstr "Wechsle jetzt zu BackWPup Pro"
|
4341 |
+
|
4342 |
+
# @ backwpup
|
4343 |
+
#: ../inc/class-page-backwpup.php:260
|
4344 |
+
msgid "Last logs"
|
4345 |
+
msgstr "Letzte Logs"
|
4346 |
+
|
4347 |
+
# @ backwpup
|
4348 |
+
#: ../inc/class-page-backwpup.php:262
|
4349 |
+
msgid "Result"
|
4350 |
+
msgstr "Ergebnis"
|
4351 |
+
|
4352 |
+
# @ backwpup
|
4353 |
+
#: ../inc/class-page-backwpup.php:292
|
4354 |
+
#, php-format
|
4355 |
+
msgid "%d ERROR"
|
4356 |
+
msgid_plural "%d ERRORS"
|
4357 |
+
msgstr[0] "%d FEHLER"
|
4358 |
+
msgstr[1] "%d FEHLER"
|
4359 |
+
|
4360 |
+
# @ backwpup
|
4361 |
+
#: ../inc/class-page-backwpup.php:294
|
4362 |
+
#, php-format
|
4363 |
+
msgid "%d WARNING"
|
4364 |
+
msgid_plural "%d WARNINGS"
|
4365 |
+
msgstr[0] "%d WARNUNG"
|
4366 |
+
msgstr[1] "%d WARNUNGEN"
|
4367 |
+
|
4368 |
+
# @ backwpup
|
4369 |
+
#: ../inc/class-page-backwpup.php:296
|
4370 |
+
msgid "OK"
|
4371 |
+
msgstr "OK"
|
4372 |
+
|
4373 |
+
# @ backwpup
|
4374 |
+
#: ../inc/class-page-backwpup.php:320
|
4375 |
+
msgid "Next scheduled jobs"
|
4376 |
+
msgstr "Nächste geplante Aufträge"
|
4377 |
+
|
4378 |
+
# @ backwpup
|
4379 |
+
#: ../inc/class-page-backwpup.php:347
|
4380 |
+
#, php-format
|
4381 |
+
msgid "working since %d seconds"
|
4382 |
+
msgstr "in Arbeit seit %d Sek."
|
4383 |
+
|
4384 |
+
# @ backwpup
|
4385 |
+
#: ../inc/class-page-backwpup.php:365
|
4386 |
+
msgid "Edit Job"
|
4387 |
+
msgstr "Auftrag bearbeiten"
|
4388 |
+
|
4389 |
+
# @ backwpup
|
4390 |
+
#: ../inc/class-destination-email.php:38
|
4391 |
+
#: ../inc/class-destination-email.php:41
|
4392 |
+
msgid "Email address"
|
4393 |
+
msgstr "E-Mail-Adresse"
|
4394 |
+
|
4395 |
+
# @ backwpup
|
4396 |
+
#: ../inc/class-destination-email.php:48
|
4397 |
+
#: ../inc/class-destination-email.php:50
|
4398 |
+
msgid "Send test email"
|
4399 |
+
msgstr "Test-E-Mail senden"
|
4400 |
+
|
4401 |
+
# @ backwpup
|
4402 |
+
#: ../inc/class-destination-email.php:55
|
4403 |
+
msgid "Send email settings"
|
4404 |
+
msgstr "Absende-Einstellungen für E-Mails"
|
4405 |
+
|
4406 |
+
# @ backwpup
|
4407 |
+
#: ../inc/class-destination-email.php:58
|
4408 |
+
msgid "Maximum file size"
|
4409 |
+
msgstr "Maximale Dateigröße"
|
4410 |
+
|
4411 |
+
# @ backwpup
|
4412 |
+
#: ../inc/class-destination-email.php:59
|
4413 |
+
msgid "MB"
|
4414 |
+
msgstr "MB"
|
4415 |
+
|
4416 |
+
# @ backwpup
|
4417 |
+
#: ../inc/class-destination-email.php:63
|
4418 |
+
msgid "Sender email address"
|
4419 |
+
msgstr "E-Mail-Adresse des Absenders"
|
4420 |
+
|
4421 |
+
# @ backwpup
|
4422 |
+
#: ../inc/class-destination-email.php:70
|
4423 |
+
msgid "Sender name"
|
4424 |
+
msgstr "Absender NAme"
|
4425 |
+
|
4426 |
+
# @ backwpup
|
4427 |
+
#: ../inc/class-destination-email.php:77
|
4428 |
+
msgid "Sending method"
|
4429 |
+
msgstr "E-Mail-Versandmethode"
|
4430 |
+
|
4431 |
+
# @ backwpup
|
4432 |
+
#: ../inc/class-destination-email.php:81
|
4433 |
+
msgid "Use site settings"
|
4434 |
+
msgstr "Verwende Blogeinstellungen"
|
4435 |
+
|
4436 |
+
# @ backwpup
|
4437 |
+
#: ../inc/class-destination-email.php:82
|
4438 |
+
msgid "PHP: mail()"
|
4439 |
+
msgstr "PHP: mail()"
|
4440 |
+
|
4441 |
+
# @ backwpup
|
4442 |
+
#: ../inc/class-destination-email.php:83
|
4443 |
+
msgid "Sendmail"
|
4444 |
+
msgstr "Sendmail"
|
4445 |
+
|
4446 |
+
# @ backwpup
|
4447 |
+
#: ../inc/class-destination-email.php:84
|
4448 |
+
msgid "SMTP"
|
4449 |
+
msgstr "SMTP"
|
4450 |
+
|
4451 |
+
# @ backwpup
|
4452 |
+
#: ../inc/class-destination-email.php:91
|
4453 |
+
msgid "Sendmail path"
|
4454 |
+
msgstr "Sendmail Pfad"
|
4455 |
+
|
4456 |
+
# @ backwpup
|
4457 |
+
#: ../inc/class-destination-email.php:99
|
4458 |
+
msgid "SMTP host name"
|
4459 |
+
msgstr "SMTP Hostname"
|
4460 |
+
|
4461 |
+
# @ backwpup
|
4462 |
+
#: ../inc/class-destination-email.php:110
|
4463 |
+
msgid "SMTP secure connection"
|
4464 |
+
msgstr "SMTP Sichere Verbindung"
|
4465 |
+
|
4466 |
+
# @ backwpup
|
4467 |
+
#: ../inc/class-destination-email.php:115
|
4468 |
+
msgid "SSL"
|
4469 |
+
msgstr "SSL"
|
4470 |
+
|
4471 |
+
# @ backwpup
|
4472 |
+
#: ../inc/class-destination-email.php:116
|
4473 |
+
msgid "TLS"
|
4474 |
+
msgstr "TLS"
|
4475 |
+
|
4476 |
+
# @ backwpup
|
4477 |
+
#: ../inc/class-destination-email.php:121
|
4478 |
+
msgid "SMTP username"
|
4479 |
+
msgstr "SMTP Benutzername"
|
4480 |
+
|
4481 |
+
# @ backwpup
|
4482 |
+
#: ../inc/class-destination-email.php:128
|
4483 |
+
msgid "SMTP password"
|
4484 |
+
msgstr "SMTP Passwort"
|
4485 |
+
|
4486 |
+
# @ backwpup
|
4487 |
+
#: ../inc/class-destination-email.php:204
|
4488 |
+
#, php-format
|
4489 |
+
msgid "%d. Try to send backup with email …"
|
4490 |
+
msgstr "%d. Versuche, Backup als E-Mail zu senden …"
|
4491 |
+
|
4492 |
+
# @ backwpup
|
4493 |
+
#: ../inc/class-destination-email.php:209
|
4494 |
+
msgid "Backup archive too big to be sent by email!"
|
4495 |
+
msgstr "Das Backup Archiv ist zu groß zum Senden via E-Mail!"
|
4496 |
+
|
4497 |
+
# @ backwpup
|
4498 |
+
#: ../inc/class-destination-email.php:216
|
4499 |
+
#, php-format
|
4500 |
+
msgid "Sending email to %s…"
|
4501 |
+
msgstr "Sende E-Mail an %s…"
|
4502 |
+
|
4503 |
+
# @ backwpup
|
4504 |
+
#: ../inc/class-destination-email.php:292
|
4505 |
+
#, php-format
|
4506 |
+
msgid "BackWPup archive from %1$s: %2$s"
|
4507 |
+
msgstr "BackWPup-Archiv vom %1$s: %2$s"
|
4508 |
+
|
4509 |
+
# @ backwpup
|
4510 |
+
#: ../inc/class-destination-email.php:295
|
4511 |
+
#, php-format
|
4512 |
+
msgid "Backup archive: %s"
|
4513 |
+
msgstr "Backup Archiv: %s"
|
4514 |
+
|
4515 |
+
# @ backwpup
|
4516 |
+
#: ../inc/class-destination-email.php:309
|
4517 |
+
#: ../inc/class-destination-email.php:431
|
4518 |
+
msgid "Error while sending email!"
|
4519 |
+
msgstr "Fehler beim Senden der E-Mail"
|
4520 |
+
|
4521 |
+
# @ backwpup
|
4522 |
+
#: ../inc/class-destination-email.php:315
|
4523 |
+
#: ../inc/class-destination-email.php:433
|
4524 |
+
msgid "Email sent."
|
4525 |
+
msgstr "E-Mail gesendet."
|
4526 |
+
|
4527 |
+
# @ backwpup
|
4528 |
+
#: ../inc/class-destination-email.php:415
|
4529 |
+
msgid "BackWPup archive sending TEST Message"
|
4530 |
+
msgstr "BackWPup Archiv TEST Nachricht senden"
|
4531 |
+
|
4532 |
+
# @ backwpup
|
4533 |
+
#: ../inc/class-destination-email.php:418
|
4534 |
+
msgid "If this message reaches your inbox, sending backup archives via email should work for you."
|
4535 |
+
msgstr "Wenn dich diese Nachricht erreicht, funktioniert das Senden der Sicherungsarchive per E-Mail."
|
4536 |
+
|
4537 |
+
# @ backwpup
|
4538 |
+
#: ../inc/pro/class-settings-apikeys.php:42
|
4539 |
+
msgid "Hash key"
|
4540 |
+
msgstr "Hash key"
|
4541 |
+
|
4542 |
+
# @ backwpup
|
4543 |
+
#: ../inc/pro/class-settings-apikeys.php:43
|
4544 |
+
msgid "Hash Key for BackWPup. It will be used to have hashes in folder and file names. It must at least 6 chars long."
|
4545 |
+
msgstr "Hash Key für BackWPup. Es wird für Hashes in Ordner- und Dateinamen verwendet und muss mindestens 6 Zeichen lang sein."
|
4546 |
+
|
4547 |
+
# @ backwpup
|
4548 |
+
#: ../inc/pro/class-settings-apikeys.php:46
|
4549 |
+
msgid "Hash key:"
|
4550 |
+
msgstr "Hash key:"
|
4551 |
+
|
4552 |
+
# @ backwpup
|
4553 |
+
#: ../inc/pro/class-settings-apikeys.php:59
|
4554 |
+
msgid "Dropbox API Keys"
|
4555 |
+
msgstr "Dropbox API Keys"
|
4556 |
+
|
4557 |
+
# @ backwpup
|
4558 |
+
#: ../inc/pro/class-settings-apikeys.php:60
|
4559 |
+
msgid "If you want to set your own Dropbox API Keys, you can do it here. Leave empty for default."
|
4560 |
+
msgstr "Wenn du deinen eigenen Dropbox API Schlüssel setzen willst, kannst du es hier tun. Lass es leer für Standard-Einstellungen."
|
4561 |
+
|
4562 |
+
# @ backwpup
|
4563 |
+
#: ../inc/pro/class-settings-apikeys.php:63
|
4564 |
+
msgid "Full Dropbox App key:"
|
4565 |
+
msgstr "Voller Dropbox app Key"
|
4566 |
+
|
4567 |
+
# @ backwpup
|
4568 |
+
#: ../inc/pro/class-settings-apikeys.php:71
|
4569 |
+
msgid "Full Dropbox App secret:"
|
4570 |
+
msgstr "Voller Dropbox App secret:"
|
4571 |
+
|
4572 |
+
# @ backwpup
|
4573 |
+
#: ../inc/pro/class-settings-apikeys.php:79
|
4574 |
+
msgid "Sandbox App key:"
|
4575 |
+
msgstr "Sandbox App key:"
|
4576 |
+
|
4577 |
+
# @ backwpup
|
4578 |
+
#: ../inc/pro/class-settings-apikeys.php:87
|
4579 |
+
msgid "Sandbox App secret:"
|
4580 |
+
msgstr "Sandbox App secret:"
|
4581 |
+
|
4582 |
+
# @ backwpup
|
4583 |
+
#: ../inc/pro/class-settings-apikeys.php:100
|
4584 |
+
msgid "SugarSync API Keys"
|
4585 |
+
msgstr "SugarSync API Keys"
|
4586 |
+
|
4587 |
+
# @ backwpup
|
4588 |
+
#: ../inc/pro/class-settings-apikeys.php:101
|
4589 |
+
msgid "If you want to set your own SugarSync API keys you can do that here. Leave empty for default."
|
4590 |
+
msgstr "Wenn du deinen eigenen SugarSync API Schlüssel setzen willst, kannst du es hier tun. Lass es leer für Standard-Einstellungen."
|
4591 |
+
|
4592 |
+
# @ backwpup
|
4593 |
+
#: ../inc/pro/class-settings-apikeys.php:104
|
4594 |
+
msgid "Access Key ID:"
|
4595 |
+
msgstr "Access Key ID (Zugangsschlüssel-ID):"
|
4596 |
+
|
4597 |
+
# @ backwpup
|
4598 |
+
#: ../inc/pro/class-settings-apikeys.php:112
|
4599 |
+
msgid "Private Access Key:"
|
4600 |
+
msgstr "Private Access Key:"
|
4601 |
+
|
4602 |
+
# @ backwpup
|
4603 |
+
#: ../inc/pro/class-settings-apikeys.php:119
|
4604 |
+
msgid "App ID:"
|
4605 |
+
msgstr "App ID:"
|
4606 |
+
|
4607 |
+
# @ backwpup
|
4608 |
+
#: ../inc/pro/class-settings-apikeys.php:132
|
4609 |
+
msgid "Google API Keys"
|
4610 |
+
msgstr "Google API Keys"
|
4611 |
+
|
4612 |
+
# @ backwpup
|
4613 |
+
#: ../inc/pro/class-settings-apikeys.php:136
|
4614 |
+
msgid "Client ID:"
|
4615 |
+
msgstr "Client ID:"
|
4616 |
+
|
4617 |
+
# @ backwpup
|
4618 |
+
#: ../inc/pro/class-settings-apikeys.php:144
|
4619 |
+
msgid "Client secret:"
|
4620 |
+
msgstr "Client secret:"
|
4621 |
+
|
4622 |
+
# @ backwpup
|
4623 |
+
#: ../inc/pro/class-settings-apikeys.php:151
|
4624 |
+
msgid "Redirect URIs:"
|
4625 |
+
msgstr "Redirect URIs:"
|
4626 |
+
|
4627 |
+
# @ backwpup
|
4628 |
+
#: ../inc/pro/class-settings-apikeys.php:155
|
4629 |
+
msgid "Add this URI in a new line to the field."
|
4630 |
+
msgstr "Füge diese URI in einer neuen Zeile zum Feld hinzu."
|
4631 |
+
|
4632 |
+
# @ backwpup
|
4633 |
+
#: ../inc/pro/class-destination-folder.php:18
|
4634 |
+
msgid "Absolute path to folder for backup files:"
|
4635 |
+
msgstr "Absoluter Ordner-Pfad für Backup-Dateien:"
|
4636 |
+
|
4637 |
+
# @ backwpup
|
4638 |
+
#: ../inc/pro/class-destination-folder.php:72
|
4639 |
+
#, php-format
|
4640 |
+
msgid "%d. Try to sync files to folder …"
|
4641 |
+
msgstr "%d. Versuche Dateien mit Ordner zu synchronisieren …"
|
4642 |
+
|
4643 |
+
# @ backwpup
|
4644 |
+
#: ../inc/pro/class-destination-folder.php:76
|
4645 |
+
msgid "Retrieving file list from folder"
|
4646 |
+
msgstr "Ruft Datei-Liste vom Ordner ab"
|
4647 |
+
|
4648 |
+
# @ backwpup
|
4649 |
+
#: ../inc/pro/class-destination-folder.php:82
|
4650 |
+
msgid "Copy changed files to folder"
|
4651 |
+
msgstr "Kopiere geänderte Dateien in den Ordner"
|
4652 |
+
|
4653 |
+
# @ backwpup
|
4654 |
+
#: ../inc/pro/class-destination-folder.php:95
|
4655 |
+
#, php-format
|
4656 |
+
msgid "File %s copied"
|
4657 |
+
msgstr "Datei %s kopiert"
|
4658 |
+
|
4659 |
+
# @ backwpup
|
4660 |
+
#: ../inc/pro/class-destination-folder.php:108
|
4661 |
+
msgid "Delete not existing files from folder"
|
4662 |
+
msgstr "Lösche nicht existierende Dateien aus dem Ordner"
|
4663 |
+
|
4664 |
+
# @ backwpup
|
4665 |
+
#: ../inc/pro/class-destination-folder.php:116
|
4666 |
+
#, php-format
|
4667 |
+
msgid "Extra file %s copied"
|
4668 |
+
msgstr "Extra Datei %s kopiert"
|
4669 |
+
|
4670 |
+
# @ backwpup
|
4671 |
+
#: ../inc/pro/class-destination-folder.php:129
|
4672 |
+
#, php-format
|
4673 |
+
msgid "File %s deleted from folder"
|
4674 |
+
msgstr "File %s aus Ordner gelöscht"
|
4675 |
+
|
4676 |
+
# @ backwpup
|
4677 |
+
#: ../inc/pro/class-destination-folder.php:186
|
4678 |
+
#, php-format
|
4679 |
+
msgid "Empty folder %s deleted"
|
4680 |
+
msgstr "Leerer Ordner %s gelöscht"
|
4681 |
+
|
4682 |
+
# @ backwpup
|
4683 |
+
#: ../inc/pro/class-wizard-jobimport.php:14
|
4684 |
+
msgid "XML job import"
|
4685 |
+
msgstr "XML Auftrag Import"
|
4686 |
+
|
4687 |
+
# @ backwpup
|
4688 |
+
#: ../inc/pro/class-wizard-jobimport.php:15
|
4689 |
+
msgid "Wizard for importing BackWPup jobs from an XML file"
|
4690 |
+
msgstr "Assistent zum Importieren von BackWPup Aufträgen aus einer XML Datei"
|
4691 |
+
|
4692 |
+
# @ backwpup
|
4693 |
+
#: ../inc/pro/class-wizard-jobimport.php:32
|
4694 |
+
#: ../inc/pro/class-wizard-jobimport.php:93
|
4695 |
+
msgid "Import"
|
4696 |
+
msgstr "Import"
|
4697 |
+
|
4698 |
+
# @ backwpup
|
4699 |
+
#: ../inc/pro/class-wizard-jobimport.php:41
|
4700 |
+
msgid "Import File"
|
4701 |
+
msgstr "Import-Datei"
|
4702 |
+
|
4703 |
+
# @ backwpup
|
4704 |
+
#: ../inc/pro/class-wizard-jobimport.php:41
|
4705 |
+
msgid "Upload XML job file for import"
|
4706 |
+
msgstr "XML Arbeitsauftrag Datei hochladen zum Importieren"
|
4707 |
+
|
4708 |
+
# @ backwpup
|
4709 |
+
#: ../inc/pro/class-wizard-jobimport.php:42
|
4710 |
+
msgid "Select items to import"
|
4711 |
+
msgstr "Wähle ein Item für den Import"
|
4712 |
+
|
4713 |
+
# @ backwpup
|
4714 |
+
#: ../inc/pro/class-wizard-jobimport.php:42
|
4715 |
+
msgid "Select which job should be imported or overwritten."
|
4716 |
+
msgstr "Wähle einen Auftrag, der importiert oder überschrieben werden soll."
|
4717 |
+
|
4718 |
+
# @ backwpup
|
4719 |
+
#: ../inc/pro/class-wizard-jobimport.php:62
|
4720 |
+
msgid "Please upload your BackWPup job XML export file and we’ll import the jobs into BackWPup."
|
4721 |
+
msgstr "Bitte lade deine BackWPup-Auftrags-XML-Export-Datei hoch und wir importieren sie in BackWPup."
|
4722 |
+
|
4723 |
+
# @ backwpup
|
4724 |
+
#: ../inc/pro/class-wizard-jobimport.php:64
|
4725 |
+
msgid "Choose a file from your computer:"
|
4726 |
+
msgstr "Wähle eine Datei von deinem Computer:"
|
4727 |
+
|
4728 |
+
# @ backwpup
|
4729 |
+
#: ../inc/pro/class-wizard-jobimport.php:64
|
4730 |
+
#, php-format
|
4731 |
+
msgid "Maximum size: %s"
|
4732 |
+
msgstr "Maximale Größe: %s"
|
4733 |
+
|
4734 |
+
# @ backwpup
|
4735 |
+
#: ../inc/pro/class-wizard-jobimport.php:86
|
4736 |
+
msgid "Import Jobs"
|
4737 |
+
msgstr "Importiere Aufträge"
|
4738 |
+
|
4739 |
+
# @ backwpup
|
4740 |
+
#: ../inc/pro/class-wizard-jobimport.php:89
|
4741 |
+
msgid "Import Type"
|
4742 |
+
msgstr "Import-Typ"
|
4743 |
+
|
4744 |
+
# @ backwpup
|
4745 |
+
#: ../inc/pro/class-wizard-jobimport.php:89
|
4746 |
+
msgid "No Import"
|
4747 |
+
msgstr "Kein Import"
|
4748 |
+
|
4749 |
+
# @ backwpup
|
4750 |
+
#: ../inc/pro/class-wizard-jobimport.php:91
|
4751 |
+
msgid "Overwrite"
|
4752 |
+
msgstr "Überschreiben"
|
4753 |
+
|
4754 |
+
# @ backwpup
|
4755 |
+
#: ../inc/pro/class-wizard-jobimport.php:91
|
4756 |
+
msgid "Append"
|
4757 |
+
msgstr "Anhängen"
|
4758 |
+
|
4759 |
+
# @ backwpup
|
4760 |
+
#: ../inc/pro/class-wizard-jobimport.php:105
|
4761 |
+
msgid "Import Config"
|
4762 |
+
msgstr "Konfiguration importieren"
|
4763 |
+
|
4764 |
+
# @ backwpup
|
4765 |
+
#: ../inc/pro/class-wizard-jobimport.php:108
|
4766 |
+
msgid "Import BackWPup configuration"
|
4767 |
+
msgstr "Importiere BackWPup Konfiguration"
|
4768 |
+
|
4769 |
+
# @ backwpup
|
4770 |
+
#: ../inc/pro/class-wizard-jobimport.php:129
|
4771 |
+
msgid "File is empty. Please upload something more substantial. This error could also caused by uploads being disabled in your php.ini or by post_max_size being defined as smaller than upload_max_filesize in php.ini."
|
4772 |
+
msgstr "Datei ist leer. Bitte lade etwas mit Substanz hoch. Dieser Fehler kann begründet sein weil uploads in der php.ini oder durch post_max_size kleiner definiert sind als upload_max_filesize in php.ini."
|
4773 |
+
|
4774 |
+
# @ backwpup
|
4775 |
+
#: ../inc/pro/class-wizard-jobimport.php:144
|
4776 |
+
#, php-format
|
4777 |
+
msgid "The export file could not be found at <code>%s</code>. This is likely due to an issue with permissions."
|
4778 |
+
msgstr "Die Export-Datei konnte nicht gefunden werden <code>%s</code>. Das liegt möglicherweise an Problemen mit der Berechtigung."
|
4779 |
+
|
4780 |
+
# @ backwpup
|
4781 |
+
#: ../inc/pro/class-wizard-jobimport.php:151
|
4782 |
+
msgid "Sorry, there has been a phrase error."
|
4783 |
+
msgstr "Sorry, es gab ein Problem mit dem Begriff."
|
4784 |
+
|
4785 |
+
# @ backwpup
|
4786 |
+
#: ../inc/pro/class-wizard-jobimport.php:158
|
4787 |
+
#, php-format
|
4788 |
+
msgid "This Export file (version %s) may not be supported by this version of the importer."
|
4789 |
+
msgstr "Die Export Datei (version %s) wird wahrscheinlich nicht von dieser Version des Importers unterstützt"
|
4790 |
+
|
4791 |
+
# @ backwpup
|
4792 |
+
#: ../inc/pro/class-wizard-jobimport.php:164
|
4793 |
+
msgid "This is not a BackWPup XML file"
|
4794 |
+
msgstr "Das ist keine BackWPup XML Datei"
|
4795 |
+
|
4796 |
+
# @ backwpup
|
4797 |
+
#: ../inc/pro/class-wizard-jobimport.php:225
|
4798 |
+
#, php-format
|
4799 |
+
msgid "Job %1$s with id %2$d imported"
|
4800 |
+
msgstr "Job %1$s mit ID %2$d wurde importiert"
|
4801 |
+
|
4802 |
+
# @ backwpup
|
4803 |
+
#: ../inc/pro/class-wizard-jobimport.php:233
|
4804 |
+
msgid "BackWPup config imported"
|
4805 |
+
msgstr "BackWPup Konfiguration wurde importiert"
|
4806 |
+
|
4807 |
+
# @ backwpup
|
4808 |
+
#: ../inc/pro/class-wizard-systemtest.php:14
|
4809 |
+
msgid "System Test"
|
4810 |
+
msgstr "System Test"
|
4811 |
+
|
4812 |
+
# @ backwpup
|
4813 |
+
#: ../inc/pro/class-wizard-systemtest.php:15
|
4814 |
+
msgid "Wizard to test if BackWPup can work properly"
|
4815 |
+
msgstr "Dieser Assistent testet, ob BackWPup problemlos arbeiten kann."
|
4816 |
+
|
4817 |
+
# @ backwpup
|
4818 |
+
#: ../inc/pro/class-wizard-systemtest.php:32
|
4819 |
+
msgid "Run tests"
|
4820 |
+
msgstr "Starte die Tests"
|
4821 |
+
|
4822 |
+
# @ backwpup
|
4823 |
+
#: ../inc/pro/class-wizard-systemtest.php:41
|
4824 |
+
msgid "Environment"
|
4825 |
+
msgstr "Voraussetzungen"
|
4826 |
+
|
4827 |
+
# @ backwpup
|
4828 |
+
#: ../inc/pro/class-wizard-systemtest.php:41
|
4829 |
+
msgid "System Environment"
|
4830 |
+
msgstr "System Voraussetzungen"
|
4831 |
+
|
4832 |
+
# @ backwpup
|
4833 |
+
#: ../inc/pro/class-wizard-systemtest.php:54
|
4834 |
+
msgid "Test if BackWPup can work without problems."
|
4835 |
+
msgstr "Teste, ob BackWPup problemlos funktioniert."
|
4836 |
+
|
4837 |
+
# @ backwpup
|
4838 |
+
#: ../inc/pro/class-wizard-systemtest.php:86
|
4839 |
+
#, php-format
|
4840 |
+
msgid "You must run WordPress version 3.4 or higher to use this plugin. You are using version %s now."
|
4841 |
+
msgstr "Um dieses Plugin nutzen zu können, benötigst du mindestens WordPress 3.4, du verwendest derzeit die Version %s."
|
4842 |
+
|
4843 |
+
# @ backwpup
|
4844 |
+
#: ../inc/pro/class-wizard-systemtest.php:91
|
4845 |
+
#, php-format
|
4846 |
+
msgid "You must run PHP version 5.2.6 or higher to use this plugin. You are using version %s now."
|
4847 |
+
msgstr "Es wird die PHP Version 5.2.6 oder höher benötigt um dieses Plugin nutzen zu können. Du benutzt Version %s."
|
4848 |
+
|
4849 |
+
# @ backwpup
|
4850 |
+
#: ../inc/pro/class-wizard-systemtest.php:95
|
4851 |
+
#, php-format
|
4852 |
+
msgid "We recommend to run a PHP version above 5.3.2 to get the full plugin functionality. You are using version %s now."
|
4853 |
+
msgstr "Wir empfehlen eine PHP Version von 5.3.2 oder höher um die volle Funktionalität des Plugins nutzen zu können. Du nutzt Version %s."
|
4854 |
+
|
4855 |
+
# @ backwpup
|
4856 |
+
#: ../inc/pro/class-wizard-systemtest.php:100
|
4857 |
+
#, php-format
|
4858 |
+
msgid "You must have the MySQLi extension installed and a MySQL server version of 5.0.7 or higher to use this plugin. You are using version %s now."
|
4859 |
+
msgstr "Um dieses Plugin nutzen zu können, muss die MySQLi Erweiterung und der MySQL Server der Version 5.0.7 oder höher vorhanden sein. Du nutzt Version %s."
|
4860 |
+
|
4861 |
+
# @ backwpup
|
4862 |
+
#: ../inc/pro/class-wizard-systemtest.php:105
|
4863 |
+
msgid "PHP cURL extension must be installed to use the full plugin functionality."
|
4864 |
+
msgstr "Die cURL-Erweiterung für PHP muss installiert sein, um das Plugin im Vollem Umfang zu nutzen."
|
4865 |
+
|
4866 |
+
# @ backwpup
|
4867 |
+
#: ../inc/pro/class-wizard-systemtest.php:110
|
4868 |
+
#, php-format
|
4869 |
+
msgctxt "%1 = extension name, %2 = file suffix"
|
4870 |
+
msgid "We recommend to install the %1$s extension to generate %2$s archives."
|
4871 |
+
msgstr "Wir empfehlen die %1$s Erweiterung um %2$s Archive zu generieren."
|
4872 |
+
|
4873 |
+
# @ backwpup
|
4874 |
+
#: ../inc/pro/class-wizard-systemtest.php:133
|
4875 |
+
#, php-format
|
4876 |
+
msgctxt "Link to PHP manual"
|
4877 |
+
msgid "Please disable the deprecated <a href=\"%s\">PHP safe mode</a>."
|
4878 |
+
msgstr "Bitte schalte den veralteten <a href=\"%s\">PHP Safe-Mode</a>."
|
4879 |
+
|
4880 |
+
# @ backwpup
|
4881 |
+
#: ../inc/pro/class-wizard-systemtest.php:141
|
4882 |
+
msgid "We recommend to install the PHP FTP extension to use the FTP backup destination."
|
4883 |
+
msgstr "Wir empfehlen die PHP FTP Erweiterung zu installieren um FTP als Backup-Ziel nutzen zu können."
|
4884 |
+
|
4885 |
+
# @ backwpup
|
4886 |
+
#: ../inc/pro/class-wizard-systemtest.php:149
|
4887 |
+
#, php-format
|
4888 |
+
msgid "Temp folder %s is not read or writable. Please set proper writing permissions."
|
4889 |
+
msgstr "Temporärer Ordner %s ist weder lesbar noch beschreibbar. Bitte setze passende Berechtigungen."
|
4890 |
+
|
4891 |
+
# @ backwpup
|
4892 |
+
#: ../inc/pro/class-wizard-systemtest.php:154
|
4893 |
+
#, php-format
|
4894 |
+
msgid "Temp folder %s does not exist and cannot be created. Please create it and set proper writing permissions."
|
4895 |
+
msgstr "Temporärer Ordner %s existiert nicht oder kann nicht erstellt werden. Bitte erstelle ihn und setze passende Berechtigungen."
|
4896 |
+
|
4897 |
+
# @ backwpup
|
4898 |
+
#: ../inc/pro/class-wizard-systemtest.php:161
|
4899 |
+
#, php-format
|
4900 |
+
msgid "Log folder %s is not readable or writable. Please set proper writing permissions."
|
4901 |
+
msgstr "Log-Ordner %s ist weder lesbar noch beschreibbar. Bitte setze passende Berechtigungen."
|
4902 |
+
|
4903 |
+
# @ backwpup
|
4904 |
+
#: ../inc/pro/class-wizard-systemtest.php:165
|
4905 |
+
#, php-format
|
4906 |
+
msgid "Log folder %s does not exist and cannot be created. Please create it and set proper writing permissions."
|
4907 |
+
msgstr "Log-Ordner %s existiert nicht oder kann nicht erstellt werden. Bitte erstelle ihn und setze passende Berechtigungen."
|
4908 |
+
|
4909 |
+
# @ backwpup
|
4910 |
+
#: ../inc/pro/class-wizard-systemtest.php:171
|
4911 |
+
#, php-format
|
4912 |
+
msgid "The HTTP response test result is an error: \"%s\"."
|
4913 |
+
msgstr "Das Ergebnis des HTTP-Response-Tests ist ein Fehler: \"%s\"."
|
4914 |
+
|
4915 |
+
# @ backwpup
|
4916 |
+
#: ../inc/pro/class-wizard-systemtest.php:175
|
4917 |
+
#, php-format
|
4918 |
+
msgid "The HTTP response test result is a wrong HTTP status: %s. It should be status 200."
|
4919 |
+
msgstr "Der HTTP-Response-Test hat einen falschen HTTP-Status ergeben: %s. Es sollte Status 200 sein."
|
4920 |
+
|
4921 |
+
# @ backwpup
|
4922 |
+
#: ../inc/pro/class-wizard-systemtest.php:193
|
4923 |
+
msgid "WP-Cron seems to be broken. But it is needed to run scheduled jobs."
|
4924 |
+
msgstr "WP-Cron scheint beschädigt zu sein. Aber es wird benötigt um Aufträge planmäßig ausführen zu können."
|
4925 |
+
|
4926 |
+
# @ backwpup
|
4927 |
+
#: ../inc/pro/class-wizard-systemtest.php:198
|
4928 |
+
msgid "All tests passed without errors."
|
4929 |
+
msgstr "Alle Tests fehlerfrei bestanden."
|
4930 |
+
|
4931 |
+
# @ backwpup
|
4932 |
+
#: ../inc/pro/class-wizard-systemtest.php:201
|
4933 |
+
msgid "There is no error, but some warnings. BackWPup will work, but with limitations."
|
4934 |
+
msgstr "Keine Fehler, nur Warnungen. BackWPup funktioniert mit Einschränkungen."
|
4935 |
+
|
4936 |
+
# @ backwpup
|
4937 |
+
#: ../inc/pro/class-wizard-systemtest.php:204
|
4938 |
+
msgid "There are errors. Please correct them, or BackWPup cannot work."
|
4939 |
+
msgstr "Es sind Fehler aufgetreten. Bitte behebe sie, damit BackWPup ordnungsgemäß funktioniert."
|
4940 |
+
|
4941 |
+
# @ backwpup
|
4942 |
+
#: ../inc/pro/class-destination-s3.php:17
|
4943 |
+
#: ../inc/pro/class-destination-s3-v1.php:17
|
4944 |
+
msgid "Select a S3 service:"
|
4945 |
+
msgstr "Wähle einen S3 Service:"
|
4946 |
+
|
4947 |
+
# @ backwpup
|
4948 |
+
#: ../inc/pro/class-destination-s3.php:33
|
4949 |
+
#: ../inc/pro/class-destination-s3-v1.php:33
|
4950 |
+
msgid "or set an S3 Server URL:"
|
4951 |
+
msgstr "oder setze eine S3 Server URL:"
|
4952 |
+
|
4953 |
+
# @ backwpup
|
4954 |
+
#: ../inc/pro/class-destination-s3.php:36
|
4955 |
+
#: ../inc/pro/class-destination-msazure.php:19
|
4956 |
+
#: ../inc/pro/class-destination-s3-v1.php:36
|
4957 |
+
msgid "Access Key:"
|
4958 |
+
msgstr "Zugangsschlüssel (Access Key):"
|
4959 |
+
|
4960 |
+
# @ backwpup
|
4961 |
+
#: ../inc/pro/class-destination-s3.php:39
|
4962 |
+
#: ../inc/pro/class-destination-s3-v1.php:39
|
4963 |
+
msgid "Secret Key:"
|
4964 |
+
msgstr "Secret Key:"
|
4965 |
+
|
4966 |
+
# @ backwpup
|
4967 |
+
#: ../inc/pro/class-destination-s3.php:42
|
4968 |
+
#: ../inc/pro/class-destination-s3-v1.php:42
|
4969 |
+
msgid "Bucket:"
|
4970 |
+
msgstr "Bucket:"
|
4971 |
+
|
4972 |
+
# @ backwpup
|
4973 |
+
#: ../inc/pro/class-destination-s3.php:52
|
4974 |
+
#: ../inc/pro/class-destination-s3-v1.php:52
|
4975 |
+
msgid "New Bucket:"
|
4976 |
+
msgstr "Neues Bucket: "
|
4977 |
+
|
4978 |
+
# @ backwpup
|
4979 |
+
#: ../inc/pro/class-destination-s3.php:54
|
4980 |
+
#: ../inc/pro/class-destination-s3-v1.php:54
|
4981 |
+
msgid "Folder in bucket:"
|
4982 |
+
msgstr "Ordner im Bucket:"
|
4983 |
+
|
4984 |
+
# @ backwpup
|
4985 |
+
#: ../inc/pro/class-destination-s3.php:154
|
4986 |
+
#: ../inc/pro/class-destination-s3-v1.php:156
|
4987 |
+
#, php-format
|
4988 |
+
msgid "%d. Trying to sync files to S3 Service …"
|
4989 |
+
msgstr "%d. Versuche Dateien mit dem S3 Service zu synchronisieren …"
|
4990 |
+
|
4991 |
+
# @ backwpup
|
4992 |
+
#: ../inc/pro/class-destination-s3.php:188
|
4993 |
+
#: ../inc/pro/class-destination-s3-v1.php:195
|
4994 |
+
msgid "Retrieving file list from S3."
|
4995 |
+
msgstr "Rufe Dateiliste von S3 ab."
|
4996 |
+
|
4997 |
+
# @ backwpup
|
4998 |
+
#: ../inc/pro/class-destination-s3.php:246
|
4999 |
+
#: ../inc/pro/class-destination-s3-v1.php:251
|
5000 |
+
msgid "Upload changed files to S3."
|
5001 |
+
msgstr "Upload der geänderten Dateien zu S3."
|
5002 |
+
|
5003 |
+
# @ backwpup
|
5004 |
+
#: ../inc/pro/class-destination-s3.php:261
|
5005 |
+
#: ../inc/pro/class-destination-s3-v1.php:263
|
5006 |
+
#, php-format
|
5007 |
+
msgid "File %s uploaded to S3."
|
5008 |
+
msgstr "Datei %s zu S3 hochgeladen."
|
5009 |
+
|
5010 |
+
# @ backwpup
|
5011 |
+
#: ../inc/pro/class-destination-s3.php:289
|
5012 |
+
#: ../inc/pro/class-destination-s3-v1.php:288
|
5013 |
+
#, php-format
|
5014 |
+
msgid "Extra file %s uploaded to S3."
|
5015 |
+
msgstr "Extra Datei %s zu S3 hochgeladen."
|
5016 |
+
|
5017 |
+
# @ backwpup
|
5018 |
+
#: ../inc/pro/class-destination-s3.php:302
|
5019 |
+
#: ../inc/pro/class-destination-s3-v1.php:301
|
5020 |
+
msgid "Delete nonexistent files on S3"
|
5021 |
+
msgstr "Lösche nicht existierende Dateien von S3"
|
5022 |
+
|
5023 |
+
# @ backwpup
|
5024 |
+
#: ../inc/pro/class-destination-s3.php:309
|
5025 |
+
#: ../inc/pro/class-destination-s3-v1.php:304
|
5026 |
+
#, php-format
|
5027 |
+
msgid "File %s deleted from S3."
|
5028 |
+
msgstr "Datei %s von S3 gelöscht."
|
5029 |
+
|
5030 |
+
# @ backwpup
|
5031 |
+
#: ../inc/pro/class-destination-ftp.php:17
|
5032 |
+
msgid "Hostname:"
|
5033 |
+
msgstr "Hostname:"
|
5034 |
+
|
5035 |
+
# @ backwpup
|
5036 |
+
#: ../inc/pro/class-destination-ftp.php:33
|
5037 |
+
msgid "Folder on server:"
|
5038 |
+
msgstr "Ordner auf dem Server:"
|
5039 |
+
|
5040 |
+
# @ backwpup
|
5041 |
+
#: ../inc/pro/class-destination-ftp.php:39
|
5042 |
+
msgid "Maximum number of backup files to keep in folder:"
|
5043 |
+
msgstr "Maximale Anzahl an Backup-Dateien im Ordner:"
|
5044 |
+
|
5045 |
+
# @ backwpup
|
5046 |
+
#: ../inc/pro/class-destination-ftp.php:42
|
5047 |
+
msgid "(Oldest files will be deleted first.)"
|
5048 |
+
msgstr "(Älteste Dateien werden zuerst gelöscht.)"
|
5049 |
+
|
5050 |
+
# @ backwpup
|
5051 |
+
#: ../inc/pro/class-jobtype-file.php:19
|
5052 |
+
msgid "Backup WordPress main files"
|
5053 |
+
msgstr "Backup der Wordpress Hauptdateien"
|
5054 |
+
|
5055 |
+
# @ backwpup
|
5056 |
+
#: ../inc/pro/class-jobtype-file.php:23
|
5057 |
+
msgid "Backup blog content folder"
|
5058 |
+
msgstr "Backup des Blog-Content Ordners"
|
5059 |
+
|
5060 |
+
# @ backwpup
|
5061 |
+
#: ../inc/pro/class-jobtype-file.php:27
|
5062 |
+
msgid "Backup blog plugins"
|
5063 |
+
msgstr "Backup Blog Plugins"
|
5064 |
+
|
5065 |
+
# @ backwpup
|
5066 |
+
#: ../inc/pro/class-jobtype-file.php:31
|
5067 |
+
msgid "Backup blog themes"
|
5068 |
+
msgstr "Backup der Blog-Themes"
|
5069 |
+
|
5070 |
+
# @ backwpup
|
5071 |
+
#: ../inc/pro/class-jobtype-file.php:35
|
5072 |
+
msgid "Backup blog uploads folder"
|
5073 |
+
msgstr "Backup der Blog-Uploads Ordner"
|
5074 |
+
|
5075 |
+
# @ backwpup
|
5076 |
+
#: ../inc/pro/class-wizard-job.php:15
|
5077 |
+
msgid "Create a job"
|
5078 |
+
msgstr "Job erstellen"
|
5079 |
+
|
5080 |
+
# @ backwpup
|
5081 |
+
#: ../inc/pro/class-wizard-job.php:16
|
5082 |
+
msgid "Choose a job"
|
5083 |
+
msgstr "Job auswählen"
|
5084 |
+
|
5085 |
+
# @ backwpup
|
5086 |
+
#: ../inc/pro/class-wizard-job.php:37
|
5087 |
+
msgid "Job Types"
|
5088 |
+
msgstr "Arbeitsauftrag Typen"
|
5089 |
+
|
5090 |
+
# @ backwpup
|
5091 |
+
#: ../inc/pro/class-wizard-job.php:37
|
5092 |
+
msgid "Select a task for your job."
|
5093 |
+
msgstr "Wähle eine Aufgabe für deinen Auftrag."
|
5094 |
+
|
5095 |
+
# @ backwpup
|
5096 |
+
#: ../inc/pro/class-wizard-job.php:51
|
5097 |
+
msgid "Archive Settings"
|
5098 |
+
msgstr "Archiv Einstellungen"
|
5099 |
+
|
5100 |
+
# @ backwpup
|
5101 |
+
#: ../inc/pro/class-wizard-job.php:51
|
5102 |
+
msgid "Settings for the Backup Archive"
|
5103 |
+
msgstr "Einstellungen für das Backup Archiv"
|
5104 |
+
|
5105 |
+
# @ backwpup
|
5106 |
+
#: ../inc/pro/class-wizard-job.php:53
|
5107 |
+
msgid "Where would you like to store the backup file?"
|
5108 |
+
msgstr "Wo wollen Sie die Backup-Datei speichern?"
|
5109 |
+
|
5110 |
+
# @ backwpup
|
5111 |
+
#: ../inc/pro/class-wizard-job.php:63
|
5112 |
+
#: ../inc/pro/class-wizard-job.php:272
|
5113 |
+
msgid "Scheduling"
|
5114 |
+
msgstr "Planung"
|
5115 |
+
|
5116 |
+
# @ backwpup
|
5117 |
+
#: ../inc/pro/class-wizard-job.php:63
|
5118 |
+
msgid "When would you like to start the job?"
|
5119 |
+
msgstr "Wann soll der Auftrag gestartet werden?"
|
5120 |
+
|
5121 |
+
# @ backwpup
|
5122 |
+
#: ../inc/pro/class-wizard-job.php:218
|
5123 |
+
msgid "Select one or more tasks for your backup job."
|
5124 |
+
msgstr "Wähle eine zusätzliche Aufgabe für deinen Backup-Auftrag."
|
5125 |
+
|
5126 |
+
# @ backwpup
|
5127 |
+
#: ../inc/pro/class-wizard-job.php:273
|
5128 |
+
msgid "Activate scheduling"
|
5129 |
+
msgstr "Aktive Planung"
|
5130 |
+
|
5131 |
+
# @ backwpup
|
5132 |
+
#: ../inc/pro/class-wizard-job.php:365
|
5133 |
+
msgid "Sync file by file to destination"
|
5134 |
+
msgstr "Synchronisiere Datei für Datei zum Zielverzeichnis"
|
5135 |
+
|
5136 |
+
# @ backwpup
|
5137 |
+
#: ../inc/pro/class-wizard-job.php:376
|
5138 |
+
msgid "Select a compression type for the backup archive"
|
5139 |
+
msgstr "Wähle einen Kompressions-Typ für das Backup Archiv"
|
5140 |
+
|
5141 |
+
# @ backwpup
|
5142 |
+
#: ../inc/pro/class-wizard-job.php:379
|
5143 |
+
msgid "Archive compression type"
|
5144 |
+
msgstr "Archiv Kompressions-Typ"
|
5145 |
+
|
5146 |
+
# @ backwpup
|
5147 |
+
#: ../inc/pro/class-wizard-job.php:411
|
5148 |
+
msgid "Where to store the files"
|
5149 |
+
msgstr "Wo die Dateien abgelegt werden"
|
5150 |
+
|
5151 |
+
# @ backwpup
|
5152 |
+
#: ../inc/pro/class-wizard-job.php:586
|
5153 |
+
#, php-format
|
5154 |
+
msgid "Wizard: %1$s"
|
5155 |
+
msgstr "Assistent: %1$s"
|
5156 |
+
|
5157 |
+
# @ backwpup
|
5158 |
+
#: ../inc/pro/class-wizard-job.php:605
|
5159 |
+
#, php-format
|
5160 |
+
msgid "New job %s generated."
|
5161 |
+
msgstr "Neuer Auftrag %s erstellt."
|
5162 |
+
|
5163 |
+
# @ backwpup
|
5164 |
+
#: ../inc/pro/class-wizard-job.php:617
|
5165 |
+
msgid "Create Job"
|
5166 |
+
msgstr "Erstelle Auftrag"
|
5167 |
+
|
5168 |
+
# @ backwpup
|
5169 |
+
#: ../inc/pro/class-wizard-job.php:642
|
5170 |
+
#: ../inc/pro/class-wizard-job.php:643
|
5171 |
+
msgid "Database Backup and XML Export (Daily)"
|
5172 |
+
msgstr "DB Sicherung & XML Export (täglich)"
|
5173 |
+
|
5174 |
+
# @ backwpup
|
5175 |
+
#: ../inc/pro/class-wizard-job.php:660
|
5176 |
+
#: ../inc/pro/class-wizard-job.php:661
|
5177 |
+
msgid "Database Check (Weekly)"
|
5178 |
+
msgstr "Datenbank Überprüfung (wöchentlich)"
|
5179 |
+
|
5180 |
+
# @ backwpup
|
5181 |
+
#: ../inc/pro/class-wizard-job.php:685
|
5182 |
+
#: ../inc/pro/class-wizard-job.php:686
|
5183 |
+
msgid "Backup all files"
|
5184 |
+
msgstr "Sicherung aller Dateien"
|
5185 |
+
|
5186 |
+
# @ backwpup
|
5187 |
+
#: ../inc/pro/class-wizard-job.php:700
|
5188 |
+
msgid "Essential files + list of plugins"
|
5189 |
+
msgstr "Wichtige Dateien + Pluginliste"
|
5190 |
+
|
5191 |
+
# @ backwpup
|
5192 |
+
#: ../inc/pro/class-wizard-job.php:701
|
5193 |
+
msgid "Backup essential files and folders, plus a list of installed plugins."
|
5194 |
+
msgstr "Backup von wichtigen Dateien und Ordner, plus einer Liste von installierten Plugins."
|
5195 |
+
|
5196 |
+
# @ backwpup
|
5197 |
+
#: ../inc/pro/class-wizard-job.php:716
|
5198 |
+
#: ../inc/pro/class-wizard-job.php:717
|
5199 |
+
msgid "Custom configuration"
|
5200 |
+
msgstr "Angepasste Konfiguration"
|
5201 |
+
|
5202 |
+
# @ backwpup
|
5203 |
+
#: ../inc/pro/class-pro.php:102
|
5204 |
+
msgid "Glacier"
|
5205 |
+
msgstr "Glacier"
|
5206 |
+
|
5207 |
+
# @ backwpup
|
5208 |
+
#: ../inc/pro/class-pro.php:121
|
5209 |
+
msgid "GDrive"
|
5210 |
+
msgstr "GDrive"
|
5211 |
+
|
5212 |
+
# @ backwpup
|
5213 |
+
#: ../inc/pro/class-pro.php:174
|
5214 |
+
#: ../inc/pro/class-pro.php:210
|
5215 |
+
msgid "Wizards"
|
5216 |
+
msgstr "Assistenten"
|
5217 |
+
|
5218 |
+
# @ backwpup
|
5219 |
+
#: ../inc/pro/class-jobtype-wpexp.php:17
|
5220 |
+
msgid "Items to export:"
|
5221 |
+
msgstr "Zu exportierendes Item:"
|
5222 |
+
|
5223 |
+
# @ backwpup
|
5224 |
+
#: ../inc/pro/class-destination-msazure.php:17
|
5225 |
+
msgid "Account Name:"
|
5226 |
+
msgstr "Kontoname/ Benutzername:"
|
5227 |
+
|
5228 |
+
# @ backwpup
|
5229 |
+
#: ../inc/pro/class-destination-msazure.php:21
|
5230 |
+
#: ../inc/pro/class-destination-rsc.php:38
|
5231 |
+
msgid "Container:"
|
5232 |
+
msgstr "Container:"
|
5233 |
+
|
5234 |
+
# @ backwpup
|
5235 |
+
#: ../inc/pro/class-destination-msazure.php:28
|
5236 |
+
#: ../inc/pro/class-destination-rsc.php:47
|
5237 |
+
msgid "Create container:"
|
5238 |
+
msgstr "Container erstellen:"
|
5239 |
+
|
5240 |
+
# @ backwpup
|
5241 |
+
#: ../inc/pro/class-destination-msazure.php:30
|
5242 |
+
#: ../inc/pro/class-destination-rsc.php:49
|
5243 |
+
msgid "Folder in container:"
|
5244 |
+
msgstr "Ordner im Container:"
|
5245 |
+
|
5246 |
+
# @ backwpup
|
5247 |
+
#: ../inc/pro/class-destination-msazure.php:100
|
5248 |
+
#, php-format
|
5249 |
+
msgid "%d. Trying to sync files with Microsoft Azure (Blob) …"
|
5250 |
+
msgstr "%d. Versuche Dateien mit Microsoft Azure (Blob) zu synchronisieren …"
|
5251 |
+
|
5252 |
+
# @ backwpup
|
5253 |
+
#: ../inc/pro/class-destination-msazure.php:135
|
5254 |
+
msgid "Retrieving file list from MS Azure."
|
5255 |
+
msgstr "Rufe Dateiliste von MS Azure ab."
|
5256 |
+
|
5257 |
+
# @ backwpup
|
5258 |
+
#: ../inc/pro/class-destination-msazure.php:151
|
5259 |
+
msgid "Upload changed files to MS Azure."
|
5260 |
+
msgstr "Upload der geänderten Dateien zu MS Azure."
|
5261 |
+
|
5262 |
+
# @ backwpup
|
5263 |
+
#: ../inc/pro/class-destination-msazure.php:163
|
5264 |
+
#, php-format
|
5265 |
+
msgid "File %s uploaded to MS Azure."
|
5266 |
+
msgstr "Datei %s zu MS Azure hochgeladen."
|
5267 |
+
|
5268 |
+
# @ backwpup
|
5269 |
+
#: ../inc/pro/class-destination-msazure.php:189
|
5270 |
+
#, php-format
|
5271 |
+
msgid "Extra file %s uploaded to MS Azure."
|
5272 |
+
msgstr "Extra Datei %s zu MS Azure hochgeladen."
|
5273 |
+
|
5274 |
+
# @ backwpup
|
5275 |
+
#: ../inc/pro/class-destination-msazure.php:202
|
5276 |
+
msgid "Delete nonexistent files on MS Azure."
|
5277 |
+
msgstr "Lösche nicht existierende Dateien auf MS Azure."
|
5278 |
+
|
5279 |
+
# @ backwpup
|
5280 |
+
#: ../inc/pro/class-destination-msazure.php:205
|
5281 |
+
#, php-format
|
5282 |
+
msgid "File %s deleted from MS Azure."
|
5283 |
+
msgstr "Datei %s von MS Azure gelöscht."
|
5284 |
+
|
5285 |
+
# @ backwpup
|
5286 |
+
#: ../inc/pro/class-destination-dropbox.php:24
|
5287 |
+
msgid "Auth Code:"
|
5288 |
+
msgstr "Auth Code:"
|
5289 |
+
|
5290 |
+
# @ backwpup
|
5291 |
+
#: ../inc/pro/class-destination-dropbox.php:27
|
5292 |
+
msgid "Get auth code"
|
5293 |
+
msgstr "Hole Authentifizierungscode"
|
5294 |
+
|
5295 |
+
# @ backwpup
|
5296 |
+
#: ../inc/pro/class-destination-dropbox.php:34
|
5297 |
+
#: ../inc/pro/class-destination-gdrive.php:249
|
5298 |
+
#: ../inc/pro/class-destination-gdrive.php:255
|
5299 |
+
msgid "Login:"
|
5300 |
+
msgstr "Anmelden:"
|
5301 |
+
|
5302 |
+
# @ backwpup
|
5303 |
+
#: ../inc/pro/class-destination-dropbox.php:38
|
5304 |
+
#: ../inc/pro/class-destination-gdrive.php:260
|
5305 |
+
msgid "Folder:"
|
5306 |
+
msgstr "Ordner:"
|
5307 |
+
|
5308 |
+
# @ backwpup
|
5309 |
+
#: ../inc/pro/class-destination-dropbox.php:105
|
5310 |
+
#, php-format
|
5311 |
+
msgid "%d. Try to sync files to Dropbox …"
|
5312 |
+
msgstr "%d. Versuche Dateien mit Dropbox zu synchronisieren …"
|
5313 |
+
|
5314 |
+
# @ backwpup
|
5315 |
+
#: ../inc/pro/class-destination-dropbox.php:138
|
5316 |
+
msgid "Retrieving file list from Dropbox"
|
5317 |
+
msgstr "Empfange Dateiliste von Dropbox"
|
5318 |
+
|
5319 |
+
# @ backwpup
|
5320 |
+
#: ../inc/pro/class-destination-dropbox.php:152
|
5321 |
+
msgid "Upload changed files to Dropbox"
|
5322 |
+
msgstr "Lade geänderte Datei in die Dropbox"
|
5323 |
+
|
5324 |
+
# @ backwpup
|
5325 |
+
#: ../inc/pro/class-destination-dropbox.php:174
|
5326 |
+
#, php-format
|
5327 |
+
msgid "File %s uploaded to Dropbox"
|
5328 |
+
msgstr "Datei %s zu Dropbox hochgeladen"
|
5329 |
+
|
5330 |
+
# @ backwpup
|
5331 |
+
#: ../inc/pro/class-destination-dropbox.php:201
|
5332 |
+
#, php-format
|
5333 |
+
msgid "Extra file %s uploaded to Dropbox"
|
5334 |
+
msgstr "Extra Datei %s zu Dropbox hochgeladen"
|
5335 |
+
|
5336 |
+
# @ backwpup
|
5337 |
+
#: ../inc/pro/class-destination-dropbox.php:210
|
5338 |
+
msgid "Delete not existing files from Dropbox"
|
5339 |
+
msgstr "Lösche nicht existierende Dateien aus Dropbox"
|
5340 |
+
|
5341 |
+
# @ backwpup
|
5342 |
+
#: ../inc/pro/class-destination-dropbox.php:217
|
5343 |
+
#, php-format
|
5344 |
+
msgid "Folder %s deleted from Dropbox"
|
5345 |
+
msgstr "Ordner %s aus Dropbox gelöscht"
|
5346 |
+
|
5347 |
+
# @ backwpup
|
5348 |
+
#: ../inc/pro/class-destination-dropbox.php:235
|
5349 |
+
#, php-format
|
5350 |
+
msgid "File %s deleted from Dropbox"
|
5351 |
+
msgstr "Datei %s aus Dropbox gelöscht"
|
5352 |
+
|
5353 |
+
# @ backwpup
|
5354 |
+
#: ../inc/pro/class-jobtype-dbdump.php:89
|
5355 |
+
msgid "Backup only WordPress Database tables"
|
5356 |
+
msgstr "Nur die WordPress Datenbank Tabellen sichern"
|
5357 |
+
|
5358 |
+
# @ backwpup
|
5359 |
+
#: ../inc/pro/class-jobtype-dbdump.php:109
|
5360 |
+
msgid "Database connection"
|
5361 |
+
msgstr "Datenbank Verbindung"
|
5362 |
+
|
5363 |
+
# @ backwpup
|
5364 |
+
#: ../inc/pro/class-jobtype-dbdump.php:113
|
5365 |
+
msgid "Use WordPress database connection."
|
5366 |
+
msgstr "Nutze WordPress-Datenbankverbindung"
|
5367 |
+
|
5368 |
+
# @ backwpup
|
5369 |
+
#: ../inc/pro/class-jobtype-dbdump.php:117
|
5370 |
+
msgid "Host:"
|
5371 |
+
msgstr "Host (Server):"
|
5372 |
+
|
5373 |
+
# @ backwpup
|
5374 |
+
#: ../inc/pro/class-jobtype-dbdump.php:120
|
5375 |
+
msgid "User:"
|
5376 |
+
msgstr "Benutzer: "
|
5377 |
+
|
5378 |
+
# @ backwpup
|
5379 |
+
#: ../inc/pro/class-jobtype-dbdump.php:127
|
5380 |
+
msgid "Charset:"
|
5381 |
+
msgstr "Charset: "
|
5382 |
+
|
5383 |
+
# @ backwpup
|
5384 |
+
#: ../inc/pro/class-jobtype-dbdump.php:138
|
5385 |
+
msgid "Database:"
|
5386 |
+
msgstr "Datenbank:"
|
5387 |
+
|
5388 |
+
# @ backwpup
|
5389 |
+
#: ../inc/pro/class-jobtype-dbdump.php:166
|
5390 |
+
msgid "Database Backup type"
|
5391 |
+
msgstr "Datenbank Backup Typ"
|
5392 |
+
|
5393 |
+
# @ backwpup
|
5394 |
+
#: ../inc/pro/class-jobtype-dbdump.php:170
|
5395 |
+
msgid "SQL File (with mysqli)"
|
5396 |
+
msgstr "SQL-Datei (mit mysqli)"
|
5397 |
+
|
5398 |
+
# @ backwpup
|
5399 |
+
#: ../inc/pro/class-jobtype-dbdump.php:171
|
5400 |
+
msgid "SQL File (with mysqldump)"
|
5401 |
+
msgstr "SQL-Datei (mit mysqldump)"
|
5402 |
+
|
5403 |
+
# @ backwpup
|
5404 |
+
#: ../inc/pro/class-jobtype-dbdump.php:172
|
5405 |
+
msgid "XML File (phpMyAdmin schema)"
|
5406 |
+
msgstr "XML Datei (phpMyAdmin Schema)"
|
5407 |
+
|
5408 |
+
# @ backwpup
|
5409 |
+
#: ../inc/pro/class-jobtype-dbdump.php:178
|
5410 |
+
msgid "Path to <em>mysqldump</em> file"
|
5411 |
+
msgstr "Pfad zur <em>mysqldump</em> Datei"
|
5412 |
+
|
5413 |
+
# @ backwpup
|
5414 |
+
#: ../inc/pro/class-jobtype-dbdump.php:555
|
5415 |
+
#, php-format
|
5416 |
+
msgid "Added database backup \"%1$s\" with %2$s to backup file list"
|
5417 |
+
msgstr "Datenbank-Backup \"%1$s\" mit %2$s zur Backup-Datei-Liste hinzugefügt"
|
5418 |
+
|
5419 |
+
# @ backwpup
|
5420 |
+
#: ../inc/pro/class-jobtype-dbdump.php:576
|
5421 |
+
#, php-format
|
5422 |
+
msgid "%d. Try to backup MySQL system …"
|
5423 |
+
msgstr "%d. Versuche, das MySQL-System zu sichern …"
|
5424 |
+
|
5425 |
+
# @ backwpup
|
5426 |
+
#: ../inc/pro/class-jobtype-dbdump.php:583
|
5427 |
+
msgid "Executing of system commands not allowed. Please use backup with mysqli."
|
5428 |
+
msgstr "Ausführung von Systembefehlen nicht erlaubt. Bitte nutze Backup mit mysqli."
|
5429 |
+
|
5430 |
+
# @ backwpup
|
5431 |
+
#: ../inc/pro/class-jobtype-dbdump.php:588
|
5432 |
+
#, php-format
|
5433 |
+
msgid "%s file not in open basedir of PHP."
|
5434 |
+
msgstr "Datei %s nicht im open basedir von PHP."
|
5435 |
+
|
5436 |
+
# @ backwpup
|
5437 |
+
#: ../inc/pro/class-jobtype-dbdump.php:593
|
5438 |
+
#, php-format
|
5439 |
+
msgid "%s file not found. Please correct the path for the mysqldump file."
|
5440 |
+
msgstr "Datei %s nicht gefunden. Bitte korrigiere den Pfad für die mysqldump-Datei."
|
5441 |
+
|
5442 |
+
# @ backwpup
|
5443 |
+
#: ../inc/pro/class-jobtype-dbdump.php:670
|
5444 |
+
#, php-format
|
5445 |
+
msgctxt "Executed exec() command"
|
5446 |
+
msgid "CLI Exec: %s"
|
5447 |
+
msgstr "CLI Exec: %s"
|
5448 |
+
|
5449 |
+
# @ backwpup
|
5450 |
+
#: ../inc/pro/class-jobtype-dbdump.php:676
|
5451 |
+
msgid "Usage error."
|
5452 |
+
msgstr "Usage-Fehler"
|
5453 |
+
|
5454 |
+
# @ backwpup
|
5455 |
+
#: ../inc/pro/class-jobtype-dbdump.php:677
|
5456 |
+
msgid "MySQL Server Error. This could be an issue with permissions. Try using database backup with mysqli."
|
5457 |
+
msgstr "Fehler des MySQL-Servers. Dies könnte ein Problem mit Berechtigungen sein. Versuche ein Datenbank mit mysqli."
|
5458 |
+
|
5459 |
+
# @ backwpup
|
5460 |
+
#: ../inc/pro/class-jobtype-dbdump.php:678
|
5461 |
+
msgid "Error during consistency checks."
|
5462 |
+
msgstr "Fehler während Konsistenzprüfung."
|
5463 |
+
|
5464 |
+
# @ backwpup
|
5465 |
+
#: ../inc/pro/class-jobtype-dbdump.php:679
|
5466 |
+
msgid "Not enough memory."
|
5467 |
+
msgstr "Nicht genug Speicher."
|
5468 |
+
|
5469 |
+
# @ backwpup
|
5470 |
+
#: ../inc/pro/class-jobtype-dbdump.php:680
|
5471 |
+
msgid "Error during writing of SQL backup file."
|
5472 |
+
msgstr "Fehler beim Schreiben der SQL-Backup-Datei."
|
5473 |
+
|
5474 |
+
# @ backwpup
|
5475 |
+
#: ../inc/pro/class-jobtype-dbdump.php:681
|
5476 |
+
msgid "Illegal table"
|
5477 |
+
msgstr "Ungültige Tabelle"
|
5478 |
+
|
5479 |
+
# @ backwpup
|
5480 |
+
#: ../inc/pro/class-jobtype-dbdump.php:686
|
5481 |
+
#, php-format
|
5482 |
+
msgid "mysqldump returned: (%d) %s"
|
5483 |
+
msgstr "mysqldump hat zurückgegeben: (%d) %s"
|
5484 |
+
|
5485 |
+
# @ backwpup
|
5486 |
+
#: ../inc/pro/class-jobtype-dbdump.php:699
|
5487 |
+
msgid "Can not create mysql backup with mysqldump command"
|
5488 |
+
msgstr "Keine Datenbanksicherung mit System-Kommando mysqldump möglich"
|
5489 |
+
|
5490 |
+
# @ backwpup
|
5491 |
+
#: ../inc/pro/class-jobtype-dbdump.php:747
|
5492 |
+
#, php-format
|
5493 |
+
msgid "%d. Try to backup database as XML …"
|
5494 |
+
msgstr "%d. Versuche, Datenbank als XML zu sichern …"
|
5495 |
+
|
5496 |
+
# @ backwpup
|
5497 |
+
#: ../inc/pro/class-jobtype-dbdump.php:800
|
5498 |
+
msgid "No tables for XML backup"
|
5499 |
+
msgstr "Es gibt keine Tabellen für einen XML Backup"
|
5500 |
+
|
5501 |
+
# @ backwpup
|
5502 |
+
#: ../inc/pro/class-jobtype-dbdump.php:837
|
5503 |
+
#, php-format
|
5504 |
+
msgid "Dump database create view \"%s\""
|
5505 |
+
msgstr "Datenbank Backup CREATE VIEW \"%s\""
|
5506 |
+
|
5507 |
+
# @ backwpup
|
5508 |
+
#: ../inc/pro/class-jobtype-dbdump.php:854
|
5509 |
+
#, php-format
|
5510 |
+
msgid "Dump database structure \"%s\""
|
5511 |
+
msgstr "Backup der Datenbank Struktur \"%s\""
|
5512 |
+
|
5513 |
+
# @ backwpup
|
5514 |
+
#: ../inc/pro/class-jobtype-dbdump.php:894
|
5515 |
+
#, php-format
|
5516 |
+
msgid "Dump table \"%s\" data"
|
5517 |
+
msgstr "Backup der Tabellen Daten von \"%s\""
|
5518 |
+
|
5519 |
+
# @ backwpup
|
5520 |
+
#: ../inc/pro/class-jobtype-dbdump.php:963
|
5521 |
+
#, php-format
|
5522 |
+
msgid "Added database XML dump \"%1$s\" with %2$s to backup file list"
|
5523 |
+
msgstr "XML Datenbank Backup \"%1$s\" mit %2$s zur Backup Datei Liste hinzugefügt"
|
5524 |
+
|
5525 |
+
# @ backwpup
|
5526 |
+
#: ../inc/pro/class-jobtype-dbdump.php:966
|
5527 |
+
msgid "Database XML backup done!"
|
5528 |
+
msgstr "Datenbank XML Backup erstellt!"
|
5529 |
+
|
5530 |
+
# @ backwpup
|
5531 |
+
#: ../inc/pro/class-destination-s3-v1.php:29
|
5532 |
+
msgid "Hosteurope Cloud Storage"
|
5533 |
+
msgstr "Hosteurope Cloud Storage"
|
5534 |
+
|
5535 |
+
# @ backwpup
|
5536 |
+
#: ../inc/pro/class-marketpress-documentation.php:175
|
5537 |
+
msgid "Loading Menu ..."
|
5538 |
+
msgstr "Lade Menü..."
|
5539 |
+
|
5540 |
+
# @ backwpup
|
5541 |
+
#: ../inc/pro/class-marketpress-documentation.php:219
|
5542 |
+
#: ../inc/pro/class-marketpress-documentation.php:335
|
5543 |
+
#, php-format
|
5544 |
+
msgctxt "%s = Remote Code"
|
5545 |
+
msgid "Could not connect to remote host, code %d. Please try again later."
|
5546 |
+
msgstr "Verbindung zum Remote Host nicht möglich, Code %d. Bitte versuche es später noch einmal."
|
5547 |
+
|
5548 |
+
# @ backwpup
|
5549 |
+
#: ../inc/pro/class-marketpress-documentation.php:230
|
5550 |
+
#: ../inc/pro/class-marketpress-documentation.php:346
|
5551 |
+
msgid "Could not find content for this page. Please try again later."
|
5552 |
+
msgstr "Für diese Seite konnten kein Inhalte gefunden werden. Bitte versuche es später nocheinmal."
|
5553 |
+
|
5554 |
+
# @ backwpup
|
5555 |
+
#: ../inc/pro/class-marketpress-documentation.php:236
|
5556 |
+
#: ../inc/pro/class-marketpress-documentation.php:351
|
5557 |
+
msgid "Could not connect to remote host. Please try again later."
|
5558 |
+
msgstr "Konnte nicht zum Remote-Host verbinden. Bitte versuche es später noch einmal."
|
5559 |
+
|
5560 |
+
# @ backwpup
|
5561 |
+
#: ../inc/pro/class-marketpress-documentation.php:282
|
5562 |
+
#: ../inc/pro/class-marketpress-documentation.php:290
|
5563 |
+
msgid "Loading Content ..."
|
5564 |
+
msgstr "Lade Inhalt..."
|
5565 |
+
|
5566 |
+
# @ backwpup
|
5567 |
+
#: ../inc/pro/class-page-wizard.php:122
|
5568 |
+
msgid "No BackWPup Wizard Session found!"
|
5569 |
+
msgstr "Keine BackWPup-Assistent-Sitzung gefunden!"
|
5570 |
+
|
5571 |
+
# @ backwpup
|
5572 |
+
#: ../inc/pro/class-page-wizard.php:134
|
5573 |
+
#: ../inc/pro/class-page-wizard.php:442
|
5574 |
+
msgid "Cancel"
|
5575 |
+
msgstr "Abbrechen"
|
5576 |
+
|
5577 |
+
# @ backwpup
|
5578 |
+
#: ../inc/pro/class-page-wizard.php:169
|
5579 |
+
#: ../inc/pro/class-page-wizard.php:437
|
5580 |
+
#: ../inc/pro/class-page-wizard.php:470
|
5581 |
+
msgid "Next ›"
|
5582 |
+
msgstr "Weiter ›"
|
5583 |
+
|
5584 |
+
# @ backwpup
|
5585 |
+
#: ../inc/pro/class-page-wizard.php:186
|
5586 |
+
#: ../inc/pro/class-page-wizard.php:433
|
5587 |
+
msgid "‹ Previous"
|
5588 |
+
msgstr "‹ Zurück"
|
5589 |
+
|
5590 |
+
# @ backwpup
|
5591 |
+
#: ../inc/pro/class-page-wizard.php:335
|
5592 |
+
#, php-format
|
5593 |
+
msgctxt "Plugin Name"
|
5594 |
+
msgid "%s Wizards"
|
5595 |
+
msgstr "%s Assistenten"
|
5596 |
+
|
5597 |
+
# @ backwpup
|
5598 |
+
#: ../inc/pro/class-page-wizard.php:373
|
5599 |
+
#, php-format
|
5600 |
+
msgctxt "Plugin Name"
|
5601 |
+
msgid "%s Wizard:"
|
5602 |
+
msgstr "%s Assistent:"
|
5603 |
+
|
5604 |
+
# @ backwpup
|
5605 |
+
#: ../inc/pro/class-page-wizard.php:445
|
5606 |
+
msgid "Back to overview"
|
5607 |
+
msgstr "Zurück zur Übersicht"
|
5608 |
+
|
5609 |
+
# @ backwpup
|
5610 |
+
#: ../inc/pro/class-destination-rsc.php:26
|
5611 |
+
msgid "API Key:"
|
5612 |
+
msgstr "API-Schlüssel"
|
5613 |
+
|
5614 |
+
# @ backwpup
|
5615 |
+
#: ../inc/pro/class-destination-rsc.php:29
|
5616 |
+
msgid "Select region:"
|
5617 |
+
msgstr "Region wählen:"
|
5618 |
+
|
5619 |
+
# @ backwpup
|
5620 |
+
#: ../inc/pro/class-destination-rsc.php:134
|
5621 |
+
#, php-format
|
5622 |
+
msgid "%d. Trying to sync files to Rackspace cloud …"
|
5623 |
+
msgstr "%d. Versuche Dateien mit der Rackspace Cloud zu synchronisieren …"
|
5624 |
+
|
5625 |
+
# @ backwpup
|
5626 |
+
#: ../inc/pro/class-destination-rsc.php:154
|
5627 |
+
#, php-format
|
5628 |
+
msgid "Connected to Rackspace cloud files container %s."
|
5629 |
+
msgstr "Verbunden mit Rackspace Cloud Datei-Container %s."
|
5630 |
+
|
5631 |
+
# @ backwpup
|
5632 |
+
#: ../inc/pro/class-destination-rsc.php:168
|
5633 |
+
msgid "Retrieving files list from Rackspace Cloud."
|
5634 |
+
msgstr "Rufe Dateiliste von Rackspace Cloud ab."
|
5635 |
+
|
5636 |
+
# @ backwpup
|
5637 |
+
#: ../inc/pro/class-destination-rsc.php:199
|
5638 |
+
msgid "Upload changed files to Rackspace Cloud."
|
5639 |
+
msgstr "Upload der geänderten Dateien zur Rackspace Cloud."
|
5640 |
+
|
5641 |
+
# @ backwpup
|
5642 |
+
#: ../inc/pro/class-destination-rsc.php:213
|
5643 |
+
#, php-format
|
5644 |
+
msgid "File %s uploaded to Rackspace Cloud."
|
5645 |
+
msgstr "Datei %s zu zur Rackspace Cloud hochgeladen."
|
5646 |
+
|
5647 |
+
# @ backwpup
|
5648 |
+
#: ../inc/pro/class-destination-rsc.php:241
|
5649 |
+
#, php-format
|
5650 |
+
msgid "Extra file %s uploaded to Rackspace Cloud."
|
5651 |
+
msgstr "Extra Datei %s zur Rackspace Cloud hochgeladen."
|
5652 |
+
|
5653 |
+
# @ backwpup
|
5654 |
+
#: ../inc/pro/class-destination-rsc.php:254
|
5655 |
+
msgid "Delete nonexistent files on Rackspace Cloud."
|
5656 |
+
msgstr "Lösche nicht existierende Dateien von Rackspace Cloud"
|
5657 |
+
|
5658 |
+
# @ backwpup
|
5659 |
+
#: ../inc/pro/class-destination-rsc.php:258
|
5660 |
+
#, php-format
|
5661 |
+
msgid "File %s deleted from Rackspace Cloud."
|
5662 |
+
msgstr "File %s von Rackspace Cloud gelöscht."
|
5663 |
+
|
5664 |
+
# @ backwpup
|
5665 |
+
#: ../inc/pro/class-jobtype-dbcheck.php:21
|
5666 |
+
msgid "Check only WordPress Database tables"
|
5667 |
+
msgstr "Teste nur die WordPress Datenbank Tabellen"
|
5668 |
+
|
5669 |
+
# @ backwpup
|
5670 |
+
#: ../inc/pro/class-destination-gdrive.php:33
|
5671 |
+
#: ../inc/pro/class-destination-gdrive.php:219
|
5672 |
+
#, php-format
|
5673 |
+
msgid "Looks like you haven’t set up any API keys yet. Head over to <a href=\"%s\">Settings | API-Keys</a> and get Google Drive all set up, then come back here."
|
5674 |
+
msgstr "Sieht so aus, als hättest du bis jetzt noch keine API-Schlüssel erstellt. Gehe zu <a href=\"%s\">Einstellungen | API-Schlüssel</a> und setze die Verbindung zu Google Drive auf, kann komm’ hierhin zurück."
|
5675 |
+
|
5676 |
+
# @ backwpup
|
5677 |
+
#: ../inc/pro/class-destination-gdrive.php:47
|
5678 |
+
#: ../inc/pro/class-destination-gdrive.php:251
|
5679 |
+
msgid "Authenticate"
|
5680 |
+
msgstr "Authentifizieren"
|
5681 |
+
|
5682 |
+
# @ backwpup
|
5683 |
+
#: ../inc/pro/class-destination-gdrive.php:53
|
5684 |
+
#: ../inc/pro/class-destination-gdrive.php:257
|
5685 |
+
msgid "Reauthenticate"
|
5686 |
+
msgstr "Neu authentifizieren"
|
5687 |
+
|
5688 |
+
# @ backwpup
|
5689 |
+
#: ../inc/pro/class-destination-gdrive.php:63
|
5690 |
+
msgid "Folder in Google Drive"
|
5691 |
+
msgstr "Ordner in Google Drive"
|
5692 |
+
|
5693 |
+
# @ backwpup
|
5694 |
+
#: ../inc/pro/class-destination-gdrive.php:83
|
5695 |
+
msgid "Consider using trash to delete files. If trash is not enabled, files will be deleted permanently."
|
5696 |
+
msgstr "Überlege dir, den Papierkorb zu nutzen um Dateien zu löschen. Bei deaktiviertem Papierkorb werden Dateien unwiderruflich gelöscht."
|
5697 |
+
|
5698 |
+
# @ backwpup
|
5699 |
+
#: ../inc/pro/class-destination-gdrive.php:132
|
5700 |
+
#: ../inc/pro/class-destination-gdrive.php:156
|
5701 |
+
msgid "GDrive: Authenticated."
|
5702 |
+
msgstr "GDrive: Authentifiziert."
|
5703 |
+
|
5704 |
+
# @ backwpup
|
5705 |
+
#: ../inc/pro/class-destination-gdrive.php:134
|
5706 |
+
#: ../inc/pro/class-destination-gdrive.php:158
|
5707 |
+
msgid "GDrive: No refresh token received."
|
5708 |
+
msgstr "GDrive: Kein Refresh Token empfangen."
|
5709 |
+
|
5710 |
+
# @ backwpup
|
5711 |
+
#: ../inc/pro/class-destination-gdrive.php:140
|
5712 |
+
#: ../inc/pro/class-destination-gdrive.php:163
|
5713 |
+
#: ../inc/pro/class-destination-gdrive.php:184
|
5714 |
+
#: ../inc/pro/class-destination-gdrive.php:237
|
5715 |
+
#, php-format
|
5716 |
+
msgid "GDrive API: %s"
|
5717 |
+
msgstr "GDrive API: %s"
|
5718 |
+
|
5719 |
+
# @ backwpup
|
5720 |
+
#: ../inc/pro/class-destination-gdrive.php:362
|
5721 |
+
#, php-format
|
5722 |
+
msgid "%d. Try to send backup file to Google Drive …"
|
5723 |
+
msgstr "%d. Versuche das Backup zu Google Drive zu senden …"
|
5724 |
+
|
5725 |
+
# @ backwpup
|
5726 |
+
#: ../inc/pro/class-destination-gdrive.php:395
|
5727 |
+
msgid "Uploading to Google Drive …"
|
5728 |
+
msgstr "Upload zu Google Drive …"
|
5729 |
+
|
5730 |
+
# @ backwpup
|
5731 |
+
#: ../inc/pro/class-destination-gdrive.php:439
|
5732 |
+
msgid "Google Drive API: could not create resumable file"
|
5733 |
+
msgstr "Google Drive API: kann keine fortsetzbare Datei generieren"
|
5734 |
+
|
5735 |
+
# @ backwpup
|
5736 |
+
#: ../inc/pro/class-destination-gdrive.php:473
|
5737 |
+
msgid "Can not resume transfer backup to Google Drive!"
|
5738 |
+
msgstr "Kann den Backup-Transfer zu Google Drive nicht fortsetzen!"
|
5739 |
+
|
5740 |
+
# @ backwpup
|
5741 |
+
#: ../inc/pro/class-destination-gdrive.php:530
|
5742 |
+
#, php-format
|
5743 |
+
msgid "Error transfering file chunks to %s."
|
5744 |
+
msgstr "Fehler beim Übertragen von Datei-Teilen zu %s."
|
5745 |
+
|
5746 |
+
# @ backwpup
|
5747 |
+
#: ../inc/pro/class-destination-gdrive.php:530
|
5748 |
+
#: ../inc/pro/class-destination-gdrive.php:548
|
5749 |
+
msgid "Google Drive"
|
5750 |
+
msgstr "Google Drive"
|
5751 |
+
|
5752 |
+
# @ backwpup
|
5753 |
+
#: ../inc/pro/class-destination-gdrive.php:592
|
5754 |
+
#, php-format
|
5755 |
+
msgid "One file deleted from Google Drive"
|
5756 |
+
msgid_plural "%d files deleted on Google Drive"
|
5757 |
+
msgstr[0] "Eine Datei von Google Drive gelöscht"
|
5758 |
+
msgstr[1] "%d Dateien von Google Drive gelöscht"
|
5759 |
+
|
5760 |
+
# @ backwpup
|
5761 |
+
#: ../inc/pro/class-destination-gdrive.php:598
|
5762 |
+
#: ../inc/pro/class-destination-gdrive.php:836
|
5763 |
+
#, php-format
|
5764 |
+
msgid "Google Drive API: %s"
|
5765 |
+
msgstr "Google Drive API: %s"
|
5766 |
+
|
5767 |
+
# @ backwpup
|
5768 |
+
#: ../inc/pro/class-destination-gdrive.php:633
|
5769 |
+
#, php-format
|
5770 |
+
msgid "%d. Try to sync files to Google Drive …"
|
5771 |
+
msgstr "%d. Versuche Dateien mit Google Drive zu synchronisieren …"
|
5772 |
+
|
5773 |
+
# @ backwpup
|
5774 |
+
#: ../inc/pro/class-destination-gdrive.php:662
|
5775 |
+
msgid "Retrieving folder list from Google Drive"
|
5776 |
+
msgstr "Abrufen der Ordnerliste von Google Drive"
|
5777 |
+
|
5778 |
+
# @ backwpup
|
5779 |
+
#: ../inc/pro/class-destination-gdrive.php:679
|
5780 |
+
msgid "Syncing changed files to Google Drive"
|
5781 |
+
msgstr "Synchronisiere geänderte Dateien mit Google Drive"
|
5782 |
+
|
5783 |
+
# @ backwpup
|
5784 |
+
#: ../inc/pro/class-destination-gdrive.php:717
|
5785 |
+
#, php-format
|
5786 |
+
msgid "File %s updated on Google Drive"
|
5787 |
+
msgstr "Datei %s auf Google Drive aktualisiert"
|
5788 |
+
|
5789 |
+
# @ backwpup
|
5790 |
+
#: ../inc/pro/class-destination-gdrive.php:737
|
5791 |
+
#, php-format
|
5792 |
+
msgid "File %s uploaded to Google Drive"
|
5793 |
+
msgstr "Datei %s zu Google Drive hochgeladen"
|
5794 |
+
|
5795 |
+
# @ backwpup
|
5796 |
+
#: ../inc/pro/class-destination-gdrive.php:758
|
5797 |
+
#, php-format
|
5798 |
+
msgid "File %s moved to trash in Google Drive"
|
5799 |
+
msgstr "Datei %s in den Papierkorb bei Google Drive verschoben"
|
5800 |
+
|
5801 |
+
# @ backwpup
|
5802 |
+
#: ../inc/pro/class-destination-gdrive.php:761
|
5803 |
+
#, php-format
|
5804 |
+
msgid "File %s deleted permanently in Google Drive"
|
5805 |
+
msgstr "Datei %s unwiderruflich gelöscht aus Google Drive"
|
5806 |
+
|
5807 |
+
# @ backwpup
|
5808 |
+
#: ../inc/pro/class-destination-gdrive.php:777
|
5809 |
+
#, php-format
|
5810 |
+
msgid "Folder %s moved to trash in Google Drive"
|
5811 |
+
msgstr "Ordner %s in den Papierkorb bei Google Drive verschoben"
|
5812 |
+
|
5813 |
+
# @ backwpup
|
5814 |
+
#: ../inc/pro/class-destination-gdrive.php:780
|
5815 |
+
#, php-format
|
5816 |
+
msgid "Folder %s deleted permanently in Google Drive"
|
5817 |
+
msgstr "Ordner %s unwiderruflich gelöscht aus Google Drive"
|
5818 |
+
|
5819 |
+
# @ backwpup
|
5820 |
+
#: ../inc/pro/class-destination-gdrive.php:807
|
5821 |
+
#, php-format
|
5822 |
+
msgid "Extra file %s updated on Google Drive"
|
5823 |
+
msgstr "Extra Datei %s auf Google Drive aktualisiert"
|
5824 |
+
|
5825 |
+
# @ backwpup
|
5826 |
+
#: ../inc/pro/class-destination-gdrive.php:826
|
5827 |
+
#, php-format
|
5828 |
+
msgid "Extra file %s uploaded to Google Drive"
|
5829 |
+
msgstr "Extra Datei %s auf Google Drive hochgeladen"
|
5830 |
+
|
5831 |
+
# @ backwpup
|
5832 |
+
#: ../inc/pro/class-jobtype-wpplugin.php:13
|
5833 |
+
msgid "Nothing to configure"
|
5834 |
+
msgstr "Nichts zu konfiguieren"
|
5835 |
+
|
5836 |
+
# @ backwpup
|
5837 |
+
#: ../inc/pro/class-export-jobs.php:12
|
5838 |
+
#: ../inc/pro/class-export-jobs.php:23
|
5839 |
+
msgid "Export"
|
5840 |
+
msgstr "Export"
|
5841 |
+
|
5842 |
+
# @ backwpup
|
5843 |
+
#: ../inc/pro/class-destination-glacier.php:26
|
5844 |
+
msgid "Amazon Glacier"
|
5845 |
+
msgstr "Amazon Glacier"
|
5846 |
+
|
5847 |
+
# @ backwpup
|
5848 |
+
#: ../inc/pro/class-destination-glacier.php:30
|
5849 |
+
msgid "Select a region:"
|
5850 |
+
msgstr "Wähle eine Region:"
|
5851 |
+
|
5852 |
+
# @ backwpup
|
5853 |
+
#: ../inc/pro/class-destination-glacier.php:32
|
5854 |
+
#: ../inc/pro/class-destination-glacier.php:154
|
5855 |
+
msgid "Amazon Glacier Region"
|
5856 |
+
msgstr "Amazon Glacier Region"
|
5857 |
+
|
5858 |
+
# @ backwpup
|
5859 |
+
#: ../inc/pro/class-destination-glacier.php:33
|
5860 |
+
#: ../inc/pro/class-destination-glacier.php:155
|
5861 |
+
msgid "US Standard"
|
5862 |
+
msgstr "US Standard"
|
5863 |
+
|
5864 |
+
# @ backwpup
|
5865 |
+
#: ../inc/pro/class-destination-glacier.php:34
|
5866 |
+
#: ../inc/pro/class-destination-glacier.php:156
|
5867 |
+
msgid "US West (Northern California)"
|
5868 |
+
msgstr "US West (Northern California)"
|
5869 |
+
|
5870 |
+
# @ backwpup
|
5871 |
+
#: ../inc/pro/class-destination-glacier.php:35
|
5872 |
+
#: ../inc/pro/class-destination-glacier.php:157
|
5873 |
+
msgid "US West (Oregon)"
|
5874 |
+
msgstr "US West (Oregon)"
|
5875 |
+
|
5876 |
+
# @ backwpup
|
5877 |
+
#: ../inc/pro/class-destination-glacier.php:36
|
5878 |
+
#: ../inc/pro/class-destination-glacier.php:158
|
5879 |
+
msgid "EU (Ireland)"
|
5880 |
+
msgstr "EU (Ireland)"
|
5881 |
+
|
5882 |
+
# @ backwpup
|
5883 |
+
#: ../inc/pro/class-destination-glacier.php:37
|
5884 |
+
#: ../inc/pro/class-destination-glacier.php:159
|
5885 |
+
msgid "EU (Germany)"
|
5886 |
+
msgstr "EU (Germany)"
|
5887 |
+
|
5888 |
+
# @ backwpup
|
5889 |
+
#: ../inc/pro/class-destination-glacier.php:38
|
5890 |
+
#: ../inc/pro/class-destination-glacier.php:160
|
5891 |
+
msgid "Asia Pacific (Tokyo)"
|
5892 |
+
msgstr "Asia Pacific (Tokyo)"
|
5893 |
+
|
5894 |
+
# @ backwpup
|
5895 |
+
#: ../inc/pro/class-destination-glacier.php:39
|
5896 |
+
#: ../inc/pro/class-destination-glacier.php:161
|
5897 |
+
msgid "Asia Pacific (Singapore)"
|
5898 |
+
msgstr "Asia Pacific (Singapore)"
|
5899 |
+
|
5900 |
+
# @ backwpup
|
5901 |
+
#: ../inc/pro/class-destination-glacier.php:40
|
5902 |
+
#: ../inc/pro/class-destination-glacier.php:162
|
5903 |
+
msgid "Asia Pacific (Sydney)"
|
5904 |
+
msgstr "Asia Pacific (Sydney)"
|
5905 |
+
|
5906 |
+
# @ backwpup
|
5907 |
+
#: ../inc/pro/class-destination-glacier.php:41
|
5908 |
+
#: ../inc/pro/class-destination-glacier.php:163
|
5909 |
+
msgid "South America (Sao Paulo)"
|
5910 |
+
msgstr "South America (Sao Paulo)"
|
5911 |
+
|
5912 |
+
# @ backwpup
|
5913 |
+
#: ../inc/pro/class-destination-glacier.php:42
|
5914 |
+
msgid "China (Beijing)"
|
5915 |
+
msgstr "China (Beijing)"
|
5916 |
+
|
5917 |
+
# @ backwpup
|
5918 |
+
#: ../inc/pro/class-destination-glacier.php:48
|
5919 |
+
msgid "Amazon Access Keys"
|
5920 |
+
msgstr "Amazon Zugriffsschlüssel"
|
5921 |
+
|
5922 |
+
# @ backwpup
|
5923 |
+
#: ../inc/pro/class-destination-glacier.php:67
|
5924 |
+
msgid "Vault"
|
5925 |
+
msgstr "Tresor"
|
5926 |
+
|
5927 |
+
# @ backwpup
|
5928 |
+
#: ../inc/pro/class-destination-glacier.php:71
|
5929 |
+
msgid "Vault selection"
|
5930 |
+
msgstr "Tresorauswahl"
|
5931 |
+
|
5932 |
+
# @ backwpup
|
5933 |
+
#: ../inc/pro/class-destination-glacier.php:83
|
5934 |
+
msgid "Create a new vault"
|
5935 |
+
msgstr "Neuen Tresor erstellen"
|
5936 |
+
|
5937 |
+
# @ backwpup
|
5938 |
+
#: ../inc/pro/class-destination-glacier.php:90
|
5939 |
+
msgid "Glacier Backup settings"
|
5940 |
+
msgstr "Glacier Backup Einstellungen"
|
5941 |
+
|
5942 |
+
# @ backwpup
|
5943 |
+
#: ../inc/pro/class-destination-glacier.php:97
|
5944 |
+
#: ../inc/pro/class-destination-glacier.php:181
|
5945 |
+
msgid "Number of files to keep in folder. (Archives deleted before 3 months after they have been stored may cause extra costs when deleted.)"
|
5946 |
+
msgstr "Anzahl der im Ordner verbleibenden Dateien. (Archive, die vor Ablauf von 3 Monaten gelöscht werden, können zusätzliche Kosten verursachen.)"
|
5947 |
+
|
5948 |
+
# @ backwpup
|
5949 |
+
#: ../inc/pro/class-destination-glacier.php:130
|
5950 |
+
#: ../inc/pro/class-destination-glacier.php:215
|
5951 |
+
#, php-format
|
5952 |
+
msgid "Vault %1$s created."
|
5953 |
+
msgstr "Tresor %1$s erstellt."
|
5954 |
+
|
5955 |
+
# @ backwpup
|
5956 |
+
#: ../inc/pro/class-destination-glacier.php:132
|
5957 |
+
#: ../inc/pro/class-destination-glacier.php:217
|
5958 |
+
#, php-format
|
5959 |
+
msgid "Vault %s could not be created."
|
5960 |
+
msgstr "Tresor %s konnte nicht erstellt werden."
|
5961 |
+
|
5962 |
+
# @ backwpup
|
5963 |
+
#: ../inc/pro/class-destination-glacier.php:153
|
5964 |
+
msgid "Select an Amazon Glacier region:"
|
5965 |
+
msgstr "Wähle Amazon Glacier Region:"
|
5966 |
+
|
5967 |
+
# @ backwpup
|
5968 |
+
#: ../inc/pro/class-destination-glacier.php:169
|
5969 |
+
msgid "Vault:"
|
5970 |
+
msgstr "Tresor:"
|
5971 |
+
|
5972 |
+
# @ backwpup
|
5973 |
+
#: ../inc/pro/class-destination-glacier.php:178
|
5974 |
+
msgid "New Vault:"
|
5975 |
+
msgstr "Neuer Tresor:"
|
5976 |
+
|
5977 |
+
# @ backwpup
|
5978 |
+
#: ../inc/pro/class-destination-glacier.php:258
|
5979 |
+
#: ../inc/pro/class-destination-glacier.php:374
|
5980 |
+
#: ../inc/pro/class-destination-glacier.php:390
|
5981 |
+
#: ../inc/pro/class-destination-glacier.php:430
|
5982 |
+
#, php-format
|
5983 |
+
msgid "AWS API: %s"
|
5984 |
+
msgstr "AWS API: %s"
|
5985 |
+
|
5986 |
+
# @ backwpup
|
5987 |
+
#: ../inc/pro/class-destination-glacier.php:282
|
5988 |
+
#, php-format
|
5989 |
+
msgid "%d. Trying to send backup file to Amazon Glacier …"
|
5990 |
+
msgstr "%d. Versuche Backup-Datei zu Amazon Glacier zu senden …"
|
5991 |
+
|
5992 |
+
# @ backwpup
|
5993 |
+
#: ../inc/pro/class-destination-glacier.php:295
|
5994 |
+
#, php-format
|
5995 |
+
msgid "Connected to Glacier vault \"%1$s\" with %2$d archives and size of %3$d"
|
5996 |
+
msgstr "Verbunden mit Glacier-Vault \"%1$s\" mit %2$d archives einer Größe von %3$d"
|
5997 |
+
|
5998 |
+
# @ backwpup
|
5999 |
+
#: ../inc/pro/class-destination-glacier.php:297
|
6000 |
+
#, php-format
|
6001 |
+
msgid "Glacier vault \"%s\" does not exist!"
|
6002 |
+
msgstr "Glacier Tresor \"%s\" existiert nicht!"
|
6003 |
+
|
6004 |
+
# @ backwpup
|
6005 |
+
#: ../inc/pro/class-destination-glacier.php:303
|
6006 |
+
msgid "Starting upload to Amazon Glacier …"
|
6007 |
+
msgstr "Upload zu Amazon Glacier wird gestartet …"
|
6008 |
+
|
6009 |
+
# @ backwpup
|
6010 |
+
#: ../inc/pro/class-destination-glacier.php:356
|
6011 |
+
#, php-format
|
6012 |
+
msgid "Archive ID: %s"
|
6013 |
+
msgstr "Archiv ID: %s"
|
6014 |
+
|
6015 |
+
# @ backwpup
|
6016 |
+
#: ../inc/pro/class-destination-glacier.php:420
|
6017 |
+
#, php-format
|
6018 |
+
msgid "Cannot delete archive from %s."
|
6019 |
+
msgstr "Kann das Archiv aus %s nicht löschen."
|
6020 |
+
|
6021 |
+
# @ backwpup
|
6022 |
+
#: ../inc/pro/class-destination-glacier.php:424
|
6023 |
+
#, php-format
|
6024 |
+
msgid "One file deleted on vault."
|
6025 |
+
msgid_plural "%d files deleted on vault"
|
6026 |
+
msgstr[0] "Eine Datei aus Tresor entfernt."
|
6027 |
+
msgstr[1] "%d Dateien aus Tresor entfernt"
|
6028 |
+
|
6029 |
+
# @ backwpup
|
6030 |
+
#: ../inc/pro/class-destination-glacier.php:538
|
6031 |
+
msgid "No vault found!"
|
6032 |
+
msgstr "Kein Tresor gefunden!"
|
6033 |
+
|
6034 |
+
# @ backwpup
|
6035 |
+
#: ../inc/pro/class-destination-sugarsync.php:25
|
6036 |
+
#: ../inc/pro/class-destination-sugarsync.php:84
|
6037 |
+
msgid "Sugarsync authenticate!"
|
6038 |
+
msgstr "Sugarsync Authentifizierung!"
|
6039 |
+
|
6040 |
+
# @ backwpup
|
6041 |
+
#: ../inc/pro/class-destination-sugarsync.php:36
|
6042 |
+
msgid "Root:"
|
6043 |
+
msgstr "Root:"
|
6044 |
+
|
6045 |
+
# @ backwpup
|
6046 |
+
#: ../inc/pro/class-marketpress-autoupdate.php:344
|
6047 |
+
#, php-format
|
6048 |
+
msgctxt "%s = plugin name"
|
6049 |
+
msgid "Your license for the plugin %s is not valid. The auto-update has been deactivated. Please insert a valid key on MarketPress Dashboard. Or if you want to add an other valid code use the form below."
|
6050 |
+
msgstr "Dein Lizenzschlüssel für das Plugin %s ist ungültig. Automatische Updates wurden deaktiviert. Gib bitte einen gültigen Schlüssel im MarketPress Dashboard ein. Wenn du einen anderen gültigen Schlüssel hinzufügen möchtest, nutze bitte das Formular (unten)."
|
6051 |
+
|
6052 |
+
# @ backwpup
|
6053 |
+
#: ../inc/pro/class-marketpress-autoupdate.php:356
|
6054 |
+
msgid "You are currently using a valid key for this plugin. You are able to renew the key in MarketPress Dashboard. Or if you want to add another valid code use the form below."
|
6055 |
+
msgstr "Du verwendest derzeit einen gültigen Lizenzschlüssel für dieses Plugin. Du kannst die Lizenzen im MarketPress Dashboard erneuern. Oder einen anderen gültigen Schlüssel eintragen."
|
6056 |
+
|
6057 |
+
# @ backwpup
|
6058 |
+
#: ../inc/pro/class-marketpress-autoupdate.php:367
|
6059 |
+
#, php-format
|
6060 |
+
msgctxt "%s = plugin name"
|
6061 |
+
msgid "Your license for the plugin %s is not valid. The auto-update has been deactivated."
|
6062 |
+
msgstr "Deine Lizenz für das Plugin %s ist ungültig. Automatische Updates wurden deaktiviert."
|
6063 |
+
|
6064 |
+
# @ backwpup
|
6065 |
+
#: ../inc/pro/class-marketpress-autoupdate.php:379
|
6066 |
+
#, php-format
|
6067 |
+
msgid "You are currently using a valid key for this plugin. You are able to renew the key below or you can delete the key by <a href=\"%s\">clicking here</a>."
|
6068 |
+
msgstr "Du verwendest einen gültigen Lizenzschlüssel für dieses Plugin. Du kannst den Schlüssel unten erneuern oder Löschen <a href=\"%s\">zum Löschen hier klicken</a>."
|
6069 |
+
|
6070 |
+
# @ backwpup
|
6071 |
+
#: ../inc/pro/class-marketpress-autoupdate.php:386
|
6072 |
+
msgid "License Key"
|
6073 |
+
msgstr "Lizenzschlüssel"
|
6074 |
+
|
6075 |
+
# @ backwpup
|
6076 |
+
#: ../inc/pro/class-marketpress-autoupdate.php:389
|
6077 |
+
msgid "Activate"
|
6078 |
+
msgstr "Aktivieren"
|
6079 |
+
|
6080 |
+
# @ backwpup
|
6081 |
+
#: ../inc/pro/class-marketpress-autoupdate.php:558
|
6082 |
+
msgid "The License has been deleted."
|
6083 |
+
msgstr "Die Lizenz wurde gelöscht."
|
6084 |
+
|
6085 |
+
# @ backwpup
|
6086 |
+
#: ../inc/pro/class-marketpress-autoupdate.php:565
|
6087 |
+
msgid "Plugin successfully activated."
|
6088 |
+
msgstr "Plugin erfolgreich aktiviert."
|
6089 |
+
|
6090 |
+
# @ backwpup
|
6091 |
+
#: ../inc/pro/class-marketpress-autoupdate.php:572
|
6092 |
+
msgid "The entered license key is wrong."
|
6093 |
+
msgstr "Der eingegebene Lizenzschlüssel ist falsch."
|
6094 |
+
|
6095 |
+
# @ backwpup
|
6096 |
+
#: ../inc/pro/class-marketpress-autoupdate.php:579
|
6097 |
+
msgid "You have reached the limit of urls. Please update your license at <a href=\"http://marketpress.com\">marketpress.com</a>."
|
6098 |
+
msgstr "Du hast das Limit der URLs erreicht. Bitte aktualisiere deine Lizenz auf <a href=\"http://marketpress.de\">marketpress.de</a>."
|
6099 |
+
|
6100 |
+
# @ backwpup
|
6101 |
+
#: ../inc/pro/class-marketpress-autoupdate.php:586
|
6102 |
+
msgid "Something went wrong. Please try again later or contact the <a href=\"http://marketpress.com/support/\">MarketPress Team</a>."
|
6103 |
+
msgstr "Etwas ist falsch gelaufen. Bitte versuche es erneut oder kontaktiere das <a href=\"http://marketpress.de/support/\">MarketPress Team</a>."
|
6104 |
+
|
6105 |
+
# @ backwpup
|
6106 |
+
#: ../inc/pro/class-marketpress-autoupdate.php:593
|
6107 |
+
msgid "Due to a wrong license you are not allowed to activate this plugin. Please update your license at <a href=\"http://marketpress.com\">marketpress.com</a>."
|
6108 |
+
msgstr "Dir ist nicht erlaubt, das Plugin zu aktivieren, mit einer falschen Lizenz. Bitte aktualisiere deine Lizenz auf <a href=\"http://marketpress.de\">MarketPress.de</a>."
|
6109 |
+
|
languages/backwpup-ja.mo
CHANGED
Binary file
|
languages/backwpup-ja.po
CHANGED
@@ -3,7 +3,7 @@ msgstr ""
|
|
3 |
"Project-Id-Version: BackWPup v3.1.3\n"
|
4 |
"Report-Msgid-Bugs-To: \n"
|
5 |
"POT-Creation-Date: \n"
|
6 |
-
"PO-Revision-Date: 2014-11-
|
7 |
"Last-Translator: stranger-jp <wordpress.stranger.jp@gmail.com>\n"
|
8 |
"Language-Team: stranger-jp <wordpress.stranger.jp@gmail.com>\n"
|
9 |
"MIME-Version: 1.0\n"
|
@@ -158,7 +158,7 @@ msgid "Create Account"
|
|
158 |
msgstr "アカウントを作成"
|
159 |
|
160 |
msgid "Authenticated!"
|
161 |
-
msgstr "
|
162 |
|
163 |
msgid "Backup settings"
|
164 |
msgstr "バックアップ設定"
|
@@ -524,7 +524,7 @@ msgid "Amazon S3: South America (Sao Paulo)"
|
|
524 |
msgstr "Amazon S3: 南米(サンパウロ)"
|
525 |
|
526 |
msgid "Google Storage (Interoperable Access)"
|
527 |
-
msgstr "Googleストレージ(
|
528 |
|
529 |
msgid "Dream Host Cloud Storage"
|
530 |
msgstr "Dream Hostクラウドストレージ"
|
@@ -557,13 +557,13 @@ msgid "Amazon: Storage Class"
|
|
557 |
msgstr "Amazon: ストレージクラス"
|
558 |
|
559 |
msgid "Reduced Redundancy"
|
560 |
-
msgstr "
|
561 |
|
562 |
msgid "Server side encryption"
|
563 |
-
msgstr "
|
564 |
|
565 |
msgid "Save files encrypted (AES256) on server."
|
566 |
-
msgstr "
|
567 |
|
568 |
msgid "Bucket %1$s created in %2$s."
|
569 |
msgstr "バケット%1$sは%2$sで作成しました。"
|
@@ -578,7 +578,7 @@ msgid "%d. Trying to send backup file to S3 Service …"
|
|
578 |
msgstr "%d. S3サービスにバックアップファイルを送信..."
|
579 |
|
580 |
msgid "Connected to S3 Bucket \"%1$s\" in %2$s"
|
581 |
-
msgstr "S3
|
582 |
|
583 |
msgid "S3 Bucket \"%s\" does not exist!"
|
584 |
msgstr "S3バケット\"%s\"は存在しません!"
|
@@ -590,10 +590,10 @@ msgid "Backup transferred to %s."
|
|
590 |
msgstr "バックアップは%sに転送されます。"
|
591 |
|
592 |
msgid "Cannot transfer backup to S3! (%1$d) %2$s"
|
593 |
-
msgstr "S3
|
594 |
|
595 |
msgid "Cannot delete backup from %s."
|
596 |
-
msgstr "%s
|
597 |
|
598 |
msgid "Missing secret access key!"
|
599 |
msgstr "シークレットアクセスキーが見つかりません!"
|
@@ -1232,7 +1232,7 @@ msgid "Check the installation"
|
|
1232 |
msgstr "インストール確認"
|
1233 |
|
1234 |
msgid "Run the created job"
|
1235 |
-
msgstr "
|
1236 |
|
1237 |
msgid "Check the job log"
|
1238 |
msgstr "ジョブ・ログをチェック"
|
@@ -2078,7 +2078,7 @@ msgid "Setting of MySQLi connection timeout failed"
|
|
2078 |
msgstr "MySQLiの接続タイムアウトの設定に失敗しました"
|
2079 |
|
2080 |
msgid "Setting of MySQLi init command \"%s\" failed"
|
2081 |
-
msgstr "MySQLiの
|
2082 |
|
2083 |
msgid "Start for table backup is not correctly set: %1$s "
|
2084 |
msgstr "テーブルのバックアップの開始が正しく設定されていません: %1$s"
|
@@ -2099,7 +2099,7 @@ msgid "XML ERROR (%s): %s"
|
|
2099 |
msgstr "XMLエラー(%s): %s"
|
2100 |
|
2101 |
msgid "<a href=\"%s\">Add a new backup job</a> and plan what you want to save."
|
2102 |
-
msgstr "<a href=\"%s\">新しいバックアップジョブを追加</a
|
2103 |
|
2104 |
msgid "Add new job"
|
2105 |
msgstr "新規ジョブを追加"
|
@@ -2249,7 +2249,7 @@ msgid "London (LON)"
|
|
2249 |
msgstr "ロンドン (LON)"
|
2250 |
|
2251 |
msgid "manifest.json might be needed for later restoring a backup from this archive."
|
2252 |
-
msgstr "manifest.json
|
2253 |
|
2254 |
msgid "MarketPress"
|
2255 |
msgstr "MarketPress"
|
@@ -2342,7 +2342,7 @@ msgid "XML WARNING (%s): %s"
|
|
2342 |
msgstr "XMLの警告 (%s): %s"
|
2343 |
|
2344 |
msgid "You may have noticed the manifest.json file in this archive."
|
2345 |
-
msgstr "
|
2346 |
|
2347 |
msgctxt "%s = Folder name"
|
2348 |
msgid "Folder %s for archive not found"
|
@@ -2602,7 +2602,7 @@ msgid "Auto = Uses PHP class ZipArchive if available; otherwise uses PclZip.<br
|
|
2602 |
msgstr "自動 = PHPクラスのZipArchiveを可能な場合に使用します。それ以外の場合PclZipを使用します。<br />ZipArchive = 低メモリですが、多くのファイルを同時に開きます。<br />PclZip = 多くのメモリを使用しますが、一度に2つ同時にファイルを開きます。"
|
2603 |
|
2604 |
msgid "Backup database table \"%s\" with \"%s\" records"
|
2605 |
-
msgstr "
|
2606 |
|
2607 |
msgid "File size of “%s” cannot be retrieved. File might be too large and will not be added to queue."
|
2608 |
msgstr "“%s”のファイルサイズを取得できません。ファイルが大きすぎる可能性があり、キューに追加されません。"
|
3 |
"Project-Id-Version: BackWPup v3.1.3\n"
|
4 |
"Report-Msgid-Bugs-To: \n"
|
5 |
"POT-Creation-Date: \n"
|
6 |
+
"PO-Revision-Date: 2014-11-14 22:54+0900\n"
|
7 |
"Last-Translator: stranger-jp <wordpress.stranger.jp@gmail.com>\n"
|
8 |
"Language-Team: stranger-jp <wordpress.stranger.jp@gmail.com>\n"
|
9 |
"MIME-Version: 1.0\n"
|
158 |
msgstr "アカウントを作成"
|
159 |
|
160 |
msgid "Authenticated!"
|
161 |
+
msgstr "認証済み!"
|
162 |
|
163 |
msgid "Backup settings"
|
164 |
msgstr "バックアップ設定"
|
524 |
msgstr "Amazon S3: 南米(サンパウロ)"
|
525 |
|
526 |
msgid "Google Storage (Interoperable Access)"
|
527 |
+
msgstr "Googleストレージ(相互運用可能なアクセス)"
|
528 |
|
529 |
msgid "Dream Host Cloud Storage"
|
530 |
msgstr "Dream Hostクラウドストレージ"
|
557 |
msgstr "Amazon: ストレージクラス"
|
558 |
|
559 |
msgid "Reduced Redundancy"
|
560 |
+
msgstr "減少冗長性"
|
561 |
|
562 |
msgid "Server side encryption"
|
563 |
+
msgstr "サーバー側の暗号化"
|
564 |
|
565 |
msgid "Save files encrypted (AES256) on server."
|
566 |
+
msgstr "サーバー上でファイルを暗号化(AES256)して保存"
|
567 |
|
568 |
msgid "Bucket %1$s created in %2$s."
|
569 |
msgstr "バケット%1$sは%2$sで作成しました。"
|
578 |
msgstr "%d. S3サービスにバックアップファイルを送信..."
|
579 |
|
580 |
msgid "Connected to S3 Bucket \"%1$s\" in %2$s"
|
581 |
+
msgstr "S3バケットに接続済 \"%1$s \"%2$s"
|
582 |
|
583 |
msgid "S3 Bucket \"%s\" does not exist!"
|
584 |
msgstr "S3バケット\"%s\"は存在しません!"
|
590 |
msgstr "バックアップは%sに転送されます。"
|
591 |
|
592 |
msgid "Cannot transfer backup to S3! (%1$d) %2$s"
|
593 |
+
msgstr "S3にバックアップを転送できません! (%1$d) %2$s"
|
594 |
|
595 |
msgid "Cannot delete backup from %s."
|
596 |
+
msgstr "%sからバックアップを削除できません。"
|
597 |
|
598 |
msgid "Missing secret access key!"
|
599 |
msgstr "シークレットアクセスキーが見つかりません!"
|
1232 |
msgstr "インストール確認"
|
1233 |
|
1234 |
msgid "Run the created job"
|
1235 |
+
msgstr "作成したジョブを実行"
|
1236 |
|
1237 |
msgid "Check the job log"
|
1238 |
msgstr "ジョブ・ログをチェック"
|
2078 |
msgstr "MySQLiの接続タイムアウトの設定に失敗しました"
|
2079 |
|
2080 |
msgid "Setting of MySQLi init command \"%s\" failed"
|
2081 |
+
msgstr "MySQLiのinitコマンド\"%s\"の設定に失敗しました。"
|
2082 |
|
2083 |
msgid "Start for table backup is not correctly set: %1$s "
|
2084 |
msgstr "テーブルのバックアップの開始が正しく設定されていません: %1$s"
|
2099 |
msgstr "XMLエラー(%s): %s"
|
2100 |
|
2101 |
msgid "<a href=\"%s\">Add a new backup job</a> and plan what you want to save."
|
2102 |
+
msgstr "<a href=\"%s\">新しいバックアップジョブを追加</a>して保存したいものを計画します。"
|
2103 |
|
2104 |
msgid "Add new job"
|
2105 |
msgstr "新規ジョブを追加"
|
2249 |
msgstr "ロンドン (LON)"
|
2250 |
|
2251 |
msgid "manifest.json might be needed for later restoring a backup from this archive."
|
2252 |
+
msgstr "manifest.jsonは、このアーカイブからバックアップを復元するために必要とする場合があります。"
|
2253 |
|
2254 |
msgid "MarketPress"
|
2255 |
msgstr "MarketPress"
|
2342 |
msgstr "XMLの警告 (%s): %s"
|
2343 |
|
2344 |
msgid "You may have noticed the manifest.json file in this archive."
|
2345 |
+
msgstr "このアーカイブ内のmanifest.jsonファイルに気づいているかもしれません。"
|
2346 |
|
2347 |
msgctxt "%s = Folder name"
|
2348 |
msgid "Folder %s for archive not found"
|
2602 |
msgstr "自動 = PHPクラスのZipArchiveを可能な場合に使用します。それ以外の場合PclZipを使用します。<br />ZipArchive = 低メモリですが、多くのファイルを同時に開きます。<br />PclZip = 多くのメモリを使用しますが、一度に2つ同時にファイルを開きます。"
|
2603 |
|
2604 |
msgid "Backup database table \"%s\" with \"%s\" records"
|
2605 |
+
msgstr "データベーステーブルのバックアップ \"%s\"と\"%s\"レコード"
|
2606 |
|
2607 |
msgid "File size of “%s” cannot be retrieved. File might be too large and will not be added to queue."
|
2608 |
msgstr "“%s”のファイルサイズを取得できません。ファイルが大きすぎる可能性があり、キューに追加されません。"
|
license.txt
DELETED
@@ -1,674 +0,0 @@
|
|
1 |
-
GNU GENERAL PUBLIC LICENSE
|
2 |
-
Version 3, 29 June 2007
|
3 |
-
|
4 |
-
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
5 |
-
Everyone is permitted to copy and distribute verbatim copies
|
6 |
-
of this license document, but changing it is not allowed.
|
7 |
-
|
8 |
-
Preamble
|
9 |
-
|
10 |
-
The GNU General Public License is a free, copyleft license for
|
11 |
-
software and other kinds of works.
|
12 |
-
|
13 |
-
The licenses for most software and other practical works are designed
|
14 |
-
to take away your freedom to share and change the works. By contrast,
|
15 |
-
the GNU General Public License is intended to guarantee your freedom to
|
16 |
-
share and change all versions of a program--to make sure it remains free
|
17 |
-
software for all its users. We, the Free Software Foundation, use the
|
18 |
-
GNU General Public License for most of our software; it applies also to
|
19 |
-
any other work released this way by its authors. You can apply it to
|
20 |
-
your programs, too.
|
21 |
-
|
22 |
-
When we speak of free software, we are referring to freedom, not
|
23 |
-
price. Our General Public Licenses are designed to make sure that you
|
24 |
-
have the freedom to distribute copies of free software (and charge for
|
25 |
-
them if you wish), that you receive source code or can get it if you
|
26 |
-
want it, that you can change the software or use pieces of it in new
|
27 |
-
free programs, and that you know you can do these things.
|
28 |
-
|
29 |
-
To protect your rights, we need to prevent others from denying you
|
30 |
-
these rights or asking you to surrender the rights. Therefore, you have
|
31 |
-
certain responsibilities if you distribute copies of the software, or if
|
32 |
-
you modify it: responsibilities to respect the freedom of others.
|
33 |
-
|
34 |
-
For example, if you distribute copies of such a program, whether
|
35 |
-
gratis or for a fee, you must pass on to the recipients the same
|
36 |
-
freedoms that you received. You must make sure that they, too, receive
|
37 |
-
or can get the source code. And you must show them these terms so they
|
38 |
-
know their rights.
|
39 |
-
|
40 |
-
Developers that use the GNU GPL protect your rights with two steps:
|
41 |
-
(1) assert copyright on the software, and (2) offer you this License
|
42 |
-
giving you legal permission to copy, distribute and/or modify it.
|
43 |
-
|
44 |
-
For the developers' and authors' protection, the GPL clearly explains
|
45 |
-
that there is no warranty for this free software. For both users' and
|
46 |
-
authors' sake, the GPL requires that modified versions be marked as
|
47 |
-
changed, so that their problems will not be attributed erroneously to
|
48 |
-
authors of previous versions.
|
49 |
-
|
50 |
-
Some devices are designed to deny users access to install or run
|
51 |
-
modified versions of the software inside them, although the manufacturer
|
52 |
-
can do so. This is fundamentally incompatible with the aim of
|
53 |
-
protecting users' freedom to change the software. The systematic
|
54 |
-
pattern of such abuse occurs in the area of products for individuals to
|
55 |
-
use, which is precisely where it is most unacceptable. Therefore, we
|
56 |
-
have designed this version of the GPL to prohibit the practice for those
|
57 |
-
products. If such problems arise substantially in other domains, we
|
58 |
-
stand ready to extend this provision to those domains in future versions
|
59 |
-
of the GPL, as needed to protect the freedom of users.
|
60 |
-
|
61 |
-
Finally, every program is threatened constantly by software patents.
|
62 |
-
States should not allow patents to restrict development and use of
|
63 |
-
software on general-purpose computers, but in those that do, we wish to
|
64 |
-
avoid the special danger that patents applied to a free program could
|
65 |
-
make it effectively proprietary. To prevent this, the GPL assures that
|
66 |
-
patents cannot be used to render the program non-free.
|
67 |
-
|
68 |
-
The precise terms and conditions for copying, distribution and
|
69 |
-
modification follow.
|
70 |
-
|
71 |
-
TERMS AND CONDITIONS
|
72 |
-
|
73 |
-
0. Definitions.
|
74 |
-
|
75 |
-
"This License" refers to version 3 of the GNU General Public License.
|
76 |
-
|
77 |
-
"Copyright" also means copyright-like laws that apply to other kinds of
|
78 |
-
works, such as semiconductor masks.
|
79 |
-
|
80 |
-
"The Program" refers to any copyrightable work licensed under this
|
81 |
-
License. Each licensee is addressed as "you". "Licensees" and
|
82 |
-
"recipients" may be individuals or organizations.
|
83 |
-
|
84 |
-
To "modify" a work means to copy from or adapt all or part of the work
|
85 |
-
in a fashion requiring copyright permission, other than the making of an
|
86 |
-
exact copy. The resulting work is called a "modified version" of the
|
87 |
-
earlier work or a work "based on" the earlier work.
|
88 |
-
|
89 |
-
A "covered work" means either the unmodified Program or a work based
|
90 |
-
on the Program.
|
91 |
-
|
92 |
-
To "propagate" a work means to do anything with it that, without
|
93 |
-
permission, would make you directly or secondarily liable for
|
94 |
-
infringement under applicable copyright law, except executing it on a
|
95 |
-
computer or modifying a private copy. Propagation includes copying,
|
96 |
-
distribution (with or without modification), making available to the
|
97 |
-
public, and in some countries other activities as well.
|
98 |
-
|
99 |
-
To "convey" a work means any kind of propagation that enables other
|
100 |
-
parties to make or receive copies. Mere interaction with a user through
|
101 |
-
a computer network, with no transfer of a copy, is not conveying.
|
102 |
-
|
103 |
-
An interactive user interface displays "Appropriate Legal Notices"
|
104 |
-
to the extent that it includes a convenient and prominently visible
|
105 |
-
feature that (1) displays an appropriate copyright notice, and (2)
|
106 |
-
tells the user that there is no warranty for the work (except to the
|
107 |
-
extent that warranties are provided), that licensees may convey the
|
108 |
-
work under this License, and how to view a copy of this License. If
|
109 |
-
the interface presents a list of user commands or options, such as a
|
110 |
-
menu, a prominent item in the list meets this criterion.
|
111 |
-
|
112 |
-
1. Source Code.
|
113 |
-
|
114 |
-
The "source code" for a work means the preferred form of the work
|
115 |
-
for making modifications to it. "Object code" means any non-source
|
116 |
-
form of a work.
|
117 |
-
|
118 |
-
A "Standard Interface" means an interface that either is an official
|
119 |
-
standard defined by a recognized standards body, or, in the case of
|
120 |
-
interfaces specified for a particular programming language, one that
|
121 |
-
is widely used among developers working in that language.
|
122 |
-
|
123 |
-
The "System Libraries" of an executable work include anything, other
|
124 |
-
than the work as a whole, that (a) is included in the normal form of
|
125 |
-
packaging a Major Component, but which is not part of that Major
|
126 |
-
Component, and (b) serves only to enable use of the work with that
|
127 |
-
Major Component, or to implement a Standard Interface for which an
|
128 |
-
implementation is available to the public in source code form. A
|
129 |
-
"Major Component", in this context, means a major essential component
|
130 |
-
(kernel, window system, and so on) of the specific operating system
|
131 |
-
(if any) on which the executable work runs, or a compiler used to
|
132 |
-
produce the work, or an object code interpreter used to run it.
|
133 |
-
|
134 |
-
The "Corresponding Source" for a work in object code form means all
|
135 |
-
the source code needed to generate, install, and (for an executable
|
136 |
-
work) run the object code and to modify the work, including scripts to
|
137 |
-
control those activities. However, it does not include the work's
|
138 |
-
System Libraries, or general-purpose tools or generally available free
|
139 |
-
programs which are used unmodified in performing those activities but
|
140 |
-
which are not part of the work. For example, Corresponding Source
|
141 |
-
includes interface definition files associated with source files for
|
142 |
-
the work, and the source code for shared libraries and dynamically
|
143 |
-
linked subprograms that the work is specifically designed to require,
|
144 |
-
such as by intimate data communication or control flow between those
|
145 |
-
subprograms and other parts of the work.
|
146 |
-
|
147 |
-
The Corresponding Source need not include anything that users
|
148 |
-
can regenerate automatically from other parts of the Corresponding
|
149 |
-
Source.
|
150 |
-
|
151 |
-
The Corresponding Source for a work in source code form is that
|
152 |
-
same work.
|
153 |
-
|
154 |
-
2. Basic Permissions.
|
155 |
-
|
156 |
-
All rights granted under this License are granted for the term of
|
157 |
-
copyright on the Program, and are irrevocable provided the stated
|
158 |
-
conditions are met. This License explicitly affirms your unlimited
|
159 |
-
permission to run the unmodified Program. The output from running a
|
160 |
-
covered work is covered by this License only if the output, given its
|
161 |
-
content, constitutes a covered work. This License acknowledges your
|
162 |
-
rights of fair use or other equivalent, as provided by copyright law.
|
163 |
-
|
164 |
-
You may make, run and propagate covered works that you do not
|
165 |
-
convey, without conditions so long as your license otherwise remains
|
166 |
-
in force. You may convey covered works to others for the sole purpose
|
167 |
-
of having them make modifications exclusively for you, or provide you
|
168 |
-
with facilities for running those works, provided that you comply with
|
169 |
-
the terms of this License in conveying all material for which you do
|
170 |
-
not control copyright. Those thus making or running the covered works
|
171 |
-
for you must do so exclusively on your behalf, under your direction
|
172 |
-
and control, on terms that prohibit them from making any copies of
|
173 |
-
your copyrighted material outside their relationship with you.
|
174 |
-
|
175 |
-
Conveying under any other circumstances is permitted solely under
|
176 |
-
the conditions stated below. Sublicensing is not allowed; section 10
|
177 |
-
makes it unnecessary.
|
178 |
-
|
179 |
-
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
180 |
-
|
181 |
-
No covered work shall be deemed part of an effective technological
|
182 |
-
measure under any applicable law fulfilling obligations under article
|
183 |
-
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
184 |
-
similar laws prohibiting or restricting circumvention of such
|
185 |
-
measures.
|
186 |
-
|
187 |
-
When you convey a covered work, you waive any legal power to forbid
|
188 |
-
circumvention of technological measures to the extent such circumvention
|
189 |
-
is effected by exercising rights under this License with respect to
|
190 |
-
the covered work, and you disclaim any intention to limit operation or
|
191 |
-
modification of the work as a means of enforcing, against the work's
|
192 |
-
users, your or third parties' legal rights to forbid circumvention of
|
193 |
-
technological measures.
|
194 |
-
|
195 |
-
4. Conveying Verbatim Copies.
|
196 |
-
|
197 |
-
You may convey verbatim copies of the Program's source code as you
|
198 |
-
receive it, in any medium, provided that you conspicuously and
|
199 |
-
appropriately publish on each copy an appropriate copyright notice;
|
200 |
-
keep intact all notices stating that this License and any
|
201 |
-
non-permissive terms added in accord with section 7 apply to the code;
|
202 |
-
keep intact all notices of the absence of any warranty; and give all
|
203 |
-
recipients a copy of this License along with the Program.
|
204 |
-
|
205 |
-
You may charge any price or no price for each copy that you convey,
|
206 |
-
and you may offer support or warranty protection for a fee.
|
207 |
-
|
208 |
-
5. Conveying Modified Source Versions.
|
209 |
-
|
210 |
-
You may convey a work based on the Program, or the modifications to
|
211 |
-
produce it from the Program, in the form of source code under the
|
212 |
-
terms of section 4, provided that you also meet all of these conditions:
|
213 |
-
|
214 |
-
a) The work must carry prominent notices stating that you modified
|
215 |
-
it, and giving a relevant date.
|
216 |
-
|
217 |
-
b) The work must carry prominent notices stating that it is
|
218 |
-
released under this License and any conditions added under section
|
219 |
-
7. This requirement modifies the requirement in section 4 to
|
220 |
-
"keep intact all notices".
|
221 |
-
|
222 |
-
c) You must license the entire work, as a whole, under this
|
223 |
-
License to anyone who comes into possession of a copy. This
|
224 |
-
License will therefore apply, along with any applicable section 7
|
225 |
-
additional terms, to the whole of the work, and all its parts,
|
226 |
-
regardless of how they are packaged. This License gives no
|
227 |
-
permission to license the work in any other way, but it does not
|
228 |
-
invalidate such permission if you have separately received it.
|
229 |
-
|
230 |
-
d) If the work has interactive user interfaces, each must display
|
231 |
-
Appropriate Legal Notices; however, if the Program has interactive
|
232 |
-
interfaces that do not display Appropriate Legal Notices, your
|
233 |
-
work need not make them do so.
|
234 |
-
|
235 |
-
A compilation of a covered work with other separate and independent
|
236 |
-
works, which are not by their nature extensions of the covered work,
|
237 |
-
and which are not combined with it such as to form a larger program,
|
238 |
-
in or on a volume of a storage or distribution medium, is called an
|
239 |
-
"aggregate" if the compilation and its resulting copyright are not
|
240 |
-
used to limit the access or legal rights of the compilation's users
|
241 |
-
beyond what the individual works permit. Inclusion of a covered work
|
242 |
-
in an aggregate does not cause this License to apply to the other
|
243 |
-
parts of the aggregate.
|
244 |
-
|
245 |
-
6. Conveying Non-Source Forms.
|
246 |
-
|
247 |
-
You may convey a covered work in object code form under the terms
|
248 |
-
of sections 4 and 5, provided that you also convey the
|
249 |
-
machine-readable Corresponding Source under the terms of this License,
|
250 |
-
in one of these ways:
|
251 |
-
|
252 |
-
a) Convey the object code in, or embodied in, a physical product
|
253 |
-
(including a physical distribution medium), accompanied by the
|
254 |
-
Corresponding Source fixed on a durable physical medium
|
255 |
-
customarily used for software interchange.
|
256 |
-
|
257 |
-
b) Convey the object code in, or embodied in, a physical product
|
258 |
-
(including a physical distribution medium), accompanied by a
|
259 |
-
written offer, valid for at least three years and valid for as
|
260 |
-
long as you offer spare parts or customer support for that product
|
261 |
-
model, to give anyone who possesses the object code either (1) a
|
262 |
-
copy of the Corresponding Source for all the software in the
|
263 |
-
product that is covered by this License, on a durable physical
|
264 |
-
medium customarily used for software interchange, for a price no
|
265 |
-
more than your reasonable cost of physically performing this
|
266 |
-
conveying of source, or (2) access to copy the
|
267 |
-
Corresponding Source from a network server at no charge.
|
268 |
-
|
269 |
-
c) Convey individual copies of the object code with a copy of the
|
270 |
-
written offer to provide the Corresponding Source. This
|
271 |
-
alternative is allowed only occasionally and noncommercially, and
|
272 |
-
only if you received the object code with such an offer, in accord
|
273 |
-
with subsection 6b.
|
274 |
-
|
275 |
-
d) Convey the object code by offering access from a designated
|
276 |
-
place (gratis or for a charge), and offer equivalent access to the
|
277 |
-
Corresponding Source in the same way through the same place at no
|
278 |
-
further charge. You need not require recipients to copy the
|
279 |
-
Corresponding Source along with the object code. If the place to
|
280 |
-
copy the object code is a network server, the Corresponding Source
|
281 |
-
may be on a different server (operated by you or a third party)
|
282 |
-
that supports equivalent copying facilities, provided you maintain
|
283 |
-
clear directions next to the object code saying where to find the
|
284 |
-
Corresponding Source. Regardless of what server hosts the
|
285 |
-
Corresponding Source, you remain obligated to ensure that it is
|
286 |
-
available for as long as needed to satisfy these requirements.
|
287 |
-
|
288 |
-
e) Convey the object code using peer-to-peer transmission, provided
|
289 |
-
you inform other peers where the object code and Corresponding
|
290 |
-
Source of the work are being offered to the general public at no
|
291 |
-
charge under subsection 6d.
|
292 |
-
|
293 |
-
A separable portion of the object code, whose source code is excluded
|
294 |
-
from the Corresponding Source as a System Library, need not be
|
295 |
-
included in conveying the object code work.
|
296 |
-
|
297 |
-
A "User Product" is either (1) a "consumer product", which means any
|
298 |
-
tangible personal property which is normally used for personal, family,
|
299 |
-
or household purposes, or (2) anything designed or sold for incorporation
|
300 |
-
into a dwelling. In determining whether a product is a consumer product,
|
301 |
-
doubtful cases shall be resolved in favor of coverage. For a particular
|
302 |
-
product received by a particular user, "normally used" refers to a
|
303 |
-
typical or common use of that class of product, regardless of the status
|
304 |
-
of the particular user or of the way in which the particular user
|
305 |
-
actually uses, or expects or is expected to use, the product. A product
|
306 |
-
is a consumer product regardless of whether the product has substantial
|
307 |
-
commercial, industrial or non-consumer uses, unless such uses represent
|
308 |
-
the only significant mode of use of the product.
|
309 |
-
|
310 |
-
"Installation Information" for a User Product means any methods,
|
311 |
-
procedures, authorization keys, or other information required to install
|
312 |
-
and execute modified versions of a covered work in that User Product from
|
313 |
-
a modified version of its Corresponding Source. The information must
|
314 |
-
suffice to ensure that the continued functioning of the modified object
|
315 |
-
code is in no case prevented or interfered with solely because
|
316 |
-
modification has been made.
|
317 |
-
|
318 |
-
If you convey an object code work under this section in, or with, or
|
319 |
-
specifically for use in, a User Product, and the conveying occurs as
|
320 |
-
part of a transaction in which the right of possession and use of the
|
321 |
-
User Product is transferred to the recipient in perpetuity or for a
|
322 |
-
fixed term (regardless of how the transaction is characterized), the
|
323 |
-
Corresponding Source conveyed under this section must be accompanied
|
324 |
-
by the Installation Information. But this requirement does not apply
|
325 |
-
if neither you nor any third party retains the ability to install
|
326 |
-
modified object code on the User Product (for example, the work has
|
327 |
-
been installed in ROM).
|
328 |
-
|
329 |
-
The requirement to provide Installation Information does not include a
|
330 |
-
requirement to continue to provide support service, warranty, or updates
|
331 |
-
for a work that has been modified or installed by the recipient, or for
|
332 |
-
the User Product in which it has been modified or installed. Access to a
|
333 |
-
network may be denied when the modification itself materially and
|
334 |
-
adversely affects the operation of the network or violates the rules and
|
335 |
-
protocols for communication across the network.
|
336 |
-
|
337 |
-
Corresponding Source conveyed, and Installation Information provided,
|
338 |
-
in accord with this section must be in a format that is publicly
|
339 |
-
documented (and with an implementation available to the public in
|
340 |
-
source code form), and must require no special password or key for
|
341 |
-
unpacking, reading or copying.
|
342 |
-
|
343 |
-
7. Additional Terms.
|
344 |
-
|
345 |
-
"Additional permissions" are terms that supplement the terms of this
|
346 |
-
License by making exceptions from one or more of its conditions.
|
347 |
-
Additional permissions that are applicable to the entire Program shall
|
348 |
-
be treated as though they were included in this License, to the extent
|
349 |
-
that they are valid under applicable law. If additional permissions
|
350 |
-
apply only to part of the Program, that part may be used separately
|
351 |
-
under those permissions, but the entire Program remains governed by
|
352 |
-
this License without regard to the additional permissions.
|
353 |
-
|
354 |
-
When you convey a copy of a covered work, you may at your option
|
355 |
-
remove any additional permissions from that copy, or from any part of
|
356 |
-
it. (Additional permissions may be written to require their own
|
357 |
-
removal in certain cases when you modify the work.) You may place
|
358 |
-
additional permissions on material, added by you to a covered work,
|
359 |
-
for which you have or can give appropriate copyright permission.
|
360 |
-
|
361 |
-
Notwithstanding any other provision of this License, for material you
|
362 |
-
add to a covered work, you may (if authorized by the copyright holders of
|
363 |
-
that material) supplement the terms of this License with terms:
|
364 |
-
|
365 |
-
a) Disclaiming warranty or limiting liability differently from the
|
366 |
-
terms of sections 15 and 16 of this License; or
|
367 |
-
|
368 |
-
b) Requiring preservation of specified reasonable legal notices or
|
369 |
-
author attributions in that material or in the Appropriate Legal
|
370 |
-
Notices displayed by works containing it; or
|
371 |
-
|
372 |
-
c) Prohibiting misrepresentation of the origin of that material, or
|
373 |
-
requiring that modified versions of such material be marked in
|
374 |
-
reasonable ways as different from the original version; or
|
375 |
-
|
376 |
-
d) Limiting the use for publicity purposes of names of licensors or
|
377 |
-
authors of the material; or
|
378 |
-
|
379 |
-
e) Declining to grant rights under trademark law for use of some
|
380 |
-
trade names, trademarks, or service marks; or
|
381 |
-
|
382 |
-
f) Requiring indemnification of licensors and authors of that
|
383 |
-
material by anyone who conveys the material (or modified versions of
|
384 |
-
it) with contractual assumptions of liability to the recipient, for
|
385 |
-
any liability that these contractual assumptions directly impose on
|
386 |
-
those licensors and authors.
|
387 |
-
|
388 |
-
All other non-permissive additional terms are considered "further
|
389 |
-
restrictions" within the meaning of section 10. If the Program as you
|
390 |
-
received it, or any part of it, contains a notice stating that it is
|
391 |
-
governed by this License along with a term that is a further
|
392 |
-
restriction, you may remove that term. If a license document contains
|
393 |
-
a further restriction but permits relicensing or conveying under this
|
394 |
-
License, you may add to a covered work material governed by the terms
|
395 |
-
of that license document, provided that the further restriction does
|
396 |
-
not survive such relicensing or conveying.
|
397 |
-
|
398 |
-
If you add terms to a covered work in accord with this section, you
|
399 |
-
must place, in the relevant source files, a statement of the
|
400 |
-
additional terms that apply to those files, or a notice indicating
|
401 |
-
where to find the applicable terms.
|
402 |
-
|
403 |
-
Additional terms, permissive or non-permissive, may be stated in the
|
404 |
-
form of a separately written license, or stated as exceptions;
|
405 |
-
the above requirements apply either way.
|
406 |
-
|
407 |
-
8. Termination.
|
408 |
-
|
409 |
-
You may not propagate or modify a covered work except as expressly
|
410 |
-
provided under this License. Any attempt otherwise to propagate or
|
411 |
-
modify it is void, and will automatically terminate your rights under
|
412 |
-
this License (including any patent licenses granted under the third
|
413 |
-
paragraph of section 11).
|
414 |
-
|
415 |
-
However, if you cease all violation of this License, then your
|
416 |
-
license from a particular copyright holder is reinstated (a)
|
417 |
-
provisionally, unless and until the copyright holder explicitly and
|
418 |
-
finally terminates your license, and (b) permanently, if the copyright
|
419 |
-
holder fails to notify you of the violation by some reasonable means
|
420 |
-
prior to 60 days after the cessation.
|
421 |
-
|
422 |
-
Moreover, your license from a particular copyright holder is
|
423 |
-
reinstated permanently if the copyright holder notifies you of the
|
424 |
-
violation by some reasonable means, this is the first time you have
|
425 |
-
received notice of violation of this License (for any work) from that
|
426 |
-
copyright holder, and you cure the violation prior to 30 days after
|
427 |
-
your receipt of the notice.
|
428 |
-
|
429 |
-
Termination of your rights under this section does not terminate the
|
430 |
-
licenses of parties who have received copies or rights from you under
|
431 |
-
this License. If your rights have been terminated and not permanently
|
432 |
-
reinstated, you do not qualify to receive new licenses for the same
|
433 |
-
material under section 10.
|
434 |
-
|
435 |
-
9. Acceptance Not Required for Having Copies.
|
436 |
-
|
437 |
-
You are not required to accept this License in order to receive or
|
438 |
-
run a copy of the Program. Ancillary propagation of a covered work
|
439 |
-
occurring solely as a consequence of using peer-to-peer transmission
|
440 |
-
to receive a copy likewise does not require acceptance. However,
|
441 |
-
nothing other than this License grants you permission to propagate or
|
442 |
-
modify any covered work. These actions infringe copyright if you do
|
443 |
-
not accept this License. Therefore, by modifying or propagating a
|
444 |
-
covered work, you indicate your acceptance of this License to do so.
|
445 |
-
|
446 |
-
10. Automatic Licensing of Downstream Recipients.
|
447 |
-
|
448 |
-
Each time you convey a covered work, the recipient automatically
|
449 |
-
receives a license from the original licensors, to run, modify and
|
450 |
-
propagate that work, subject to this License. You are not responsible
|
451 |
-
for enforcing compliance by third parties with this License.
|
452 |
-
|
453 |
-
An "entity transaction" is a transaction transferring control of an
|
454 |
-
organization, or substantially all assets of one, or subdividing an
|
455 |
-
organization, or merging organizations. If propagation of a covered
|
456 |
-
work results from an entity transaction, each party to that
|
457 |
-
transaction who receives a copy of the work also receives whatever
|
458 |
-
licenses to the work the party's predecessor in interest had or could
|
459 |
-
give under the previous paragraph, plus a right to possession of the
|
460 |
-
Corresponding Source of the work from the predecessor in interest, if
|
461 |
-
the predecessor has it or can get it with reasonable efforts.
|
462 |
-
|
463 |
-
You may not impose any further restrictions on the exercise of the
|
464 |
-
rights granted or affirmed under this License. For example, you may
|
465 |
-
not impose a license fee, royalty, or other charge for exercise of
|
466 |
-
rights granted under this License, and you may not initiate litigation
|
467 |
-
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
468 |
-
any patent claim is infringed by making, using, selling, offering for
|
469 |
-
sale, or importing the Program or any portion of it.
|
470 |
-
|
471 |
-
11. Patents.
|
472 |
-
|
473 |
-
A "contributor" is a copyright holder who authorizes use under this
|
474 |
-
License of the Program or a work on which the Program is based. The
|
475 |
-
work thus licensed is called the contributor's "contributor version".
|
476 |
-
|
477 |
-
A contributor's "essential patent claims" are all patent claims
|
478 |
-
owned or controlled by the contributor, whether already acquired or
|
479 |
-
hereafter acquired, that would be infringed by some manner, permitted
|
480 |
-
by this License, of making, using, or selling its contributor version,
|
481 |
-
but do not include claims that would be infringed only as a
|
482 |
-
consequence of further modification of the contributor version. For
|
483 |
-
purposes of this definition, "control" includes the right to grant
|
484 |
-
patent sublicenses in a manner consistent with the requirements of
|
485 |
-
this License.
|
486 |
-
|
487 |
-
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
488 |
-
patent license under the contributor's essential patent claims, to
|
489 |
-
make, use, sell, offer for sale, import and otherwise run, modify and
|
490 |
-
propagate the contents of its contributor version.
|
491 |
-
|
492 |
-
In the following three paragraphs, a "patent license" is any express
|
493 |
-
agreement or commitment, however denominated, not to enforce a patent
|
494 |
-
(such as an express permission to practice a patent or covenant not to
|
495 |
-
sue for patent infringement). To "grant" such a patent license to a
|
496 |
-
party means to make such an agreement or commitment not to enforce a
|
497 |
-
patent against the party.
|
498 |
-
|
499 |
-
If you convey a covered work, knowingly relying on a patent license,
|
500 |
-
and the Corresponding Source of the work is not available for anyone
|
501 |
-
to copy, free of charge and under the terms of this License, through a
|
502 |
-
publicly available network server or other readily accessible means,
|
503 |
-
then you must either (1) cause the Corresponding Source to be so
|
504 |
-
available, or (2) arrange to deprive yourself of the benefit of the
|
505 |
-
patent license for this particular work, or (3) arrange, in a manner
|
506 |
-
consistent with the requirements of this License, to extend the patent
|
507 |
-
license to downstream recipients. "Knowingly relying" means you have
|
508 |
-
actual knowledge that, but for the patent license, your conveying the
|
509 |
-
covered work in a country, or your recipient's use of the covered work
|
510 |
-
in a country, would infringe one or more identifiable patents in that
|
511 |
-
country that you have reason to believe are valid.
|
512 |
-
|
513 |
-
If, pursuant to or in connection with a single transaction or
|
514 |
-
arrangement, you convey, or propagate by procuring conveyance of, a
|
515 |
-
covered work, and grant a patent license to some of the parties
|
516 |
-
receiving the covered work authorizing them to use, propagate, modify
|
517 |
-
or convey a specific copy of the covered work, then the patent license
|
518 |
-
you grant is automatically extended to all recipients of the covered
|
519 |
-
work and works based on it.
|
520 |
-
|
521 |
-
A patent license is "discriminatory" if it does not include within
|
522 |
-
the scope of its coverage, prohibits the exercise of, or is
|
523 |
-
conditioned on the non-exercise of one or more of the rights that are
|
524 |
-
specifically granted under this License. You may not convey a covered
|
525 |
-
work if you are a party to an arrangement with a third party that is
|
526 |
-
in the business of distributing software, under which you make payment
|
527 |
-
to the third party based on the extent of your activity of conveying
|
528 |
-
the work, and under which the third party grants, to any of the
|
529 |
-
parties who would receive the covered work from you, a discriminatory
|
530 |
-
patent license (a) in connection with copies of the covered work
|
531 |
-
conveyed by you (or copies made from those copies), or (b) primarily
|
532 |
-
for and in connection with specific products or compilations that
|
533 |
-
contain the covered work, unless you entered into that arrangement,
|
534 |
-
or that patent license was granted, prior to 28 March 2007.
|
535 |
-
|
536 |
-
Nothing in this License shall be construed as excluding or limiting
|
537 |
-
any implied license or other defenses to infringement that may
|
538 |
-
otherwise be available to you under applicable patent law.
|
539 |
-
|
540 |
-
12. No Surrender of Others' Freedom.
|
541 |
-
|
542 |
-
If conditions are imposed on you (whether by court order, agreement or
|
543 |
-
otherwise) that contradict the conditions of this License, they do not
|
544 |
-
excuse you from the conditions of this License. If you cannot convey a
|
545 |
-
covered work so as to satisfy simultaneously your obligations under this
|
546 |
-
License and any other pertinent obligations, then as a consequence you may
|
547 |
-
not convey it at all. For example, if you agree to terms that obligate you
|
548 |
-
to collect a royalty for further conveying from those to whom you convey
|
549 |
-
the Program, the only way you could satisfy both those terms and this
|
550 |
-
License would be to refrain entirely from conveying the Program.
|
551 |
-
|
552 |
-
13. Use with the GNU Affero General Public License.
|
553 |
-
|
554 |
-
Notwithstanding any other provision of this License, you have
|
555 |
-
permission to link or combine any covered work with a work licensed
|
556 |
-
under version 3 of the GNU Affero General Public License into a single
|
557 |
-
combined work, and to convey the resulting work. The terms of this
|
558 |
-
License will continue to apply to the part which is the covered work,
|
559 |
-
but the special requirements of the GNU Affero General Public License,
|
560 |
-
section 13, concerning interaction through a network will apply to the
|
561 |
-
combination as such.
|
562 |
-
|
563 |
-
14. Revised Versions of this License.
|
564 |
-
|
565 |
-
The Free Software Foundation may publish revised and/or new versions of
|
566 |
-
the GNU General Public License from time to time. Such new versions will
|
567 |
-
be similar in spirit to the present version, but may differ in detail to
|
568 |
-
address new problems or concerns.
|
569 |
-
|
570 |
-
Each version is given a distinguishing version number. If the
|
571 |
-
Program specifies that a certain numbered version of the GNU General
|
572 |
-
Public License "or any later version" applies to it, you have the
|
573 |
-
option of following the terms and conditions either of that numbered
|
574 |
-
version or of any later version published by the Free Software
|
575 |
-
Foundation. If the Program does not specify a version number of the
|
576 |
-
GNU General Public License, you may choose any version ever published
|
577 |
-
by the Free Software Foundation.
|
578 |
-
|
579 |
-
If the Program specifies that a proxy can decide which future
|
580 |
-
versions of the GNU General Public License can be used, that proxy's
|
581 |
-
public statement of acceptance of a version permanently authorizes you
|
582 |
-
to choose that version for the Program.
|
583 |
-
|
584 |
-
Later license versions may give you additional or different
|
585 |
-
permissions. However, no additional obligations are imposed on any
|
586 |
-
author or copyright holder as a result of your choosing to follow a
|
587 |
-
later version.
|
588 |
-
|
589 |
-
15. Disclaimer of Warranty.
|
590 |
-
|
591 |
-
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
592 |
-
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
593 |
-
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
594 |
-
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
595 |
-
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
596 |
-
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
597 |
-
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
598 |
-
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
599 |
-
|
600 |
-
16. Limitation of Liability.
|
601 |
-
|
602 |
-
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
603 |
-
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
604 |
-
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
605 |
-
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
606 |
-
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
607 |
-
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
608 |
-
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
609 |
-
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
610 |
-
SUCH DAMAGES.
|
611 |
-
|
612 |
-
17. Interpretation of Sections 15 and 16.
|
613 |
-
|
614 |
-
If the disclaimer of warranty and limitation of liability provided
|
615 |
-
above cannot be given local legal effect according to their terms,
|
616 |
-
reviewing courts shall apply local law that most closely approximates
|
617 |
-
an absolute waiver of all civil liability in connection with the
|
618 |
-
Program, unless a warranty or assumption of liability accompanies a
|
619 |
-
copy of the Program in return for a fee.
|
620 |
-
|
621 |
-
END OF TERMS AND CONDITIONS
|
622 |
-
|
623 |
-
How to Apply These Terms to Your New Programs
|
624 |
-
|
625 |
-
If you develop a new program, and you want it to be of the greatest
|
626 |
-
possible use to the public, the best way to achieve this is to make it
|
627 |
-
free software which everyone can redistribute and change under these terms.
|
628 |
-
|
629 |
-
To do so, attach the following notices to the program. It is safest
|
630 |
-
to attach them to the start of each source file to most effectively
|
631 |
-
state the exclusion of warranty; and each file should have at least
|
632 |
-
the "copyright" line and a pointer to where the full notice is found.
|
633 |
-
|
634 |
-
<one line to give the program's name and a brief idea of what it does.>
|
635 |
-
Copyright (C) <year> <name of author>
|
636 |
-
|
637 |
-
This program is free software: you can redistribute it and/or modify
|
638 |
-
it under the terms of the GNU General Public License as published by
|
639 |
-
the Free Software Foundation, either version 3 of the License, or
|
640 |
-
(at your option) any later version.
|
641 |
-
|
642 |
-
This program is distributed in the hope that it will be useful,
|
643 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
644 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
645 |
-
GNU General Public License for more details.
|
646 |
-
|
647 |
-
You should have received a copy of the GNU General Public License
|
648 |
-
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
649 |
-
|
650 |
-
Also add information on how to contact you by electronic and paper mail.
|
651 |
-
|
652 |
-
If the program does terminal interaction, make it output a short
|
653 |
-
notice like this when it starts in an interactive mode:
|
654 |
-
|
655 |
-
<program> Copyright (C) <year> <name of author>
|
656 |
-
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
657 |
-
This is free software, and you are welcome to redistribute it
|
658 |
-
under certain conditions; type `show c' for details.
|
659 |
-
|
660 |
-
The hypothetical commands `show w' and `show c' should show the appropriate
|
661 |
-
parts of the General Public License. Of course, your program's commands
|
662 |
-
might be different; for a GUI interface, you would use an "about box".
|
663 |
-
|
664 |
-
You should also get your employer (if you work as a programmer) or school,
|
665 |
-
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
666 |
-
For more information on this, and how to apply and follow the GNU GPL, see
|
667 |
-
<http://www.gnu.org/licenses/>.
|
668 |
-
|
669 |
-
The GNU General Public License does not permit incorporating your program
|
670 |
-
into proprietary programs. If your program is a subroutine library, you
|
671 |
-
may consider it more useful to permit linking proprietary applications with
|
672 |
-
the library. If this is what you want to do, use the GNU Lesser General
|
673 |
-
Public License instead of this License. But first, please read
|
674 |
-
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
readme.md
DELETED
@@ -1,59 +0,0 @@
|
|
1 |
-
# BackWPup Free - WordPress Backup Plugin
|
2 |
-
Schedule complete automatic backups of your WordPress installation. Decide which content will be stored (Dropbox, S3…). This is the free version
|
3 |
-
|
4 |
-
## Description
|
5 |
-
The **backup plugin** **[BackWPup Free](http://marketpress.com/product/backwpup-pro/)** can be used to save your complete installation including /wp-content/ and push them to an external Backup Service, like **Dropbox**, **S3**, **FTP** and many more, see list below. With a single backup .zip file you are able to easily restore an installation. Please understand: this free version will not be supported as good as the [BackWPup Pro version](http://marketpress.com/product/backwpup-pro/).
|
6 |
-
|
7 |
-
BackWPup Free is the number 1 backup-plugin for WordPress with nearly 1.000.000 downloads and in the top 20 of all WordPress Plugins (checked on rankwp.com)
|
8 |
-
|
9 |
-
* Database Backup *(needs mysqli)*
|
10 |
-
* WordPress XML Export
|
11 |
-
* Generate a file with installed plugins
|
12 |
-
* Optimize Database
|
13 |
-
* Check and repair Database
|
14 |
-
* File backup
|
15 |
-
* Backups in zip, tar, tar.gz, tar.bz2 format *(needs gz, bz2, ZipArchive)*
|
16 |
-
* Store backup to directory
|
17 |
-
* Store backup to FTP server *(needs ftp)*
|
18 |
-
* Store backup to Dropbox *(needs curl)*
|
19 |
-
* Store backup to S3 services *(needs curl)*
|
20 |
-
* Store backup to Microsoft Azure (Blob) *(needs PHP 5.3.2, curl)*
|
21 |
-
* Store backup to RackSpaceCloud *(needs PHP 5.3.2, curl)*
|
22 |
-
* Store backup to SugarSync *(needs curl)*
|
23 |
-
* PRO: Store backup to Amazon Glacier *(needs PHP 5.3.3, curl)*
|
24 |
-
* PRO: Store backup to Google Drive *(needs PHP 5.3.3, curl)*
|
25 |
-
* Send logs and backups by email
|
26 |
-
* Multi-site support only as network admin
|
27 |
-
* Pro version and support available - [BackWPup Pro](http://marketpress.com/product/backwpup-pro/)
|
28 |
-
|
29 |
-
|
30 |
-
**Remember: The most expensive backup is the one you never did! And please test your backups!**
|
31 |
-
|
32 |
-
Get the [BackWPup Pro](http://marketpress.com/product/backwpup-pro/) Version with more features on [MarketPress.com](http://marketpress.com/product/backwpup-pro/)
|
33 |
-
|
34 |
-
**Made by [Inpsyde](http://inpsyde.com) · We love WordPress**
|
35 |
-
|
36 |
-
Have a look at our other premium plugins at [MarketPress.com](http://marketpress.com).
|
37 |
-
|
38 |
-
|
39 |
-
## Available languages
|
40 |
-
* english (standard)
|
41 |
-
* french / français (fr_FR)
|
42 |
-
* german / deutsch (de_DE)
|
43 |
-
* russian / русский (ru_RU)
|
44 |
-
* simplified chinese (zh_CN)
|
45 |
-
|
46 |
-
## Requirements
|
47 |
-
* WordPress 3.4 and PHP 5.2.6 required!
|
48 |
-
* To use the Plugin with full functionality PHP 5.3.3 with mysqli, FTP,gz, bz2, ZipArchive and curl is needed.
|
49 |
-
* Plugin functions that don't work because of your server settings, will not be displayed in admin area.
|
50 |
-
|
51 |
-
|
52 |
-
## Screenshots
|
53 |
-
|
54 |
-
1. [Working job and jobs overview](https://raw.github.com/inpsyde/backwpup/master/screenshot-1.png)
|
55 |
-
2. [Job creation/edit](https://raw.github.com/inpsyde/backwpup/master/screenshot-2.png)
|
56 |
-
3. [Displaying logs](https://raw.github.com/inpsyde/backwpup/master/screenshot-3.png)
|
57 |
-
4. [Manage backup archives](https://raw.github.com/inpsyde/backwpup/master/screenshot-4.png)
|
58 |
-
5. [Dashboard](https://raw.github.com/inpsyde/backwpup/master/screenshot-5.png)
|
59 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
readme.txt
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
=== BackWPup Free - WordPress Backup Plugin ===
|
2 |
Contributors: inpsyde, danielhuesken, Bueltge, nullbyte
|
3 |
Tags: Amazon, Amazon S3, back up, backup, chinese, cloud, cloud files, database, db backup, dropbox, dump, file, french, ftp, ftps, german, migrate, multisite, russian, schedule, sftp, storage, S3, time, upload, xml
|
4 |
Requires at least: 3.4
|
5 |
-
Tested up to: 4.
|
6 |
-
Stable tag: 3.1.
|
7 |
License: GPLv3
|
8 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
9 |
|
@@ -13,7 +13,6 @@ Schedule complete automatic backups of your WordPress installation. Decide which
|
|
13 |
|
14 |
The **backup plugin** **[BackWPup Free](http://marketpress.com/product/backwpup-pro/)** can be used to save your complete installation including /wp-content/ and push them to an external Backup Service, like **Dropbox**, **S3**, **FTP** and many more, see list below. With a single backup .zip file you are able to easily restore an installation. Please understand: this free version will not be supported as good as the [BackWPup Pro version](http://marketpress.com/product/backwpup-pro/).
|
15 |
|
16 |
-
BackWPup Free is the number 1 backup-plugin for WordPress with nearly 1.000.000 downloads and in the top 20 of all WordPress Plugins (checked on rankwp.com)
|
17 |
|
18 |
* Database Backup *(needs mysqli)*
|
19 |
* WordPress XML Export
|
@@ -171,6 +170,12 @@ Please check all settings after the update:
|
|
171 |
|
172 |
|
173 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
174 |
= Version 3.1.3 =
|
175 |
* Fixed: var_export not working if output buffering active
|
176 |
* Fixed: bug in sending test emails on Backup with email
|
1 |
+
=== BackWPup Free - WordPress Backup Plugin ===
|
2 |
Contributors: inpsyde, danielhuesken, Bueltge, nullbyte
|
3 |
Tags: Amazon, Amazon S3, back up, backup, chinese, cloud, cloud files, database, db backup, dropbox, dump, file, french, ftp, ftps, german, migrate, multisite, russian, schedule, sftp, storage, S3, time, upload, xml
|
4 |
Requires at least: 3.4
|
5 |
+
Tested up to: 4.3
|
6 |
+
Stable tag: 3.1.4
|
7 |
License: GPLv3
|
8 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
9 |
|
13 |
|
14 |
The **backup plugin** **[BackWPup Free](http://marketpress.com/product/backwpup-pro/)** can be used to save your complete installation including /wp-content/ and push them to an external Backup Service, like **Dropbox**, **S3**, **FTP** and many more, see list below. With a single backup .zip file you are able to easily restore an installation. Please understand: this free version will not be supported as good as the [BackWPup Pro version](http://marketpress.com/product/backwpup-pro/).
|
15 |
|
|
|
16 |
|
17 |
* Database Backup *(needs mysqli)*
|
18 |
* WordPress XML Export
|
170 |
|
171 |
|
172 |
== Changelog ==
|
173 |
+
= Version 3.1.4 =
|
174 |
+
* Fixed: removing of % from filename
|
175 |
+
* Fixed: Notice in combination with bbPress
|
176 |
+
* Fixed: Zip Archive "Entry has been deleted" messages
|
177 |
+
* Improved: WP-CLI output a bit
|
178 |
+
|
179 |
= Version 3.1.3 =
|
180 |
* Fixed: var_export not working if output buffering active
|
181 |
* Fixed: bug in sending test emails on Backup with email
|
screenshot-1.png
DELETED
Binary file
|
screenshot-2.png
DELETED
Binary file
|
screenshot-3.png
DELETED
Binary file
|
screenshot-4.png
DELETED
Binary file
|
screenshot-5.png
DELETED
Binary file
|
uninstall.php
CHANGED
@@ -1,43 +1,43 @@
|
|
1 |
-
<?php
|
2 |
-
//if uninstall not called from WordPress exit
|
3 |
-
if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) )
|
4 |
-
die();
|
5 |
-
|
6 |
-
global $wpdb;
|
7 |
-
/* @var wpdb $wpdb */
|
8 |
-
|
9 |
-
//only uninstall if no BackWPup Version active
|
10 |
-
if ( ! class_exists( 'BackWPup' ) ) {
|
11 |
-
//remove roles from user
|
12 |
-
/* @var WP_User $user */
|
13 |
-
$users = get_users( array( 'role' => 'backwpup_admin' ) );
|
14 |
-
foreach ( $users as $user ) {
|
15 |
-
$user->remove_role( 'backwpup_admin' );
|
16 |
-
}
|
17 |
-
remove_role( 'backwpup_admin' );
|
18 |
-
$users = get_users( array( 'role' => 'backwpup_helper' ) );
|
19 |
-
foreach ( $users as $user ) {
|
20 |
-
$user->remove_role( 'backwpup_helper' );
|
21 |
-
}
|
22 |
-
remove_role( 'backwpup_helper' );
|
23 |
-
$users = get_users( array( 'role' => 'backwpup_check' ) );
|
24 |
-
foreach ( $users as $user ) {
|
25 |
-
$user->remove_role( 'backwpup_check' );
|
26 |
-
}
|
27 |
-
remove_role( 'backwpup_check' );
|
28 |
-
//delete log folder and logs
|
29 |
-
$log_folder = get_site_option( 'backwpup_cfg_logfolder' );
|
30 |
-
if ( $dir = opendir( $log_folder ) ) {
|
31 |
-
while ( FALSE !== ( $file = readdir( $dir ) ) ) {
|
32 |
-
if ( file_exists( $log_folder . $file ) && ( substr( $file, -8 ) == '.html.gz' || substr( $file, -5 ) == '.html' ) )
|
33 |
-
unlink( $log_folder . $file );
|
34 |
-
}
|
35 |
-
closedir( $dir );
|
36 |
-
}
|
37 |
-
rmdir( $log_folder );
|
38 |
-
//delete plugin options
|
39 |
-
if ( is_multisite() )
|
40 |
-
$wpdb->query( "DELETE FROM " . $wpdb->sitemeta . " WHERE meta_key LIKE '%backwpup_%' " );
|
41 |
-
else
|
42 |
-
$wpdb->query( "DELETE FROM " . $wpdb->options . " WHERE option_name LIKE '%backwpup_%' " );
|
43 |
}
|
1 |
+
<?php
|
2 |
+
//if uninstall not called from WordPress exit
|
3 |
+
if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) )
|
4 |
+
die();
|
5 |
+
|
6 |
+
global $wpdb;
|
7 |
+
/* @var wpdb $wpdb */
|
8 |
+
|
9 |
+
//only uninstall if no BackWPup Version active
|
10 |
+
if ( ! class_exists( 'BackWPup' ) ) {
|
11 |
+
//remove roles from user
|
12 |
+
/* @var WP_User $user */
|
13 |
+
$users = get_users( array( 'role' => 'backwpup_admin' ) );
|
14 |
+
foreach ( $users as $user ) {
|
15 |
+
$user->remove_role( 'backwpup_admin' );
|
16 |
+
}
|
17 |
+
remove_role( 'backwpup_admin' );
|
18 |
+
$users = get_users( array( 'role' => 'backwpup_helper' ) );
|
19 |
+
foreach ( $users as $user ) {
|
20 |
+
$user->remove_role( 'backwpup_helper' );
|
21 |
+
}
|
22 |
+
remove_role( 'backwpup_helper' );
|
23 |
+
$users = get_users( array( 'role' => 'backwpup_check' ) );
|
24 |
+
foreach ( $users as $user ) {
|
25 |
+
$user->remove_role( 'backwpup_check' );
|
26 |
+
}
|
27 |
+
remove_role( 'backwpup_check' );
|
28 |
+
//delete log folder and logs
|
29 |
+
$log_folder = get_site_option( 'backwpup_cfg_logfolder' );
|
30 |
+
if ( $dir = opendir( $log_folder ) ) {
|
31 |
+
while ( FALSE !== ( $file = readdir( $dir ) ) ) {
|
32 |
+
if ( file_exists( $log_folder . $file ) && ( substr( $file, -8 ) == '.html.gz' || substr( $file, -5 ) == '.html' ) )
|
33 |
+
unlink( $log_folder . $file );
|
34 |
+
}
|
35 |
+
closedir( $dir );
|
36 |
+
}
|
37 |
+
rmdir( $log_folder );
|
38 |
+
//delete plugin options
|
39 |
+
if ( is_multisite() )
|
40 |
+
$wpdb->query( "DELETE FROM " . $wpdb->sitemeta . " WHERE meta_key LIKE '%backwpup_%' " );
|
41 |
+
else
|
42 |
+
$wpdb->query( "DELETE FROM " . $wpdb->options . " WHERE option_name LIKE '%backwpup_%' " );
|
43 |
}
|
vendor/Aws/Common/Aws.php
CHANGED
@@ -1,105 +1,105 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
-
*
|
5 |
-
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
-
* You may not use this file except in compliance with the License.
|
7 |
-
* A copy of the License is located at
|
8 |
-
*
|
9 |
-
* http://aws.amazon.com/apache2.0
|
10 |
-
*
|
11 |
-
* or in the "license" file accompanying this file. This file is distributed
|
12 |
-
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
-
* express or implied. See the License for the specific language governing
|
14 |
-
* permissions and limitations under the License.
|
15 |
-
*/
|
16 |
-
|
17 |
-
namespace Aws\Common;
|
18 |
-
|
19 |
-
use Aws\Common\Facade\Facade;
|
20 |
-
use Guzzle\Service\Builder\ServiceBuilder;
|
21 |
-
use Guzzle\Service\Builder\ServiceBuilderLoader;
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Base class for interacting with web service clients
|
25 |
-
*/
|
26 |
-
class Aws extends ServiceBuilder
|
27 |
-
{
|
28 |
-
/**
|
29 |
-
* @var string Current version of the SDK
|
30 |
-
*/
|
31 |
-
const VERSION = '2.7.3';
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Create a new service locator for the AWS SDK
|
35 |
-
*
|
36 |
-
* You can configure the service locator is four different ways:
|
37 |
-
*
|
38 |
-
* 1. Use the default configuration file shipped with the SDK that wires class names with service short names and
|
39 |
-
* specify global parameters to add to every definition (e.g. key, secret, credentials, etc)
|
40 |
-
*
|
41 |
-
* 2. Use a custom configuration file that extends the default config and supplies credentials for each service.
|
42 |
-
*
|
43 |
-
* 3. Use a custom config file that wires services to custom short names for services.
|
44 |
-
*
|
45 |
-
* 4. If you are on Amazon EC2, you can use the default configuration file and not provide any credentials so that
|
46 |
-
* you are using InstanceProfile credentials.
|
47 |
-
*
|
48 |
-
* @param array|string $config The full path to a .php or .js|.json file, or an associative array of data
|
49 |
-
* to use as global parameters to pass to each service.
|
50 |
-
* @param array $globalParameters Global parameters to pass to every service as it is instantiated.
|
51 |
-
*
|
52 |
-
* @return Aws
|
53 |
-
*/
|
54 |
-
public static function factory($config = null, array $globalParameters = array())
|
55 |
-
{
|
56 |
-
if (!$config) {
|
57 |
-
// If nothing is passed in, then use the default configuration file with credentials from the environment
|
58 |
-
$config = self::getDefaultServiceDefinition();
|
59 |
-
} elseif (is_array($config)) {
|
60 |
-
// If an array was passed, then use the default configuration file with parameter overrides
|
61 |
-
$globalParameters = $config;
|
62 |
-
$config = self::getDefaultServiceDefinition();
|
63 |
-
}
|
64 |
-
|
65 |
-
$loader = new ServiceBuilderLoader();
|
66 |
-
$loader->addAlias('_aws', self::getDefaultServiceDefinition())
|
67 |
-
->addAlias('_sdk1', __DIR__ . '/Resources/sdk1-config.php');
|
68 |
-
|
69 |
-
return $loader->load($config, $globalParameters);
|
70 |
-
}
|
71 |
-
|
72 |
-
/**
|
73 |
-
* Get the full path to the default service builder definition file
|
74 |
-
*
|
75 |
-
* @return string
|
76 |
-
*/
|
77 |
-
public static function getDefaultServiceDefinition()
|
78 |
-
{
|
79 |
-
return __DIR__ . '/Resources/aws-config.php';
|
80 |
-
}
|
81 |
-
|
82 |
-
/**
|
83 |
-
* Returns the configuration for the service builder
|
84 |
-
*
|
85 |
-
* @return array
|
86 |
-
*/
|
87 |
-
public function getConfig()
|
88 |
-
{
|
89 |
-
return $this->builderConfig;
|
90 |
-
}
|
91 |
-
|
92 |
-
/**
|
93 |
-
* Enables the facades for the clients defined in the service builder
|
94 |
-
*
|
95 |
-
* @param string|null $namespace The namespace that the facades should be mounted to. Defaults to global namespace
|
96 |
-
*
|
97 |
-
* @return Aws
|
98 |
-
*/
|
99 |
-
public function enableFacades($namespace = null)
|
100 |
-
{
|
101 |
-
Facade::mountFacades($this, $namespace);
|
102 |
-
|
103 |
-
return $this;
|
104 |
-
}
|
105 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
+
* You may not use this file except in compliance with the License.
|
7 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
namespace Aws\Common;
|
18 |
+
|
19 |
+
use Aws\Common\Facade\Facade;
|
20 |
+
use Guzzle\Service\Builder\ServiceBuilder;
|
21 |
+
use Guzzle\Service\Builder\ServiceBuilderLoader;
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Base class for interacting with web service clients
|
25 |
+
*/
|
26 |
+
class Aws extends ServiceBuilder
|
27 |
+
{
|
28 |
+
/**
|
29 |
+
* @var string Current version of the SDK
|
30 |
+
*/
|
31 |
+
const VERSION = '2.7.3';
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Create a new service locator for the AWS SDK
|
35 |
+
*
|
36 |
+
* You can configure the service locator is four different ways:
|
37 |
+
*
|
38 |
+
* 1. Use the default configuration file shipped with the SDK that wires class names with service short names and
|
39 |
+
* specify global parameters to add to every definition (e.g. key, secret, credentials, etc)
|
40 |
+
*
|
41 |
+
* 2. Use a custom configuration file that extends the default config and supplies credentials for each service.
|
42 |
+
*
|
43 |
+
* 3. Use a custom config file that wires services to custom short names for services.
|
44 |
+
*
|
45 |
+
* 4. If you are on Amazon EC2, you can use the default configuration file and not provide any credentials so that
|
46 |
+
* you are using InstanceProfile credentials.
|
47 |
+
*
|
48 |
+
* @param array|string $config The full path to a .php or .js|.json file, or an associative array of data
|
49 |
+
* to use as global parameters to pass to each service.
|
50 |
+
* @param array $globalParameters Global parameters to pass to every service as it is instantiated.
|
51 |
+
*
|
52 |
+
* @return Aws
|
53 |
+
*/
|
54 |
+
public static function factory($config = null, array $globalParameters = array())
|
55 |
+
{
|
56 |
+
if (!$config) {
|
57 |
+
// If nothing is passed in, then use the default configuration file with credentials from the environment
|
58 |
+
$config = self::getDefaultServiceDefinition();
|
59 |
+
} elseif (is_array($config)) {
|
60 |
+
// If an array was passed, then use the default configuration file with parameter overrides
|
61 |
+
$globalParameters = $config;
|
62 |
+
$config = self::getDefaultServiceDefinition();
|
63 |
+
}
|
64 |
+
|
65 |
+
$loader = new ServiceBuilderLoader();
|
66 |
+
$loader->addAlias('_aws', self::getDefaultServiceDefinition())
|
67 |
+
->addAlias('_sdk1', __DIR__ . '/Resources/sdk1-config.php');
|
68 |
+
|
69 |
+
return $loader->load($config, $globalParameters);
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Get the full path to the default service builder definition file
|
74 |
+
*
|
75 |
+
* @return string
|
76 |
+
*/
|
77 |
+
public static function getDefaultServiceDefinition()
|
78 |
+
{
|
79 |
+
return __DIR__ . '/Resources/aws-config.php';
|
80 |
+
}
|
81 |
+
|
82 |
+
/**
|
83 |
+
* Returns the configuration for the service builder
|
84 |
+
*
|
85 |
+
* @return array
|
86 |
+
*/
|
87 |
+
public function getConfig()
|
88 |
+
{
|
89 |
+
return $this->builderConfig;
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Enables the facades for the clients defined in the service builder
|
94 |
+
*
|
95 |
+
* @param string|null $namespace The namespace that the facades should be mounted to. Defaults to global namespace
|
96 |
+
*
|
97 |
+
* @return Aws
|
98 |
+
*/
|
99 |
+
public function enableFacades($namespace = null)
|
100 |
+
{
|
101 |
+
Facade::mountFacades($this, $namespace);
|
102 |
+
|
103 |
+
return $this;
|
104 |
+
}
|
105 |
+
}
|
vendor/Aws/Common/Client/AbstractClient.php
CHANGED
@@ -1,272 +1,272 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
-
*
|
5 |
-
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
-
* You may not use this file except in compliance with the License.
|
7 |
-
* A copy of the License is located at
|
8 |
-
*
|
9 |
-
* http://aws.amazon.com/apache2.0
|
10 |
-
*
|
11 |
-
* or in the "license" file accompanying this file. This file is distributed
|
12 |
-
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
-
* express or implied. See the License for the specific language governing
|
14 |
-
* permissions and limitations under the License.
|
15 |
-
*/
|
16 |
-
|
17 |
-
namespace Aws\Common\Client;
|
18 |
-
|
19 |
-
use Aws\Common\Aws;
|
20 |
-
use Aws\Common\Credentials\CredentialsInterface;
|
21 |
-
use Aws\Common\Credentials\NullCredentials;
|
22 |
-
use Aws\Common\Enum\ClientOptions as Options;
|
23 |
-
use Aws\Common\Exception\InvalidArgumentException;
|
24 |
-
use Aws\Common\Exception\TransferException;
|
25 |
-
use Aws\Common\Signature\EndpointSignatureInterface;
|
26 |
-
use Aws\Common\Signature\SignatureInterface;
|
27 |
-
use Aws\Common\Signature\SignatureListener;
|
28 |
-
use Aws\Common\Waiter\WaiterClassFactory;
|
29 |
-
use Aws\Common\Waiter\CompositeWaiterFactory;
|
30 |
-
use Aws\Common\Waiter\WaiterFactoryInterface;
|
31 |
-
use Aws\Common\Waiter\WaiterConfigFactory;
|
32 |
-
use Guzzle\Common\Collection;
|
33 |
-
use Guzzle\Http\Exception\CurlException;
|
34 |
-
use Guzzle\Service\Client;
|
35 |
-
use Guzzle\Service\Description\ServiceDescriptionInterface;
|
36 |
-
|
37 |
-
/**
|
38 |
-
* Abstract AWS client
|
39 |
-
*/
|
40 |
-
abstract class AbstractClient extends Client implements AwsClientInterface
|
41 |
-
{
|
42 |
-
/**
|
43 |
-
* @var CredentialsInterface AWS credentials
|
44 |
-
*/
|
45 |
-
protected $credentials;
|
46 |
-
|
47 |
-
/**
|
48 |
-
* @var SignatureInterface Signature implementation of the service
|
49 |
-
*/
|
50 |
-
protected $signature;
|
51 |
-
|
52 |
-
/**
|
53 |
-
* @var WaiterFactoryInterface Factory used to create waiter classes
|
54 |
-
*/
|
55 |
-
protected $waiterFactory;
|
56 |
-
|
57 |
-
/**
|
58 |
-
* {@inheritdoc}
|
59 |
-
*/
|
60 |
-
public static function getAllEvents()
|
61 |
-
{
|
62 |
-
return array_merge(Client::getAllEvents(), array(
|
63 |
-
'client.region_changed',
|
64 |
-
'client.credentials_changed',
|
65 |
-
));
|
66 |
-
}
|
67 |
-
|
68 |
-
/**
|
69 |
-
* @param CredentialsInterface $credentials AWS credentials
|
70 |
-
* @param SignatureInterface $signature Signature implementation
|
71 |
-
* @param Collection $config Configuration options
|
72 |
-
*
|
73 |
-
* @throws InvalidArgumentException if an endpoint provider isn't provided
|
74 |
-
*/
|
75 |
-
public function __construct(CredentialsInterface $credentials, SignatureInterface $signature, Collection $config)
|
76 |
-
{
|
77 |
-
// Bootstrap with Guzzle
|
78 |
-
parent::__construct($config->get(Options::BASE_URL), $config);
|
79 |
-
$this->credentials = $credentials;
|
80 |
-
$this->signature = $signature;
|
81 |
-
|
82 |
-
// Make sure the user agent is prefixed by the SDK version
|
83 |
-
$this->setUserAgent('aws-sdk-php2/' . Aws::VERSION, true);
|
84 |
-
|
85 |
-
// Add the event listener so that requests are signed before they are sent
|
86 |
-
$dispatcher = $this->getEventDispatcher();
|
87 |
-
if (!$credentials instanceof NullCredentials) {
|
88 |
-
$dispatcher->addSubscriber(new SignatureListener($credentials, $signature));
|
89 |
-
}
|
90 |
-
|
91 |
-
if ($backoff = $config->get(Options::BACKOFF)) {
|
92 |
-
$dispatcher->addSubscriber($backoff, -255);
|
93 |
-
}
|
94 |
-
}
|
95 |
-
|
96 |
-
public function __call($method, $args)
|
97 |
-
{
|
98 |
-
if (substr($method, 0, 3) === 'get' && substr($method, -8) === 'Iterator') {
|
99 |
-
// Allow magic method calls for iterators (e.g. $client->get<CommandName>Iterator($params))
|
100 |
-
$commandOptions = isset($args[0]) ? $args[0] : null;
|
101 |
-
$iteratorOptions = isset($args[1]) ? $args[1] : array();
|
102 |
-
return $this->getIterator(substr($method, 3, -8), $commandOptions, $iteratorOptions);
|
103 |
-
} elseif (substr($method, 0, 9) == 'waitUntil') {
|
104 |
-
// Allow magic method calls for waiters (e.g. $client->waitUntil<WaiterName>($params))
|
105 |
-
return $this->waitUntil(substr($method, 9), isset($args[0]) ? $args[0]: array());
|
106 |
-
} else {
|
107 |
-
return parent::__call(ucfirst($method), $args);
|
108 |
-
}
|
109 |
-
}
|
110 |
-
|
111 |
-
/**
|
112 |
-
* Get an endpoint for a specific region from a service description
|
113 |
-
* @deprecated This function will no longer be updated to work with new regions.
|
114 |
-
*/
|
115 |
-
public static function getEndpoint(ServiceDescriptionInterface $description, $region, $scheme)
|
116 |
-
{
|
117 |
-
$service = $description->getData('serviceFullName');
|
118 |
-
// Lookup the region in the service description
|
119 |
-
if (!($regions = $description->getData('regions'))) {
|
120 |
-
throw new InvalidArgumentException("No regions found in the {$service} description");
|
121 |
-
}
|
122 |
-
// Ensure that the region exists for the service
|
123 |
-
if (!isset($regions[$region])) {
|
124 |
-
throw new InvalidArgumentException("{$region} is not a valid region for {$service}");
|
125 |
-
}
|
126 |
-
// Ensure that the scheme is valid
|
127 |
-
if ($regions[$region][$scheme] == false) {
|
128 |
-
throw new InvalidArgumentException("{$scheme} is not a valid URI scheme for {$service} in {$region}");
|
129 |
-
}
|
130 |
-
|
131 |
-
return $scheme . '://' . $regions[$region]['hostname'];
|
132 |
-
}
|
133 |
-
|
134 |
-
public function getCredentials()
|
135 |
-
{
|
136 |
-
return $this->credentials;
|
137 |
-
}
|
138 |
-
|
139 |
-
public function setCredentials(CredentialsInterface $credentials)
|
140 |
-
{
|
141 |
-
$formerCredentials = $this->credentials;
|
142 |
-
$this->credentials = $credentials;
|
143 |
-
|
144 |
-
// Dispatch an event that the credentials have been changed
|
145 |
-
$this->dispatch('client.credentials_changed', array(
|
146 |
-
'credentials' => $credentials,
|
147 |
-
'former_credentials' => $formerCredentials,
|
148 |
-
));
|
149 |
-
|
150 |
-
return $this;
|
151 |
-
}
|
152 |
-
|
153 |
-
public function getSignature()
|
154 |
-
{
|
155 |
-
return $this->signature;
|
156 |
-
}
|
157 |
-
|
158 |
-
public function getRegions()
|
159 |
-
{
|
160 |
-
return $this->serviceDescription->getData('regions');
|
161 |
-
}
|
162 |
-
|
163 |
-
public function getRegion()
|
164 |
-
{
|
165 |
-
return $this->getConfig(Options::REGION);
|
166 |
-
}
|
167 |
-
|
168 |
-
public function setRegion($region)
|
169 |
-
{
|
170 |
-
$config = $this->getConfig();
|
171 |
-
$formerRegion = $config->get(Options::REGION);
|
172 |
-
$global = $this->serviceDescription->getData('globalEndpoint');
|
173 |
-
$provider = $config->get('endpoint_provider');
|
174 |
-
|
175 |
-
if (!$provider) {
|
176 |
-
throw new \RuntimeException('No endpoint provider configured');
|
177 |
-
}
|
178 |
-
|
179 |
-
// Only change the region if the service does not have a global endpoint
|
180 |
-
if (!$global || $this->serviceDescription->getData('namespace') === 'S3') {
|
181 |
-
|
182 |
-
$endpoint = call_user_func(
|
183 |
-
$provider,
|
184 |
-
array(
|
185 |
-
'scheme' => $config->get(Options::SCHEME),
|
186 |
-
'region' => $region,
|
187 |
-
'service' => $config->get(Options::SERVICE)
|
188 |
-
)
|
189 |
-
);
|
190 |
-
|
191 |
-
$this->setBaseUrl($endpoint['endpoint']);
|
192 |
-
$config->set(Options::BASE_URL, $endpoint['endpoint']);
|
193 |
-
$config->set(Options::REGION, $region);
|
194 |
-
|
195 |
-
// Update the signature if necessary
|
196 |
-
$signature = $this->getSignature();
|
197 |
-
if ($signature instanceof EndpointSignatureInterface) {
|
198 |
-
/** @var $signature EndpointSignatureInterface */
|
199 |
-
$signature->setRegionName($region);
|
200 |
-
}
|
201 |
-
|
202 |
-
// Dispatch an event that the region has been changed
|
203 |
-
$this->dispatch('client.region_changed', array(
|
204 |
-
'region' => $region,
|
205 |
-
'former_region' => $formerRegion,
|
206 |
-
));
|
207 |
-
}
|
208 |
-
|
209 |
-
return $this;
|
210 |
-
}
|
211 |
-
|
212 |
-
public function waitUntil($waiter, array $input = array())
|
213 |
-
{
|
214 |
-
$this->getWaiter($waiter, $input)->wait();
|
215 |
-
|
216 |
-
return $this;
|
217 |
-
}
|
218 |
-
|
219 |
-
public function getWaiter($waiter, array $input = array())
|
220 |
-
{
|
221 |
-
return $this->getWaiterFactory()->build($waiter)
|
222 |
-
->setClient($this)
|
223 |
-
->setConfig($input);
|
224 |
-
}
|
225 |
-
|
226 |
-
public function setWaiterFactory(WaiterFactoryInterface $waiterFactory)
|
227 |
-
{
|
228 |
-
$this->waiterFactory = $waiterFactory;
|
229 |
-
|
230 |
-
return $this;
|
231 |
-
}
|
232 |
-
|
233 |
-
public function getWaiterFactory()
|
234 |
-
{
|
235 |
-
if (!$this->waiterFactory) {
|
236 |
-
$clientClass = get_class($this);
|
237 |
-
// Use a composite factory that checks for classes first, then config waiters
|
238 |
-
$this->waiterFactory = new CompositeWaiterFactory(array(
|
239 |
-
new WaiterClassFactory(substr($clientClass, 0, strrpos($clientClass, '\\')) . '\\Waiter')
|
240 |
-
));
|
241 |
-
if ($this->getDescription()) {
|
242 |
-
$waiterConfig = $this->getDescription()->getData('waiters') ?: array();
|
243 |
-
$this->waiterFactory->addFactory(new WaiterConfigFactory($waiterConfig));
|
244 |
-
}
|
245 |
-
}
|
246 |
-
|
247 |
-
return $this->waiterFactory;
|
248 |
-
}
|
249 |
-
|
250 |
-
public function getApiVersion()
|
251 |
-
{
|
252 |
-
return $this->serviceDescription->getApiVersion();
|
253 |
-
}
|
254 |
-
|
255 |
-
/**
|
256 |
-
* {@inheritdoc}
|
257 |
-
* @throws \Aws\Common\Exception\TransferException
|
258 |
-
*/
|
259 |
-
public function send($requests)
|
260 |
-
{
|
261 |
-
try {
|
262 |
-
return parent::send($requests);
|
263 |
-
} catch (CurlException $e) {
|
264 |
-
$wrapped = new TransferException($e->getMessage(), null, $e);
|
265 |
-
$wrapped->setCurlHandle($e->getCurlHandle())
|
266 |
-
->setCurlInfo($e->getCurlInfo())
|
267 |
-
->setError($e->getError(), $e->getErrorNo())
|
268 |
-
->setRequest($e->getRequest());
|
269 |
-
throw $wrapped;
|
270 |
-
}
|
271 |
-
}
|
272 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
+
* You may not use this file except in compliance with the License.
|
7 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
namespace Aws\Common\Client;
|
18 |
+
|
19 |
+
use Aws\Common\Aws;
|
20 |
+
use Aws\Common\Credentials\CredentialsInterface;
|
21 |
+
use Aws\Common\Credentials\NullCredentials;
|
22 |
+
use Aws\Common\Enum\ClientOptions as Options;
|
23 |
+
use Aws\Common\Exception\InvalidArgumentException;
|
24 |
+
use Aws\Common\Exception\TransferException;
|
25 |
+
use Aws\Common\Signature\EndpointSignatureInterface;
|
26 |
+
use Aws\Common\Signature\SignatureInterface;
|
27 |
+
use Aws\Common\Signature\SignatureListener;
|
28 |
+
use Aws\Common\Waiter\WaiterClassFactory;
|
29 |
+
use Aws\Common\Waiter\CompositeWaiterFactory;
|
30 |
+
use Aws\Common\Waiter\WaiterFactoryInterface;
|
31 |
+
use Aws\Common\Waiter\WaiterConfigFactory;
|
32 |
+
use Guzzle\Common\Collection;
|
33 |
+
use Guzzle\Http\Exception\CurlException;
|
34 |
+
use Guzzle\Service\Client;
|
35 |
+
use Guzzle\Service\Description\ServiceDescriptionInterface;
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Abstract AWS client
|
39 |
+
*/
|
40 |
+
abstract class AbstractClient extends Client implements AwsClientInterface
|
41 |
+
{
|
42 |
+
/**
|
43 |
+
* @var CredentialsInterface AWS credentials
|
44 |
+
*/
|
45 |
+
protected $credentials;
|
46 |
+
|
47 |
+
/**
|
48 |
+
* @var SignatureInterface Signature implementation of the service
|
49 |
+
*/
|
50 |
+
protected $signature;
|
51 |
+
|
52 |
+
/**
|
53 |
+
* @var WaiterFactoryInterface Factory used to create waiter classes
|
54 |
+
*/
|
55 |
+
protected $waiterFactory;
|
56 |
+
|
57 |
+
/**
|
58 |
+
* {@inheritdoc}
|
59 |
+
*/
|
60 |
+
public static function getAllEvents()
|
61 |
+
{
|
62 |
+
return array_merge(Client::getAllEvents(), array(
|
63 |
+
'client.region_changed',
|
64 |
+
'client.credentials_changed',
|
65 |
+
));
|
66 |
+
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
* @param CredentialsInterface $credentials AWS credentials
|
70 |
+
* @param SignatureInterface $signature Signature implementation
|
71 |
+
* @param Collection $config Configuration options
|
72 |
+
*
|
73 |
+
* @throws InvalidArgumentException if an endpoint provider isn't provided
|
74 |
+
*/
|
75 |
+
public function __construct(CredentialsInterface $credentials, SignatureInterface $signature, Collection $config)
|
76 |
+
{
|
77 |
+
// Bootstrap with Guzzle
|
78 |
+
parent::__construct($config->get(Options::BASE_URL), $config);
|
79 |
+
$this->credentials = $credentials;
|
80 |
+
$this->signature = $signature;
|
81 |
+
|
82 |
+
// Make sure the user agent is prefixed by the SDK version
|
83 |
+
$this->setUserAgent('aws-sdk-php2/' . Aws::VERSION, true);
|
84 |
+
|
85 |
+
// Add the event listener so that requests are signed before they are sent
|
86 |
+
$dispatcher = $this->getEventDispatcher();
|
87 |
+
if (!$credentials instanceof NullCredentials) {
|
88 |
+
$dispatcher->addSubscriber(new SignatureListener($credentials, $signature));
|
89 |
+
}
|
90 |
+
|
91 |
+
if ($backoff = $config->get(Options::BACKOFF)) {
|
92 |
+
$dispatcher->addSubscriber($backoff, -255);
|
93 |
+
}
|
94 |
+
}
|
95 |
+
|
96 |
+
public function __call($method, $args)
|
97 |
+
{
|
98 |
+
if (substr($method, 0, 3) === 'get' && substr($method, -8) === 'Iterator') {
|
99 |
+
// Allow magic method calls for iterators (e.g. $client->get<CommandName>Iterator($params))
|
100 |
+
$commandOptions = isset($args[0]) ? $args[0] : null;
|
101 |
+
$iteratorOptions = isset($args[1]) ? $args[1] : array();
|
102 |
+
return $this->getIterator(substr($method, 3, -8), $commandOptions, $iteratorOptions);
|
103 |
+
} elseif (substr($method, 0, 9) == 'waitUntil') {
|
104 |
+
// Allow magic method calls for waiters (e.g. $client->waitUntil<WaiterName>($params))
|
105 |
+
return $this->waitUntil(substr($method, 9), isset($args[0]) ? $args[0]: array());
|
106 |
+
} else {
|
107 |
+
return parent::__call(ucfirst($method), $args);
|
108 |
+
}
|
109 |
+
}
|
110 |
+
|
111 |
+
/**
|
112 |
+
* Get an endpoint for a specific region from a service description
|
113 |
+
* @deprecated This function will no longer be updated to work with new regions.
|
114 |
+
*/
|
115 |
+
public static function getEndpoint(ServiceDescriptionInterface $description, $region, $scheme)
|
116 |
+
{
|
117 |
+
$service = $description->getData('serviceFullName');
|
118 |
+
// Lookup the region in the service description
|
119 |
+
if (!($regions = $description->getData('regions'))) {
|
120 |
+
throw new InvalidArgumentException("No regions found in the {$service} description");
|
121 |
+
}
|
122 |
+
// Ensure that the region exists for the service
|
123 |
+
if (!isset($regions[$region])) {
|
124 |
+
throw new InvalidArgumentException("{$region} is not a valid region for {$service}");
|
125 |
+
}
|
126 |
+
// Ensure that the scheme is valid
|
127 |
+
if ($regions[$region][$scheme] == false) {
|
128 |
+
throw new InvalidArgumentException("{$scheme} is not a valid URI scheme for {$service} in {$region}");
|
129 |
+
}
|
130 |
+
|
131 |
+
return $scheme . '://' . $regions[$region]['hostname'];
|
132 |
+
}
|
133 |
+
|
134 |
+
public function getCredentials()
|
135 |
+
{
|
136 |
+
return $this->credentials;
|
137 |
+
}
|
138 |
+
|
139 |
+
public function setCredentials(CredentialsInterface $credentials)
|
140 |
+
{
|
141 |
+
$formerCredentials = $this->credentials;
|
142 |
+
$this->credentials = $credentials;
|
143 |
+
|
144 |
+
// Dispatch an event that the credentials have been changed
|
145 |
+
$this->dispatch('client.credentials_changed', array(
|
146 |
+
'credentials' => $credentials,
|
147 |
+
'former_credentials' => $formerCredentials,
|
148 |
+
));
|
149 |
+
|
150 |
+
return $this;
|
151 |
+
}
|
152 |
+
|
153 |
+
public function getSignature()
|
154 |
+
{
|
155 |
+
return $this->signature;
|
156 |
+
}
|
157 |
+
|
158 |
+
public function getRegions()
|
159 |
+
{
|
160 |
+
return $this->serviceDescription->getData('regions');
|
161 |
+
}
|
162 |
+
|
163 |
+
public function getRegion()
|
164 |
+
{
|
165 |
+
return $this->getConfig(Options::REGION);
|
166 |
+
}
|
167 |
+
|
168 |
+
public function setRegion($region)
|
169 |
+
{
|
170 |
+
$config = $this->getConfig();
|
171 |
+
$formerRegion = $config->get(Options::REGION);
|
172 |
+
$global = $this->serviceDescription->getData('globalEndpoint');
|
173 |
+
$provider = $config->get('endpoint_provider');
|
174 |
+
|
175 |
+
if (!$provider) {
|
176 |
+
throw new \RuntimeException('No endpoint provider configured');
|
177 |
+
}
|
178 |
+
|
179 |
+
// Only change the region if the service does not have a global endpoint
|
180 |
+
if (!$global || $this->serviceDescription->getData('namespace') === 'S3') {
|
181 |
+
|
182 |
+
$endpoint = call_user_func(
|
183 |
+
$provider,
|
184 |
+
array(
|
185 |
+
'scheme' => $config->get(Options::SCHEME),
|
186 |
+
'region' => $region,
|
187 |
+
'service' => $config->get(Options::SERVICE)
|
188 |
+
)
|
189 |
+
);
|
190 |
+
|
191 |
+
$this->setBaseUrl($endpoint['endpoint']);
|
192 |
+
$config->set(Options::BASE_URL, $endpoint['endpoint']);
|
193 |
+
$config->set(Options::REGION, $region);
|
194 |
+
|
195 |
+
// Update the signature if necessary
|
196 |
+
$signature = $this->getSignature();
|
197 |
+
if ($signature instanceof EndpointSignatureInterface) {
|
198 |
+
/** @var $signature EndpointSignatureInterface */
|
199 |
+
$signature->setRegionName($region);
|
200 |
+
}
|
201 |
+
|
202 |
+
// Dispatch an event that the region has been changed
|
203 |
+
$this->dispatch('client.region_changed', array(
|
204 |
+
'region' => $region,
|
205 |
+
'former_region' => $formerRegion,
|
206 |
+
));
|
207 |
+
}
|
208 |
+
|
209 |
+
return $this;
|
210 |
+
}
|
211 |
+
|
212 |
+
public function waitUntil($waiter, array $input = array())
|
213 |
+
{
|
214 |
+
$this->getWaiter($waiter, $input)->wait();
|
215 |
+
|
216 |
+
return $this;
|
217 |
+
}
|
218 |
+
|
219 |
+
public function getWaiter($waiter, array $input = array())
|
220 |
+
{
|
221 |
+
return $this->getWaiterFactory()->build($waiter)
|
222 |
+
->setClient($this)
|
223 |
+
->setConfig($input);
|
224 |
+
}
|
225 |
+
|
226 |
+
public function setWaiterFactory(WaiterFactoryInterface $waiterFactory)
|
227 |
+
{
|
228 |
+
$this->waiterFactory = $waiterFactory;
|
229 |
+
|
230 |
+
return $this;
|
231 |
+
}
|
232 |
+
|
233 |
+
public function getWaiterFactory()
|
234 |
+
{
|
235 |
+
if (!$this->waiterFactory) {
|
236 |
+
$clientClass = get_class($this);
|
237 |
+
// Use a composite factory that checks for classes first, then config waiters
|
238 |
+
$this->waiterFactory = new CompositeWaiterFactory(array(
|
239 |
+
new WaiterClassFactory(substr($clientClass, 0, strrpos($clientClass, '\\')) . '\\Waiter')
|
240 |
+
));
|
241 |
+
if ($this->getDescription()) {
|
242 |
+
$waiterConfig = $this->getDescription()->getData('waiters') ?: array();
|
243 |
+
$this->waiterFactory->addFactory(new WaiterConfigFactory($waiterConfig));
|
244 |
+
}
|
245 |
+
}
|
246 |
+
|
247 |
+
return $this->waiterFactory;
|
248 |
+
}
|
249 |
+
|
250 |
+
public function getApiVersion()
|
251 |
+
{
|
252 |
+
return $this->serviceDescription->getApiVersion();
|
253 |
+
}
|
254 |
+
|
255 |
+
/**
|
256 |
+
* {@inheritdoc}
|
257 |
+
* @throws \Aws\Common\Exception\TransferException
|
258 |
+
*/
|
259 |
+
public function send($requests)
|
260 |
+
{
|
261 |
+
try {
|
262 |
+
return parent::send($requests);
|
263 |
+
} catch (CurlException $e) {
|
264 |
+
$wrapped = new TransferException($e->getMessage(), null, $e);
|
265 |
+
$wrapped->setCurlHandle($e->getCurlHandle())
|
266 |
+
->setCurlInfo($e->getCurlInfo())
|
267 |
+
->setError($e->getError(), $e->getErrorNo())
|
268 |
+
->setRequest($e->getRequest());
|
269 |
+
throw $wrapped;
|
270 |
+
}
|
271 |
+
}
|
272 |
+
}
|
vendor/Aws/Common/Client/ClientBuilder.php
CHANGED
@@ -1,467 +1,467 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
-
*
|
5 |
-
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
-
* You may not use this file except in compliance with the License.
|
7 |
-
* A copy of the License is located at
|
8 |
-
*
|
9 |
-
* http://aws.amazon.com/apache2.0
|
10 |
-
*
|
11 |
-
* or in the "license" file accompanying this file. This file is distributed
|
12 |
-
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
-
* express or implied. See the License for the specific language governing
|
14 |
-
* permissions and limitations under the License.
|
15 |
-
*/
|
16 |
-
|
17 |
-
namespace Aws\Common\Client;
|
18 |
-
|
19 |
-
use Aws\Common\Credentials\Credentials;
|
20 |
-
use Aws\Common\Credentials\CredentialsInterface;
|
21 |
-
use Aws\Common\Credentials\NullCredentials;
|
22 |
-
use Aws\Common\Enum\ClientOptions as Options;
|
23 |
-
use Aws\Common\Exception\ExceptionListener;
|
24 |
-
use Aws\Common\Exception\InvalidArgumentException;
|
25 |
-
use Aws\Common\Exception\NamespaceExceptionFactory;
|
26 |
-
use Aws\Common\Exception\Parser\DefaultXmlExceptionParser;
|
27 |
-
use Aws\Common\Exception\Parser\ExceptionParserInterface;
|
28 |
-
use Aws\Common\Iterator\AwsResourceIteratorFactory;
|
29 |
-
use Aws\Common\RulesEndpointProvider;
|
30 |
-
use Aws\Common\Signature\EndpointSignatureInterface;
|
31 |
-
use Aws\Common\Signature\SignatureInterface;
|
32 |
-
use Aws\Common\Signature\SignatureV2;
|
33 |
-
use Aws\Common\Signature\SignatureV3Https;
|
34 |
-
use Aws\Common\Signature\SignatureV4;
|
35 |
-
use Guzzle\Common\Collection;
|
36 |
-
use Guzzle\Plugin\Backoff\BackoffPlugin;
|
37 |
-
use Guzzle\Plugin\Backoff\CurlBackoffStrategy;
|
38 |
-
use Guzzle\Plugin\Backoff\ExponentialBackoffStrategy;
|
39 |
-
use Guzzle\Plugin\Backoff\HttpBackoffStrategy;
|
40 |
-
use Guzzle\Plugin\Backoff\TruncatedBackoffStrategy;
|
41 |
-
use Guzzle\Service\Description\ServiceDescription;
|
42 |
-
use Guzzle\Service\Resource\ResourceIteratorClassFactory;
|
43 |
-
use Guzzle\Log\LogAdapterInterface;
|
44 |
-
use Guzzle\Log\ClosureLogAdapter;
|
45 |
-
use Guzzle\Plugin\Backoff\BackoffLogger;
|
46 |
-
|
47 |
-
/**
|
48 |
-
* Builder for creating AWS service clients
|
49 |
-
*/
|
50 |
-
class ClientBuilder
|
51 |
-
{
|
52 |
-
/**
|
53 |
-
* @var array Default client config
|
54 |
-
*/
|
55 |
-
protected static $commonConfigDefaults = array('scheme' => 'https');
|
56 |
-
|
57 |
-
/**
|
58 |
-
* @var array Default client requirements
|
59 |
-
*/
|
60 |
-
protected static $commonConfigRequirements = array(Options::SERVICE_DESCRIPTION);
|
61 |
-
|
62 |
-
/**
|
63 |
-
* @var string The namespace of the client
|
64 |
-
*/
|
65 |
-
protected $clientNamespace;
|
66 |
-
|
67 |
-
/**
|
68 |
-
* @var array The config options
|
69 |
-
*/
|
70 |
-
protected $config = array();
|
71 |
-
|
72 |
-
/**
|
73 |
-
* @var array The config defaults
|
74 |
-
*/
|
75 |
-
protected $configDefaults = array();
|
76 |
-
|
77 |
-
/**
|
78 |
-
* @var array The config requirements
|
79 |
-
*/
|
80 |
-
protected $configRequirements = array();
|
81 |
-
|
82 |
-
/**
|
83 |
-
* @var ExceptionParserInterface The Parser interface for the client
|
84 |
-
*/
|
85 |
-
protected $exceptionParser;
|
86 |
-
|
87 |
-
/**
|
88 |
-
* @var array Array of configuration data for iterators available for the client
|
89 |
-
*/
|
90 |
-
protected $iteratorsConfig = array();
|
91 |
-
|
92 |
-
/**
|
93 |
-
* Factory method for creating the client builder
|
94 |
-
*
|
95 |
-
* @param string $namespace The namespace of the client
|
96 |
-
*
|
97 |
-
* @return ClientBuilder
|
98 |
-
*/
|
99 |
-
public static function factory($namespace = null)
|
100 |
-
{
|
101 |
-
return new static($namespace);
|
102 |
-
}
|
103 |
-
|
104 |
-
/**
|
105 |
-
* Constructs a client builder
|
106 |
-
*
|
107 |
-
* @param string $namespace The namespace of the client
|
108 |
-
*/
|
109 |
-
public function __construct($namespace = null)
|
110 |
-
{
|
111 |
-
$this->clientNamespace = $namespace;
|
112 |
-
}
|
113 |
-
|
114 |
-
/**
|
115 |
-
* Sets the config options
|
116 |
-
*
|
117 |
-
* @param array|Collection $config The config options
|
118 |
-
*
|
119 |
-
* @return ClientBuilder
|
120 |
-
*/
|
121 |
-
public function setConfig($config)
|
122 |
-
{
|
123 |
-
$this->config = $this->processArray($config);
|
124 |
-
|
125 |
-
return $this;
|
126 |
-
}
|
127 |
-
|
128 |
-
/**
|
129 |
-
* Sets the config options' defaults
|
130 |
-
*
|
131 |
-
* @param array|Collection $defaults The default values
|
132 |
-
*
|
133 |
-
* @return ClientBuilder
|
134 |
-
*/
|
135 |
-
public function setConfigDefaults($defaults)
|
136 |
-
{
|
137 |
-
$this->configDefaults = $this->processArray($defaults);
|
138 |
-
|
139 |
-
return $this;
|
140 |
-
}
|
141 |
-
|
142 |
-
/**
|
143 |
-
* Sets the required config options
|
144 |
-
*
|
145 |
-
* @param array|Collection $required The required config options
|
146 |
-
*
|
147 |
-
* @return ClientBuilder
|
148 |
-
*/
|
149 |
-
public function setConfigRequirements($required)
|
150 |
-
{
|
151 |
-
$this->configRequirements = $this->processArray($required);
|
152 |
-
|
153 |
-
return $this;
|
154 |
-
}
|
155 |
-
|
156 |
-
/**
|
157 |
-
* Sets the exception parser. If one is not provided the builder will use
|
158 |
-
* the default XML exception parser.
|
159 |
-
*
|
160 |
-
* @param ExceptionParserInterface $parser The exception parser
|
161 |
-
*
|
162 |
-
* @return ClientBuilder
|
163 |
-
*/
|
164 |
-
public function setExceptionParser(ExceptionParserInterface $parser)
|
165 |
-
{
|
166 |
-
$this->exceptionParser = $parser;
|
167 |
-
|
168 |
-
return $this;
|
169 |
-
}
|
170 |
-
|
171 |
-
/**
|
172 |
-
* Set the configuration for the client's iterators
|
173 |
-
*
|
174 |
-
* @param array $config Configuration data for client's iterators
|
175 |
-
*
|
176 |
-
* @return ClientBuilder
|
177 |
-
*/
|
178 |
-
public function setIteratorsConfig(array $config)
|
179 |
-
{
|
180 |
-
$this->iteratorsConfig = $config;
|
181 |
-
|
182 |
-
return $this;
|
183 |
-
}
|
184 |
-
|
185 |
-
/**
|
186 |
-
* Performs the building logic using all of the parameters that have been
|
187 |
-
* set and falling back to default values. Returns an instantiate service
|
188 |
-
* client with credentials prepared and plugins attached.
|
189 |
-
*
|
190 |
-
* @return AwsClientInterface
|
191 |
-
* @throws InvalidArgumentException
|
192 |
-
*/
|
193 |
-
public function build()
|
194 |
-
{
|
195 |
-
// Resolve configuration
|
196 |
-
$config = Collection::fromConfig(
|
197 |
-
$this->config,
|
198 |
-
array_merge(self::$commonConfigDefaults, $this->configDefaults),
|
199 |
-
(self::$commonConfigRequirements + $this->configRequirements)
|
200 |
-
);
|
201 |
-
|
202 |
-
if (!isset($config['endpoint_provider'])) {
|
203 |
-
$config['endpoint_provider'] = RulesEndpointProvider::fromDefaults();
|
204 |
-
}
|
205 |
-
|
206 |
-
// Resolve the endpoint, signature, and credentials
|
207 |
-
$description = $this->updateConfigFromDescription($config);
|
208 |
-
$signature = $this->getSignature($description, $config);
|
209 |
-
$credentials = $this->getCredentials($config);
|
210 |
-
|
211 |
-
// Resolve exception parser
|
212 |
-
if (!$this->exceptionParser) {
|
213 |
-
$this->exceptionParser = new DefaultXmlExceptionParser();
|
214 |
-
}
|
215 |
-
|
216 |
-
// Resolve backoff strategy
|
217 |
-
$backoff = $config->get(Options::BACKOFF);
|
218 |
-
if ($backoff === null) {
|
219 |
-
$backoff = new BackoffPlugin(
|
220 |
-
// Retry failed requests up to 3 times if it is determined that the request can be retried
|
221 |
-
new TruncatedBackoffStrategy(3,
|
222 |
-
// Retry failed requests with 400-level responses due to throttling
|
223 |
-
new ThrottlingErrorChecker($this->exceptionParser,
|
224 |
-
// Retry failed requests due to transient network or cURL problems
|
225 |
-
new CurlBackoffStrategy(null,
|
226 |
-
// Retry failed requests with 500-level responses
|
227 |
-
new HttpBackoffStrategy(array(500, 503, 509),
|
228 |
-
// Retry requests that failed due to expired credentials
|
229 |
-
new ExpiredCredentialsChecker($this->exceptionParser,
|
230 |
-
new ExponentialBackoffStrategy()
|
231 |
-
)
|
232 |
-
)
|
233 |
-
)
|
234 |
-
)
|
235 |
-
)
|
236 |
-
);
|
237 |
-
$config->set(Options::BACKOFF, $backoff);
|
238 |
-
}
|
239 |
-
|
240 |
-
if ($backoff) {
|
241 |
-
$this->addBackoffLogger($backoff, $config);
|
242 |
-
}
|
243 |
-
|
244 |
-
// Determine service and class name
|
245 |
-
$clientClass = 'Aws\Common\Client\DefaultClient';
|
246 |
-
if ($this->clientNamespace) {
|
247 |
-
$serviceName = substr($this->clientNamespace, strrpos($this->clientNamespace, '\\') + 1);
|
248 |
-
$clientClass = $this->clientNamespace . '\\' . $serviceName . 'Client';
|
249 |
-
}
|
250 |
-
|
251 |
-
/** @var $client AwsClientInterface */
|
252 |
-
$client = new $clientClass($credentials, $signature, $config);
|
253 |
-
$client->setDescription($description);
|
254 |
-
|
255 |
-
// Add exception marshaling so that more descriptive exception are thrown
|
256 |
-
if ($this->clientNamespace) {
|
257 |
-
$exceptionFactory = new NamespaceExceptionFactory(
|
258 |
-
$this->exceptionParser,
|
259 |
-
"{$this->clientNamespace}\\Exception",
|
260 |
-
"{$this->clientNamespace}\\Exception\\{$serviceName}Exception"
|
261 |
-
);
|
262 |
-
$client->addSubscriber(new ExceptionListener($exceptionFactory));
|
263 |
-
}
|
264 |
-
|
265 |
-
// Add the UserAgentPlugin to append to the User-Agent header of requests
|
266 |
-
$client->addSubscriber(new UserAgentListener());
|
267 |
-
|
268 |
-
// Filters used for the cache plugin
|
269 |
-
$client->getConfig()->set(
|
270 |
-
'params.cache.key_filter',
|
271 |
-
'header=date,x-amz-date,x-amz-security-token,x-amzn-authorization'
|
272 |
-
);
|
273 |
-
|
274 |
-
// Set the iterator resource factory based on the provided iterators config
|
275 |
-
$client->setResourceIteratorFactory(new AwsResourceIteratorFactory(
|
276 |
-
$this->iteratorsConfig,
|
277 |
-
new ResourceIteratorClassFactory($this->clientNamespace . '\\Iterator')
|
278 |
-
));
|
279 |
-
|
280 |
-
// Disable parameter validation if needed
|
281 |
-
if ($config->get(Options::VALIDATION) === false) {
|
282 |
-
$params = $config->get('command.params') ?: array();
|
283 |
-
$params['command.disable_validation'] = true;
|
284 |
-
$config->set('command.params', $params);
|
285 |
-
}
|
286 |
-
|
287 |
-
return $client;
|
288 |
-
}
|
289 |
-
|
290 |
-
/**
|
291 |
-
* Add backoff logging to the backoff plugin if needed
|
292 |
-
*
|
293 |
-
* @param BackoffPlugin $plugin Backoff plugin
|
294 |
-
* @param Collection $config Configuration settings
|
295 |
-
*
|
296 |
-
* @throws InvalidArgumentException
|
297 |
-
*/
|
298 |
-
protected function addBackoffLogger(BackoffPlugin $plugin, Collection $config)
|
299 |
-
{
|
300 |
-
// The log option can be set to `debug` or an instance of a LogAdapterInterface
|
301 |
-
if ($logger = $config->get(Options::BACKOFF_LOGGER)) {
|
302 |
-
$format = $config->get(Options::BACKOFF_LOGGER_TEMPLATE);
|
303 |
-
if ($logger === 'debug') {
|
304 |
-
$logger = new ClosureLogAdapter(function ($message) {
|
305 |
-
trigger_error($message . "\n");
|
306 |
-
});
|
307 |
-
} elseif (!($logger instanceof LogAdapterInterface)) {
|
308 |
-
throw new InvalidArgumentException(
|
309 |
-
Options::BACKOFF_LOGGER . ' must be set to `debug` or an instance of '
|
310 |
-
. 'Guzzle\\Common\\Log\\LogAdapterInterface'
|
311 |
-
);
|
312 |
-
}
|
313 |
-
// Create the plugin responsible for logging exponential backoff retries
|
314 |
-
$logPlugin = new BackoffLogger($logger);
|
315 |
-
// You can specify a custom format or use the default
|
316 |
-
if ($format) {
|
317 |
-
$logPlugin->setTemplate($format);
|
318 |
-
}
|
319 |
-
$plugin->addSubscriber($logPlugin);
|
320 |
-
}
|
321 |
-
}
|
322 |
-
|
323 |
-
/**
|
324 |
-
* Ensures that an array (e.g. for config data) is actually in array form
|
325 |
-
*
|
326 |
-
* @param array|Collection $array The array data
|
327 |
-
*
|
328 |
-
* @return array
|
329 |
-
* @throws InvalidArgumentException if the arg is not an array or Collection
|
330 |
-
*/
|
331 |
-
protected function processArray($array)
|
332 |
-
{
|
333 |
-
if ($array instanceof Collection) {
|
334 |
-
$array = $array->getAll();
|
335 |
-
}
|
336 |
-
|
337 |
-
if (!is_array($array)) {
|
338 |
-
throw new InvalidArgumentException('The config must be provided as an array or Collection.');
|
339 |
-
}
|
340 |
-
|
341 |
-
return $array;
|
342 |
-
}
|
343 |
-
|
344 |
-
/**
|
345 |
-
* Update a configuration object from a service description
|
346 |
-
*
|
347 |
-
* @param Collection $config Config to update
|
348 |
-
*
|
349 |
-
* @return ServiceDescription
|
350 |
-
* @throws InvalidArgumentException
|
351 |
-
*/
|
352 |
-
protected function updateConfigFromDescription(Collection $config)
|
353 |
-
{
|
354 |
-
$description = $config->get(Options::SERVICE_DESCRIPTION);
|
355 |
-
if (!($description instanceof ServiceDescription)) {
|
356 |
-
// Inject the version into the sprintf template if it is a string
|
357 |
-
if (is_string($description)) {
|
358 |
-
$description = sprintf($description, $config->get(Options::VERSION));
|
359 |
-
}
|
360 |
-
$description = ServiceDescription::factory($description);
|
361 |
-
$config->set(Options::SERVICE_DESCRIPTION, $description);
|
362 |
-
}
|
363 |
-
|
364 |
-
if (!$config->get(Options::SERVICE)) {
|
365 |
-
$config->set(Options::SERVICE, $description->getData('endpointPrefix'));
|
366 |
-
}
|
367 |
-
|
368 |
-
if ($iterators = $description->getData('iterators')) {
|
369 |
-
$this->setIteratorsConfig($iterators);
|
370 |
-
}
|
371 |
-
|
372 |
-
// Make sure a valid region is set
|
373 |
-
$region = $config->get(Options::REGION);
|
374 |
-
$global = $description->getData('globalEndpoint');
|
375 |
-
|
376 |
-
if (!$global && !$region) {
|
377 |
-
throw new InvalidArgumentException(
|
378 |
-
'A region is required when using ' . $description->getData('serviceFullName')
|
379 |
-
);
|
380 |
-
} elseif ($global && (!$region || $description->getData('namespace') !== 'S3')) {
|
381 |
-
$region = 'us-east-1';
|
382 |
-
$config->set(Options::REGION, 'us-east-1');
|
383 |
-
}
|
384 |
-
|
385 |
-
if (!$config->get(Options::BASE_URL)) {
|
386 |
-
$endpoint = call_user_func(
|
387 |
-
$config->get('endpoint_provider'),
|
388 |
-
array(
|
389 |
-
'scheme' => $config->get(Options::SCHEME),
|
390 |
-
'region' => $region,
|
391 |
-
'service' => $config->get(Options::SERVICE)
|
392 |
-
)
|
393 |
-
);
|
394 |
-
$config->set(Options::BASE_URL, $endpoint['endpoint']);
|
395 |
-
|
396 |
-
// Set a signature if one was not explicitly provided.
|
397 |
-
if (!$config->hasKey(Options::SIGNATURE)
|
398 |
-
&& isset($endpoint['signatureVersion'])
|
399 |
-
) {
|
400 |
-
$config->set(Options::SIGNATURE, $endpoint['signatureVersion']);
|
401 |
-
}
|
402 |
-
}
|
403 |
-
|
404 |
-
return $description;
|
405 |
-
}
|
406 |
-
|
407 |
-
/**
|
408 |
-
* Return an appropriate signature object for a a client based on the
|
409 |
-
* "signature" configuration setting, or the default signature specified in
|
410 |
-
* a service description. The signature can be set to a valid signature
|
411 |
-
* version identifier string or an instance of Aws\Common\Signature\SignatureInterface.
|
412 |
-
*
|
413 |
-
* @param ServiceDescription $description Description that holds a signature option
|
414 |
-
* @param Collection $config Configuration options
|
415 |
-
*
|
416 |
-
* @return SignatureInterface
|
417 |
-
* @throws InvalidArgumentException
|
418 |
-
*/
|
419 |
-
protected function getSignature(ServiceDescription $description, Collection $config)
|
420 |
-
{
|
421 |
-
// If a custom signature has not been provided, then use the default
|
422 |
-
// signature setting specified in the service description.
|
423 |
-
$signature = $config->get(Options::SIGNATURE) ?: $description->getData('signatureVersion');
|
424 |
-
|
425 |
-
if (is_string($signature)) {
|
426 |
-
if ($signature == 'v4') {
|
427 |
-
$signature = new SignatureV4();
|
428 |
-
} elseif ($signature == 'v2') {
|
429 |
-
$signature = new SignatureV2();
|
430 |
-
} elseif ($signature == 'v3https') {
|
431 |
-
$signature = new SignatureV3Https();
|
432 |
-
} else {
|
433 |
-
throw new InvalidArgumentException("Invalid signature type: {$signature}");
|
434 |
-
}
|
435 |
-
} elseif (!($signature instanceof SignatureInterface)) {
|
436 |
-
throw new InvalidArgumentException('The provided signature is not '
|
437 |
-
. 'a signature version string or an instance of '
|
438 |
-
. 'Aws\\Common\\Signature\\SignatureInterface');
|
439 |
-
}
|
440 |
-
|
441 |
-
// Allow a custom service name or region value to be provided
|
442 |
-
if ($signature instanceof EndpointSignatureInterface) {
|
443 |
-
|
444 |
-
// Determine the service name to use when signing
|
445 |
-
$signature->setServiceName($config->get(Options::SIGNATURE_SERVICE)
|
446 |
-
?: $description->getData('signingName')
|
447 |
-
?: $description->getData('endpointPrefix'));
|
448 |
-
|
449 |
-
// Determine the region to use when signing requests
|
450 |
-
$signature->setRegionName($config->get(Options::SIGNATURE_REGION) ?: $config->get(Options::REGION));
|
451 |
-
}
|
452 |
-
|
453 |
-
return $signature;
|
454 |
-
}
|
455 |
-
|
456 |
-
protected function getCredentials(Collection $config)
|
457 |
-
{
|
458 |
-
$credentials = $config->get(Options::CREDENTIALS);
|
459 |
-
if ($credentials === false) {
|
460 |
-
$credentials = new NullCredentials();
|
461 |
-
} elseif (!$credentials instanceof CredentialsInterface) {
|
462 |
-
$credentials = Credentials::factory($config);
|
463 |
-
}
|
464 |
-
|
465 |
-
return $credentials;
|
466 |
-
}
|
467 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
+
* You may not use this file except in compliance with the License.
|
7 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
namespace Aws\Common\Client;
|
18 |
+
|
19 |
+
use Aws\Common\Credentials\Credentials;
|
20 |
+
use Aws\Common\Credentials\CredentialsInterface;
|
21 |
+
use Aws\Common\Credentials\NullCredentials;
|
22 |
+
use Aws\Common\Enum\ClientOptions as Options;
|
23 |
+
use Aws\Common\Exception\ExceptionListener;
|
24 |
+
use Aws\Common\Exception\InvalidArgumentException;
|
25 |
+
use Aws\Common\Exception\NamespaceExceptionFactory;
|
26 |
+
use Aws\Common\Exception\Parser\DefaultXmlExceptionParser;
|
27 |
+
use Aws\Common\Exception\Parser\ExceptionParserInterface;
|
28 |
+
use Aws\Common\Iterator\AwsResourceIteratorFactory;
|
29 |
+
use Aws\Common\RulesEndpointProvider;
|
30 |
+
use Aws\Common\Signature\EndpointSignatureInterface;
|
31 |
+
use Aws\Common\Signature\SignatureInterface;
|
32 |
+
use Aws\Common\Signature\SignatureV2;
|
33 |
+
use Aws\Common\Signature\SignatureV3Https;
|
34 |
+
use Aws\Common\Signature\SignatureV4;
|
35 |
+
use Guzzle\Common\Collection;
|
36 |
+
use Guzzle\Plugin\Backoff\BackoffPlugin;
|
37 |
+
use Guzzle\Plugin\Backoff\CurlBackoffStrategy;
|
38 |
+
use Guzzle\Plugin\Backoff\ExponentialBackoffStrategy;
|
39 |
+
use Guzzle\Plugin\Backoff\HttpBackoffStrategy;
|
40 |
+
use Guzzle\Plugin\Backoff\TruncatedBackoffStrategy;
|
41 |
+
use Guzzle\Service\Description\ServiceDescription;
|
42 |
+
use Guzzle\Service\Resource\ResourceIteratorClassFactory;
|
43 |
+
use Guzzle\Log\LogAdapterInterface;
|
44 |
+
use Guzzle\Log\ClosureLogAdapter;
|
45 |
+
use Guzzle\Plugin\Backoff\BackoffLogger;
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Builder for creating AWS service clients
|
49 |
+
*/
|
50 |
+
class ClientBuilder
|
51 |
+
{
|
52 |
+
/**
|
53 |
+
* @var array Default client config
|
54 |
+
*/
|
55 |
+
protected static $commonConfigDefaults = array('scheme' => 'https');
|
56 |
+
|
57 |
+
/**
|
58 |
+
* @var array Default client requirements
|
59 |
+
*/
|
60 |
+
protected static $commonConfigRequirements = array(Options::SERVICE_DESCRIPTION);
|
61 |
+
|
62 |
+
/**
|
63 |
+
* @var string The namespace of the client
|
64 |
+
*/
|
65 |
+
protected $clientNamespace;
|
66 |
+
|
67 |
+
/**
|
68 |
+
* @var array The config options
|
69 |
+
*/
|
70 |
+
protected $config = array();
|
71 |
+
|
72 |
+
/**
|
73 |
+
* @var array The config defaults
|
74 |
+
*/
|
75 |
+
protected $configDefaults = array();
|
76 |
+
|
77 |
+
/**
|
78 |
+
* @var array The config requirements
|
79 |
+
*/
|
80 |
+
protected $configRequirements = array();
|
81 |
+
|
82 |
+
/**
|
83 |
+
* @var ExceptionParserInterface The Parser interface for the client
|
84 |
+
*/
|
85 |
+
protected $exceptionParser;
|
86 |
+
|
87 |
+
/**
|
88 |
+
* @var array Array of configuration data for iterators available for the client
|
89 |
+
*/
|
90 |
+
protected $iteratorsConfig = array();
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Factory method for creating the client builder
|
94 |
+
*
|
95 |
+
* @param string $namespace The namespace of the client
|
96 |
+
*
|
97 |
+
* @return ClientBuilder
|
98 |
+
*/
|
99 |
+
public static function factory($namespace = null)
|
100 |
+
{
|
101 |
+
return new static($namespace);
|
102 |
+
}
|
103 |
+
|
104 |
+
/**
|
105 |
+
* Constructs a client builder
|
106 |
+
*
|
107 |
+
* @param string $namespace The namespace of the client
|
108 |
+
*/
|
109 |
+
public function __construct($namespace = null)
|
110 |
+
{
|
111 |
+
$this->clientNamespace = $namespace;
|
112 |
+
}
|
113 |
+
|
114 |
+
/**
|
115 |
+
* Sets the config options
|
116 |
+
*
|
117 |
+
* @param array|Collection $config The config options
|
118 |
+
*
|
119 |
+
* @return ClientBuilder
|
120 |
+
*/
|
121 |
+
public function setConfig($config)
|
122 |
+
{
|
123 |
+
$this->config = $this->processArray($config);
|
124 |
+
|
125 |
+
return $this;
|
126 |
+
}
|
127 |
+
|
128 |
+
/**
|
129 |
+
* Sets the config options' defaults
|
130 |
+
*
|
131 |
+
* @param array|Collection $defaults The default values
|
132 |
+
*
|
133 |
+
* @return ClientBuilder
|
134 |
+
*/
|
135 |
+
public function setConfigDefaults($defaults)
|
136 |
+
{
|
137 |
+
$this->configDefaults = $this->processArray($defaults);
|
138 |
+
|
139 |
+
return $this;
|
140 |
+
}
|
141 |
+
|
142 |
+
/**
|
143 |
+
* Sets the required config options
|
144 |
+
*
|
145 |
+
* @param array|Collection $required The required config options
|
146 |
+
*
|
147 |
+
* @return ClientBuilder
|
148 |
+
*/
|
149 |
+
public function setConfigRequirements($required)
|
150 |
+
{
|
151 |
+
$this->configRequirements = $this->processArray($required);
|
152 |
+
|
153 |
+
return $this;
|
154 |
+
}
|
155 |
+
|
156 |
+
/**
|
157 |
+
* Sets the exception parser. If one is not provided the builder will use
|
158 |
+
* the default XML exception parser.
|
159 |
+
*
|
160 |
+
* @param ExceptionParserInterface $parser The exception parser
|
161 |
+
*
|
162 |
+
* @return ClientBuilder
|
163 |
+
*/
|
164 |
+
public function setExceptionParser(ExceptionParserInterface $parser)
|
165 |
+
{
|
166 |
+
$this->exceptionParser = $parser;
|
167 |
+
|
168 |
+
return $this;
|
169 |
+
}
|
170 |
+
|
171 |
+
/**
|
172 |
+
* Set the configuration for the client's iterators
|
173 |
+
*
|
174 |
+
* @param array $config Configuration data for client's iterators
|
175 |
+
*
|
176 |
+
* @return ClientBuilder
|
177 |
+
*/
|
178 |
+
public function setIteratorsConfig(array $config)
|
179 |
+
{
|
180 |
+
$this->iteratorsConfig = $config;
|
181 |
+
|
182 |
+
return $this;
|
183 |
+
}
|
184 |
+
|
185 |
+
/**
|
186 |
+
* Performs the building logic using all of the parameters that have been
|
187 |
+
* set and falling back to default values. Returns an instantiate service
|
188 |
+
* client with credentials prepared and plugins attached.
|
189 |
+
*
|
190 |
+
* @return AwsClientInterface
|
191 |
+
* @throws InvalidArgumentException
|
192 |
+
*/
|
193 |
+
public function build()
|
194 |
+
{
|
195 |
+
// Resolve configuration
|
196 |
+
$config = Collection::fromConfig(
|
197 |
+
$this->config,
|
198 |
+
array_merge(self::$commonConfigDefaults, $this->configDefaults),
|
199 |
+
(self::$commonConfigRequirements + $this->configRequirements)
|
200 |
+
);
|
201 |
+
|
202 |
+
if (!isset($config['endpoint_provider'])) {
|
203 |
+
$config['endpoint_provider'] = RulesEndpointProvider::fromDefaults();
|
204 |
+
}
|
205 |
+
|
206 |
+
// Resolve the endpoint, signature, and credentials
|
207 |
+
$description = $this->updateConfigFromDescription($config);
|
208 |
+
$signature = $this->getSignature($description, $config);
|
209 |
+
$credentials = $this->getCredentials($config);
|
210 |
+
|
211 |
+
// Resolve exception parser
|
212 |
+
if (!$this->exceptionParser) {
|
213 |
+
$this->exceptionParser = new DefaultXmlExceptionParser();
|
214 |
+
}
|
215 |
+
|
216 |
+
// Resolve backoff strategy
|
217 |
+
$backoff = $config->get(Options::BACKOFF);
|
218 |
+
if ($backoff === null) {
|
219 |
+
$backoff = new BackoffPlugin(
|
220 |
+
// Retry failed requests up to 3 times if it is determined that the request can be retried
|
221 |
+
new TruncatedBackoffStrategy(3,
|
222 |
+
// Retry failed requests with 400-level responses due to throttling
|
223 |
+
new ThrottlingErrorChecker($this->exceptionParser,
|
224 |
+
// Retry failed requests due to transient network or cURL problems
|
225 |
+
new CurlBackoffStrategy(null,
|
226 |
+
// Retry failed requests with 500-level responses
|
227 |
+
new HttpBackoffStrategy(array(500, 503, 509),
|
228 |
+
// Retry requests that failed due to expired credentials
|
229 |
+
new ExpiredCredentialsChecker($this->exceptionParser,
|
230 |
+
new ExponentialBackoffStrategy()
|
231 |
+
)
|
232 |
+
)
|
233 |
+
)
|
234 |
+
)
|
235 |
+
)
|
236 |
+
);
|
237 |
+
$config->set(Options::BACKOFF, $backoff);
|
238 |
+
}
|
239 |
+
|
240 |
+
if ($backoff) {
|
241 |
+
$this->addBackoffLogger($backoff, $config);
|
242 |
+
}
|
243 |
+
|
244 |
+
// Determine service and class name
|
245 |
+
$clientClass = 'Aws\Common\Client\DefaultClient';
|
246 |
+
if ($this->clientNamespace) {
|
247 |
+
$serviceName = substr($this->clientNamespace, strrpos($this->clientNamespace, '\\') + 1);
|
248 |
+
$clientClass = $this->clientNamespace . '\\' . $serviceName . 'Client';
|
249 |
+
}
|
250 |
+
|
251 |
+
/** @var $client AwsClientInterface */
|
252 |
+
$client = new $clientClass($credentials, $signature, $config);
|
253 |
+
$client->setDescription($description);
|
254 |
+
|
255 |
+
// Add exception marshaling so that more descriptive exception are thrown
|
256 |
+
if ($this->clientNamespace) {
|
257 |
+
$exceptionFactory = new NamespaceExceptionFactory(
|
258 |
+
$this->exceptionParser,
|
259 |
+
"{$this->clientNamespace}\\Exception",
|
260 |
+
"{$this->clientNamespace}\\Exception\\{$serviceName}Exception"
|
261 |
+
);
|
262 |
+
$client->addSubscriber(new ExceptionListener($exceptionFactory));
|
263 |
+
}
|
264 |
+
|
265 |
+
// Add the UserAgentPlugin to append to the User-Agent header of requests
|
266 |
+
$client->addSubscriber(new UserAgentListener());
|
267 |
+
|
268 |
+
// Filters used for the cache plugin
|
269 |
+
$client->getConfig()->set(
|
270 |
+
'params.cache.key_filter',
|
271 |
+
'header=date,x-amz-date,x-amz-security-token,x-amzn-authorization'
|
272 |
+
);
|
273 |
+
|
274 |
+
// Set the iterator resource factory based on the provided iterators config
|
275 |
+
$client->setResourceIteratorFactory(new AwsResourceIteratorFactory(
|
276 |
+
$this->iteratorsConfig,
|
277 |
+
new ResourceIteratorClassFactory($this->clientNamespace . '\\Iterator')
|
278 |
+
));
|
279 |
+
|
280 |
+
// Disable parameter validation if needed
|
281 |
+
if ($config->get(Options::VALIDATION) === false) {
|
282 |
+
$params = $config->get('command.params') ?: array();
|
283 |
+
$params['command.disable_validation'] = true;
|
284 |
+
$config->set('command.params', $params);
|
285 |
+
}
|
286 |
+
|
287 |
+
return $client;
|
288 |
+
}
|
289 |
+
|
290 |
+
/**
|
291 |
+
* Add backoff logging to the backoff plugin if needed
|
292 |
+
*
|
293 |
+
* @param BackoffPlugin $plugin Backoff plugin
|
294 |
+
* @param Collection $config Configuration settings
|
295 |
+
*
|
296 |
+
* @throws InvalidArgumentException
|
297 |
+
*/
|
298 |
+
protected function addBackoffLogger(BackoffPlugin $plugin, Collection $config)
|
299 |
+
{
|
300 |
+
// The log option can be set to `debug` or an instance of a LogAdapterInterface
|
301 |
+
if ($logger = $config->get(Options::BACKOFF_LOGGER)) {
|
302 |
+
$format = $config->get(Options::BACKOFF_LOGGER_TEMPLATE);
|
303 |
+
if ($logger === 'debug') {
|
304 |
+
$logger = new ClosureLogAdapter(function ($message) {
|
305 |
+
trigger_error($message . "\n");
|
306 |
+
});
|
307 |
+
} elseif (!($logger instanceof LogAdapterInterface)) {
|
308 |
+
throw new InvalidArgumentException(
|
309 |
+
Options::BACKOFF_LOGGER . ' must be set to `debug` or an instance of '
|
310 |
+
. 'Guzzle\\Common\\Log\\LogAdapterInterface'
|
311 |
+
);
|
312 |
+
}
|
313 |
+
// Create the plugin responsible for logging exponential backoff retries
|
314 |
+
$logPlugin = new BackoffLogger($logger);
|
315 |
+
// You can specify a custom format or use the default
|
316 |
+
if ($format) {
|
317 |
+
$logPlugin->setTemplate($format);
|
318 |
+
}
|
319 |
+
$plugin->addSubscriber($logPlugin);
|
320 |
+
}
|
321 |
+
}
|
322 |
+
|
323 |
+
/**
|
324 |
+
* Ensures that an array (e.g. for config data) is actually in array form
|
325 |
+
*
|
326 |
+
* @param array|Collection $array The array data
|
327 |
+
*
|
328 |
+
* @return array
|
329 |
+
* @throws InvalidArgumentException if the arg is not an array or Collection
|
330 |
+
*/
|
331 |
+
protected function processArray($array)
|
332 |
+
{
|
333 |
+
if ($array instanceof Collection) {
|
334 |
+
$array = $array->getAll();
|
335 |
+
}
|
336 |
+
|
337 |
+
if (!is_array($array)) {
|
338 |
+
throw new InvalidArgumentException('The config must be provided as an array or Collection.');
|
339 |
+
}
|
340 |
+
|
341 |
+
return $array;
|
342 |
+
}
|
343 |
+
|
344 |
+
/**
|
345 |
+
* Update a configuration object from a service description
|
346 |
+
*
|
347 |
+
* @param Collection $config Config to update
|
348 |
+
*
|
349 |
+
* @return ServiceDescription
|
350 |
+
* @throws InvalidArgumentException
|
351 |
+
*/
|
352 |
+
protected function updateConfigFromDescription(Collection $config)
|
353 |
+
{
|
354 |
+
$description = $config->get(Options::SERVICE_DESCRIPTION);
|
355 |
+
if (!($description instanceof ServiceDescription)) {
|
356 |
+
// Inject the version into the sprintf template if it is a string
|
357 |
+
if (is_string($description)) {
|
358 |
+
$description = sprintf($description, $config->get(Options::VERSION));
|
359 |
+
}
|
360 |
+
$description = ServiceDescription::factory($description);
|
361 |
+
$config->set(Options::SERVICE_DESCRIPTION, $description);
|
362 |
+
}
|
363 |
+
|
364 |
+
if (!$config->get(Options::SERVICE)) {
|
365 |
+
$config->set(Options::SERVICE, $description->getData('endpointPrefix'));
|
366 |
+
}
|
367 |
+
|
368 |
+
if ($iterators = $description->getData('iterators')) {
|
369 |
+
$this->setIteratorsConfig($iterators);
|
370 |
+
}
|
371 |
+
|
372 |
+
// Make sure a valid region is set
|
373 |
+
$region = $config->get(Options::REGION);
|
374 |
+
$global = $description->getData('globalEndpoint');
|
375 |
+
|
376 |
+
if (!$global && !$region) {
|
377 |
+
throw new InvalidArgumentException(
|
378 |
+
'A region is required when using ' . $description->getData('serviceFullName')
|
379 |
+
);
|
380 |
+
} elseif ($global && (!$region || $description->getData('namespace') !== 'S3')) {
|
381 |
+
$region = 'us-east-1';
|
382 |
+
$config->set(Options::REGION, 'us-east-1');
|
383 |
+
}
|
384 |
+
|
385 |
+
if (!$config->get(Options::BASE_URL)) {
|
386 |
+
$endpoint = call_user_func(
|
387 |
+
$config->get('endpoint_provider'),
|
388 |
+
array(
|
389 |
+
'scheme' => $config->get(Options::SCHEME),
|
390 |
+
'region' => $region,
|
391 |
+
'service' => $config->get(Options::SERVICE)
|
392 |
+
)
|
393 |
+
);
|
394 |
+
$config->set(Options::BASE_URL, $endpoint['endpoint']);
|
395 |
+
|
396 |
+
// Set a signature if one was not explicitly provided.
|
397 |
+
if (!$config->hasKey(Options::SIGNATURE)
|
398 |
+
&& isset($endpoint['signatureVersion'])
|
399 |
+
) {
|
400 |
+
$config->set(Options::SIGNATURE, $endpoint['signatureVersion']);
|
401 |
+
}
|
402 |
+
}
|
403 |
+
|
404 |
+
return $description;
|
405 |
+
}
|
406 |
+
|
407 |
+
/**
|
408 |
+
* Return an appropriate signature object for a a client based on the
|
409 |
+
* "signature" configuration setting, or the default signature specified in
|
410 |
+
* a service description. The signature can be set to a valid signature
|
411 |
+
* version identifier string or an instance of Aws\Common\Signature\SignatureInterface.
|
412 |
+
*
|
413 |
+
* @param ServiceDescription $description Description that holds a signature option
|
414 |
+
* @param Collection $config Configuration options
|
415 |
+
*
|
416 |
+
* @return SignatureInterface
|
417 |
+
* @throws InvalidArgumentException
|
418 |
+
*/
|
419 |
+
protected function getSignature(ServiceDescription $description, Collection $config)
|
420 |
+
{
|
421 |
+
// If a custom signature has not been provided, then use the default
|
422 |
+
// signature setting specified in the service description.
|
423 |
+
$signature = $config->get(Options::SIGNATURE) ?: $description->getData('signatureVersion');
|
424 |
+
|
425 |
+
if (is_string($signature)) {
|
426 |
+
if ($signature == 'v4') {
|
427 |
+
$signature = new SignatureV4();
|
428 |
+
} elseif ($signature == 'v2') {
|
429 |
+
$signature = new SignatureV2();
|
430 |
+
} elseif ($signature == 'v3https') {
|
431 |
+
$signature = new SignatureV3Https();
|
432 |
+
} else {
|
433 |
+
throw new InvalidArgumentException("Invalid signature type: {$signature}");
|
434 |
+
}
|
435 |
+
} elseif (!($signature instanceof SignatureInterface)) {
|
436 |
+
throw new InvalidArgumentException('The provided signature is not '
|
437 |
+
. 'a signature version string or an instance of '
|
438 |
+
. 'Aws\\Common\\Signature\\SignatureInterface');
|
439 |
+
}
|
440 |
+
|
441 |
+
// Allow a custom service name or region value to be provided
|
442 |
+
if ($signature instanceof EndpointSignatureInterface) {
|
443 |
+
|
444 |
+
// Determine the service name to use when signing
|
445 |
+
$signature->setServiceName($config->get(Options::SIGNATURE_SERVICE)
|
446 |
+
?: $description->getData('signingName')
|
447 |
+
?: $description->getData('endpointPrefix'));
|
448 |
+
|
449 |
+
// Determine the region to use when signing requests
|
450 |
+
$signature->setRegionName($config->get(Options::SIGNATURE_REGION) ?: $config->get(Options::REGION));
|
451 |
+
}
|
452 |
+
|
453 |
+
return $signature;
|
454 |
+
}
|
455 |
+
|
456 |
+
protected function getCredentials(Collection $config)
|
457 |
+
{
|
458 |
+
$credentials = $config->get(Options::CREDENTIALS);
|
459 |
+
if ($credentials === false) {
|
460 |
+
$credentials = new NullCredentials();
|
461 |
+
} elseif (!$credentials instanceof CredentialsInterface) {
|
462 |
+
$credentials = Credentials::factory($config);
|
463 |
+
}
|
464 |
+
|
465 |
+
return $credentials;
|
466 |
+
}
|
467 |
+
}
|
vendor/Aws/Common/Command/AwsQueryVisitor.php
CHANGED
@@ -1,117 +1,117 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Aws\Common\Command;
|
4 |
-
|
5 |
-
use Guzzle\Http\Message\RequestInterface;
|
6 |
-
use Guzzle\Service\Description\Parameter;
|
7 |
-
use Guzzle\Service\Command\CommandInterface;
|
8 |
-
use Guzzle\Service\Command\LocationVisitor\Request\AbstractRequestVisitor;
|
9 |
-
|
10 |
-
/**
|
11 |
-
* Location visitor used to serialize AWS query parameters (e.g. EC2, SES, SNS, SQS, etc) as POST fields
|
12 |
-
*/
|
13 |
-
class AwsQueryVisitor extends AbstractRequestVisitor
|
14 |
-
{
|
15 |
-
private $fqname;
|
16 |
-
|
17 |
-
public function visit(CommandInterface $command, RequestInterface $request, Parameter $param, $value)
|
18 |
-
{
|
19 |
-
$this->fqname = $command->getName();
|
20 |
-
$query = array();
|
21 |
-
$this->customResolver($value, $param, $query, $param->getWireName());
|
22 |
-
$request->addPostFields($query);
|
23 |
-
}
|
24 |
-
|
25 |
-
/**
|
26 |
-
* Map nested parameters into the location_key based parameters
|
27 |
-
*
|
28 |
-
* @param array $value Value to map
|
29 |
-
* @param Parameter $param Parameter that holds information about the current key
|
30 |
-
* @param array $query Built up query string values
|
31 |
-
* @param string $prefix String to prepend to sub query values
|
32 |
-
*/
|
33 |
-
protected function customResolver($value, Parameter $param, array &$query, $prefix = '')
|
34 |
-
{
|
35 |
-
switch ($param->getType()) {
|
36 |
-
case 'object':
|
37 |
-
$this->resolveObject($param, $value, $prefix, $query);
|
38 |
-
break;
|
39 |
-
case 'array':
|
40 |
-
$this->resolveArray($param, $value, $prefix, $query);
|
41 |
-
break;
|
42 |
-
default:
|
43 |
-
$query[$prefix] = $param->filter($value);
|
44 |
-
}
|
45 |
-
}
|
46 |
-
|
47 |
-
/**
|
48 |
-
* Custom handling for objects
|
49 |
-
*
|
50 |
-
* @param Parameter $param Parameter for the object
|
51 |
-
* @param array $value Value that is set for this parameter
|
52 |
-
* @param string $prefix Prefix for the resulting key
|
53 |
-
* @param array $query Query string array passed by reference
|
54 |
-
*/
|
55 |
-
protected function resolveObject(Parameter $param, array $value, $prefix, array &$query)
|
56 |
-
{
|
57 |
-
// Maps are implemented using additional properties
|
58 |
-
$hasAdditionalProperties = ($param->getAdditionalProperties() instanceof Parameter);
|
59 |
-
$additionalPropertyCount = 0;
|
60 |
-
|
61 |
-
foreach ($value as $name => $v) {
|
62 |
-
if ($subParam = $param->getProperty($name)) {
|
63 |
-
// if the parameter was found by name as a regular property
|
64 |
-
$key = $prefix . '.' . $subParam->getWireName();
|
65 |
-
$this->customResolver($v, $subParam, $query, $key);
|
66 |
-
} elseif ($hasAdditionalProperties) {
|
67 |
-
// Handle map cases like &Attribute.1.Name=<name>&Attribute.1.Value=<value>
|
68 |
-
$additionalPropertyCount++;
|
69 |
-
$data = $param->getData();
|
70 |
-
$keyName = isset($data['keyName']) ? $data['keyName'] : 'key';
|
71 |
-
$valueName = isset($data['valueName']) ? $data['valueName'] : 'value';
|
72 |
-
$query["{$prefix}.{$additionalPropertyCount}.{$keyName}"] = $name;
|
73 |
-
$newPrefix = "{$prefix}.{$additionalPropertyCount}.{$valueName}";
|
74 |
-
if (is_array($v)) {
|
75 |
-
$this->customResolver($v, $param->getAdditionalProperties(), $query, $newPrefix);
|
76 |
-
} else {
|
77 |
-
$query[$newPrefix] = $param->filter($v);
|
78 |
-
}
|
79 |
-
}
|
80 |
-
}
|
81 |
-
}
|
82 |
-
|
83 |
-
/**
|
84 |
-
* Custom handling for arrays
|
85 |
-
*
|
86 |
-
* @param Parameter $param Parameter for the object
|
87 |
-
* @param array $value Value that is set for this parameter
|
88 |
-
* @param string $prefix Prefix for the resulting key
|
89 |
-
* @param array $query Query string array passed by reference
|
90 |
-
*/
|
91 |
-
protected function resolveArray(Parameter $param, array $value, $prefix, array &$query)
|
92 |
-
{
|
93 |
-
static $serializeEmpty = array(
|
94 |
-
'SetLoadBalancerPoliciesForBackendServer' => 1,
|
95 |
-
'SetLoadBalancerPoliciesOfListener' => 1,
|
96 |
-
'UpdateStack' => 1
|
97 |
-
);
|
98 |
-
|
99 |
-
// For BC, serialize empty lists for specific operations
|
100 |
-
if (!$value) {
|
101 |
-
if (isset($serializeEmpty[$this->fqname])) {
|
102 |
-
$query[$prefix] = '';
|
103 |
-
}
|
104 |
-
return;
|
105 |
-
}
|
106 |
-
|
107 |
-
$offset = $param->getData('offset') ?: 1;
|
108 |
-
foreach ($value as $index => $v) {
|
109 |
-
$index += $offset;
|
110 |
-
if (is_array($v) && $items = $param->getItems()) {
|
111 |
-
$this->customResolver($v, $items, $query, $prefix . '.' . $index);
|
112 |
-
} else {
|
113 |
-
$query[$prefix . '.' . $index] = $param->filter($v);
|
114 |
-
}
|
115 |
-
}
|
116 |
-
}
|
117 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Aws\Common\Command;
|
4 |
+
|
5 |
+
use Guzzle\Http\Message\RequestInterface;
|
6 |
+
use Guzzle\Service\Description\Parameter;
|
7 |
+
use Guzzle\Service\Command\CommandInterface;
|
8 |
+
use Guzzle\Service\Command\LocationVisitor\Request\AbstractRequestVisitor;
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Location visitor used to serialize AWS query parameters (e.g. EC2, SES, SNS, SQS, etc) as POST fields
|
12 |
+
*/
|
13 |
+
class AwsQueryVisitor extends AbstractRequestVisitor
|
14 |
+
{
|
15 |
+
private $fqname;
|
16 |
+
|
17 |
+
public function visit(CommandInterface $command, RequestInterface $request, Parameter $param, $value)
|
18 |
+
{
|
19 |
+
$this->fqname = $command->getName();
|
20 |
+
$query = array();
|
21 |
+
$this->customResolver($value, $param, $query, $param->getWireName());
|
22 |
+
$request->addPostFields($query);
|
23 |
+
}
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Map nested parameters into the location_key based parameters
|
27 |
+
*
|
28 |
+
* @param array $value Value to map
|
29 |
+
* @param Parameter $param Parameter that holds information about the current key
|
30 |
+
* @param array $query Built up query string values
|
31 |
+
* @param string $prefix String to prepend to sub query values
|
32 |
+
*/
|
33 |
+
protected function customResolver($value, Parameter $param, array &$query, $prefix = '')
|
34 |
+
{
|
35 |
+
switch ($param->getType()) {
|
36 |
+
case 'object':
|
37 |
+
$this->resolveObject($param, $value, $prefix, $query);
|
38 |
+
break;
|
39 |
+
case 'array':
|
40 |
+
$this->resolveArray($param, $value, $prefix, $query);
|
41 |
+
break;
|
42 |
+
default:
|
43 |
+
$query[$prefix] = $param->filter($value);
|
44 |
+
}
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Custom handling for objects
|
49 |
+
*
|
50 |
+
* @param Parameter $param Parameter for the object
|
51 |
+
* @param array $value Value that is set for this parameter
|
52 |
+
* @param string $prefix Prefix for the resulting key
|
53 |
+
* @param array $query Query string array passed by reference
|
54 |
+
*/
|
55 |
+
protected function resolveObject(Parameter $param, array $value, $prefix, array &$query)
|
56 |
+
{
|
57 |
+
// Maps are implemented using additional properties
|
58 |
+
$hasAdditionalProperties = ($param->getAdditionalProperties() instanceof Parameter);
|
59 |
+
$additionalPropertyCount = 0;
|
60 |
+
|
61 |
+
foreach ($value as $name => $v) {
|
62 |
+
if ($subParam = $param->getProperty($name)) {
|
63 |
+
// if the parameter was found by name as a regular property
|
64 |
+
$key = $prefix . '.' . $subParam->getWireName();
|
65 |
+
$this->customResolver($v, $subParam, $query, $key);
|
66 |
+
} elseif ($hasAdditionalProperties) {
|
67 |
+
// Handle map cases like &Attribute.1.Name=<name>&Attribute.1.Value=<value>
|
68 |
+
$additionalPropertyCount++;
|
69 |
+
$data = $param->getData();
|
70 |
+
$keyName = isset($data['keyName']) ? $data['keyName'] : 'key';
|
71 |
+
$valueName = isset($data['valueName']) ? $data['valueName'] : 'value';
|
72 |
+
$query["{$prefix}.{$additionalPropertyCount}.{$keyName}"] = $name;
|
73 |
+
$newPrefix = "{$prefix}.{$additionalPropertyCount}.{$valueName}";
|
74 |
+
if (is_array($v)) {
|
75 |
+
$this->customResolver($v, $param->getAdditionalProperties(), $query, $newPrefix);
|
76 |
+
} else {
|
77 |
+
$query[$newPrefix] = $param->filter($v);
|
78 |
+
}
|
79 |
+
}
|
80 |
+
}
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* Custom handling for arrays
|
85 |
+
*
|
86 |
+
* @param Parameter $param Parameter for the object
|
87 |
+
* @param array $value Value that is set for this parameter
|
88 |
+
* @param string $prefix Prefix for the resulting key
|
89 |
+
* @param array $query Query string array passed by reference
|
90 |
+
*/
|
91 |
+
protected function resolveArray(Parameter $param, array $value, $prefix, array &$query)
|
92 |
+
{
|
93 |
+
static $serializeEmpty = array(
|
94 |
+
'SetLoadBalancerPoliciesForBackendServer' => 1,
|
95 |
+
'SetLoadBalancerPoliciesOfListener' => 1,
|
96 |
+
'UpdateStack' => 1
|
97 |
+
);
|
98 |
+
|
99 |
+
// For BC, serialize empty lists for specific operations
|
100 |
+
if (!$value) {
|
101 |
+
if (isset($serializeEmpty[$this->fqname])) {
|
102 |
+
$query[$prefix] = '';
|
103 |
+
}
|
104 |
+
return;
|
105 |
+
}
|
106 |
+
|
107 |
+
$offset = $param->getData('offset') ?: 1;
|
108 |
+
foreach ($value as $index => $v) {
|
109 |
+
$index += $offset;
|
110 |
+
if (is_array($v) && $items = $param->getItems()) {
|
111 |
+
$this->customResolver($v, $items, $query, $prefix . '.' . $index);
|
112 |
+
} else {
|
113 |
+
$query[$prefix . '.' . $index] = $param->filter($v);
|
114 |
+
}
|
115 |
+
}
|
116 |
+
}
|
117 |
+
}
|
vendor/Aws/Common/Credentials/Credentials.php
CHANGED
@@ -1,337 +1,337 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
-
*
|
5 |
-
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
-
* You may not use this file except in compliance with the License.
|
7 |
-
* A copy of the License is located at
|
8 |
-
*
|
9 |
-
* http://aws.amazon.com/apache2.0
|
10 |
-
*
|
11 |
-
* or in the "license" file accompanying this file. This file is distributed
|
12 |
-
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
-
* express or implied. See the License for the specific language governing
|
14 |
-
* permissions and limitations under the License.
|
15 |
-
*/
|
16 |
-
|
17 |
-
namespace Aws\Common\Credentials;
|
18 |
-
|
19 |
-
use Aws\Common\Enum\ClientOptions as Options;
|
20 |
-
use Aws\Common\Exception\InvalidArgumentException;
|
21 |
-
use Aws\Common\Exception\RequiredExtensionNotLoadedException;
|
22 |
-
use Aws\Common\Exception\RuntimeException;
|
23 |
-
use Guzzle\Common\FromConfigInterface;
|
24 |
-
use Guzzle\Cache\CacheAdapterInterface;
|
25 |
-
use Guzzle\Cache\DoctrineCacheAdapter;
|
26 |
-
use Guzzle\Common\Collection;
|
27 |
-
|
28 |
-
/**
|
29 |
-
* Basic implementation of the AWSCredentials interface that allows callers to
|
30 |
-
* pass in the AWS access key and secret access in the constructor.
|
31 |
-
*/
|
32 |
-
class Credentials implements CredentialsInterface, FromConfigInterface
|
33 |
-
{
|
34 |
-
const ENV_KEY = 'AWS_ACCESS_KEY_ID';
|
35 |
-
const ENV_SECRET = 'AWS_SECRET_KEY';
|
36 |
-
const ENV_SECRET_ACCESS_KEY = 'AWS_SECRET_ACCESS_KEY';
|
37 |
-
const ENV_PROFILE = 'AWS_PROFILE';
|
38 |
-
|
39 |
-
/** @var string AWS Access Key ID */
|
40 |
-
protected $key;
|
41 |
-
|
42 |
-
/** @var string AWS Secret Access Key */
|
43 |
-
protected $secret;
|
44 |
-
|
45 |
-
/** @var string AWS Security Token */
|
46 |
-
protected $token;
|
47 |
-
|
48 |
-
/** @var int Time to die of token */
|
49 |
-
protected $ttd;
|
50 |
-
|
51 |
-
/**
|
52 |
-
* Get the available keys for the factory method
|
53 |
-
*
|
54 |
-
* @return array
|
55 |
-
*/
|
56 |
-
public static function getConfigDefaults()
|
57 |
-
{
|
58 |
-
return array(
|
59 |
-
Options::KEY => null,
|
60 |
-
Options::SECRET => null,
|
61 |
-
Options::TOKEN => null,
|
62 |
-
Options::TOKEN_TTD => null,
|
63 |
-
Options::PROFILE => null,
|
64 |
-
Options::CREDENTIALS_CACHE => null,
|
65 |
-
Options::CREDENTIALS_CACHE_KEY => null,
|
66 |
-
Options::CREDENTIALS_CLIENT => null
|
67 |
-
);
|
68 |
-
}
|
69 |
-
|
70 |
-
/**
|
71 |
-
* Factory method for creating new credentials. This factory method will
|
72 |
-
* create the appropriate credentials object with appropriate decorators
|
73 |
-
* based on the passed configuration options.
|
74 |
-
*
|
75 |
-
* @param array $config Options to use when instantiating the credentials
|
76 |
-
*
|
77 |
-
* @return CredentialsInterface
|
78 |
-
* @throws InvalidArgumentException If the caching options are invalid
|
79 |
-
* @throws RuntimeException If using the default cache and APC is disabled
|
80 |
-
*/
|
81 |
-
public static function factory($config = array())
|
82 |
-
{
|
83 |
-
// Add default key values
|
84 |
-
foreach (self::getConfigDefaults() as $key => $value) {
|
85 |
-
if (!isset($config[$key])) {
|
86 |
-
$config[$key] = $value;
|
87 |
-
}
|
88 |
-
}
|
89 |
-
|
90 |
-
// Start tracking the cache key
|
91 |
-
$cacheKey = $config[Options::CREDENTIALS_CACHE_KEY];
|
92 |
-
|
93 |
-
// Create the credentials object
|
94 |
-
if (!$config[Options::KEY] || !$config[Options::SECRET]) {
|
95 |
-
$credentials = self::createFromEnvironment($config);
|
96 |
-
// If no cache key was set, use the crc32 hostname of the server
|
97 |
-
$cacheKey = $cacheKey ?: 'credentials_' . crc32(gethostname());
|
98 |
-
} else {
|
99 |
-
// Instantiate using short or long term credentials
|
100 |
-
$credentials = new static(
|
101 |
-
$config[Options::KEY],
|
102 |
-
$config[Options::SECRET],
|
103 |
-
$config[Options::TOKEN],
|
104 |
-
$config[Options::TOKEN_TTD]
|
105 |
-
);
|
106 |
-
// If no cache key was set, use the access key ID
|
107 |
-
$cacheKey = $cacheKey ?: 'credentials_' . $config[Options::KEY];
|
108 |
-
}
|
109 |
-
|
110 |
-
// Check if the credentials are refreshable, and if so, configure caching
|
111 |
-
$cache = $config[Options::CREDENTIALS_CACHE];
|
112 |
-
if ($cacheKey && $cache) {
|
113 |
-
$credentials = self::createCache($credentials, $cache, $cacheKey);
|
114 |
-
}
|
115 |
-
|
116 |
-
return $credentials;
|
117 |
-
}
|
118 |
-
|
119 |
-
/**
|
120 |
-
* Create credentials from the credentials ini file in the HOME directory.
|
121 |
-
*
|
122 |
-
* @param string|null $profile Pass a specific profile to use. If no
|
123 |
-
* profile is specified we will attempt to use
|
124 |
-
* the value specified in the AWS_PROFILE
|
125 |
-
* environment variable. If AWS_PROFILE is not
|
126 |
-
* set, the "default" profile is used.
|
127 |
-
* @param string|null $filename Pass a string to specify the location of the
|
128 |
-
* credentials files. If null is passed, the
|
129 |
-
* SDK will attempt to find the configuration
|
130 |
-
* file at in your HOME directory at
|
131 |
-
* ~/.aws/credentials.
|
132 |
-
* @return CredentialsInterface
|
133 |
-
* @throws \RuntimeException if the file cannot be found, if the file is
|
134 |
-
* invalid, or if the profile is invalid.
|
135 |
-
*/
|
136 |
-
public static function fromIni($profile = null, $filename = null)
|
137 |
-
{
|
138 |
-
if (!$filename) {
|
139 |
-
$filename = self::getHomeDir() . '/.aws/credentials';
|
140 |
-
}
|
141 |
-
|
142 |
-
if (!$profile) {
|
143 |
-
$profile = self::getEnvVar(self::ENV_PROFILE) ?: 'default';
|
144 |
-
}
|
145 |
-
|
146 |
-
if (!file_exists($filename) || !($data = parse_ini_file($filename, true))) {
|
147 |
-
throw new \RuntimeException("Invalid AWS credentials file: {$filename}.");
|
148 |
-
}
|
149 |
-
|
150 |
-
if (empty($data[$profile])) {
|
151 |
-
throw new \RuntimeException("Invalid AWS credentials profile {$profile} in {$filename}.");
|
152 |
-
}
|
153 |
-
|
154 |
-
return new self(
|
155 |
-
$data[$profile]['aws_access_key_id'],
|
156 |
-
$data[$profile]['aws_secret_access_key'],
|
157 |
-
isset($data[$profile]['aws_security_token'])
|
158 |
-
? $data[$profile]['aws_security_token']
|
159 |
-
: null
|
160 |
-
);
|
161 |
-
}
|
162 |
-
|
163 |
-
/**
|
164 |
-
* Constructs a new BasicAWSCredentials object, with the specified AWS
|
165 |
-
* access key and AWS secret key
|
166 |
-
*
|
167 |
-
* @param string $accessKeyId AWS access key ID
|
168 |
-
* @param string $secretAccessKey AWS secret access key
|
169 |
-
* @param string $token Security token to use
|
170 |
-
* @param int $expiration UNIX timestamp for when credentials expire
|
171 |
-
*/
|
172 |
-
public function __construct($accessKeyId, $secretAccessKey, $token = null, $expiration = null)
|
173 |
-
{
|
174 |
-
$this->key = trim($accessKeyId);
|
175 |
-
$this->secret = trim($secretAccessKey);
|
176 |
-
$this->token = $token;
|
177 |
-
$this->ttd = $expiration;
|
178 |
-
}
|
179 |
-
|
180 |
-
public function serialize()
|
181 |
-
{
|
182 |
-
return json_encode(array(
|
183 |
-
Options::KEY => $this->key,
|
184 |
-
Options::SECRET => $this->secret,
|
185 |
-
Options::TOKEN => $this->token,
|
186 |
-
Options::TOKEN_TTD => $this->ttd
|
187 |
-
));
|
188 |
-
}
|
189 |
-
|
190 |
-
public function unserialize($serialized)
|
191 |
-
{
|
192 |
-
$data = json_decode($serialized, true);
|
193 |
-
$this->key = $data[Options::KEY];
|
194 |
-
$this->secret = $data[Options::SECRET];
|
195 |
-
$this->token = $data[Options::TOKEN];
|
196 |
-
$this->ttd = $data[Options::TOKEN_TTD];
|
197 |
-
}
|
198 |
-
|
199 |
-
public function getAccessKeyId()
|
200 |
-
{
|
201 |
-
return $this->key;
|
202 |
-
}
|
203 |
-
|
204 |
-
public function getSecretKey()
|
205 |
-
{
|
206 |
-
return $this->secret;
|
207 |
-
}
|
208 |
-
|
209 |
-
public function getSecurityToken()
|
210 |
-
{
|
211 |
-
return $this->token;
|
212 |
-
}
|
213 |
-
|
214 |
-
public function getExpiration()
|
215 |
-
{
|
216 |
-
return $this->ttd;
|
217 |
-
}
|
218 |
-
|
219 |
-
public function isExpired()
|
220 |
-
{
|
221 |
-
return $this->ttd !== null && time() >= $this->ttd;
|
222 |
-
}
|
223 |
-
|
224 |
-
public function setAccessKeyId($key)
|
225 |
-
{
|
226 |
-
$this->key = $key;
|
227 |
-
|
228 |
-
return $this;
|
229 |
-
}
|
230 |
-
|
231 |
-
public function setSecretKey($secret)
|
232 |
-
{
|
233 |
-
$this->secret = $secret;
|
234 |
-
|
235 |
-
return $this;
|
236 |
-
}
|
237 |
-
|
238 |
-
public function setSecurityToken($token)
|
239 |
-
{
|
240 |
-
$this->token = $token;
|
241 |
-
|
242 |
-
return $this;
|
243 |
-
}
|
244 |
-
|
245 |
-
public function setExpiration($timestamp)
|
246 |
-
{
|
247 |
-
$this->ttd = $timestamp;
|
248 |
-
|
249 |
-
return $this;
|
250 |
-
}
|
251 |
-
|
252 |
-
/**
|
253 |
-
* When no keys are provided, attempt to create them based on the
|
254 |
-
* environment or instance profile credentials.
|
255 |
-
*
|
256 |
-
* @param array|Collection $config
|
257 |
-
*
|
258 |
-
* @return CredentialsInterface
|
259 |
-
*/
|
260 |
-
private static function createFromEnvironment($config)
|
261 |
-
{
|
262 |
-
// Get key and secret from ENV variables
|
263 |
-
$envKey = self::getEnvVar(self::ENV_KEY);
|
264 |
-
if (!($envSecret = self::getEnvVar(self::ENV_SECRET))) {
|
265 |
-
// Use AWS_SECRET_ACCESS_KEY if AWS_SECRET_KEY was not set.
|
266 |
-
$envSecret = self::getEnvVar(self::ENV_SECRET_ACCESS_KEY);
|
267 |
-
}
|
268 |
-
|
269 |
-
// Use credentials from the environment variables if available
|
270 |
-
if ($envKey && $envSecret) {
|
271 |
-
return new static($envKey, $envSecret);
|
272 |
-
}
|
273 |
-
|
274 |
-
// Use credentials from the ini file in HOME directory if available
|
275 |
-
$home = self::getHomeDir();
|
276 |
-
if ($home && file_exists("{$home}/.aws/credentials")) {
|
277 |
-
return self::fromIni($config[Options::PROFILE], "{$home}/.aws/credentials");
|
278 |
-
}
|
279 |
-
|
280 |
-
// Use instance profile credentials (available on EC2 instances)
|
281 |
-
return new RefreshableInstanceProfileCredentials(
|
282 |
-
new static('', '', '', 1),
|
283 |
-
$config[Options::CREDENTIALS_CLIENT]
|
284 |
-
);
|
285 |
-
}
|
286 |
-
|
287 |
-
private static function createCache(CredentialsInterface $credentials, $cache, $cacheKey)
|
288 |
-
{
|
289 |
-
if ($cache === 'true' || $cache === true) {
|
290 |
-
// If no cache adapter was provided, then create one for the user
|
291 |
-
// @codeCoverageIgnoreStart
|
292 |
-
if (!extension_loaded('apc')) {
|
293 |
-
throw new RequiredExtensionNotLoadedException('PHP has not been compiled with APC. Unable to cache '
|
294 |
-
. 'the credentials.');
|
295 |
-
} elseif (!class_exists('Doctrine\Common\Cache\ApcCache')) {
|
296 |
-
throw new RuntimeException(
|
297 |
-
'Cannot set ' . Options::CREDENTIALS_CACHE . ' to true because the Doctrine cache component is '
|
298 |
-
. 'not installed. Either install doctrine/cache or pass in an instantiated '
|
299 |
-
. 'Guzzle\Cache\CacheAdapterInterface object'
|
300 |
-
);
|
301 |
-
}
|
302 |
-
// @codeCoverageIgnoreEnd
|
303 |
-
$cache = new DoctrineCacheAdapter(new \Doctrine\Common\Cache\ApcCache());
|
304 |
-
} elseif (!($cache instanceof CacheAdapterInterface)) {
|
305 |
-
throw new InvalidArgumentException('Unable to utilize caching with the specified options');
|
306 |
-
}
|
307 |
-
|
308 |
-
// Decorate the credentials with a cache
|
309 |
-
return new CacheableCredentials($credentials, $cache, $cacheKey);
|
310 |
-
}
|
311 |
-
|
312 |
-
private static function getHomeDir()
|
313 |
-
{
|
314 |
-
// On Linux/Unix-like systems, use the HOME environment variable
|
315 |
-
if ($homeDir = self::getEnvVar('HOME')) {
|
316 |
-
return $homeDir;
|
317 |
-
}
|
318 |
-
|
319 |
-
// Get the HOMEDRIVE and HOMEPATH values for Windows hosts
|
320 |
-
$homeDrive = self::getEnvVar('HOMEDRIVE');
|
321 |
-
$homePath = self::getEnvVar('HOMEPATH');
|
322 |
-
|
323 |
-
return ($homeDrive && $homePath) ? $homeDrive . $homePath : null;
|
324 |
-
}
|
325 |
-
|
326 |
-
/**
|
327 |
-
* Fetches the value of an environment variable by checking $_SERVER and getenv().
|
328 |
-
*
|
329 |
-
* @param string $var Name of the environment variable
|
330 |
-
*
|
331 |
-
* @return mixed|null
|
332 |
-
*/
|
333 |
-
private static function getEnvVar($var)
|
334 |
-
{
|
335 |
-
return isset($_SERVER[$var]) ? $_SERVER[$var] : getenv($var);
|
336 |
-
}
|
337 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
+
* You may not use this file except in compliance with the License.
|
7 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
namespace Aws\Common\Credentials;
|
18 |
+
|
19 |
+
use Aws\Common\Enum\ClientOptions as Options;
|
20 |
+
use Aws\Common\Exception\InvalidArgumentException;
|
21 |
+
use Aws\Common\Exception\RequiredExtensionNotLoadedException;
|
22 |
+
use Aws\Common\Exception\RuntimeException;
|
23 |
+
use Guzzle\Common\FromConfigInterface;
|
24 |
+
use Guzzle\Cache\CacheAdapterInterface;
|
25 |
+
use Guzzle\Cache\DoctrineCacheAdapter;
|
26 |
+
use Guzzle\Common\Collection;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Basic implementation of the AWSCredentials interface that allows callers to
|
30 |
+
* pass in the AWS access key and secret access in the constructor.
|
31 |
+
*/
|
32 |
+
class Credentials implements CredentialsInterface, FromConfigInterface
|
33 |
+
{
|
34 |
+
const ENV_KEY = 'AWS_ACCESS_KEY_ID';
|
35 |
+
const ENV_SECRET = 'AWS_SECRET_KEY';
|
36 |
+
const ENV_SECRET_ACCESS_KEY = 'AWS_SECRET_ACCESS_KEY';
|
37 |
+
const ENV_PROFILE = 'AWS_PROFILE';
|
38 |
+
|
39 |
+
/** @var string AWS Access Key ID */
|
40 |
+
protected $key;
|
41 |
+
|
42 |
+
/** @var string AWS Secret Access Key */
|
43 |
+
protected $secret;
|
44 |
+
|
45 |
+
/** @var string AWS Security Token */
|
46 |
+
protected $token;
|
47 |
+
|
48 |
+
/** @var int Time to die of token */
|
49 |
+
protected $ttd;
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Get the available keys for the factory method
|
53 |
+
*
|
54 |
+
* @return array
|
55 |
+
*/
|
56 |
+
public static function getConfigDefaults()
|
57 |
+
{
|
58 |
+
return array(
|
59 |
+
Options::KEY => null,
|
60 |
+
Options::SECRET => null,
|
61 |
+
Options::TOKEN => null,
|
62 |
+
Options::TOKEN_TTD => null,
|
63 |
+
Options::PROFILE => null,
|
64 |
+
Options::CREDENTIALS_CACHE => null,
|
65 |
+
Options::CREDENTIALS_CACHE_KEY => null,
|
66 |
+
Options::CREDENTIALS_CLIENT => null
|
67 |
+
);
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Factory method for creating new credentials. This factory method will
|
72 |
+
* create the appropriate credentials object with appropriate decorators
|
73 |
+
* based on the passed configuration options.
|
74 |
+
*
|
75 |
+
* @param array $config Options to use when instantiating the credentials
|
76 |
+
*
|
77 |
+
* @return CredentialsInterface
|
78 |
+
* @throws InvalidArgumentException If the caching options are invalid
|
79 |
+
* @throws RuntimeException If using the default cache and APC is disabled
|
80 |
+
*/
|
81 |
+
public static function factory($config = array())
|
82 |
+
{
|
83 |
+
// Add default key values
|
84 |
+
foreach (self::getConfigDefaults() as $key => $value) {
|
85 |
+
if (!isset($config[$key])) {
|
86 |
+
$config[$key] = $value;
|
87 |
+
}
|
88 |
+
}
|
89 |
+
|
90 |
+
// Start tracking the cache key
|
91 |
+
$cacheKey = $config[Options::CREDENTIALS_CACHE_KEY];
|
92 |
+
|
93 |
+
// Create the credentials object
|
94 |
+
if (!$config[Options::KEY] || !$config[Options::SECRET]) {
|
95 |
+
$credentials = self::createFromEnvironment($config);
|
96 |
+
// If no cache key was set, use the crc32 hostname of the server
|
97 |
+
$cacheKey = $cacheKey ?: 'credentials_' . crc32(gethostname());
|
98 |
+
} else {
|
99 |
+
// Instantiate using short or long term credentials
|
100 |
+
$credentials = new static(
|
101 |
+
$config[Options::KEY],
|
102 |
+
$config[Options::SECRET],
|
103 |
+
$config[Options::TOKEN],
|
104 |
+
$config[Options::TOKEN_TTD]
|
105 |
+
);
|
106 |
+
// If no cache key was set, use the access key ID
|
107 |
+
$cacheKey = $cacheKey ?: 'credentials_' . $config[Options::KEY];
|
108 |
+
}
|
109 |
+
|
110 |
+
// Check if the credentials are refreshable, and if so, configure caching
|
111 |
+
$cache = $config[Options::CREDENTIALS_CACHE];
|
112 |
+
if ($cacheKey && $cache) {
|
113 |
+
$credentials = self::createCache($credentials, $cache, $cacheKey);
|
114 |
+
}
|
115 |
+
|
116 |
+
return $credentials;
|
117 |
+
}
|
118 |
+
|
119 |
+
/**
|
120 |
+
* Create credentials from the credentials ini file in the HOME directory.
|
121 |
+
*
|
122 |
+
* @param string|null $profile Pass a specific profile to use. If no
|
123 |
+
* profile is specified we will attempt to use
|
124 |
+
* the value specified in the AWS_PROFILE
|
125 |
+
* environment variable. If AWS_PROFILE is not
|
126 |
+
* set, the "default" profile is used.
|
127 |
+
* @param string|null $filename Pass a string to specify the location of the
|
128 |
+
* credentials files. If null is passed, the
|
129 |
+
* SDK will attempt to find the configuration
|
130 |
+
* file at in your HOME directory at
|
131 |
+
* ~/.aws/credentials.
|
132 |
+
* @return CredentialsInterface
|
133 |
+
* @throws \RuntimeException if the file cannot be found, if the file is
|
134 |
+
* invalid, or if the profile is invalid.
|
135 |
+
*/
|
136 |
+
public static function fromIni($profile = null, $filename = null)
|
137 |
+
{
|
138 |
+
if (!$filename) {
|
139 |
+
$filename = self::getHomeDir() . '/.aws/credentials';
|
140 |
+
}
|
141 |
+
|
142 |
+
if (!$profile) {
|
143 |
+
$profile = self::getEnvVar(self::ENV_PROFILE) ?: 'default';
|
144 |
+
}
|
145 |
+
|
146 |
+
if (!file_exists($filename) || !($data = parse_ini_file($filename, true))) {
|
147 |
+
throw new \RuntimeException("Invalid AWS credentials file: {$filename}.");
|
148 |
+
}
|
149 |
+
|
150 |
+
if (empty($data[$profile])) {
|
151 |
+
throw new \RuntimeException("Invalid AWS credentials profile {$profile} in {$filename}.");
|
152 |
+
}
|
153 |
+
|
154 |
+
return new self(
|
155 |
+
$data[$profile]['aws_access_key_id'],
|
156 |
+
$data[$profile]['aws_secret_access_key'],
|
157 |
+
isset($data[$profile]['aws_security_token'])
|
158 |
+
? $data[$profile]['aws_security_token']
|
159 |
+
: null
|
160 |
+
);
|
161 |
+
}
|
162 |
+
|
163 |
+
/**
|
164 |
+
* Constructs a new BasicAWSCredentials object, with the specified AWS
|
165 |
+
* access key and AWS secret key
|
166 |
+
*
|
167 |
+
* @param string $accessKeyId AWS access key ID
|
168 |
+
* @param string $secretAccessKey AWS secret access key
|
169 |
+
* @param string $token Security token to use
|
170 |
+
* @param int $expiration UNIX timestamp for when credentials expire
|
171 |
+
*/
|
172 |
+
public function __construct($accessKeyId, $secretAccessKey, $token = null, $expiration = null)
|
173 |
+
{
|
174 |
+
$this->key = trim($accessKeyId);
|
175 |
+
$this->secret = trim($secretAccessKey);
|
176 |
+
$this->token = $token;
|
177 |
+
$this->ttd = $expiration;
|
178 |
+
}
|
179 |
+
|
180 |
+
public function serialize()
|
181 |
+
{
|
182 |
+
return json_encode(array(
|
183 |
+
Options::KEY => $this->key,
|
184 |
+
Options::SECRET => $this->secret,
|
185 |
+
Options::TOKEN => $this->token,
|
186 |
+
Options::TOKEN_TTD => $this->ttd
|
187 |
+
));
|
188 |
+
}
|
189 |
+
|
190 |
+
public function unserialize($serialized)
|
191 |
+
{
|
192 |
+
$data = json_decode($serialized, true);
|
193 |
+
$this->key = $data[Options::KEY];
|
194 |
+
$this->secret = $data[Options::SECRET];
|
195 |
+
$this->token = $data[Options::TOKEN];
|
196 |
+
$this->ttd = $data[Options::TOKEN_TTD];
|
197 |
+
}
|
198 |
+
|
199 |
+
public function getAccessKeyId()
|
200 |
+
{
|
201 |
+
return $this->key;
|
202 |
+
}
|
203 |
+
|
204 |
+
public function getSecretKey()
|
205 |
+
{
|
206 |
+
return $this->secret;
|
207 |
+
}
|
208 |
+
|
209 |
+
public function getSecurityToken()
|
210 |
+
{
|
211 |
+
return $this->token;
|
212 |
+
}
|
213 |
+
|
214 |
+
public function getExpiration()
|
215 |
+
{
|
216 |
+
return $this->ttd;
|
217 |
+
}
|
218 |
+
|
219 |
+
public function isExpired()
|
220 |
+
{
|
221 |
+
return $this->ttd !== null && time() >= $this->ttd;
|
222 |
+
}
|
223 |
+
|
224 |
+
public function setAccessKeyId($key)
|
225 |
+
{
|
226 |
+
$this->key = $key;
|
227 |
+
|
228 |
+
return $this;
|
229 |
+
}
|
230 |
+
|
231 |
+
public function setSecretKey($secret)
|
232 |
+
{
|
233 |
+
$this->secret = $secret;
|
234 |
+
|
235 |
+
return $this;
|
236 |
+
}
|
237 |
+
|
238 |
+
public function setSecurityToken($token)
|
239 |
+
{
|
240 |
+
$this->token = $token;
|
241 |
+
|
242 |
+
return $this;
|
243 |
+
}
|
244 |
+
|
245 |
+
public function setExpiration($timestamp)
|
246 |
+
{
|
247 |
+
$this->ttd = $timestamp;
|
248 |
+
|
249 |
+
return $this;
|
250 |
+
}
|
251 |
+
|
252 |
+
/**
|
253 |
+
* When no keys are provided, attempt to create them based on the
|
254 |
+
* environment or instance profile credentials.
|
255 |
+
*
|
256 |
+
* @param array|Collection $config
|
257 |
+
*
|
258 |
+
* @return CredentialsInterface
|
259 |
+
*/
|
260 |
+
private static function createFromEnvironment($config)
|
261 |
+
{
|
262 |
+
// Get key and secret from ENV variables
|
263 |
+
$envKey = self::getEnvVar(self::ENV_KEY);
|
264 |
+
if (!($envSecret = self::getEnvVar(self::ENV_SECRET))) {
|
265 |
+
// Use AWS_SECRET_ACCESS_KEY if AWS_SECRET_KEY was not set.
|
266 |
+
$envSecret = self::getEnvVar(self::ENV_SECRET_ACCESS_KEY);
|
267 |
+
}
|
268 |
+
|
269 |
+
// Use credentials from the environment variables if available
|
270 |
+
if ($envKey && $envSecret) {
|
271 |
+
return new static($envKey, $envSecret);
|
272 |
+
}
|
273 |
+
|
274 |
+
// Use credentials from the ini file in HOME directory if available
|
275 |
+
$home = self::getHomeDir();
|
276 |
+
if ($home && file_exists("{$home}/.aws/credentials")) {
|
277 |
+
return self::fromIni($config[Options::PROFILE], "{$home}/.aws/credentials");
|
278 |
+
}
|
279 |
+
|
280 |
+
// Use instance profile credentials (available on EC2 instances)
|
281 |
+
return new RefreshableInstanceProfileCredentials(
|
282 |
+
new static('', '', '', 1),
|
283 |
+
$config[Options::CREDENTIALS_CLIENT]
|
284 |
+
);
|
285 |
+
}
|
286 |
+
|
287 |
+
private static function createCache(CredentialsInterface $credentials, $cache, $cacheKey)
|
288 |
+
{
|
289 |
+
if ($cache === 'true' || $cache === true) {
|
290 |
+
// If no cache adapter was provided, then create one for the user
|
291 |
+
// @codeCoverageIgnoreStart
|
292 |
+
if (!extension_loaded('apc')) {
|
293 |
+
throw new RequiredExtensionNotLoadedException('PHP has not been compiled with APC. Unable to cache '
|
294 |
+
. 'the credentials.');
|
295 |
+
} elseif (!class_exists('Doctrine\Common\Cache\ApcCache')) {
|
296 |
+
throw new RuntimeException(
|
297 |
+
'Cannot set ' . Options::CREDENTIALS_CACHE . ' to true because the Doctrine cache component is '
|
298 |
+
. 'not installed. Either install doctrine/cache or pass in an instantiated '
|
299 |
+
. 'Guzzle\Cache\CacheAdapterInterface object'
|
300 |
+
);
|
301 |
+
}
|
302 |
+
// @codeCoverageIgnoreEnd
|
303 |
+
$cache = new DoctrineCacheAdapter(new \Doctrine\Common\Cache\ApcCache());
|
304 |
+
} elseif (!($cache instanceof CacheAdapterInterface)) {
|
305 |
+
throw new InvalidArgumentException('Unable to utilize caching with the specified options');
|
306 |
+
}
|
307 |
+
|
308 |
+
// Decorate the credentials with a cache
|
309 |
+
return new CacheableCredentials($credentials, $cache, $cacheKey);
|
310 |
+
}
|
311 |
+
|
312 |
+
private static function getHomeDir()
|
313 |
+
{
|
314 |
+
// On Linux/Unix-like systems, use the HOME environment variable
|
315 |
+
if ($homeDir = self::getEnvVar('HOME')) {
|
316 |
+
return $homeDir;
|
317 |
+
}
|
318 |
+
|
319 |
+
// Get the HOMEDRIVE and HOMEPATH values for Windows hosts
|
320 |
+
$homeDrive = self::getEnvVar('HOMEDRIVE');
|
321 |
+
$homePath = self::getEnvVar('HOMEPATH');
|
322 |
+
|
323 |
+
return ($homeDrive && $homePath) ? $homeDrive . $homePath : null;
|
324 |
+
}
|
325 |
+
|
326 |
+
/**
|
327 |
+
* Fetches the value of an environment variable by checking $_SERVER and getenv().
|
328 |
+
*
|
329 |
+
* @param string $var Name of the environment variable
|
330 |
+
*
|
331 |
+
* @return mixed|null
|
332 |
+
*/
|
333 |
+
private static function getEnvVar($var)
|
334 |
+
{
|
335 |
+
return isset($_SERVER[$var]) ? $_SERVER[$var] : getenv($var);
|
336 |
+
}
|
337 |
+
}
|
vendor/Aws/Common/Credentials/NullCredentials.php
CHANGED
@@ -1,68 +1,68 @@
|
|
1 |
-
<?php
|
2 |
-
namespace Aws\Common\Credentials;
|
3 |
-
|
4 |
-
/**
|
5 |
-
* A blank set of credentials. AWS clients must be provided credentials, but
|
6 |
-
* there are some types of requests that do not need authentication. This class
|
7 |
-
* can be used to pivot on that scenario, and also serve as a mock credentials
|
8 |
-
* object when testing
|
9 |
-
*
|
10 |
-
* @codeCoverageIgnore
|
11 |
-
*/
|
12 |
-
class NullCredentials implements CredentialsInterface
|
13 |
-
{
|
14 |
-
public function getAccessKeyId()
|
15 |
-
{
|
16 |
-
return '';
|
17 |
-
}
|
18 |
-
|
19 |
-
public function getSecretKey()
|
20 |
-
{
|
21 |
-
return '';
|
22 |
-
}
|
23 |
-
|
24 |
-
public function getSecurityToken()
|
25 |
-
{
|
26 |
-
return null;
|
27 |
-
}
|
28 |
-
|
29 |
-
public function getExpiration()
|
30 |
-
{
|
31 |
-
return null;
|
32 |
-
}
|
33 |
-
|
34 |
-
public function isExpired()
|
35 |
-
{
|
36 |
-
return false;
|
37 |
-
}
|
38 |
-
|
39 |
-
public function serialize()
|
40 |
-
{
|
41 |
-
return 'N;';
|
42 |
-
}
|
43 |
-
|
44 |
-
public function unserialize($serialized)
|
45 |
-
{
|
46 |
-
// Nothing to do here.
|
47 |
-
}
|
48 |
-
|
49 |
-
public function setAccessKeyId($key)
|
50 |
-
{
|
51 |
-
// Nothing to do here.
|
52 |
-
}
|
53 |
-
|
54 |
-
public function setSecretKey($secret)
|
55 |
-
{
|
56 |
-
// Nothing to do here.
|
57 |
-
}
|
58 |
-
|
59 |
-
public function setSecurityToken($token)
|
60 |
-
{
|
61 |
-
// Nothing to do here.
|
62 |
-
}
|
63 |
-
|
64 |
-
public function setExpiration($timestamp)
|
65 |
-
{
|
66 |
-
// Nothing to do here.
|
67 |
-
}
|
68 |
-
}
|
1 |
+
<?php
|
2 |
+
namespace Aws\Common\Credentials;
|
3 |
+
|
4 |
+
/**
|
5 |
+
* A blank set of credentials. AWS clients must be provided credentials, but
|
6 |
+
* there are some types of requests that do not need authentication. This class
|
7 |
+
* can be used to pivot on that scenario, and also serve as a mock credentials
|
8 |
+
* object when testing
|
9 |
+
*
|
10 |
+
* @codeCoverageIgnore
|
11 |
+
*/
|
12 |
+
class NullCredentials implements CredentialsInterface
|
13 |
+
{
|
14 |
+
public function getAccessKeyId()
|
15 |
+
{
|
16 |
+
return '';
|
17 |
+
}
|
18 |
+
|
19 |
+
public function getSecretKey()
|
20 |
+
{
|
21 |
+
return '';
|
22 |
+
}
|
23 |
+
|
24 |
+
public function getSecurityToken()
|
25 |
+
{
|
26 |
+
return null;
|
27 |
+
}
|
28 |
+
|
29 |
+
public function getExpiration()
|
30 |
+
{
|
31 |
+
return null;
|
32 |
+
}
|
33 |
+
|
34 |
+
public function isExpired()
|
35 |
+
{
|
36 |
+
return false;
|
37 |
+
}
|
38 |
+
|
39 |
+
public function serialize()
|
40 |
+
{
|
41 |
+
return 'N;';
|
42 |
+
}
|
43 |
+
|
44 |
+
public function unserialize($serialized)
|
45 |
+
{
|
46 |
+
// Nothing to do here.
|
47 |
+
}
|
48 |
+
|
49 |
+
public function setAccessKeyId($key)
|
50 |
+
{
|
51 |
+
// Nothing to do here.
|
52 |
+
}
|
53 |
+
|
54 |
+
public function setSecretKey($secret)
|
55 |
+
{
|
56 |
+
// Nothing to do here.
|
57 |
+
}
|
58 |
+
|
59 |
+
public function setSecurityToken($token)
|
60 |
+
{
|
61 |
+
// Nothing to do here.
|
62 |
+
}
|
63 |
+
|
64 |
+
public function setExpiration($timestamp)
|
65 |
+
{
|
66 |
+
// Nothing to do here.
|
67 |
+
}
|
68 |
+
}
|
vendor/Aws/Common/Enum/Region.php
CHANGED
@@ -1,63 +1,63 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
-
*
|
5 |
-
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
-
* You may not use this file except in compliance with the License.
|
7 |
-
* A copy of the License is located at
|
8 |
-
*
|
9 |
-
* http://aws.amazon.com/apache2.0
|
10 |
-
*
|
11 |
-
* or in the "license" file accompanying this file. This file is distributed
|
12 |
-
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
-
* express or implied. See the License for the specific language governing
|
14 |
-
* permissions and limitations under the License.
|
15 |
-
*/
|
16 |
-
|
17 |
-
namespace Aws\Common\Enum;
|
18 |
-
|
19 |
-
use Aws\Common\Enum;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Contains enumerable region code values. These should be useful in most cases,
|
23 |
-
* with Amazon S3 being the most notable exception
|
24 |
-
*
|
25 |
-
* @link http://docs.aws.amazon.com/general/latest/gr/rande.html AWS Regions and Endpoints
|
26 |
-
*/
|
27 |
-
class Region extends Enum
|
28 |
-
{
|
29 |
-
const US_EAST_1 = 'us-east-1';
|
30 |
-
const VIRGINIA = 'us-east-1';
|
31 |
-
const NORTHERN_VIRGINIA = 'us-east-1';
|
32 |
-
|
33 |
-
const US_WEST_1 = 'us-west-1';
|
34 |
-
const CALIFORNIA = 'us-west-1';
|
35 |
-
const NORTHERN_CALIFORNIA = 'us-west-1';
|
36 |
-
|
37 |
-
const US_WEST_2 = 'us-west-2';
|
38 |
-
const OREGON = 'us-west-2';
|
39 |
-
|
40 |
-
const EU_WEST_1 = 'eu-west-1';
|
41 |
-
const IRELAND = 'eu-west-1';
|
42 |
-
|
43 |
-
const EU_CENTRAL_1 = 'eu-central-1';
|
44 |
-
const FRANKFURT = 'eu-central-1';
|
45 |
-
|
46 |
-
const AP_SOUTHEAST_1 = 'ap-southeast-1';
|
47 |
-
const SINGAPORE = 'ap-southeast-1';
|
48 |
-
|
49 |
-
const AP_SOUTHEAST_2 = 'ap-southeast-2';
|
50 |
-
const SYDNEY = 'ap-southeast-2';
|
51 |
-
|
52 |
-
const AP_NORTHEAST_1 = 'ap-northeast-1';
|
53 |
-
const TOKYO = 'ap-northeast-1';
|
54 |
-
|
55 |
-
const SA_EAST_1 = 'sa-east-1';
|
56 |
-
const SAO_PAULO = 'sa-east-1';
|
57 |
-
|
58 |
-
const CN_NORTH_1 = 'cn-north-1';
|
59 |
-
const BEIJING = 'cn-north-1';
|
60 |
-
|
61 |
-
const US_GOV_WEST_1 = 'us-gov-west-1';
|
62 |
-
const GOV_CLOUD_US = 'us-gov-west-1';
|
63 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
+
* You may not use this file except in compliance with the License.
|
7 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
namespace Aws\Common\Enum;
|
18 |
+
|
19 |
+
use Aws\Common\Enum;
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Contains enumerable region code values. These should be useful in most cases,
|
23 |
+
* with Amazon S3 being the most notable exception
|
24 |
+
*
|
25 |
+
* @link http://docs.aws.amazon.com/general/latest/gr/rande.html AWS Regions and Endpoints
|
26 |
+
*/
|
27 |
+
class Region extends Enum
|
28 |
+
{
|
29 |
+
const US_EAST_1 = 'us-east-1';
|
30 |
+
const VIRGINIA = 'us-east-1';
|
31 |
+
const NORTHERN_VIRGINIA = 'us-east-1';
|
32 |
+
|
33 |
+
const US_WEST_1 = 'us-west-1';
|
34 |
+
const CALIFORNIA = 'us-west-1';
|
35 |
+
const NORTHERN_CALIFORNIA = 'us-west-1';
|
36 |
+
|
37 |
+
const US_WEST_2 = 'us-west-2';
|
38 |
+
const OREGON = 'us-west-2';
|
39 |
+
|
40 |
+
const EU_WEST_1 = 'eu-west-1';
|
41 |
+
const IRELAND = 'eu-west-1';
|
42 |
+
|
43 |
+
const EU_CENTRAL_1 = 'eu-central-1';
|
44 |
+
const FRANKFURT = 'eu-central-1';
|
45 |
+
|
46 |
+
const AP_SOUTHEAST_1 = 'ap-southeast-1';
|
47 |
+
const SINGAPORE = 'ap-southeast-1';
|
48 |
+
|
49 |
+
const AP_SOUTHEAST_2 = 'ap-southeast-2';
|
50 |
+
const SYDNEY = 'ap-southeast-2';
|
51 |
+
|
52 |
+
const AP_NORTHEAST_1 = 'ap-northeast-1';
|
53 |
+
const TOKYO = 'ap-northeast-1';
|
54 |
+
|
55 |
+
const SA_EAST_1 = 'sa-east-1';
|
56 |
+
const SAO_PAULO = 'sa-east-1';
|
57 |
+
|
58 |
+
const CN_NORTH_1 = 'cn-north-1';
|
59 |
+
const BEIJING = 'cn-north-1';
|
60 |
+
|
61 |
+
const US_GOV_WEST_1 = 'us-gov-west-1';
|
62 |
+
const GOV_CLOUD_US = 'us-gov-west-1';
|
63 |
+
}
|
vendor/Aws/Common/Facade/Facade.php
CHANGED
@@ -1,67 +1,67 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
-
*
|
5 |
-
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
-
* You may not use this file except in compliance with the License.
|
7 |
-
* A copy of the License is located at
|
8 |
-
*
|
9 |
-
* http://aws.amazon.com/apache2.0
|
10 |
-
*
|
11 |
-
* or in the "license" file accompanying this file. This file is distributed
|
12 |
-
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
-
* express or implied. See the License for the specific language governing
|
14 |
-
* permissions and limitations under the License.
|
15 |
-
*/
|
16 |
-
|
17 |
-
namespace Aws\Common\Facade;
|
18 |
-
|
19 |
-
use Aws\Common\Aws;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Base facade class that handles the delegation logic
|
23 |
-
*/
|
24 |
-
abstract class Facade implements FacadeInterface
|
25 |
-
{
|
26 |
-
/** @var Aws */
|
27 |
-
protected static $serviceBuilder;
|
28 |
-
|
29 |
-
/**
|
30 |
-
* Mounts the facades by extracting information from the service builder config and using creating class aliases
|
31 |
-
*
|
32 |
-
* @param string|null $targetNamespace Namespace that the facades should be mounted to. Defaults to global namespace
|
33 |
-
*
|
34 |
-
* @param Aws $serviceBuilder
|
35 |
-
*/
|
36 |
-
public static function mountFacades(Aws $serviceBuilder, $targetNamespace = null)
|
37 |
-
{
|
38 |
-
self::$serviceBuilder = $serviceBuilder;
|
39 |
-
require_once __DIR__ . '/facade-classes.php';
|
40 |
-
foreach ($serviceBuilder->getConfig() as $service) {
|
41 |
-
if (isset($service['alias'], $service['class'])) {
|
42 |
-
$facadeClass = __NAMESPACE__ . '\\' . $service['alias'];
|
43 |
-
$facadeAlias = ltrim($targetNamespace . '\\' . $service['alias'], '\\');
|
44 |
-
if (!class_exists($facadeAlias) && class_exists($facadeClass)) {
|
45 |
-
// @codeCoverageIgnoreStart
|
46 |
-
class_alias($facadeClass, $facadeAlias);
|
47 |
-
// @codeCoverageIgnoreEnd
|
48 |
-
}
|
49 |
-
}
|
50 |
-
}
|
51 |
-
}
|
52 |
-
|
53 |
-
/**
|
54 |
-
* Returns the instance of the client that the facade operates on
|
55 |
-
*
|
56 |
-
* @return \Aws\Common\Client\AwsClientInterface
|
57 |
-
*/
|
58 |
-
public static function getClient()
|
59 |
-
{
|
60 |
-
return self::$serviceBuilder->get(static::getServiceBuilderKey());
|
61 |
-
}
|
62 |
-
|
63 |
-
public static function __callStatic($method, $args)
|
64 |
-
{
|
65 |
-
return call_user_func_array(array(self::getClient(), $method), $args);
|
66 |
-
}
|
67 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
+
* You may not use this file except in compliance with the License.
|
7 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
namespace Aws\Common\Facade;
|
18 |
+
|
19 |
+
use Aws\Common\Aws;
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Base facade class that handles the delegation logic
|
23 |
+
*/
|
24 |
+
abstract class Facade implements FacadeInterface
|
25 |
+
{
|
26 |
+
/** @var Aws */
|
27 |
+
protected static $serviceBuilder;
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Mounts the facades by extracting information from the service builder config and using creating class aliases
|
31 |
+
*
|
32 |
+
* @param string|null $targetNamespace Namespace that the facades should be mounted to. Defaults to global namespace
|
33 |
+
*
|
34 |
+
* @param Aws $serviceBuilder
|
35 |
+
*/
|
36 |
+
public static function mountFacades(Aws $serviceBuilder, $targetNamespace = null)
|
37 |
+
{
|
38 |
+
self::$serviceBuilder = $serviceBuilder;
|
39 |
+
require_once __DIR__ . '/facade-classes.php';
|
40 |
+
foreach ($serviceBuilder->getConfig() as $service) {
|
41 |
+
if (isset($service['alias'], $service['class'])) {
|
42 |
+
$facadeClass = __NAMESPACE__ . '\\' . $service['alias'];
|
43 |
+
$facadeAlias = ltrim($targetNamespace . '\\' . $service['alias'], '\\');
|
44 |
+
if (!class_exists($facadeAlias) && class_exists($facadeClass)) {
|
45 |
+
// @codeCoverageIgnoreStart
|
46 |
+
class_alias($facadeClass, $facadeAlias);
|
47 |
+
// @codeCoverageIgnoreEnd
|
48 |
+
}
|
49 |
+
}
|
50 |
+
}
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Returns the instance of the client that the facade operates on
|
55 |
+
*
|
56 |
+
* @return \Aws\Common\Client\AwsClientInterface
|
57 |
+
*/
|
58 |
+
public static function getClient()
|
59 |
+
{
|
60 |
+
return self::$serviceBuilder->get(static::getServiceBuilderKey());
|
61 |
+
}
|
62 |
+
|
63 |
+
public static function __callStatic($method, $args)
|
64 |
+
{
|
65 |
+
return call_user_func_array(array(self::getClient(), $method), $args);
|
66 |
+
}
|
67 |
+
}
|
vendor/Aws/Common/Hash/HashUtils.php
CHANGED
@@ -1,76 +1,76 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
-
*
|
5 |
-
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
-
* You may not use this file except in compliance with the License.
|
7 |
-
* A copy of the License is located at
|
8 |
-
*
|
9 |
-
* http://aws.amazon.com/apache2.0
|
10 |
-
*
|
11 |
-
* or in the "license" file accompanying this file. This file is distributed
|
12 |
-
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
-
* express or implied. See the License for the specific language governing
|
14 |
-
* permissions and limitations under the License.
|
15 |
-
*/
|
16 |
-
|
17 |
-
namespace Aws\Common\Hash;
|
18 |
-
|
19 |
-
use Aws\Common\Exception\InvalidArgumentException;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Contains hashing utilities
|
23 |
-
*/
|
24 |
-
class HashUtils
|
25 |
-
{
|
26 |
-
/**
|
27 |
-
* Converts a hash in hex form to binary form
|
28 |
-
*
|
29 |
-
* @param string $hash Hash in hex form
|
30 |
-
*
|
31 |
-
* @return string Hash in binary form
|
32 |
-
*/
|
33 |
-
public static function hexToBin($hash)
|
34 |
-
{
|
35 |
-
// If using PHP 5.4, there is a native function to convert from hex to binary
|
36 |
-
static $useNative;
|
37 |
-
if ($useNative === null) {
|
38 |
-
$useNative = function_exists('hex2bin');
|
39 |
-
}
|
40 |
-
|
41 |
-
if (!$useNative && strlen($hash) % 2 !== 0) {
|
42 |
-
$hash = '0' . $hash;
|
43 |
-
}
|
44 |
-
|
45 |
-
return $useNative ? hex2bin($hash) : pack("H*", $hash);
|
46 |
-
}
|
47 |
-
|
48 |
-
/**
|
49 |
-
* Converts a hash in binary form to hex form
|
50 |
-
*
|
51 |
-
* @param string $hash Hash in binary form
|
52 |
-
*
|
53 |
-
* @return string Hash in hex form
|
54 |
-
*/
|
55 |
-
public static function binToHex($hash)
|
56 |
-
{
|
57 |
-
return bin2hex($hash);
|
58 |
-
}
|
59 |
-
|
60 |
-
/**
|
61 |
-
* Checks if the algorithm specified exists and throws an exception if it does not
|
62 |
-
*
|
63 |
-
* @param string $algorithm Name of the algorithm to validate
|
64 |
-
*
|
65 |
-
* @return bool
|
66 |
-
* @throws InvalidArgumentException if the algorithm doesn't exist
|
67 |
-
*/
|
68 |
-
public static function validateAlgorithm($algorithm)
|
69 |
-
{
|
70 |
-
if (!in_array($algorithm, hash_algos(), true)) {
|
71 |
-
throw new InvalidArgumentException("The hashing algorithm specified ({$algorithm}) does not exist.");
|
72 |
-
}
|
73 |
-
|
74 |
-
return true;
|
75 |
-
}
|
76 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
+
* You may not use this file except in compliance with the License.
|
7 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
namespace Aws\Common\Hash;
|
18 |
+
|
19 |
+
use Aws\Common\Exception\InvalidArgumentException;
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Contains hashing utilities
|
23 |
+
*/
|
24 |
+
class HashUtils
|
25 |
+
{
|
26 |
+
/**
|
27 |
+
* Converts a hash in hex form to binary form
|
28 |
+
*
|
29 |
+
* @param string $hash Hash in hex form
|
30 |
+
*
|
31 |
+
* @return string Hash in binary form
|
32 |
+
*/
|
33 |
+
public static function hexToBin($hash)
|
34 |
+
{
|
35 |
+
// If using PHP 5.4, there is a native function to convert from hex to binary
|
36 |
+
static $useNative;
|
37 |
+
if ($useNative === null) {
|
38 |
+
$useNative = function_exists('hex2bin');
|
39 |
+
}
|
40 |
+
|
41 |
+
if (!$useNative && strlen($hash) % 2 !== 0) {
|
42 |
+
$hash = '0' . $hash;
|
43 |
+
}
|
44 |
+
|
45 |
+
return $useNative ? hex2bin($hash) : pack("H*", $hash);
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Converts a hash in binary form to hex form
|
50 |
+
*
|
51 |
+
* @param string $hash Hash in binary form
|
52 |
+
*
|
53 |
+
* @return string Hash in hex form
|
54 |
+
*/
|
55 |
+
public static function binToHex($hash)
|
56 |
+
{
|
57 |
+
return bin2hex($hash);
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Checks if the algorithm specified exists and throws an exception if it does not
|
62 |
+
*
|
63 |
+
* @param string $algorithm Name of the algorithm to validate
|
64 |
+
*
|
65 |
+
* @return bool
|
66 |
+
* @throws InvalidArgumentException if the algorithm doesn't exist
|
67 |
+
*/
|
68 |
+
public static function validateAlgorithm($algorithm)
|
69 |
+
{
|
70 |
+
if (!in_array($algorithm, hash_algos(), true)) {
|
71 |
+
throw new InvalidArgumentException("The hashing algorithm specified ({$algorithm}) does not exist.");
|
72 |
+
}
|
73 |
+
|
74 |
+
return true;
|
75 |
+
}
|
76 |
+
}
|
vendor/Aws/Common/Model/MultipartUpload/AbstractUploadBuilder.php
CHANGED
@@ -1,148 +1,148 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
-
*
|
5 |
-
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
-
* You may not use this file except in compliance with the License.
|
7 |
-
* A copy of the License is located at
|
8 |
-
*
|
9 |
-
* http://aws.amazon.com/apache2.0
|
10 |
-
*
|
11 |
-
* or in the "license" file accompanying this file. This file is distributed
|
12 |
-
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
-
* express or implied. See the License for the specific language governing
|
14 |
-
* permissions and limitations under the License.
|
15 |
-
*/
|
16 |
-
|
17 |
-
namespace Aws\Common\Model\MultipartUpload;
|
18 |
-
|
19 |
-
use Aws\Common\Client\AwsClientInterface;
|
20 |
-
use Aws\Common\Exception\InvalidArgumentException;
|
21 |
-
use Guzzle\Http\EntityBody;
|
22 |
-
|
23 |
-
/**
|
24 |
-
* Easily create a multipart uploader used to quickly and reliably upload a
|
25 |
-
* large file or data stream to Amazon S3 using multipart uploads
|
26 |
-
*/
|
27 |
-
abstract class AbstractUploadBuilder
|
28 |
-
{
|
29 |
-
/**
|
30 |
-
* @var AwsClientInterface Client used to transfer requests
|
31 |
-
*/
|
32 |
-
protected $client;
|
33 |
-
|
34 |
-
/**
|
35 |
-
* @var TransferStateInterface State of the transfer
|
36 |
-
*/
|
37 |
-
protected $state;
|
38 |
-
|
39 |
-
/**
|
40 |
-
* @var EntityBody Source of the data
|
41 |
-
*/
|
42 |
-
protected $source;
|
43 |
-
|
44 |
-
/**
|
45 |
-
* @var array Array of headers to set on the object
|
46 |
-
*/
|
47 |
-
protected $headers = array();
|
48 |
-
|
49 |
-
/**
|
50 |
-
* Return a new instance of the UploadBuilder
|
51 |
-
*
|
52 |
-
* @return static
|
53 |
-
*/
|
54 |
-
public static function newInstance()
|
55 |
-
{
|
56 |
-
return new static;
|
57 |
-
}
|
58 |
-
|
59 |
-
/**
|
60 |
-
* Set the client used to connect to the AWS service
|
61 |
-
*
|
62 |
-
* @param AwsClientInterface $client Client to use
|
63 |
-
*
|
64 |
-
* @return $this
|
65 |
-
*/
|
66 |
-
public function setClient(AwsClientInterface $client)
|
67 |
-
{
|
68 |
-
$this->client = $client;
|
69 |
-
|
70 |
-
return $this;
|
71 |
-
}
|
72 |
-
|
73 |
-
/**
|
74 |
-
* Set the state of the upload. This is useful for resuming from a previously started multipart upload.
|
75 |
-
* You must use a local file stream as the data source if you wish to resume from a previous upload.
|
76 |
-
*
|
77 |
-
* @param TransferStateInterface|string $state Pass a TransferStateInterface object or the ID of the initiated
|
78 |
-
* multipart upload. When an ID is passed, the builder will create a
|
79 |
-
* state object using the data from a ListParts API response.
|
80 |
-
*
|
81 |
-
* @return $this
|
82 |
-
*/
|
83 |
-
public function resumeFrom($state)
|
84 |
-
{
|
85 |
-
$this->state = $state;
|
86 |
-
|
87 |
-
return $this;
|
88 |
-
}
|
89 |
-
|
90 |
-
/**
|
91 |
-
* Set the data source of the transfer
|
92 |
-
*
|
93 |
-
* @param resource|string|EntityBody $source Source of the transfer. Pass a string to transfer from a file on disk.
|
94 |
-
* You can also stream from a resource returned from fopen or a Guzzle
|
95 |
-
* {@see EntityBody} object.
|
96 |
-
*
|
97 |
-
* @return $this
|
98 |
-
* @throws InvalidArgumentException when the source cannot be found or opened
|
99 |
-
*/
|
100 |
-
public function setSource($source)
|
101 |
-
{
|
102 |
-
// Use the contents of a file as the data source
|
103 |
-
if (is_string($source)) {
|
104 |
-
if (!file_exists($source)) {
|
105 |
-
throw new InvalidArgumentException("File does not exist: {$source}");
|
106 |
-
}
|
107 |
-
// Clear the cache so that we send accurate file sizes
|
108 |
-
clearstatcache(true, $source);
|
109 |
-
$source = fopen($source, 'r');
|
110 |
-
}
|
111 |
-
|
112 |
-
$this->source = EntityBody::factory($source);
|
113 |
-
|
114 |
-
if ($this->source->isSeekable() && $this->source->getSize() == 0) {
|
115 |
-
throw new InvalidArgumentException('Empty body provided to upload builder');
|
116 |
-
}
|
117 |
-
|
118 |
-
return $this;
|
119 |
-
}
|
120 |
-
|
121 |
-
/**
|
122 |
-
* Specify the headers to set on the upload
|
123 |
-
*
|
124 |
-
* @param array $headers Headers to add to the uploaded object
|
125 |
-
*
|
126 |
-
* @return $this
|
127 |
-
*/
|
128 |
-
public function setHeaders(array $headers)
|
129 |
-
{
|
130 |
-
$this->headers = $headers;
|
131 |
-
|
132 |
-
return $this;
|
133 |
-
}
|
134 |
-
|
135 |
-
/**
|
136 |
-
* Build the appropriate uploader based on the builder options
|
137 |
-
*
|
138 |
-
* @return TransferInterface
|
139 |
-
*/
|
140 |
-
abstract public function build();
|
141 |
-
|
142 |
-
/**
|
143 |
-
* Initiate the multipart upload
|
144 |
-
*
|
145 |
-
* @return TransferStateInterface
|
146 |
-
*/
|
147 |
-
abstract protected function initiateMultipartUpload();
|
148 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
+
* You may not use this file except in compliance with the License.
|
7 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
namespace Aws\Common\Model\MultipartUpload;
|
18 |
+
|
19 |
+
use Aws\Common\Client\AwsClientInterface;
|
20 |
+
use Aws\Common\Exception\InvalidArgumentException;
|
21 |
+
use Guzzle\Http\EntityBody;
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Easily create a multipart uploader used to quickly and reliably upload a
|
25 |
+
* large file or data stream to Amazon S3 using multipart uploads
|
26 |
+
*/
|
27 |
+
abstract class AbstractUploadBuilder
|
28 |
+
{
|
29 |
+
/**
|
30 |
+
* @var AwsClientInterface Client used to transfer requests
|
31 |
+
*/
|
32 |
+
protected $client;
|
33 |
+
|
34 |
+
/**
|
35 |
+
* @var TransferStateInterface State of the transfer
|
36 |
+
*/
|
37 |
+
protected $state;
|
38 |
+
|
39 |
+
/**
|
40 |
+
* @var EntityBody Source of the data
|
41 |
+
*/
|
42 |
+
protected $source;
|
43 |
+
|
44 |
+
/**
|
45 |
+
* @var array Array of headers to set on the object
|
46 |
+
*/
|
47 |
+
protected $headers = array();
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Return a new instance of the UploadBuilder
|
51 |
+
*
|
52 |
+
* @return static
|
53 |
+
*/
|
54 |
+
public static function newInstance()
|
55 |
+
{
|
56 |
+
return new static;
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Set the client used to connect to the AWS service
|
61 |
+
*
|
62 |
+
* @param AwsClientInterface $client Client to use
|
63 |
+
*
|
64 |
+
* @return $this
|
65 |
+
*/
|
66 |
+
public function setClient(AwsClientInterface $client)
|
67 |
+
{
|
68 |
+
$this->client = $client;
|
69 |
+
|
70 |
+
return $this;
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Set the state of the upload. This is useful for resuming from a previously started multipart upload.
|
75 |
+
* You must use a local file stream as the data source if you wish to resume from a previous upload.
|
76 |
+
*
|
77 |
+
* @param TransferStateInterface|string $state Pass a TransferStateInterface object or the ID of the initiated
|
78 |
+
* multipart upload. When an ID is passed, the builder will create a
|
79 |
+
* state object using the data from a ListParts API response.
|
80 |
+
*
|
81 |
+
* @return $this
|
82 |
+
*/
|
83 |
+
public function resumeFrom($state)
|
84 |
+
{
|
85 |
+
$this->state = $state;
|
86 |
+
|
87 |
+
return $this;
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* Set the data source of the transfer
|
92 |
+
*
|
93 |
+
* @param resource|string|EntityBody $source Source of the transfer. Pass a string to transfer from a file on disk.
|
94 |
+
* You can also stream from a resource returned from fopen or a Guzzle
|
95 |
+
* {@see EntityBody} object.
|
96 |
+
*
|
97 |
+
* @return $this
|
98 |
+
* @throws InvalidArgumentException when the source cannot be found or opened
|
99 |
+
*/
|
100 |
+
public function setSource($source)
|
101 |
+
{
|
102 |
+
// Use the contents of a file as the data source
|
103 |
+
if (is_string($source)) {
|
104 |
+
if (!file_exists($source)) {
|
105 |
+
throw new InvalidArgumentException("File does not exist: {$source}");
|
106 |
+
}
|
107 |
+
// Clear the cache so that we send accurate file sizes
|
108 |
+
clearstatcache(true, $source);
|
109 |
+
$source = fopen($source, 'r');
|
110 |
+
}
|
111 |
+
|
112 |
+
$this->source = EntityBody::factory($source);
|
113 |
+
|
114 |
+
if ($this->source->isSeekable() && $this->source->getSize() == 0) {
|
115 |
+
throw new InvalidArgumentException('Empty body provided to upload builder');
|
116 |
+
}
|
117 |
+
|
118 |
+
return $this;
|
119 |
+
}
|
120 |
+
|
121 |
+
/**
|
122 |
+
* Specify the headers to set on the upload
|
123 |
+
*
|
124 |
+
* @param array $headers Headers to add to the uploaded object
|
125 |
+
*
|
126 |
+
* @return $this
|
127 |
+
*/
|
128 |
+
public function setHeaders(array $headers)
|
129 |
+
{
|
130 |
+
$this->headers = $headers;
|
131 |
+
|
132 |
+
return $this;
|
133 |
+
}
|
134 |
+
|
135 |
+
/**
|
136 |
+
* Build the appropriate uploader based on the builder options
|
137 |
+
*
|
138 |
+
* @return TransferInterface
|
139 |
+
*/
|
140 |
+
abstract public function build();
|
141 |
+
|
142 |
+
/**
|
143 |
+
* Initiate the multipart upload
|
144 |
+
*
|
145 |
+
* @return TransferStateInterface
|
146 |
+
*/
|
147 |
+
abstract protected function initiateMultipartUpload();
|
148 |
+
}
|
vendor/Aws/Common/Resources/aws-config.php
CHANGED
@@ -1,272 +1,272 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
-
*
|
5 |
-
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
-
* You may not use this file except in compliance with the License.
|
7 |
-
* A copy of the License is located at
|
8 |
-
*
|
9 |
-
* http://aws.amazon.com/apache2.0
|
10 |
-
*
|
11 |
-
* or in the "license" file accompanying this file. This file is distributed
|
12 |
-
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
-
* express or implied. See the License for the specific language governing
|
14 |
-
* permissions and limitations under the License.
|
15 |
-
*/
|
16 |
-
|
17 |
-
return array(
|
18 |
-
'class' => 'Aws\Common\Aws',
|
19 |
-
'services' => array(
|
20 |
-
|
21 |
-
'default_settings' => array(
|
22 |
-
'params' => array()
|
23 |
-
),
|
24 |
-
|
25 |
-
'autoscaling' => array(
|
26 |
-
'alias' => 'AutoScaling',
|
27 |
-
'extends' => 'default_settings',
|
28 |
-
'class' => 'Aws\AutoScaling\AutoScalingClient'
|
29 |
-
),
|
30 |
-
|
31 |
-
'cloudformation' => array(
|
32 |
-
'alias' => 'CloudFormation',
|
33 |
-
'extends' => 'default_settings',
|
34 |
-
'class' => 'Aws\CloudFormation\CloudFormationClient'
|
35 |
-
),
|
36 |
-
|
37 |
-
'cloudfront' => array(
|
38 |
-
'alias' => 'CloudFront',
|
39 |
-
'extends' => 'default_settings',
|
40 |
-
'class' => 'Aws\CloudFront\CloudFrontClient'
|
41 |
-
),
|
42 |
-
|
43 |
-
'cloudfront_20120505' => array(
|
44 |
-
'extends' => 'cloudfront',
|
45 |
-
'params' => array(
|
46 |
-
'version' => '2012-05-05'
|
47 |
-
)
|
48 |
-
),
|
49 |
-
|
50 |
-
'cloudsearch' => array(
|
51 |
-
'alias' => 'CloudSearch',
|
52 |
-
'extends' => 'default_settings',
|
53 |
-
'class' => 'Aws\CloudSearch\CloudSearchClient'
|
54 |
-
),
|
55 |
-
|
56 |
-
'cloudsearch_20110201' => array(
|
57 |
-
'extends' => 'cloudsearch',
|
58 |
-
'params' => array(
|
59 |
-
'version' => '2011-02-01'
|
60 |
-
)
|
61 |
-
),
|
62 |
-
|
63 |
-
'cloudsearchdomain' => array(
|
64 |
-
'alias' => 'CloudSearchDomain',
|
65 |
-
'extends' => 'default_settings',
|
66 |
-
'class' => 'Aws\CloudSearchDomain\CloudSearchDomainClient'
|
67 |
-
),
|
68 |
-
|
69 |
-
'cloudtrail' => array(
|
70 |
-
'alias' => 'CloudTrail',
|
71 |
-
'extends' => 'default_settings',
|
72 |
-
'class' => 'Aws\CloudTrail\CloudTrailClient'
|
73 |
-
),
|
74 |
-
|
75 |
-
'cloudwatch' => array(
|
76 |
-
'alias' => 'CloudWatch',
|
77 |
-
'extends' => 'default_settings',
|
78 |
-
'class' => 'Aws\CloudWatch\CloudWatchClient'
|
79 |
-
),
|
80 |
-
|
81 |
-
'cognito-identity' => array(
|
82 |
-
'alias' => 'CognitoIdentity',
|
83 |
-
'extends' => 'default_settings',
|
84 |
-
'class' => 'Aws\CognitoIdentity\CognitoIdentityClient'
|
85 |
-
),
|
86 |
-
|
87 |
-
'cognitoidentity' => array('extends' => 'cognito-identity'),
|
88 |
-
|
89 |
-
'cognito-sync' => array(
|
90 |
-
'alias' => 'CognitoSync',
|
91 |
-
'extends' => 'default_settings',
|
92 |
-
'class' => 'Aws\CognitoSync\CognitoSyncClient'
|
93 |
-
),
|
94 |
-
|
95 |
-
'cognitosync' => array('extends' => 'cognito-sync'),
|
96 |
-
|
97 |
-
'cloudwatchlogs' => array(
|
98 |
-
'alias' => 'CloudWatchLogs',
|
99 |
-
'extends' => 'default_settings',
|
100 |
-
'class' => 'Aws\CloudWatchLogs\CloudWatchLogsClient'
|
101 |
-
),
|
102 |
-
|
103 |
-
'datapipeline' => array(
|
104 |
-
'alias' => 'DataPipeline',
|
105 |
-
'extends' => 'default_settings',
|
106 |
-
'class' => 'Aws\DataPipeline\DataPipelineClient'
|
107 |
-
),
|
108 |
-
|
109 |
-
'directconnect' => array(
|
110 |
-
'alias' => 'DirectConnect',
|
111 |
-
'extends' => 'default_settings',
|
112 |
-
'class' => 'Aws\DirectConnect\DirectConnectClient'
|
113 |
-
),
|
114 |
-
|
115 |
-
'dynamodb' => array(
|
116 |
-
'alias' => 'DynamoDb',
|
117 |
-
'extends' => 'default_settings',
|
118 |
-
'class' => 'Aws\DynamoDb\DynamoDbClient'
|
119 |
-
),
|
120 |
-
|
121 |
-
'dynamodb_20111205' => array(
|
122 |
-
'extends' => 'dynamodb',
|
123 |
-
'params' => array(
|
124 |
-
'version' => '2011-12-05'
|
125 |
-
)
|
126 |
-
),
|
127 |
-
|
128 |
-
'ec2' => array(
|
129 |
-
'alias' => 'Ec2',
|
130 |
-
'extends' => 'default_settings',
|
131 |
-
'class' => 'Aws\Ec2\Ec2Client'
|
132 |
-
),
|
133 |
-
|
134 |
-
'elasticache' => array(
|
135 |
-
'alias' => 'ElastiCache',
|
136 |
-
'extends' => 'default_settings',
|
137 |
-
'class' => 'Aws\ElastiCache\ElastiCacheClient'
|
138 |
-
),
|
139 |
-
|
140 |
-
'elasticbeanstalk' => array(
|
141 |
-
'alias' => 'ElasticBeanstalk',
|
142 |
-
'extends' => 'default_settings',
|
143 |
-
'class' => 'Aws\ElasticBeanstalk\ElasticBeanstalkClient'
|
144 |
-
),
|
145 |
-
|
146 |
-
'elasticloadbalancing' => array(
|
147 |
-
'alias' => 'ElasticLoadBalancing',
|
148 |
-
'extends' => 'default_settings',
|
149 |
-
'class' => 'Aws\ElasticLoadBalancing\ElasticLoadBalancingClient'
|
150 |
-
),
|
151 |
-
|
152 |
-
'elastictranscoder' => array(
|
153 |
-
'alias' => 'ElasticTranscoder',
|
154 |
-
'extends' => 'default_settings',
|
155 |
-
'class' => 'Aws\ElasticTranscoder\ElasticTranscoderClient'
|
156 |
-
),
|
157 |
-
|
158 |
-
'emr' => array(
|
159 |
-
'alias' => 'Emr',
|
160 |
-
'extends' => 'default_settings',
|
161 |
-
'class' => 'Aws\Emr\EmrClient'
|
162 |
-
),
|
163 |
-
|
164 |
-
'glacier' => array(
|
165 |
-
'alias' => 'Glacier',
|
166 |
-
'extends' => 'default_settings',
|
167 |
-
'class' => 'Aws\Glacier\GlacierClient'
|
168 |
-
),
|
169 |
-
|
170 |
-
'kinesis' => array(
|
171 |
-
'alias' => 'Kinesis',
|
172 |
-
'extends' => 'default_settings',
|
173 |
-
'class' => 'Aws\Kinesis\KinesisClient'
|
174 |
-
),
|
175 |
-
|
176 |
-
'iam' => array(
|
177 |
-
'alias' => 'Iam',
|
178 |
-
'extends' => 'default_settings',
|
179 |
-
'class' => 'Aws\Iam\IamClient'
|
180 |
-
),
|
181 |
-
|
182 |
-
'importexport' => array(
|
183 |
-
'alias' => 'ImportExport',
|
184 |
-
'extends' => 'default_settings',
|
185 |
-
'class' => 'Aws\ImportExport\ImportExportClient'
|
186 |
-
),
|
187 |
-
|
188 |
-
'opsworks' => array(
|
189 |
-
'alias' => 'OpsWorks',
|
190 |
-
'extends' => 'default_settings',
|
191 |
-
'class' => 'Aws\OpsWorks\OpsWorksClient'
|
192 |
-
),
|
193 |
-
|
194 |
-
'rds' => array(
|
195 |
-
'alias' => 'Rds',
|
196 |
-
'extends' => 'default_settings',
|
197 |
-
'class' => 'Aws\Rds\RdsClient'
|
198 |
-
),
|
199 |
-
|
200 |
-
'redshift' => array(
|
201 |
-
'alias' => 'Redshift',
|
202 |
-
'extends' => 'default_settings',
|
203 |
-
'class' => 'Aws\Redshift\RedshiftClient'
|
204 |
-
),
|
205 |
-
|
206 |
-
'route53' => array(
|
207 |
-
'alias' => 'Route53',
|
208 |
-
'extends' => 'default_settings',
|
209 |
-
'class' => 'Aws\Route53\Route53Client'
|
210 |
-
),
|
211 |
-
|
212 |
-
'route53domains' => array(
|
213 |
-
'alias' => 'Route53Domains',
|
214 |
-
'extends' => 'default_settings',
|
215 |
-
'class' => 'Aws\Route53Domains\Route53DomainsClient'
|
216 |
-
),
|
217 |
-
|
218 |
-
's3' => array(
|
219 |
-
'alias' => 'S3',
|
220 |
-
'extends' => 'default_settings',
|
221 |
-
'class' => 'Aws\S3\S3Client'
|
222 |
-
),
|
223 |
-
|
224 |
-
'sdb' => array(
|
225 |
-
'alias' => 'SimpleDb',
|
226 |
-
'extends' => 'default_settings',
|
227 |
-
'class' => 'Aws\SimpleDb\SimpleDbClient'
|
228 |
-
),
|
229 |
-
|
230 |
-
'ses' => array(
|
231 |
-
'alias' => 'Ses',
|
232 |
-
'extends' => 'default_settings',
|
233 |
-
'class' => 'Aws\Ses\SesClient'
|
234 |
-
),
|
235 |
-
|
236 |
-
'sns' => array(
|
237 |
-
'alias' => 'Sns',
|
238 |
-
'extends' => 'default_settings',
|
239 |
-
'class' => 'Aws\Sns\SnsClient'
|
240 |
-
),
|
241 |
-
|
242 |
-
'sqs' => array(
|
243 |
-
'alias' => 'Sqs',
|
244 |
-
'extends' => 'default_settings',
|
245 |
-
'class' => 'Aws\Sqs\SqsClient'
|
246 |
-
),
|
247 |
-
|
248 |
-
'storagegateway' => array(
|
249 |
-
'alias' => 'StorageGateway',
|
250 |
-
'extends' => 'default_settings',
|
251 |
-
'class' => 'Aws\StorageGateway\StorageGatewayClient'
|
252 |
-
),
|
253 |
-
|
254 |
-
'sts' => array(
|
255 |
-
'alias' => 'Sts',
|
256 |
-
'extends' => 'default_settings',
|
257 |
-
'class' => 'Aws\Sts\StsClient'
|
258 |
-
),
|
259 |
-
|
260 |
-
'support' => array(
|
261 |
-
'alias' => 'Support',
|
262 |
-
'extends' => 'default_settings',
|
263 |
-
'class' => 'Aws\Support\SupportClient'
|
264 |
-
),
|
265 |
-
|
266 |
-
'swf' => array(
|
267 |
-
'alias' => 'Swf',
|
268 |
-
'extends' => 'default_settings',
|
269 |
-
'class' => 'Aws\Swf\SwfClient'
|
270 |
-
),
|
271 |
-
)
|
272 |
-
);
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
+
* You may not use this file except in compliance with the License.
|
7 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
return array(
|
18 |
+
'class' => 'Aws\Common\Aws',
|
19 |
+
'services' => array(
|
20 |
+
|
21 |
+
'default_settings' => array(
|
22 |
+
'params' => array()
|
23 |
+
),
|
24 |
+
|
25 |
+
'autoscaling' => array(
|
26 |
+
'alias' => 'AutoScaling',
|
27 |
+
'extends' => 'default_settings',
|
28 |
+
'class' => 'Aws\AutoScaling\AutoScalingClient'
|
29 |
+
),
|
30 |
+
|
31 |
+
'cloudformation' => array(
|
32 |
+
'alias' => 'CloudFormation',
|
33 |
+
'extends' => 'default_settings',
|
34 |
+
'class' => 'Aws\CloudFormation\CloudFormationClient'
|
35 |
+
),
|
36 |
+
|
37 |
+
'cloudfront' => array(
|
38 |
+
'alias' => 'CloudFront',
|
39 |
+
'extends' => 'default_settings',
|
40 |
+
'class' => 'Aws\CloudFront\CloudFrontClient'
|
41 |
+
),
|
42 |
+
|
43 |
+
'cloudfront_20120505' => array(
|
44 |
+
'extends' => 'cloudfront',
|
45 |
+
'params' => array(
|
46 |
+
'version' => '2012-05-05'
|
47 |
+
)
|
48 |
+
),
|
49 |
+
|
50 |
+
'cloudsearch' => array(
|
51 |
+
'alias' => 'CloudSearch',
|
52 |
+
'extends' => 'default_settings',
|
53 |
+
'class' => 'Aws\CloudSearch\CloudSearchClient'
|
54 |
+
),
|
55 |
+
|
56 |
+
'cloudsearch_20110201' => array(
|
57 |
+
'extends' => 'cloudsearch',
|
58 |
+
'params' => array(
|
59 |
+
'version' => '2011-02-01'
|
60 |
+
)
|
61 |
+
),
|
62 |
+
|
63 |
+
'cloudsearchdomain' => array(
|
64 |
+
'alias' => 'CloudSearchDomain',
|
65 |
+
'extends' => 'default_settings',
|
66 |
+
'class' => 'Aws\CloudSearchDomain\CloudSearchDomainClient'
|
67 |
+
),
|
68 |
+
|
69 |
+
'cloudtrail' => array(
|
70 |
+
'alias' => 'CloudTrail',
|
71 |
+
'extends' => 'default_settings',
|
72 |
+
'class' => 'Aws\CloudTrail\CloudTrailClient'
|
73 |
+
),
|
74 |
+
|
75 |
+
'cloudwatch' => array(
|
76 |
+
'alias' => 'CloudWatch',
|
77 |
+
'extends' => 'default_settings',
|
78 |
+
'class' => 'Aws\CloudWatch\CloudWatchClient'
|
79 |
+
),
|
80 |
+
|
81 |
+
'cognito-identity' => array(
|
82 |
+
'alias' => 'CognitoIdentity',
|
83 |
+
'extends' => 'default_settings',
|
84 |
+
'class' => 'Aws\CognitoIdentity\CognitoIdentityClient'
|
85 |
+
),
|
86 |
+
|
87 |
+
'cognitoidentity' => array('extends' => 'cognito-identity'),
|
88 |
+
|
89 |
+
'cognito-sync' => array(
|
90 |
+
'alias' => 'CognitoSync',
|
91 |
+
'extends' => 'default_settings',
|
92 |
+
'class' => 'Aws\CognitoSync\CognitoSyncClient'
|
93 |
+
),
|
94 |
+
|
95 |
+
'cognitosync' => array('extends' => 'cognito-sync'),
|
96 |
+
|
97 |
+
'cloudwatchlogs' => array(
|
98 |
+
'alias' => 'CloudWatchLogs',
|
99 |
+
'extends' => 'default_settings',
|
100 |
+
'class' => 'Aws\CloudWatchLogs\CloudWatchLogsClient'
|
101 |
+
),
|
102 |
+
|
103 |
+
'datapipeline' => array(
|
104 |
+
'alias' => 'DataPipeline',
|
105 |
+
'extends' => 'default_settings',
|
106 |
+
'class' => 'Aws\DataPipeline\DataPipelineClient'
|
107 |
+
),
|
108 |
+
|
109 |
+
'directconnect' => array(
|
110 |
+
'alias' => 'DirectConnect',
|
111 |
+
'extends' => 'default_settings',
|
112 |
+
'class' => 'Aws\DirectConnect\DirectConnectClient'
|
113 |
+
),
|
114 |
+
|
115 |
+
'dynamodb' => array(
|
116 |
+
'alias' => 'DynamoDb',
|
117 |
+
'extends' => 'default_settings',
|
118 |
+
'class' => 'Aws\DynamoDb\DynamoDbClient'
|
119 |
+
),
|
120 |
+
|
121 |
+
'dynamodb_20111205' => array(
|
122 |
+
'extends' => 'dynamodb',
|
123 |
+
'params' => array(
|
124 |
+
'version' => '2011-12-05'
|
125 |
+
)
|
126 |
+
),
|
127 |
+
|
128 |
+
'ec2' => array(
|
129 |
+
'alias' => 'Ec2',
|
130 |
+
'extends' => 'default_settings',
|
131 |
+
'class' => 'Aws\Ec2\Ec2Client'
|
132 |
+
),
|
133 |
+
|
134 |
+
'elasticache' => array(
|
135 |
+
'alias' => 'ElastiCache',
|
136 |
+
'extends' => 'default_settings',
|
137 |
+
'class' => 'Aws\ElastiCache\ElastiCacheClient'
|
138 |
+
),
|
139 |
+
|
140 |
+
'elasticbeanstalk' => array(
|
141 |
+
'alias' => 'ElasticBeanstalk',
|
142 |
+
'extends' => 'default_settings',
|
143 |
+
'class' => 'Aws\ElasticBeanstalk\ElasticBeanstalkClient'
|
144 |
+
),
|
145 |
+
|
146 |
+
'elasticloadbalancing' => array(
|
147 |
+
'alias' => 'ElasticLoadBalancing',
|
148 |
+
'extends' => 'default_settings',
|
149 |
+
'class' => 'Aws\ElasticLoadBalancing\ElasticLoadBalancingClient'
|
150 |
+
),
|
151 |
+
|
152 |
+
'elastictranscoder' => array(
|
153 |
+
'alias' => 'ElasticTranscoder',
|
154 |
+
'extends' => 'default_settings',
|
155 |
+
'class' => 'Aws\ElasticTranscoder\ElasticTranscoderClient'
|
156 |
+
),
|
157 |
+
|
158 |
+
'emr' => array(
|
159 |
+
'alias' => 'Emr',
|
160 |
+
'extends' => 'default_settings',
|
161 |
+
'class' => 'Aws\Emr\EmrClient'
|
162 |
+
),
|
163 |
+
|
164 |
+
'glacier' => array(
|
165 |
+
'alias' => 'Glacier',
|
166 |
+
'extends' => 'default_settings',
|
167 |
+
'class' => 'Aws\Glacier\GlacierClient'
|
168 |
+
),
|
169 |
+
|
170 |
+
'kinesis' => array(
|
171 |
+
'alias' => 'Kinesis',
|
172 |
+
'extends' => 'default_settings',
|
173 |
+
'class' => 'Aws\Kinesis\KinesisClient'
|
174 |
+
),
|
175 |
+
|
176 |
+
'iam' => array(
|
177 |
+
'alias' => 'Iam',
|
178 |
+
'extends' => 'default_settings',
|
179 |
+
'class' => 'Aws\Iam\IamClient'
|
180 |
+
),
|
181 |
+
|
182 |
+
'importexport' => array(
|
183 |
+
'alias' => 'ImportExport',
|
184 |
+
'extends' => 'default_settings',
|
185 |
+
'class' => 'Aws\ImportExport\ImportExportClient'
|
186 |
+
),
|
187 |
+
|
188 |
+
'opsworks' => array(
|
189 |
+
'alias' => 'OpsWorks',
|
190 |
+
'extends' => 'default_settings',
|
191 |
+
'class' => 'Aws\OpsWorks\OpsWorksClient'
|
192 |
+
),
|
193 |
+
|
194 |
+
'rds' => array(
|
195 |
+
'alias' => 'Rds',
|
196 |
+
'extends' => 'default_settings',
|
197 |
+
'class' => 'Aws\Rds\RdsClient'
|
198 |
+
),
|
199 |
+
|
200 |
+
'redshift' => array(
|
201 |
+
'alias' => 'Redshift',
|
202 |
+
'extends' => 'default_settings',
|
203 |
+
'class' => 'Aws\Redshift\RedshiftClient'
|
204 |
+
),
|
205 |
+
|
206 |
+
'route53' => array(
|
207 |
+
'alias' => 'Route53',
|
208 |
+
'extends' => 'default_settings',
|
209 |
+
'class' => 'Aws\Route53\Route53Client'
|
210 |
+
),
|
211 |
+
|
212 |
+
'route53domains' => array(
|
213 |
+
'alias' => 'Route53Domains',
|
214 |
+
'extends' => 'default_settings',
|
215 |
+
'class' => 'Aws\Route53Domains\Route53DomainsClient'
|
216 |
+
),
|
217 |
+
|
218 |
+
's3' => array(
|
219 |
+
'alias' => 'S3',
|
220 |
+
'extends' => 'default_settings',
|
221 |
+
'class' => 'Aws\S3\S3Client'
|
222 |
+
),
|
223 |
+
|
224 |
+
'sdb' => array(
|
225 |
+
'alias' => 'SimpleDb',
|
226 |
+
'extends' => 'default_settings',
|
227 |
+
'class' => 'Aws\SimpleDb\SimpleDbClient'
|
228 |
+
),
|
229 |
+
|
230 |
+
'ses' => array(
|
231 |
+
'alias' => 'Ses',
|
232 |
+
'extends' => 'default_settings',
|
233 |
+
'class' => 'Aws\Ses\SesClient'
|
234 |
+
),
|
235 |
+
|
236 |
+
'sns' => array(
|
237 |
+
'alias' => 'Sns',
|
238 |
+
'extends' => 'default_settings',
|
239 |
+
'class' => 'Aws\Sns\SnsClient'
|
240 |
+
),
|
241 |
+
|
242 |
+
'sqs' => array(
|
243 |
+
'alias' => 'Sqs',
|
244 |
+
'extends' => 'default_settings',
|
245 |
+
'class' => 'Aws\Sqs\SqsClient'
|
246 |
+
),
|
247 |
+
|
248 |
+
'storagegateway' => array(
|
249 |
+
'alias' => 'StorageGateway',
|
250 |
+
'extends' => 'default_settings',
|
251 |
+
'class' => 'Aws\StorageGateway\StorageGatewayClient'
|
252 |
+
),
|
253 |
+
|
254 |
+
'sts' => array(
|
255 |
+
'alias' => 'Sts',
|
256 |
+
'extends' => 'default_settings',
|
257 |
+
'class' => 'Aws\Sts\StsClient'
|
258 |
+
),
|
259 |
+
|
260 |
+
'support' => array(
|
261 |
+
'alias' => 'Support',
|
262 |
+
'extends' => 'default_settings',
|
263 |
+
'class' => 'Aws\Support\SupportClient'
|
264 |
+
),
|
265 |
+
|
266 |
+
'swf' => array(
|
267 |
+
'alias' => 'Swf',
|
268 |
+
'extends' => 'default_settings',
|
269 |
+
'class' => 'Aws\Swf\SwfClient'
|
270 |
+
),
|
271 |
+
)
|
272 |
+
);
|
vendor/Aws/Common/Resources/public-endpoints.php
CHANGED
@@ -1,67 +1,67 @@
|
|
1 |
-
<?php
|
2 |
-
return array(
|
3 |
-
'version' => 2,
|
4 |
-
'endpoints' => array(
|
5 |
-
'*/*' => array(
|
6 |
-
'endpoint' => '{service}.{region}.amazonaws.com'
|
7 |
-
),
|
8 |
-
'cn-north-1/*' => array(
|
9 |
-
'endpoint' => '{service}.{region}.amazonaws.com.cn',
|
10 |
-
'signatureVersion' => 'v4'
|
11 |
-
),
|
12 |
-
'us-gov-west-1/iam' => array(
|
13 |
-
'endpoint' => 'iam.us-gov.amazonaws.com'
|
14 |
-
),
|
15 |
-
'us-gov-west-1/sts' => array(
|
16 |
-
'endpoint' => 'sts.us-gov.amazonaws.com'
|
17 |
-
),
|
18 |
-
'us-gov-west-1/s3' => array(
|
19 |
-
'endpoint' => 's3-{region}.amazonaws.com'
|
20 |
-
),
|
21 |
-
'*/cloudfront' => array(
|
22 |
-
'endpoint' => 'cloudfront.amazonaws.com'
|
23 |
-
),
|
24 |
-
'*/iam' => array(
|
25 |
-
'endpoint' => 'iam.amazonaws.com'
|
26 |
-
),
|
27 |
-
'*/importexport' => array(
|
28 |
-
'endpoint' => 'importexport.amazonaws.com'
|
29 |
-
),
|
30 |
-
'*/route53' => array(
|
31 |
-
'endpoint' => 'route53.amazonaws.com'
|
32 |
-
),
|
33 |
-
'*/sts' => array(
|
34 |
-
'endpoint' => 'sts.amazonaws.com'
|
35 |
-
),
|
36 |
-
'us-east-1/sdb' => array(
|
37 |
-
'endpoint' => 'sdb.amazonaws.com'
|
38 |
-
),
|
39 |
-
'us-east-1/s3' => array(
|
40 |
-
'endpoint' => 's3.amazonaws.com'
|
41 |
-
),
|
42 |
-
'us-west-1/s3' => array(
|
43 |
-
'endpoint' => 's3-{region}.amazonaws.com'
|
44 |
-
),
|
45 |
-
'us-west-2/s3' => array(
|
46 |
-
'endpoint' => 's3-{region}.amazonaws.com'
|
47 |
-
),
|
48 |
-
'eu-west-1/s3' => array(
|
49 |
-
'endpoint' => 's3-{region}.amazonaws.com'
|
50 |
-
),
|
51 |
-
'eu-central-1/s3' => array(
|
52 |
-
'endpoint' => 's3-{region}.amazonaws.com'
|
53 |
-
),
|
54 |
-
'ap-southeast-1/s3' => array(
|
55 |
-
'endpoint' => 's3-{region}.amazonaws.com'
|
56 |
-
),
|
57 |
-
'ap-southeast-2/s3' => array(
|
58 |
-
'endpoint' => 's3-{region}.amazonaws.com'
|
59 |
-
),
|
60 |
-
'ap-northeast-1/s3' => array(
|
61 |
-
'endpoint' => 's3-{region}.amazonaws.com'
|
62 |
-
),
|
63 |
-
'sa-east-1/s3' => array(
|
64 |
-
'endpoint' => 's3-{region}.amazonaws.com'
|
65 |
-
)
|
66 |
-
)
|
67 |
-
);
|
1 |
+
<?php
|
2 |
+
return array(
|
3 |
+
'version' => 2,
|
4 |
+
'endpoints' => array(
|
5 |
+
'*/*' => array(
|
6 |
+
'endpoint' => '{service}.{region}.amazonaws.com'
|
7 |
+
),
|
8 |
+
'cn-north-1/*' => array(
|
9 |
+
'endpoint' => '{service}.{region}.amazonaws.com.cn',
|
10 |
+
'signatureVersion' => 'v4'
|
11 |
+
),
|
12 |
+
'us-gov-west-1/iam' => array(
|
13 |
+
'endpoint' => 'iam.us-gov.amazonaws.com'
|
14 |
+
),
|
15 |
+
'us-gov-west-1/sts' => array(
|
16 |
+
'endpoint' => 'sts.us-gov.amazonaws.com'
|
17 |
+
),
|
18 |
+
'us-gov-west-1/s3' => array(
|
19 |
+
'endpoint' => 's3-{region}.amazonaws.com'
|
20 |
+
),
|
21 |
+
'*/cloudfront' => array(
|
22 |
+
'endpoint' => 'cloudfront.amazonaws.com'
|
23 |
+
),
|
24 |
+
'*/iam' => array(
|
25 |
+
'endpoint' => 'iam.amazonaws.com'
|
26 |
+
),
|
27 |
+
'*/importexport' => array(
|
28 |
+
'endpoint' => 'importexport.amazonaws.com'
|
29 |
+
),
|
30 |
+
'*/route53' => array(
|
31 |
+
'endpoint' => 'route53.amazonaws.com'
|
32 |
+
),
|
33 |
+
'*/sts' => array(
|
34 |
+
'endpoint' => 'sts.amazonaws.com'
|
35 |
+
),
|
36 |
+
'us-east-1/sdb' => array(
|
37 |
+
'endpoint' => 'sdb.amazonaws.com'
|
38 |
+
),
|
39 |
+
'us-east-1/s3' => array(
|
40 |
+
'endpoint' => 's3.amazonaws.com'
|
41 |
+
),
|
42 |
+
'us-west-1/s3' => array(
|
43 |
+
'endpoint' => 's3-{region}.amazonaws.com'
|
44 |
+
),
|
45 |
+
'us-west-2/s3' => array(
|
46 |
+
'endpoint' => 's3-{region}.amazonaws.com'
|
47 |
+
),
|
48 |
+
'eu-west-1/s3' => array(
|
49 |
+
'endpoint' => 's3-{region}.amazonaws.com'
|
50 |
+
),
|
51 |
+
'eu-central-1/s3' => array(
|
52 |
+
'endpoint' => 's3-{region}.amazonaws.com'
|
53 |
+
),
|
54 |
+
'ap-southeast-1/s3' => array(
|
55 |
+
'endpoint' => 's3-{region}.amazonaws.com'
|
56 |
+
),
|
57 |
+
'ap-southeast-2/s3' => array(
|
58 |
+
'endpoint' => 's3-{region}.amazonaws.com'
|
59 |
+
),
|
60 |
+
'ap-northeast-1/s3' => array(
|
61 |
+
'endpoint' => 's3-{region}.amazonaws.com'
|
62 |
+
),
|
63 |
+
'sa-east-1/s3' => array(
|
64 |
+
'endpoint' => 's3-{region}.amazonaws.com'
|
65 |
+
)
|
66 |
+
)
|
67 |
+
);
|
vendor/Aws/Common/RulesEndpointProvider.php
CHANGED
@@ -1,67 +1,67 @@
|
|
1 |
-
<?php
|
2 |
-
namespace Aws\Common;
|
3 |
-
|
4 |
-
/**
|
5 |
-
* Provides endpoints based on a rules configuration file.
|
6 |
-
*/
|
7 |
-
class RulesEndpointProvider
|
8 |
-
{
|
9 |
-
/** @var array */
|
10 |
-
private $patterns;
|
11 |
-
|
12 |
-
/**
|
13 |
-
* @param array $patterns Hash of endpoint patterns mapping to endpoint
|
14 |
-
* configurations.
|
15 |
-
*/
|
16 |
-
public function __construct(array $patterns)
|
17 |
-
{
|
18 |
-
$this->patterns = $patterns;
|
19 |
-
}
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Creates and returns the default RulesEndpointProvider based on the
|
23 |
-
* public rule sets.
|
24 |
-
*
|
25 |
-
* @return self
|
26 |
-
*/
|
27 |
-
public static function fromDefaults()
|
28 |
-
{
|
29 |
-
return new self(require __DIR__ . '/Resources/public-endpoints.php');
|
30 |
-
}
|
31 |
-
|
32 |
-
public function __invoke(array $args = array())
|
33 |
-
{
|
34 |
-
if (!isset($args['service'])) {
|
35 |
-
throw new \InvalidArgumentException('Requires a "service" value');
|
36 |
-
}
|
37 |
-
|
38 |
-
if (!isset($args['region'])) {
|
39 |
-
throw new \InvalidArgumentException('Requires a "region" value');
|
40 |
-
}
|
41 |
-
|
42 |
-
foreach ($this->getKeys($args['region'], $args['service']) as $key) {
|
43 |
-
if (isset($this->patterns['endpoints'][$key])) {
|
44 |
-
return $this->expand($this->patterns['endpoints'][$key], $args);
|
45 |
-
}
|
46 |
-
}
|
47 |
-
|
48 |
-
throw new \RuntimeException('Could not resolve endpoint');
|
49 |
-
}
|
50 |
-
|
51 |
-
private function expand(array $config, array $args)
|
52 |
-
{
|
53 |
-
$scheme = isset($args['scheme']) ? $args['scheme'] : 'https';
|
54 |
-
$config['endpoint'] = $scheme . '://' . str_replace(
|
55 |
-
array('{service}', '{region}'),
|
56 |
-
array($args['service'], $args['region']),
|
57 |
-
$config['endpoint']
|
58 |
-
);
|
59 |
-
|
60 |
-
return $config;
|
61 |
-
}
|
62 |
-
|
63 |
-
private function getKeys($region, $service)
|
64 |
-
{
|
65 |
-
return array("$region/$service", "$region/*", "*/$service", "*/*");
|
66 |
-
}
|
67 |
-
}
|
1 |
+
<?php
|
2 |
+
namespace Aws\Common;
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Provides endpoints based on a rules configuration file.
|
6 |
+
*/
|
7 |
+
class RulesEndpointProvider
|
8 |
+
{
|
9 |
+
/** @var array */
|
10 |
+
private $patterns;
|
11 |
+
|
12 |
+
/**
|
13 |
+
* @param array $patterns Hash of endpoint patterns mapping to endpoint
|
14 |
+
* configurations.
|
15 |
+
*/
|
16 |
+
public function __construct(array $patterns)
|
17 |
+
{
|
18 |
+
$this->patterns = $patterns;
|
19 |
+
}
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Creates and returns the default RulesEndpointProvider based on the
|
23 |
+
* public rule sets.
|
24 |
+
*
|
25 |
+
* @return self
|
26 |
+
*/
|
27 |
+
public static function fromDefaults()
|
28 |
+
{
|
29 |
+
return new self(require __DIR__ . '/Resources/public-endpoints.php');
|
30 |
+
}
|
31 |
+
|
32 |
+
public function __invoke(array $args = array())
|
33 |
+
{
|
34 |
+
if (!isset($args['service'])) {
|
35 |
+
throw new \InvalidArgumentException('Requires a "service" value');
|
36 |
+
}
|
37 |
+
|
38 |
+
if (!isset($args['region'])) {
|
39 |
+
throw new \InvalidArgumentException('Requires a "region" value');
|
40 |
+
}
|
41 |
+
|
42 |
+
foreach ($this->getKeys($args['region'], $args['service']) as $key) {
|
43 |
+
if (isset($this->patterns['endpoints'][$key])) {
|
44 |
+
return $this->expand($this->patterns['endpoints'][$key], $args);
|
45 |
+
}
|
46 |
+
}
|
47 |
+
|
48 |
+
throw new \RuntimeException('Could not resolve endpoint');
|
49 |
+
}
|
50 |
+
|
51 |
+
private function expand(array $config, array $args)
|
52 |
+
{
|
53 |
+
$scheme = isset($args['scheme']) ? $args['scheme'] : 'https';
|
54 |
+
$config['endpoint'] = $scheme . '://' . str_replace(
|
55 |
+
array('{service}', '{region}'),
|
56 |
+
array($args['service'], $args['region']),
|
57 |
+
$config['endpoint']
|
58 |
+
);
|
59 |
+
|
60 |
+
return $config;
|
61 |
+
}
|
62 |
+
|
63 |
+
private function getKeys($region, $service)
|
64 |
+
{
|
65 |
+
return array("$region/$service", "$region/*", "*/$service", "*/*");
|
66 |
+
}
|
67 |
+
}
|
vendor/Aws/Common/Signature/AbstractSignature.php
CHANGED
@@ -1,44 +1,44 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
-
*
|
5 |
-
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
-
* You may not use this file except in compliance with the License.
|
7 |
-
* A copy of the License is located at
|
8 |
-
*
|
9 |
-
* http://aws.amazon.com/apache2.0
|
10 |
-
*
|
11 |
-
* or in the "license" file accompanying this file. This file is distributed
|
12 |
-
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
-
* express or implied. See the License for the specific language governing
|
14 |
-
* permissions and limitations under the License.
|
15 |
-
*/
|
16 |
-
|
17 |
-
namespace Aws\Common\Signature;
|
18 |
-
|
19 |
-
use Aws\Common\Credentials\CredentialsInterface;
|
20 |
-
use Guzzle\Http\Message\RequestInterface;
|
21 |
-
|
22 |
-
abstract class AbstractSignature implements SignatureInterface
|
23 |
-
{
|
24 |
-
/**
|
25 |
-
* Provides the timestamp used for the class (used for mocking PHP's time() function)
|
26 |
-
*
|
27 |
-
* @return int
|
28 |
-
*/
|
29 |
-
protected function getTimestamp()
|
30 |
-
{
|
31 |
-
return time();
|
32 |
-
}
|
33 |
-
|
34 |
-
/**
|
35 |
-
* @codeCoverageIgnore
|
36 |
-
*/
|
37 |
-
public function createPresignedUrl(
|
38 |
-
RequestInterface $request,
|
39 |
-
CredentialsInterface $credentials,
|
40 |
-
$expires
|
41 |
-
) {
|
42 |
-
throw new \BadMethodCallException(__METHOD__ . ' not implemented');
|
43 |
-
}
|
44 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
+
* You may not use this file except in compliance with the License.
|
7 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
namespace Aws\Common\Signature;
|
18 |
+
|
19 |
+
use Aws\Common\Credentials\CredentialsInterface;
|
20 |
+
use Guzzle\Http\Message\RequestInterface;
|
21 |
+
|
22 |
+
abstract class AbstractSignature implements SignatureInterface
|
23 |
+
{
|
24 |
+
/**
|
25 |
+
* Provides the timestamp used for the class (used for mocking PHP's time() function)
|
26 |
+
*
|
27 |
+
* @return int
|
28 |
+
*/
|
29 |
+
protected function getTimestamp()
|
30 |
+
{
|
31 |
+
return time();
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* @codeCoverageIgnore
|
36 |
+
*/
|
37 |
+
public function createPresignedUrl(
|
38 |
+
RequestInterface $request,
|
39 |
+
CredentialsInterface $credentials,
|
40 |
+
$expires
|
41 |
+
) {
|
42 |
+
throw new \BadMethodCallException(__METHOD__ . ' not implemented');
|
43 |
+
}
|
44 |
+
}
|
vendor/Aws/Common/Signature/SignatureInterface.php
CHANGED
@@ -1,52 +1,52 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
-
*
|
5 |
-
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
-
* You may not use this file except in compliance with the License.
|
7 |
-
* A copy of the License is located at
|
8 |
-
*
|
9 |
-
* http://aws.amazon.com/apache2.0
|
10 |
-
*
|
11 |
-
* or in the "license" file accompanying this file. This file is distributed
|
12 |
-
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
-
* express or implied. See the License for the specific language governing
|
14 |
-
* permissions and limitations under the License.
|
15 |
-
*/
|
16 |
-
|
17 |
-
namespace Aws\Common\Signature;
|
18 |
-
|
19 |
-
use Aws\Common\Credentials\CredentialsInterface;
|
20 |
-
use Guzzle\Http\Message\RequestInterface;
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Interface used to provide interchangeable strategies for signing requests
|
24 |
-
* using the various AWS signature protocols.
|
25 |
-
*/
|
26 |
-
interface SignatureInterface
|
27 |
-
{
|
28 |
-
/**
|
29 |
-
* Signs the specified request with an AWS signing protocol by using the
|
30 |
-
* provided AWS account credentials and adding the
|
31 |
-
* request.
|
32 |
-
*
|
33 |
-
* @param RequestInterface $request Request to add a signature to
|
34 |
-
* @param CredentialsInterface $credentials Signing credentials
|
35 |
-
*/
|
36 |
-
public function signRequest(RequestInterface $request, CredentialsInterface $credentials);
|
37 |
-
|
38 |
-
/**
|
39 |
-
* Create a pre-signed URL
|
40 |
-
*
|
41 |
-
* @param RequestInterface $request Request to sign
|
42 |
-
* @param CredentialsInterface $credentials Credentials used to sign
|
43 |
-
* @param int|string|\DateTime $expires The time at which the URL should expire. This can be a Unix timestamp, a
|
44 |
-
* PHP DateTime object, or a string that can be evaluated by strtotime
|
45 |
-
* @return string
|
46 |
-
*/
|
47 |
-
public function createPresignedUrl(
|
48 |
-
RequestInterface $request,
|
49 |
-
CredentialsInterface $credentials,
|
50 |
-
$expires
|
51 |
-
);
|
52 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License").
|
6 |
+
* You may not use this file except in compliance with the License.
|
7 |
+
* A copy of the License is located at
|
8 |
+
*
|
9 |
+
* http://aws.amazon.com/apache2.0
|
10 |
+
*
|
11 |
+
* or in the "license" file accompanying this file. This file is distributed
|
12 |
+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13 |
+
* express or implied. See the License for the specific language governing
|
14 |
+
* permissions and limitations under the License.
|
15 |
+
*/
|
16 |
+
|
17 |
+
namespace Aws\Common\Signature;
|
18 |
+
|
19 |
+
use Aws\Common\Credentials\CredentialsInterface;
|
20 |
+
use Guzzle\Http\Message\RequestInterface;
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Interface used to provide interchangeable strategies for signing requests
|
24 |
+
* using the various AWS signature protocols.
|
25 |
+
*/
|
26 |
+
interface SignatureInterface
|
27 |
+
{
|
28 |
+
/**
|
29 |
+
* Signs the specified request with an AWS signing protocol by using the
|
30 |
+
* provided AWS account credentials and adding the
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|