Completed
Push — 4.9 ( b3f7c3...779bac )
by Mikhail
02:00
created

GeneratorMediator::getAddonXmlGenerator()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
c 0
b 0
f 0
rs 10
cc 1
nc 1
nop 0
1
<?php
2
3
namespace mediators;
4
5
use generators\AbstractGenerator;
6
use generators\AddonXml\AddonXmlGenerator;
7
use generators\Language\LanguageGenerator;
8
use generators\Readme\ReadmeGenerator;
9
use generators\Language\enums\LangvarTypes;
10
use mediators\AbstractMediator;
11
12
class GeneratorMediator extends AbstractMediator
13
{
14
    private $addonXmlGenerators;
15
    private $languageGenerators;
16
    private $readmeGenerators;
17
18
    public function addGenerator(AbstractGenerator $generator)
19
    {
20
        switch(get_class($generator))
21
        {
22
            case 'generators\AddonXml\AddonXmlGenerator':
23
                $this->addonXmlGenerators[] = $generator;
24
                break;
25
            case 'generators\Language\LanguageGenerator':
26
                $this->languageGenerators[] = $generator;
27
                break;
28
            case 'generators\Readme\ReadmeGenerator':
29
                $this->readmeGenerators[] = $generator;
30
                break;
31
            default:
32
                throw new \LogicException('Wrong generator type passed: ' . get_class($generator));
33
        }
34
35
        $generator->setMediator($this);
36
37
        return $this;
38
    }
39
40
    /**
41
     * Handle side effects for any generation
42
     * For example: create langvars for new settings added by addonXmlGenerator
43
     * @param string $name - name or code of the event: 'addonxml.setting.added'
44
     * @param mixed $data - any data from event
45
     * @param $sender - component which triggered the event
0 ignored issues
show
Documentation Bug introduced by
The doc comment - at position 0 could not be parsed: Unknown type name '-' at position 0 in -.
Loading history...
46
     *
47
     */
48
    public function trigger(string $name, $data = [], $sender = null): void
49
    {
50
        switch ($name)
51
        {
52
            case 'addonxml.created':
53
                array_walk($this->languageGenerators, function($generator) use ($data) {
54
                    $generator
55
                        ->create()
56
                        ->addLangvar(
57
                            LanguageGenerator::getTranslationKey(
58
                                LangvarTypes::$ADDONS,
59
                                    'name',
60
                                    $data['addon.id']
61
                                ),
62
                            parse_to_readable($data['addon.id'])
63
                        )
64
                        ->addLangvar(
65
                            LanguageGenerator::getTranslationKey(
66
                                LangvarTypes::$ADDONS,
67
                                    'description',
68
                                    $data['addon.id']
69
                                ),
70
                            parse_to_readable($data['addon.id'])
71
                        );
72
                });
73
            break;
74
            case 'addonxml.setting.updated':
75
            case 'addonxml.setting.added':
76
                
77
                array_walk($this->languageGenerators, function($generator) use ($data) {
78
                    $generator
79
                        ->removeById($data['id'])
80
                        ->replaceLangvar(
81
                            LanguageGenerator::getTranslationKey(
82
                                LangvarTypes::$SETTINGS_OPTIONS,
83
                                    $data['addon.id'],
84
                                    $data['id']
85
                                ),
86
                            parse_to_readable($data['id'])
87
                        )
88
                        ->replaceLangvar(
89
                            LanguageGenerator::getTranslationKey(
90
                                LangvarTypes::$SETTINGS_TOOLTIPS,
91
                                    $data['addon.id'],
92
                                    $data['id']
93
                                ),
94
                            parse_to_readable($data['id'])
95
                        );
96
                });
97
                if (!empty($data['variants'])) {
98
                    foreach($data['variants'] as $variation) {
99
                        array_walk($this->languageGenerators, function($generator) use ($data, $variation) {
100
                            $generator
101
                                ->replaceLangvar(
102
                                    LanguageGenerator::getTranslationKey(
103
                                        LangvarTypes::$SETTINGS_VARIANTS,
104
                                            $data['addon.id'],
105
                                            $data['id'],
106
                                            $variation
107
                                        ),
108
                                    parse_to_readable($variation)
109
                                );
110
                        });
111
                    }
112
                }
113
114
            break;
115
            case 'addonxml.setting.removed':
116
                array_walk($this->languageGenerators, function($generator) use ($data) {
117
                    $generator
118
                        ->removeById($data['id']);
119
                });
120
            break;
121
            case 'addonxml.settingSection.added':
122
            case 'addonxml.settingSection.updated':
123
                array_walk($this->languageGenerators, function($generator) use ($data) {
124
                    $generator
125
                        ->replaceLangvar(
126
                            LanguageGenerator::getTranslationKey(
127
                                LangvarTypes::$SETTINGS_SECTIONS,
128
                                    $data['addon.id'],
129
                                    $data['id']
130
                                ),
131
                            parse_to_readable($data['id'])
132
                        );
133
                    });
134
            break;
135
        }
136
    }
137
}
138