Skip to content
This repository was archived by the owner on Sep 16, 2021. It is now read-only.

Commit 6785354

Browse files
authored
Merge pull request #108 from symfony-cmf/improve-ckeditor
Move CKEditor configuration to the factory
2 parents cf18a11 + 290352b commit 6785354

File tree

14 files changed

+178
-86
lines changed

14 files changed

+178
-86
lines changed

.travis.yml

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
language: php
22

33
php:
4-
- 7.0
4+
- 7.1
55
- hhvm
66

77
sudo: false
@@ -12,21 +12,19 @@ cache:
1212
- $HOME/.composer/cache/files
1313

1414
env:
15-
matrix: SYMFONY_VERSION=3.1.*
15+
matrix: SYMFONY_VERSION=3.2.*
1616
global:
1717
- SYMFONY_DEPRECATIONS_HELPER=2080
1818
- SYMFONY_PHPUNIT_DIR=".phpunit" SYMFONY_PHPUNIT_REMOVE="symfony/yaml" SYMFONY_PHPUNIT_VERSION=5.7
1919

2020
matrix:
2121
include:
22-
#- php: 7.0
22+
#- php: 7.1
2323
# env: DEPS=dev SYMFONY_VERSION=3.3.*
2424
- php: 5.6
2525
env: COMPOSER_FLAGS="--prefer-lowest" SYMFONY_VERSION=2.8.* SYMFONY_DEPRECATIONS_HELPER=weak
26-
- php: 7.1
27-
env: SYMFONY_VERSION=3.0.*
28-
#- php: 7.0
29-
# env: DEPS=dev COMPOSER_FLAGS="--prefer-stable" SYMFONY_VERSION=3.2.*
26+
- php: 7.0
27+
env: SYMFONY_VERSION=3.1.*
3028
fast_finish: true
3129

3230
before_install:

src/DependencyInjection/CmfSonataPhpcrAdminIntegrationExtension.php

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111

1212
namespace Symfony\Cmf\Bundle\SonataPhpcrAdminIntegrationBundle\DependencyInjection;
1313

14-
use Ivory\CKEditorBundle\IvoryCKEditorBundle;
15-
use Symfony\Cmf\Bundle\SonataPhpcrAdminIntegrationBundle\DependencyInjection\Factory\IsConfigEnabledTrait;
1614
use Symfony\Component\Config\FileLocator;
1715
use Symfony\Component\DependencyInjection\ContainerBuilder;
1816
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
@@ -26,8 +24,6 @@
2624
*/
2725
class CmfSonataPhpcrAdminIntegrationExtension extends Extension implements CompilerPassInterface
2826
{
29-
use IsConfigEnabledTrait;
30-
3127
/**
3228
* @var AdminFactoryInterface[]
3329
*/
@@ -65,36 +61,6 @@ public function load(array $configs, ContainerBuilder $container)
6561

6662
$loader->load('main.xml');
6763
$loader->load('enhancer.xml');
68-
69-
$this->loadIvoryCKEditor($config['ivory_ckeditor'], $container);
70-
}
71-
72-
/**
73-
* Adds the ckEditor configuration to the parameters list when configuration is enabled (auto, true). For both
74-
* settings the "egeloen/ckeditor-bundle" has to be installed and enabled.
75-
*
76-
* @param array $config
77-
* @param ContainerBuilder $container
78-
*
79-
* @throws \LogicException when configuration is enabled by true and "IvoryCKEditorBundle" is not enabled
80-
*/
81-
protected function loadIvoryCKEditor(array $config, ContainerBuilder $container)
82-
{
83-
$configParameter = [];
84-
if ($this->isConfigEnabled($container, $config)) {
85-
$bundles = $container->getParameter('kernel.bundles');
86-
if (true === $config['enabled'] && !isset($bundles['IvoryCKEditorBundle'])) {
87-
$message = 'IvoryCKEditorBundle integration was explicitely enabled, but the bundle is not available';
88-
if (class_exists(IvoryCKEditorBundle::class)) {
89-
$message .= ' (did you forget to register the bundle in the AppKernel?)';
90-
}
91-
throw new \LogicException($message.'.');
92-
} elseif (isset($bundles['IvoryCKEditorBundle'])) {
93-
$configParameter = ['config_name' => $config['config_name']];
94-
}
95-
}
96-
97-
$container->setParameter('cmf_sonata_phpcr_admin_integration.ivory_ckeditor.config', $configParameter);
9864
}
9965

10066
/**

src/DependencyInjection/Configuration.php

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -41,20 +41,6 @@ public function getConfigTreeBuilder()
4141

4242
$this->addBundlesSection($root);
4343

44-
$root
45-
->children()
46-
->arrayNode('ivory_ckeditor')
47-
->addDefaultsIfNotSet()
48-
->children()
49-
->enumNode('enabled')
50-
->values([true, false, 'auto'])
51-
->defaultValue('auto')
52-
->end()
53-
->scalarNode('config_name')->isRequired()->end()
54-
->end()
55-
->end()
56-
->end();
57-
5844
return $treeBuilder;
5945
}
6046

src/DependencyInjection/Factory/BlockAdminFactory.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace Symfony\Cmf\Bundle\SonataPhpcrAdminIntegrationBundle\DependencyInjection\Factory;
1313

14+
use Symfony\Cmf\Bundle\MenuBundle\CmfMenuBundle;
1415
use Symfony\Component\Config\Definition\Builder\NodeBuilder;
1516
use Symfony\Component\DependencyInjection\ContainerBuilder;
1617
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
@@ -20,6 +21,8 @@
2021
*/
2122
class BlockAdminFactory implements AdminFactoryInterface
2223
{
24+
use IsConfigEnabledTrait;
25+
2326
/**
2427
* {@inheritdoc}
2528
*/
@@ -70,9 +73,11 @@ public function create(array $config, ContainerBuilder $container, XmlFileLoader
7073

7174
$bundles = $container->getParameter('kernel.bundles');
7275

73-
if (true === $config['enable_menu']
74-
|| ('auto' === $config['enable_menu'] && isset($bundles['CmfMenuBundle']))
75-
) {
76+
$message = 'CmfMenuBundle integration was explicitely enabled, but the bundle is not available.';
77+
if (class_exists(CmfMenuBundle::class)) {
78+
$message .= ' (did you forget to register the bundle in the AppKernel?)';
79+
}
80+
if ($this->isConfigEnabledAuto($container, $config['enable_menu'], 'CmfMenuBundle', $message)) {
7681
$loader->load('block-menu.xml');
7782
}
7883
}

src/DependencyInjection/Factory/ContentAdminFactory.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111

1212
namespace Symfony\Cmf\Bundle\SonataPhpcrAdminIntegrationBundle\DependencyInjection\Factory;
1313

14+
use Ivory\CKEditorBundle\IvoryCKEditorBundle;
1415
use Symfony\Component\Config\Definition\Builder\NodeBuilder;
16+
use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
1517
use Symfony\Component\DependencyInjection\ContainerBuilder;
1618
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
1719

@@ -20,6 +22,8 @@
2022
*/
2123
class ContentAdminFactory implements AdminFactoryInterface
2224
{
25+
use IsConfigEnabledTrait;
26+
2327
/**
2428
* {@inheritdoc}
2529
*/
@@ -33,6 +37,22 @@ public function getKey()
3337
*/
3438
public function addConfiguration(NodeBuilder $builder)
3539
{
40+
$builder
41+
->arrayNode('ivory_ckeditor')
42+
->treatFalseLike(['enabled' => false])
43+
->treatTrueLike(['enabled' => true])
44+
->treatNullLike(['enabled' => 'auto'])
45+
->addDefaultsIfNotSet()
46+
->ignoreExtraKeys()
47+
->children()
48+
->enumNode('enabled')
49+
->values([true, false, 'auto'])
50+
->defaultValue('auto')
51+
->end()
52+
->scalarNode('config_name')->end()
53+
->end()
54+
->end()
55+
;
3656
}
3757

3858
/**
@@ -41,5 +61,23 @@ public function addConfiguration(NodeBuilder $builder)
4161
public function create(array $config, ContainerBuilder $container, XmlFileLoader $loader)
4262
{
4363
$loader->load('content.xml');
64+
65+
$message = 'IvoryCKEditorBundle integration was explicitely enabled, but the bundle is not available.';
66+
if (class_exists(IvoryCKEditorBundle::class)) {
67+
$message .= ' (did you forget to register the bundle in the AppKernel?)';
68+
}
69+
70+
$ckeditorConfig = [];
71+
if ($this->isConfigEnabledAuto($container, $config['ivory_ckeditor']['enabled'], 'IvoryCKEditorBundle', $message)) {
72+
if (!isset($config['ivory_ckeditor']['config_name'])) {
73+
throw new InvalidConfigurationException('The cmf_sonata_phpcr_admin_integration.bundles.content.ivory_ckeditor.config_name setting has to be defined when IvoryCKEditorBundle integration is enabled.');
74+
}
75+
76+
unset($config['ivory_ckeditor']['enabled']);
77+
78+
$ckeditorConfig = $config['ivory_ckeditor'];
79+
}
80+
81+
$container->setParameter('cmf_sonata_phpcr_admin_integration.content.ivory_ckeditor', $ckeditorConfig);
4482
}
4583
}

src/DependencyInjection/Factory/IsConfigEnabledTrait.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,22 @@ public function isConfigEnabled(ContainerBuilder $container, array $config)
2424

2525
return (bool) $container->getParameterBag()->resolveValue($config['enabled']);
2626
}
27+
28+
public function isConfigEnabledAuto(ContainerBuilder $container, $enabled, $requiredBundle, $message = null)
29+
{
30+
$enabled = $container->getParameterBag()->resolveValue($enabled);
31+
$bundleExists = array_key_exists($requiredBundle, $container->getParameter('kernel.bundles'));
32+
33+
if ('auto' === $enabled) {
34+
$enabled = $bundleExists;
35+
} elseif (true === $enabled && !$bundleExists) {
36+
if (null === $message) {
37+
$message = $bundleName.' integration was explicitely enabled, but the bundle is not available.';
38+
}
39+
40+
throw new \LogicException($message);
41+
}
42+
43+
return $enabled;
44+
}
2745
}

src/Resources/config/content.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
</call>
2929

3030
<call method="setCkEditorConfig">
31-
<argument>%cmf_sonata_phpcr_admin_integration.ivory_ckeditor.config%</argument>
31+
<argument>%cmf_sonata_phpcr_admin_integration.content.ivory_ckeditor%</argument>
3232
</call>
3333
</service>
3434
</services>

src/Resources/config/schema/sonata-phpcr-admin-integration.xsd

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
<xsd:complexType name="config">
1010
<xsd:sequence>
1111
<xsd:element name="bundles" type="bundles" minOccurs="0" maxOccurs="1" />
12-
<xsd:element name="ivory_ckeditor" type="ivory_ckeditor" minOccurs="0" maxOccurs="1" />
1312
</xsd:sequence>
1413
</xsd:complexType>
1514

@@ -19,17 +18,4 @@
1918
</xsd:sequence>
2019
</xsd:complexType>
2120

22-
<xsd:complexType name="ivory_ckeditor">
23-
<xsd:attribute name="enabled" type="enabled" default="auto" />
24-
<xsd:attribute name="config_name" type="xsd:string"/>
25-
</xsd:complexType>
26-
27-
<xsd:simpleType name="enabled">
28-
<xsd:restriction base="xsd:string">
29-
<xsd:enumeration value="true"/>
30-
<xsd:enumeration value="false"/>
31-
<xsd:enumeration value="auto"/>
32-
</xsd:restriction>
33-
</xsd:simpleType>
34-
3521
</xsd:schema>

tests/Resources/Fixtures/config/config.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,4 @@
1818
'enabled' => true,
1919
],
2020
],
21-
'ivory_ckeditor' => [
22-
'config_name' => 'cmf_sonata_phpcr_admin_integration',
23-
],
2421
]);

tests/Resources/Fixtures/config/config.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,5 @@
77
<bundles>
88
<seo enabled="true" />
99
</bundles>
10-
<ivory_ckeditor config_name="cmf_sonata_phpcr_admin_integration" />
1110
</config>
1211
</container>

0 commit comments

Comments
 (0)