Passed
Push — sheepy/elevation-configuration ( bdeab0...bcf7bc )
by Marco
18:34
created

FileConfigStore::setConfig()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 2
dl 0
loc 5
c 0
b 0
f 0
rs 10
cc 1
nc 1
nop 1
1
<?php
2
3
4
namespace Firesphere\SolrSearch\Stores;
5
6
use Firesphere\SolrSearch\Interfaces\ConfigStore;
7
use SilverStripe\Control\Director;
8
use Solarium\Exception\RuntimeException;
9
10
/**
11
 * Class FileConfigStore
12
 * @package Firesphere\SolrSearch\Stores
13
 */
14
class FileConfigStore implements ConfigStore
15
{
16
17
    /**
18
     * @var array
19
     */
20
    protected $config;
21
22
    /**
23
     * FileConfigStore constructor.
24
     * @param array $config
25
     */
26
    public function __construct($config)
27
    {
28
        if (empty($config)) {
29
            throw new RuntimeException('No valid config defined', 1);
30
        }
31
        // A relative folder should be rewritten to a writeable folder for the system
32
        if (Director::is_relative_url($config['path'])) {
33
            $config['path'] = Director::baseFolder() . '/' . $config['path'];
34
        }
35
36
37
        $this->config = $config;
38
    }
39
40
    /**
41
     * Upload a file to the configuration store. Usually located in .solr/conf
42
     *
43
     * @param string $index
44
     * @param string $file
45
     * @return void|null
46
     */
47
    public function uploadFile($index, $file)
48
    {
49
        $targetDir = $this->getTargetDir($index);
50
        copy($file, $targetDir . '/' . basename($file));
51
    }
52
53
    /**
54
     * @param $index
55
     * @return string
56
     */
57
    public function getTargetDir($index)
58
    {
59
        $targetDir = "{$this->getPath()}/{$index}/conf";
60
61
        if (!is_dir($targetDir)) {
62
            $worked = @mkdir($targetDir, 0770, true);
63
64
            if (!$worked) {
65
                throw new RuntimeException(
66
                    sprintf('Failed creating target directory %s, please check permissions', $targetDir)
67
                );
68
            }
69
        }
70
71
        return $targetDir;
72
    }
73
74
    public function getPath()
75
    {
76
        return $this->config['path'];
77
    }
78
79
    /**
80
     * @param string $index
81
     * @param string $filename
82
     * @param string $string
83
     * @return void|null
84
     */
85
    public function uploadString($index, $filename, $string)
86
    {
87
        $targetDir = $this->getTargetDir($index);
88
        file_put_contents(sprintf('%s/%s', $targetDir, $filename), $string);
89
    }
90
91
    /**
92
     * @param string|null $index
93
     * @return string|null
94
     */
95
    public function instanceDir($index)
96
    {
97
        return $this->getPath() . '/' . $index;
98
    }
99
100
    /**
101
     * @return array
102
     */
103
    public function getConfig(): array
104
    {
105
        return $this->config;
106
    }
107
108
    /**
109
     * @param array $config
110
     * @return $this
111
     */
112
    public function setConfig(array $config): FileConfigStore
113
    {
114
        $this->config = $config;
115
116
        return $this;
117
    }
118
}
119