Completed
Pull Request — master (#40)
by Marko
116:46 queued 51:48
created

FOSCKEditorExtension   B

Complexity

Total Complexity 38

Size/Duplication

Total Lines 213
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 0
Metric Value
wmc 38
lcom 1
cbo 6
dl 0
loc 213
rs 8.3999
c 0
b 0
f 0

10 Methods

Rating   Name   Duplication   Size   Complexity  
A loadInternal() 0 20 4
A loadResources() 0 17 2
F registerConfig() 0 48 12
B registerConfigs() 0 22 6
A registerPlugins() 0 8 2
A registerStylesSet() 0 18 4
A registerTemplates() 0 8 2
A registerToolbars() 0 12 3
A registerFilebrowsers() 0 8 2
A getAlias() 0 4 1
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 FOS\CKEditorBundle\DependencyInjection;
13
14
use FOS\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 FOSCKEditorExtension extends ConfigurableExtension
25
{
26
    /**
27
     * {@inheritdoc}
28
     */
29
    protected function loadInternal(array $config, ContainerBuilder $container)
30
    {
31
        $this->loadResources($container);
32
        $this->registerConfig($config, $container);
33
34
        if (!isset($config['enable']) || $config['enable']) {
35
            $this->registerConfigs($config, $container);
36
            $this->registerPlugins($config, $container);
37
            $this->registerStylesSet($config, $container);
38
            $this->registerTemplates($config, $container);
39
            $this->registerToolbars($config, $container);
40
            $this->registerFilebrowsers($config, $container);
41
        }
42
43
        if (!method_exists(AbstractType::class, 'getBlockPrefix')) {
44
            $container->getDefinition('fos_ck_editor.form.type')
45
                ->clearTag('form.type')
46
                ->addTag('form.type', ['alias' => 'ckeditor']);
47
        }
48
    }
49
50
    /**
51
     * @param ContainerBuilder $container
52
     */
53
    private function loadResources(ContainerBuilder $container)
54
    {
55
        $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
56
57
        $resources = [
58
            'command',
59
            'form',
60
            'installer',
61
            'renderer',
62
            'templating',
63
            'twig',
64
        ];
65
66
        foreach ($resources as $resource) {
67
            $loader->load($resource.'.xml');
68
        }
69
    }
70
71
    /**
72
     * @param array            $config
73
     * @param ContainerBuilder $container
74
     */
75
    private function registerConfig(array $config, ContainerBuilder $container)
76
    {
77
        $formType = $container->getDefinition('fos_ck_editor.form.type');
78
79
        if (isset($config['enable'])) {
80
            $formType->addMethodCall('isEnable', [$config['enable']]);
81
        }
82
83
        if (isset($config['async'])) {
84
            $formType->addMethodCall('isAsync', [$config['async']]);
85
        }
86
87
        if (isset($config['auto_inline'])) {
88
            $formType->addMethodCall('isAutoInline', [$config['auto_inline']]);
89
        }
90
91
        if (isset($config['inline'])) {
92
            $formType->addMethodCall('isInline', [$config['inline']]);
93
        }
94
95
        if (isset($config['autoload'])) {
96
            $formType->addMethodCall('isAutoload', [$config['autoload']]);
97
        }
98
99
        if (isset($config['jquery'])) {
100
            $formType->addMethodCall('useJquery', [$config['jquery']]);
101
        }
102
103
        if (isset($config['require_js'])) {
104
            $formType->addMethodCall('useRequireJs', [$config['require_js']]);
105
        }
106
107
        if (isset($config['input_sync'])) {
108
            $formType->addMethodCall('isInputSync', [$config['input_sync']]);
109
        }
110
111
        if (isset($config['base_path'])) {
112
            $formType->addMethodCall('setBasePath', [$config['base_path']]);
113
        }
114
115
        if (isset($config['js_path'])) {
116
            $formType->addMethodCall('setJsPath', [$config['js_path']]);
117
        }
118
119
        if (isset($config['jquery_path'])) {
120
            $formType->addMethodCall('setJqueryPath', [$config['jquery_path']]);
121
        }
122
    }
123
124
    /**
125
     * @param array            $config
126
     * @param ContainerBuilder $container
127
     *
128
     * @throws DependencyInjectionException
129
     */
130
    private function registerConfigs(array $config, ContainerBuilder $container)
131
    {
132
        if (empty($config['configs'])) {
133
            return;
134
        }
135
136
        $definition = $container->getDefinition('fos_ck_editor.config_manager');
137
        $definition->addMethodCall('setConfigs', [$config['configs']]);
138
139
        if (!isset($config['default_config']) && !empty($config['configs'])) {
140
            reset($config['configs']);
141
            $config['default_config'] = key($config['configs']);
142
        }
143
144
        if (isset($config['default_config'])) {
145
            if (!isset($config['configs'][$config['default_config']])) {
146
                throw DependencyInjectionException::invalidDefaultConfig($config['default_config']);
147
            }
148
149
            $definition->addMethodCall('setDefaultConfig', [$config['default_config']]);
150
        }
151
    }
152
153
    /**
154
     * @param array            $config
155
     * @param ContainerBuilder $container
156
     */
157
    private function registerPlugins(array $config, ContainerBuilder $container)
158
    {
159
        if (!empty($config['plugins'])) {
160
            $container
161
                ->getDefinition('fos_ck_editor.plugin_manager')
162
                ->addMethodCall('setPlugins', [$config['plugins']]);
163
        }
164
    }
165
166
    /**
167
     * @param array            $config
168
     * @param ContainerBuilder $container
169
     */
170
    private function registerStylesSet(array $config, ContainerBuilder $container)
171
    {
172
        if (empty($config['styles'])) {
173
            return;
174
        }
175
176
        $stylesSets = $config['styles'];
177
178
        foreach ($stylesSets as &$stylesSet) {
179
            foreach ($stylesSet as &$value) {
180
                $value = array_filter($value);
181
            }
182
        }
183
184
        $container
185
            ->getDefinition('fos_ck_editor.styles_set_manager')
186
            ->addMethodCall('setStylesSets', [$stylesSets]);
187
    }
188
189
    /**
190
     * @param array            $config
191
     * @param ContainerBuilder $container
192
     */
193
    private function registerTemplates(array $config, ContainerBuilder $container)
194
    {
195
        if (!empty($config['templates'])) {
196
            $container
197
                ->getDefinition('fos_ck_editor.template_manager')
198
                ->addMethodCall('setTemplates', [$config['templates']]);
199
        }
200
    }
201
202
    /**
203
     * @param array            $config
204
     * @param ContainerBuilder $container
205
     */
206
    private function registerToolbars(array $config, ContainerBuilder $container)
207
    {
208
        $definition = $container->getDefinition('fos_ck_editor.toolbar_manager');
209
210
        if (!empty($config['toolbars']['items'])) {
211
            $definition->addMethodCall('setItems', [$config['toolbars']['items']]);
212
        }
213
214
        if (!empty($config['toolbars']['configs'])) {
215
            $definition->addMethodCall('setToolbars', [$config['toolbars']['configs']]);
216
        }
217
    }
218
219
    /**
220
     * @param array            $config
221
     * @param ContainerBuilder $container
222
     */
223
    private function registerFilebrowsers(array $config, ContainerBuilder $container)
224
    {
225
        if (!empty($config['filebrowsers'])) {
226
            $container
227
                ->getDefinition('fos_ck_editor.form.type')
228
                ->addMethodCall('setFilebrowsers', [$config['filebrowsers']]);
229
        }
230
    }
231
232
    public function getAlias()
233
    {
234
        return 'fos_ck_editor';
235
    }
236
}
237