Completed
Push — master ( 446e6e...f3d591 )
by Ben
08:37
created

CachedTranslationFile::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
3
namespace Thinktomorrow\Squanto\Services;
4
5
use League\Flysystem\Filesystem;
6
use Thinktomorrow\Squanto\Domain\Line;
7
8
class CachedTranslationFile
9
{
10
    /**
11
     * Local filesystem. Already contains the path to our translation files
12
     * e.g. storage/app/trans
13
     *
14
     * @var Filesystem
15
     */
16
    private $filesystem;
17
18
    public function __construct(Filesystem $filesystem)
19
    {
20
        $this->filesystem = $filesystem;
21
    }
22
23
    /**
24
     * Write all translations to cache
25
     */
26
    public function write()
27
    {
28
        foreach(config('squanto.locales',[]) as $locale)
29
        {
30
            $this->writeLocale($locale,Line::getValuesByLocale($locale));
31
        }
32
33
        return $this;
34
    }
35
36
    /**
37
     * Create new cached translation files based on database entries
38
     *
39
     * @param $locale
40
     * @param array $lines - flat array of key-value pairs e.g. foo.bar => 'translation of foo'
41
     */
42
    protected function writeLocale($locale, array $lines = [])
43
    {
44
        $translations = $this->convertToTree($lines);
45
46
        foreach($translations as $section => $trans)
47
        {
48
            $this->filesystem->put(
49
                $locale.'/'.$section.'.php',
50
                "<?php\n\n return ".var_export($trans, true).";\n"
51
            );
52
        }
53
    }
54
55
    public function delete($locale = null)
56
    {
57
        if ($locale) {
58
            $this->filesystem->deleteDir($locale);
59
        }
60
61
        foreach ($this->filesystem->listContents() as $content) {
62
            if ($content['type'] == 'dir') {
63
                $this->filesystem->deleteDir($content['path']);
64
            } else {
65
                $this->filesystem->delete($content['path']);
66
            }
67
        }
68
    }
69
70
    private function convertToTree(array $lines = [])
71
    {
72
        $translations = [];
73
74
        foreach ($lines as $key => $value) {
75
            array_set($translations, $key, $value);
76
        }
77
78
        return $translations;
79
    }
80
}