Passed
Pull Request — master (#14)
by Michal
02:47
created

ParamsExtractorTokenModifier::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 2
dl 0
loc 4
ccs 3
cts 3
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Efabrica\TranslationsAutomatization\Bridge\KdybyTranslation\TokenModifier;
4
5
use Efabrica\TranslationsAutomatization\Tokenizer\Token;
6
use Efabrica\TranslationsAutomatization\TokenModifier\TokenModifier;
7
8
class ParamsExtractorTokenModifier extends TokenModifier
9
{
10
    private $staticParamsNameMap = [];
11
12
    private $staticParamsValueMap = [];
13
14 2
    public function __construct(array $staticParamsNameMap = [], array $staticParamsValueMap = [])
15
    {
16 2
        $this->staticParamsNameMap = $staticParamsNameMap;
17 2
        $this->staticParamsValueMap = $staticParamsValueMap;
18 2
    }
19
20 2
    protected function modify(Token $token): Token
21
    {
22 2
        $targetText = $token->getTargetText();
23 2
        $translationKey = $token->getTranslationKey();
24 2
        preg_match_all('/{(.*?)}/', $targetText, $matches);
25
26 2
        $textParameters = [];
27 2
        $matchesCount = count($matches[0]);
28 2
        for ($i = 0; $i < $matchesCount; ++$i) {
29 2
            $paramName = $this->createParamName($matches[1][$i]);
30 2
            $paramValue = $this->createParamValue($matches[1][$i]);
31
32 2
            $targetText = str_replace($matches[0][$i], '%' . $paramName . '%', $targetText);
33 2
            if ($token->getTargetText() === $token->getTranslationKey()) {
34 2
                $translationKey = $targetText;
35
            }
36 2
            $textParameters[$paramName] = $paramValue;
37
        }
38
39 2
        $token->setTextParameters($textParameters);
40 2
        $token->changeTargetText($targetText);
41 2
        $token->changeTranslationKey($translationKey);
42
43 2
        return $token;
44
    }
45
46 2
    private function createParamName(string $paramName): string
47
    {
48 2
        if (isset($this->staticParamsNameMap[$paramName])) {
49
            return $this->staticParamsNameMap[$paramName];
50
        }
51
52 2
        if (strpos($paramName, '$') === 0) {
53 2
            $paramName = str_replace('$', '', $paramName);
54 2
            if (strpos($paramName, '->')) {
55
                $paramName = lcfirst(implode('', array_map('ucfirst', explode('->', $paramName))));
56
            }
57 2
            return $paramName;
58
        }
59
60
        return $paramName;
61
    }
62
63 2
    private function createParamValue(string $paramName): string
64
    {
65 2
        if (isset($this->staticParamsValueMap[$paramName])) {
66
            return $this->staticParamsValueMap[$paramName];
67
        }
68 2
        return $paramName;
69
    }
70
}
71