Completed
Push — master ( f8aac3...6e7b55 )
by Sebastian
07:15
created

AmazonS3v3::getBackupFiles()   C

Complexity

Conditions 7
Paths 5

Size

Total Lines 24
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 13
CRAP Score 7

Importance

Changes 0
Metric Value
dl 0
loc 24
ccs 13
cts 13
cp 1
rs 6.7272
c 0
b 0
f 0
cc 7
eloc 13
nc 5
nop 0
crap 7
1
<?php
2
namespace phpbu\App\Backup\Collector;
3
4
use Aws\S3\S3Client;
5
use phpbu\App\Backup\Collector;
6
use phpbu\App\Backup\File\AmazonS3v3 as AwsFile;
7
use phpbu\App\Backup\Path;
8
use phpbu\App\Backup\Target;
9
use phpbu\App\Util;
10
11
/**
12
 * AmazonS3v3 class.
13
 *
14
 * @package    phpbu
15
 * @subpackage Backup
16
 * @author     Sebastian Feldmann <[email protected]>
17
 * @author     Vitaly Baev <[email protected]>
18
 * @copyright  Sebastian Feldmann <[email protected]>
19
 * @license    https://opensource.org/licenses/MIT The MIT License (MIT)
20
 * @link       http://phpbu.de/
21
 * @since      Class available since Release 5.1.0
22
 */
23
class AmazonS3v3 extends Remote implements Collector
24
{
25
    /**
26
     * @var \Aws\S3\S3Client
27
     */
28
    protected $client;
29
30
    /**
31
     * Amazon S3 bucket name
32
     *
33
     * @var string
34
     */
35
    protected $bucket;
36
37
    /**
38
     * Amazon S3 constructor.
39
     *
40
     * @param \phpbu\App\Backup\Target $target
41
     * @param \phpbu\App\Backup\Path   $path
42
     * @param \Aws\S3\S3Client         $client
43
     * @param string                   $bucket
44
     */
45
    public function __construct(Target $target, Path $path, S3Client $client, string $bucket)
46 1
    {
47
        $this->setUp($target, $path);
48 1
        $this->client = $client;
49 1
        $this->bucket = $bucket;
50 1
    }
51 1
52 1
    /**
53
     * Collect all created backups.
54
     */
55
    protected function collectBackups()
56
    {
57
        $result = $this->client->listObjects([
58
            'Bucket' => $this->bucket,
59 1
            'Prefix' => $this->getPrefix($this->path->getPathThatIsNotChanging()),
60
        ]);
61 1
62 1
        if (!isset($result['Contents']) || !$result['Contents'] || !is_array($result['Contents'])) {
63 1
            return;
64
        }
65
66 1
        foreach ($result['Contents'] as $object) {
67 1 View Code Duplication
            if ($this->isFileMatch($object['Key'])) {
68
                $file                = new AwsFile($this->client, $this->bucket, $object);
69
                $index               = $this->getFileIndex($file);
70 1
                $this->files[$index] = $file;
71
            }
72 1
        }
73 1
    }
74
75 1
    /**
76 1
     * Return prefix for querying remote files and folders
77 1
     *
78
     * @param string $path
79
     * @return string
80
     */
81 1
    protected function getPrefix($path): string
82
    {
83
        $prefix = Util\Path::withoutLeadingSlash($path);
84
        $prefix = $prefix ? Util\Path::withTrailingSlash($prefix) : '';
85
        return $prefix;
86
    }
87
}
88