Completed
Push — master ( c86a14...cd5fc7 )
by Eric
29:59
created

IvoryCKEditorExtension::loadInternal()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 20
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 17
CRAP Score 4

Importance

Changes 0
Metric Value
dl 0
loc 20
ccs 17
cts 17
cp 1
rs 9.2
c 0
b 0
f 0
cc 4
eloc 14
nc 4
nop 2
crap 4
1
<?php
2
3
/*
4
 * This file is part of the Ivory CKEditor package.
5
 *
6
 * (c) Eric GELOEN <[email protected]>
7
 *
8
 * For the full copyright and license information, please read the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Ivory\CKEditorBundle\DependencyInjection;
13
14
use Ivory\CKEditorBundle\Exception\DependencyInjectionException;
15
use Symfony\Component\Config\FileLocator;
16
use Symfony\Component\DependencyInjection\ContainerBuilder;
17
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
18
use Symfony\Component\Form\AbstractType;
19
use Symfony\Component\HttpKernel\DependencyInjection\ConfigurableExtension;
20
21
/**
22
 * @author GeLo <[email protected]>
23
 */
24
class IvoryCKEditorExtension extends ConfigurableExtension
25
{
26
    /**
27
     * {@inheritdoc}
28
     */
29 189
    protected function loadInternal(array $config, ContainerBuilder $container)
30
    {
31 189
        $this->loadResources($container);
32 189
        $this->registerConfig($config, $container);
33
34 189
        if (!isset($config['enable']) || $config['enable']) {
35 180
            $this->registerConfigs($config, $container);
36 171
            $this->registerPlugins($config, $container);
37 171
            $this->registerStylesSet($config, $container);
38 171
            $this->registerTemplates($config, $container);
39 171
            $this->registerToolbars($config, $container);
40 171
            $this->registerFilebrowsers($config, $container);
41 133
        }
42
43 180
        if (!method_exists(AbstractType::class, 'getBlockPrefix')) {
44 80
            $container->getDefinition('ivory_ck_editor.form.type')
45 80
                ->clearTag('form.type')
46 80
                ->addTag('form.type', ['alias' => 'ckeditor']);
47 40
        }
48 180
    }
49
50
    /**
51
     * @param ContainerBuilder $container
52
     */
53 189
    private function loadResources(ContainerBuilder $container)
54
    {
55 189
        $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
56
57
        $resources = [
58 189
            'command',
59 147
            'form',
60 147
            'installer',
61 147
            'renderer',
62 147
            'templating',
63 147
            'twig',
64 147
        ];
65
66 189
        foreach ($resources as $resource) {
67 189
            $loader->load($resource.'.xml');
68 147
        }
69 189
    }
70
71
    /**
72
     * @param array            $config
73
     * @param ContainerBuilder $container
74
     */
75 189
    private function registerConfig(array $config, ContainerBuilder $container)
76
    {
77 189
        $formType = $container->getDefinition('ivory_ck_editor.form.type');
78
79 189
        if (isset($config['enable'])) {
80 9
            $formType->addMethodCall('isEnable', [$config['enable']]);
81 7
        }
82
83 189
        if (isset($config['async'])) {
84 9
            $formType->addMethodCall('isAsync', [$config['async']]);
85 7
        }
86
87 189
        if (isset($config['auto_inline'])) {
88 9
            $formType->addMethodCall('isAutoInline', [$config['auto_inline']]);
89 7
        }
90
91 189
        if (isset($config['inline'])) {
92 9
            $formType->addMethodCall('isInline', [$config['inline']]);
93 7
        }
94
95 189
        if (isset($config['autoload'])) {
96 9
            $formType->addMethodCall('isAutoload', [$config['autoload']]);
97 7
        }
98
99 189
        if (isset($config['jquery'])) {
100 9
            $formType->addMethodCall('useJquery', [$config['jquery']]);
101 7
        }
102
103 189
        if (isset($config['require_js'])) {
104 9
            $formType->addMethodCall('useRequireJs', [$config['require_js']]);
105 7
        }
106
107 189
        if (isset($config['input_sync'])) {
108 9
            $formType->addMethodCall('isInputSync', [$config['input_sync']]);
109 7
        }
110
111 189
        if (isset($config['base_path'])) {
112 9
            $formType->addMethodCall('setBasePath', [$config['base_path']]);
113 7
        }
114
115 189
        if (isset($config['js_path'])) {
116 9
            $formType->addMethodCall('setJsPath', [$config['js_path']]);
117 7
        }
118
119 189
        if (isset($config['jquery_path'])) {
120 9
            $formType->addMethodCall('setJqueryPath', [$config['jquery_path']]);
121 7
        }
122 189
    }
123
124
    /**
125
     * @param array            $config
126
     * @param ContainerBuilder $container
127
     *
128
     * @throws DependencyInjectionException
129
     */
130 180
    private function registerConfigs(array $config, ContainerBuilder $container)
131
    {
132 180
        if (empty($config['configs'])) {
133 135
            return;
134
        }
135
136 45
        $definition = $container->getDefinition('ivory_ck_editor.config_manager');
137 45
        $definition->addMethodCall('setConfigs', [$config['configs']]);
138
139 45
        if (!isset($config['default_config']) && !empty($config['configs'])) {
140 9
            reset($config['configs']);
141 9
            $config['default_config'] = key($config['configs']);
142 7
        }
143
144 45
        if (isset($config['default_config'])) {
145 45
            if (!isset($config['configs'][$config['default_config']])) {
146 9
                throw DependencyInjectionException::invalidDefaultConfig($config['default_config']);
147
            }
148
149 36
            $definition->addMethodCall('setDefaultConfig', [$config['default_config']]);
150 28
        }
151 36
    }
152
153
    /**
154
     * @param array            $config
155
     * @param ContainerBuilder $container
156
     */
157 171
    private function registerPlugins(array $config, ContainerBuilder $container)
158
    {
159 171
        if (!empty($config['plugins'])) {
160
            $container
161 9
                ->getDefinition('ivory_ck_editor.plugin_manager')
162 9
                ->addMethodCall('setPlugins', [$config['plugins']]);
163 7
        }
164 171
    }
165
166
    /**
167
     * @param array            $config
168
     * @param ContainerBuilder $container
169
     */
170 171
    private function registerStylesSet(array $config, ContainerBuilder $container)
171
    {
172 171
        if (empty($config['styles'])) {
173 162
            return;
174
        }
175
176 9
        $stylesSets = $config['styles'];
177
178 9
        foreach ($stylesSets as &$stylesSet) {
179 9
            foreach ($stylesSet as &$value) {
180 9
                $value = array_filter($value);
181 7
            }
182 7
        }
183
184
        $container
185 9
            ->getDefinition('ivory_ck_editor.styles_set_manager')
186 9
            ->addMethodCall('setStylesSets', [$stylesSets]);
187 9
    }
188
189
    /**
190
     * @param array            $config
191
     * @param ContainerBuilder $container
192
     */
193 171
    private function registerTemplates(array $config, ContainerBuilder $container)
194
    {
195 171
        if (!empty($config['templates'])) {
196
            $container
197 9
                ->getDefinition('ivory_ck_editor.template_manager')
198 9
                ->addMethodCall('setTemplates', [$config['templates']]);
199 7
        }
200 171
    }
201
202
    /**
203
     * @param array            $config
204
     * @param ContainerBuilder $container
205
     */
206 171
    private function registerToolbars(array $config, ContainerBuilder $container)
207
    {
208 171
        $definition = $container->getDefinition('ivory_ck_editor.toolbar_manager');
209
210 171
        if (!empty($config['toolbars']['items'])) {
211 27
            $definition->addMethodCall('setItems', [$config['toolbars']['items']]);
212 21
        }
213
214 171
        if (!empty($config['toolbars']['configs'])) {
215 27
            $definition->addMethodCall('setToolbars', [$config['toolbars']['configs']]);
216 21
        }
217 171
    }
218
219
    /**
220
     * @param array            $config
221
     * @param ContainerBuilder $container
222
     */
223 171
    private function registerFilebrowsers(array $config, ContainerBuilder $container)
224
    {
225 171
        if (!empty($config['filebrowsers'])) {
226
            $container
227 9
                ->getDefinition('ivory_ck_editor.form.type')
228 9
                ->addMethodCall('setFilebrowsers', [$config['filebrowsers']]);
229 7
        }
230 171
    }
231
}
232