FileStorage::resolveFile()   A
last analyzed

Complexity

Conditions 6
Paths 4

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
eloc 4
c 1
b 0
f 0
nc 4
nop 2
dl 0
loc 8
rs 9.2222
1
<?php
2
/**
3
 * @author Serhii Nekhaienko <[email protected]>
4
 * @license GPL
5
 * @copyright Serhii Nekhaienko &copy 2018
6
 * @version 4.0.0
7
 * @project endorphin-studio/browser-detector
8
 */
9
10
namespace EndorphinStudio\Detector\Storage;
11
12
use EndorphinStudio\Detector\Tools;
13
14
/**
15
 * File Storage of data
16
 * Class FileStorage
17
 * @package EndorphinStudio\Detector\Storage
18
 */
19
class FileStorage extends AbstractStorage implements StorageInterface
20
{
21
    /**
22
     * Base method
23
     * @return array nothing
24
     */
25
    public function getConfig(): array
26
    {
27
        return $this->config;
28
    }
29
30
    /**
31
     * Get list of paths in directory
32
     * @param string $directory
33
     * @return array
34
     */
35
    protected function getFileNames(string $directory = 'default'): array
36
    {
37
        $directoryIterator = $this->getDirectoryIterator($directory);
38
        $files = [];
39
        foreach ($directoryIterator as $file) {
40
            $this->resolveFile($file, $files);
41
        }
42
        return $files;
43
    }
44
45
    /**
46
     * Add file to list or scan directory
47
     * @param \DirectoryIterator $file
48
     * @param array $files
49
     */
50
    private function resolveFile(\DirectoryIterator $file, array &$files)
51
    {
52
        if ($file->isDir() && !$file->isDot()) {
53
            $files = Tools::resolvePath($files, $this->getFileNames());
54
        }
55
56
        if ($file->isFile() && !$file->isLink() && $file->isReadable()) {
57
            $files = Tools::resolvePath($files, $file->getRealPath());
58
        }
59
    }
60
61
    /**
62
     * Get Directory Iterator
63
     * @param string $directory
64
     * @return \DirectoryIterator
65
     */
66
    private function getDirectoryIterator(string $directory): \DirectoryIterator
67
    {
68
        if ($directory === 'default') {
69
            return new \DirectoryIterator($this->dataDirectory);
70
        }
71
        return new \DirectoryIterator($directory);
72
    }
73
}