Completed
Pull Request — develop (#161)
by Wachter
15:19
created

SuluArticleExtension::load()   B

Complexity

Conditions 2
Paths 2

Size

Total Lines 27
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 27
rs 8.8571
ccs 0
cts 0
cp 0
cc 2
eloc 18
nc 2
nop 2
crap 6
1
<?php
2
3
/*
4
 * This file is part of Sulu.
5
 *
6
 * (c) MASSIVE ART WebServices GmbH
7
 *
8
 * This source file is subject to the MIT license that is bundled
9
 * with this source code in the file LICENSE.
10
 */
11
12
namespace Sulu\Bundle\ArticleBundle\DependencyInjection;
13
14
use Sulu\Bundle\ArticleBundle\Document\ArticleDocument;
15
use Sulu\Bundle\ArticleBundle\Document\ArticlePageDocument;
16
use Sulu\Bundle\ArticleBundle\Document\Structure\ArticleBridge;
17
use Sulu\Bundle\ArticleBundle\Document\Structure\ArticlePageBridge;
18
use Sulu\Bundle\ArticleBundle\Exception\ArticlePageNotFoundException;
19
use Sulu\Bundle\ArticleBundle\Exception\ParameterNotAllowedException;
20
use Symfony\Component\Config\FileLocator;
21
use Symfony\Component\DependencyInjection\ContainerBuilder;
22
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
23
use Symfony\Component\DependencyInjection\Loader;
24
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
25
26
/**
27
 * This is the class that loads and manages article bundle configuration.
28
 */
29
class SuluArticleExtension extends Extension implements PrependExtensionInterface
30 1
{
31
    /**
32 1
     * {@inheritdoc}
33 1
     */
34 1
    public function prepend(ContainerBuilder $container)
35
    {
36
        if ($container->hasExtension('sulu_core')) {
37
            $container->prependExtensionConfig(
38
                'sulu_core',
39
                [
40
                    'content' => [
41
                        'structure' => [
42 1
                            'type_map' => [
43
                                'article' => ArticleBridge::class,
44
                                'article_page' => ArticlePageBridge::class,
45
                            ],
46
                        ],
47 1
                    ],
48 1
                ]
49 1
            );
50
        }
51
52
        if ($container->hasExtension('jms_serializer')) {
53
            $container->prependExtensionConfig(
54
                'jms_serializer',
55
                [
56
                    'metadata' => [
57
                        'directories' => [
58 1
                            [
59
                                'path' => __DIR__ . '/../Resources/config/serializer',
60
                                'namespace_prefix' => 'Sulu\Bundle\ArticleBundle',
61
                            ],
62
                        ],
63 1
                    ],
64 1
                ]
65 1
            );
66
        }
67
68
        if ($container->hasExtension('sulu_search')) {
69
            $container->prependExtensionConfig(
70
                'sulu_content',
71 1
                [
72
                    'search' => [
73
                        'mapping' => [
74
                            ArticleDocument::class => ['index' => 'article'],
75
                            ArticlePageDocument::class => ['index' => 'article_page'],
76 1
                        ],
77 1
                    ],
78 1
                ]
79
            );
80
        }
81
82 1
        if ($container->hasExtension('sulu_document_manager')) {
83
            $container->prependExtensionConfig(
84
                'sulu_document_manager',
85
                [
86
                    'mapping' => [
87
                        'article' => ['class' => ArticleDocument::class, 'phpcr_type' => 'sulu:article'],
88
                        'article_page' => ['class' => ArticlePageDocument::class, 'phpcr_type' => 'sulu:articlepage'],
89 1
                    ],
90
                    'path_segments' => [
91
                        'articles' => 'articles',
92
                    ],
93
                ]
94 1
            );
95
        }
96 1
97 1
        if ($container->hasExtension('sulu_route')) {
98 1
            $container->prependExtensionConfig(
99 1
                'sulu_route',
100 1
                [
101 1
                    'mappings' => [
102
                        ArticlePageDocument::class => [
103 1
                            'generator' => 'article_page',
104 1
                            'options' => [
105 1
                                'route_schema' => '/{translator.trans("page")}-{object.getPageNumber()}',
106
                                'parent' => '{object.getParent().getRoutePath()}',
107
                            ],
108 1
                        ],
109 1
                    ],
110
                ]
111 1
            );
112 1
        }
113
114
        if ($container->hasExtension('fos_rest')) {
115 1
            $container->prependExtensionConfig(
116
                'fos_rest',
117
                [
118
                    'exception' => [
119
                        'codes' => [
120
                            ParameterNotAllowedException::class => 400,
121
                            ArticlePageNotFoundException::class => 404,
122
                        ],
123
                    ],
124
                ]
125
            );
126
        }
127
    }
128
129
    /**
130
     * {@inheritdoc}
131
     */
132
    public function load(array $configs, ContainerBuilder $container)
133
    {
134
        $configuration = new Configuration();
135
        $config = $this->processConfiguration($configuration, $configs);
136
        $container->setParameter('sulu_article.types', $config['types']);
137
        $container->setParameter('sulu_article.documents', $config['documents']);
138
        $container->setParameter('sulu_article.view_document.article.class', $config['documents']['article']['view']);
139
        $container->setParameter('sulu_article.display_tab_all', $config['display_tab_all']);
140
141
        $container->setParameter(
142
            'sulu_article.content-type.article.template',
143
            $config['content_types']['article']['template']
144
        );
145
146
        $container->setParameter(
147
            'sulu_article.content-type.page_tree_route.template',
148
            $config['content_types']['page_tree_route']['template']
149
        );
150
151
        $loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
152
        $loader->load('services.xml');
153
154
        $bundles = $container->getParameter('kernel.bundles');
155
        if (array_key_exists('SuluAutomationBundle', $bundles)) {
156
            $loader->load('automation.xml');
157
        }
158
    }
159
}
160