Completed
Push — master ( 216072...caf6f7 )
by Team eFabrica
02:21
created

OneFileTranslationSaver::load()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
cc 2
eloc 3
nc 2
nop 0
dl 0
loc 6
ccs 0
cts 4
cp 0
crap 6
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace Efabrica\TranslationsAutomatization\Bridge\KdybyTranslation\Saver;
4
5
use Efabrica\TranslationsAutomatization\Saver\SaverInterface;
6
use Efabrica\TranslationsAutomatization\Tokenizer\TokenCollection;
7
use Nette\Neon\Encoder;
8
use Nette\Neon\Neon;
9
10
class OneFileTranslationSaver implements SaverInterface
11
{
12
    private $translationFile;
13
14
    public function __construct(string $translationFile)
15
    {
16
        $this->translationFile = $translationFile;
17
    }
18
19
    public function save(TokenCollection $tokenCollection): bool
20
    {
21
        $translations = $this->load();
22
        foreach ($tokenCollection->getTokens() as $token) {
23
            $translationKeyParts = explode('.', $token->getTranslationKey());
24
            array_shift($translationKeyParts);
25
26
            $translations = $this->addToTranslations($translations, $translationKeyParts, $token->getOriginalText());
27
28
//            $translations[implode('.', $translationKeyParts)] = $token->getOriginalText();
29
        }
30
        return (bool) file_put_contents($this->translationFile, str_replace("\t", "    ", Neon::encode($translations, Encoder::BLOCK)));
31
    }
32
33
    private function load(): array
34
    {
35
        if (!file_exists($this->translationFile)) {
36
            return [];
37
        }
38
        return Neon::decode(file_get_contents($this->translationFile));
39
    }
40
41
    private function addToTranslations(array $translations, array $translationKeyParts, string $text): array
42
    {
43
        $keyPart = array_shift($translationKeyParts);
44
        if (count($translationKeyParts) === 0) {
45
            $translations[$keyPart] = $text;
46
            return $translations;
47
        }
48
        if (!isset($translations[$keyPart])) {
49
            $translations[$keyPart] = [];
50
        }
51
        $translations[$keyPart] = $this->addToTranslations($translations[$keyPart], $translationKeyParts, $text);
52
        return $translations;
53
    }
54
}
55