Skip to content

Commit de0142c

Browse files
committed
Merge pull request #55 from symfony-cmf/persistence
[WIP] Persistence
2 parents d58e3f8 + 839945d commit de0142c

40 files changed

+811
-445
lines changed

Admin/PageAdmin.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ protected function configureFormFields(FormMapper $formMapper)
5454
->add('label', null, array('required' => false))
5555
->add('title')
5656
->add('createDate')
57+
->add('addLocalePattern')
5758
->add('body', 'textarea')
5859
;
5960
}

CHANGELOG.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,42 @@
11
Changelog
22
=========
33

4+
* **2013-08-10**: Removed "tags" property, see: https://github.com/symfony-cmf/SimpleCmsBundle/issues/53
5+
* **2013-08-08**:
6+
* Seperate Multilang document now incorporated in single document
7+
* `multilang.locales` config removed (use cmf_core.multilang.locales)
8+
* `DataFixtures/LoadCmsData` renamed and moved to DataFixtures/Phpcr
9+
* PHPCR documents moved from Document to Doctrine/Phpcr
10+
11+
Migration instructions:
12+
13+
1. Set "addLocalePattern" flag to existing MultilangPage documents:
14+
15+
````bash
16+
./app/console doctrine:phpcr:nodes:update --query="SELECT * FROM [nt:unstructured] WHERE phpcr:class = \"Symfony\\Cmf\\Bundle\\SimpleCmsBundle\\Document\\MultilangPage\"" --apply-closure="\$node->setProperty('addLocalePattern', true);"
17+
````
18+
19+
2. Rename classes:
20+
21+
````bash
22+
export CMFNS="Symfony\\Cmf\\Bundle\\SimpleCmsBundle"
23+
./app/console doctrine:phpcr:document:migrate-class \
24+
$CMFNS"\\Document\\MultilangPage" \
25+
$CMFNS"\\Doctrine\\Phpcr\\Page"
26+
./app/console doctrine:phpcr:document:migrate-class \
27+
$CMFNS"\\Document\\MultilangRedirectRoute" \
28+
$CMFNS"\\Doctrine\\Phpcr\\MultilangRedirectRoute"
29+
./app/console doctrine:phpcr:document:migrate-class \
30+
$CMFNS"\\Document\\MultilangRoute" \
31+
$CMFNS"\\Doctrine\\Phpcr\\MultilangRoute"
32+
./app/console doctrine:phpcr:document:migrate-class \
33+
$CMFNS"\\Document\\MultilangRouteProvider" \
34+
$CMFNS"\\Doctrine\\Phpcr\\MultilangRouteProvider"
35+
./app/console doctrine:phpcr:document:migrate-class \
36+
$CMFNS"\\Document\\Page" \
37+
$CMFNS"\\Doctrine\\Phpcr\\Page"
38+
````
39+
440
* **2013-08-04**: Changed name of Sonata route names / patterns - now /admin/cmf/simplecms/foo instead of /admin/bundle/simplecms/foo
541

642
1.0.0-beta3

CmfSimpleCmsBundle.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Symfony\Component\DependencyInjection\ContainerBuilder;
66
use Symfony\Component\HttpKernel\Bundle\Bundle;
7+
use Doctrine\Bundle\PHPCRBundle\DependencyInjection\Compiler\DoctrinePhpcrMappingsPass;
78

89
class CmfSimpleCmsBundle extends Bundle
910
{
@@ -14,5 +15,17 @@ public function build(ContainerBuilder $container)
1415
if ($container->hasExtension('jms_di_extra')) {
1516
$container->getExtension('jms_di_extra')->blackListControllerFile(__DIR__ . '/Controller/PageAdminController.php');
1617
}
18+
19+
if (class_exists('Doctrine\Bundle\PHPCRBundle\DependencyInjection\Compiler\DoctrinePhpcrMappingsPass')) {
20+
$container->addCompilerPass(
21+
DoctrinePhpcrMappingsPass::createXmlMappingDriver(
22+
array(
23+
realpath(__DIR__ . '/Resources/config/doctrine-model') => 'Symfony\Cmf\Bundle\SimpleCmsBundle\Model',
24+
realpath(__DIR__ . '/Resources/config/doctrine-phpcr') => 'Symfony\Cmf\Bundle\SimpleCmsBundle\Doctrine\Phpcr',
25+
),
26+
array('cmf_simple_cms.persistence.phpcr.manager_name')
27+
)
28+
);
29+
}
1730
}
1831
}

Controller/PageAdminController.php

Lines changed: 0 additions & 9 deletions
This file was deleted.

DataFixtures/LoadCmsData.php renamed to DataFixtures/Phpcr/AbstractLoadPageData.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace Symfony\Cmf\Bundle\SimpleCmsBundle\DataFixtures;
3+
namespace Symfony\Cmf\Bundle\SimpleCmsBundle\DataFixtures\Phpcr;
44

55
use Doctrine\Common\DataFixtures\FixtureInterface;
66
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
@@ -12,11 +12,13 @@
1212

1313
use Symfony\Cmf\Component\Routing\RouteObjectInterface;
1414

15-
abstract class LoadCmsData extends ContainerAware implements FixtureInterface, OrderedFixtureInterface
15+
/**
16+
* @deprecated: To be removed in 1.1
17+
*/
18+
abstract class AbstractLoadPageData extends ContainerAware implements FixtureInterface, OrderedFixtureInterface
1619
{
1720
protected $defaultClass = array(
18-
'multilangpage' => 'Symfony\Cmf\Bundle\SimpleCmsBundle\Document\MultilangPage',
19-
'page' => 'Symfony\Cmf\Bundle\SimpleCmsBundle\Document\Page'
21+
'page' => 'Symfony\Cmf\Bundle\SimpleCmsBundle\Doctrine\Phpcr\Page'
2022
);
2123

2224
abstract protected function getData();

DependencyInjection/CmfSimpleCmsExtension.php

Lines changed: 99 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -33,87 +33,141 @@ public function load(array $configs, ContainerBuilder $container)
3333
$config = $this->processConfiguration(new Configuration(), $configs);
3434
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
3535

36-
$container->setParameter($this->getAlias() . '.basepath', $config['basepath']);
37-
$container->setParameter($this->getAlias() . '.menu_basepath', PathHelper::getParentPath($config['basepath']));
38-
$container->setParameter($this->getAlias() . '.uri_filter_regexp', $config['routing']['uri_filter_regexp']);
36+
$this->loadRouting($config['routing'], $loader, $container);
37+
38+
if (isset($config['persistence'])) {
39+
if (isset($config['persistence']['phpcr'])) {
40+
$this->loadPhpcr($config['persistence']['phpcr'], $loader, $container);
41+
$this->loadPhpcrRouting($config, $loader, $container);
42+
43+
if ($config['use_menu']) {
44+
$this->loadPhpcrMenu($config, $loader, $container);
45+
}
46+
}
47+
}
48+
}
49+
50+
protected function loadRouting($config, XmlFileLoader $loader, ContainerBuilder $container)
51+
{
52+
$container->setParameter($this->getAlias() . '.uri_filter_regexp', $config['uri_filter_regexp']);
3953

4054
$loader->load('routing.xml');
41-
$loader->load('migrator.xml');
4255

4356
$dynamic = $container->getDefinition($this->getAlias().'.dynamic_router');
4457

4558
if (!empty($config['generic_controller'])) {
4659
$definition = new DefinitionDecorator('cmf_routing.enhancer_explicit_template');
4760
$definition->replaceArgument(2, $config['generic_controller']);
48-
$container->setDefinition($this->getAlias() . '.enhancer_explicit_template', $definition);
49-
$dynamic->addMethodCall('addRouteEnhancer', array(new Reference($this->getAlias() . '.enhancer_explicit_template')));
61+
$container->setDefinition(
62+
$this->getAlias() . '.enhancer_explicit_template',
63+
$definition
64+
);
65+
$dynamic->addMethodCall('addRouteEnhancer', array(
66+
new Reference($this->getAlias() . '.enhancer_explicit_template')
67+
));
5068
}
51-
if (!empty($config['routing']['controllers_by_alias'])) {
69+
70+
if (!empty($config['controllers_by_alias'])) {
5271
$definition = new DefinitionDecorator('cmf_routing.enhancer_controllers_by_class');
5372
$definition->replaceArgument(2, $config['routing']['controllers_by_alias']);
54-
$container->setDefinition($this->getAlias() . '.enhancer_controllers_by_class', $definition);
55-
$dynamic->addMethodCall('addRouteEnhancer', array(new Reference($this->getAlias() . '.enhancer_controllers_by_alias')));
73+
$container->setDefinition(
74+
$this->getAlias() . '.enhancer_controllers_by_class',
75+
$definition
76+
);
77+
$dynamic->addMethodCall('addRouteEnhancer', array(
78+
new Reference($this->getAlias() . '.enhancer_controllers_by_alias')
79+
));
5680
}
57-
if (!empty($config['routing']['controllers_by_class'])) {
81+
82+
if (!empty($config['controllers_by_class'])) {
5883
$definition = new DefinitionDecorator('cmf_routing.enhancer_controllers_by_class');
59-
$definition->replaceArgument(2, $config['routing']['controllers_by_class']);
60-
$container->setDefinition($this->getAlias() . '.enhancer_controllers_by_class', $definition);
61-
$dynamic->addMethodCall('addRouteEnhancer', array(new Reference($this->getAlias() . '.enhancer_controllers_by_class')));
84+
$definition->replaceArgument(2, $config['controllers_by_class']);
85+
$container->setDefinition(
86+
$this->getAlias() . '.enhancer_controllers_by_class',
87+
$definition
88+
);
89+
$dynamic->addMethodCall('addRouteEnhancer', array(
90+
new Reference($this->getAlias() . '.enhancer_controllers_by_class')
91+
));
6292
}
63-
if (!empty($config['generic_controller']) && !empty($config['routing']['templates_by_class'])) {
93+
94+
if (!empty($config['generic_controller']) && !empty($config['templates_by_class'])) {
6495
$controllerForTemplates = array();
65-
foreach ($config['routing']['templates_by_class'] as $key => $value) {
96+
foreach ($config['templates_by_class'] as $key => $value) {
6697
$controllerForTemplates[$key] = $config['generic_controller'];
6798
}
6899

69100
$definition = new DefinitionDecorator('cmf_routing.enhancer_controller_for_templates_by_class');
70101
$definition->replaceArgument(2, $controllerForTemplates);
71-
$container->setDefinition($this->getAlias() . '.enhancer_controller_for_templates_by_class', $definition);
102+
103+
$container->setDefinition(
104+
$this->getAlias() . '.enhancer_controller_for_templates_by_class',
105+
$definition
106+
);
107+
72108
$definition = new DefinitionDecorator('cmf_routing.enhancer_templates_by_class');
73-
$definition->replaceArgument(2, $config['routing']['templates_by_class']);
74-
$container->setDefinition($this->getAlias() . '.enhancer_templates_by_class', $definition);
75-
$dynamic->addMethodCall('addRouteEnhancer', array(new Reference($this->getAlias() . '.enhancer_controller_for_templates_by_class')));
76-
$dynamic->addMethodCall('addRouteEnhancer', array(new Reference($this->getAlias() . '.enhancer_templates_by_class')));
109+
$definition->replaceArgument(2, $config['templates_by_class']);
110+
111+
$container->setDefinition(
112+
$this->getAlias() . '.enhancer_templates_by_class',
113+
$definition
114+
);
115+
116+
$dynamic->addMethodCall('addRouteEnhancer', array(
117+
new Reference($this->getAlias() . '.enhancer_controller_for_templates_by_class')
118+
));
119+
$dynamic->addMethodCall('addRouteEnhancer', array(
120+
new Reference($this->getAlias() . '.enhancer_templates_by_class')
121+
));
77122
}
123+
}
78124

79-
$generator = $container->getDefinition($this->getAlias().'.generator');
80-
$generator->addMethodCall('setContentRepository', array(new Reference($config['routing']['content_repository_id'])));
81-
82-
$container->setParameter($this->getAlias() . '.manager_name', $config['manager_name']);
83-
$routeProvider = $container->getDefinition($this->getAlias() . '.route_provider');
84-
$routeProvider->replaceArgument(0, new Reference($config['manager_registry']));
85-
$multilangRouteProvider = $container->getDefinition($this->getAlias() . '.multilang_route_provider');
86-
$multilangRouteProvider->replaceArgument(0, new Reference($config['manager_registry']));
87-
88-
if (!empty($config['multilang'])) {
89-
$container->setParameter($this->getAlias() . '.locales', $config['multilang']['locales']);
90-
$container->setAlias('cmf_simple_cms.route_provider', 'cmf_simple_cms.multilang_route_provider');
91-
if ('Symfony\Cmf\Bundle\SimpleCmsBundle\Document\Page' === $config['document_class']) {
92-
$config['document_class'] = 'Symfony\Cmf\Bundle\SimpleCmsBundle\Document\MultilangPage';
93-
}
94-
}
125+
protected function loadPhpcr($config, XmlFileLoader $loader, ContainerBuilder $container)
126+
{
127+
// migrator is only for PHPCR
128+
$loader->load('migrator.xml');
95129

96-
$container->setParameter($this->getAlias() . '.document_class', $config['document_class']);
130+
// save some characters
131+
$prefix = $this->getAlias() . '.persistence.phpcr';
97132

98-
if ($config['use_menu']) {
99-
$this->loadMenu($config, $loader, $container);
100-
}
133+
$container->setParameter($prefix . '.basepath', $config['basepath']);
134+
135+
$container->setParameter($prefix . '.menu_basepath', PathHelper::getParentPath($config['basepath']));
101136

102137
if ($config['use_sonata_admin']) {
103138
$this->loadSonataAdmin($config, $loader, $container);
104139
} elseif (isset($config['sonata_admin'])) {
105140
throw new InvalidConfigurationException('Do not define sonata_admin options when use_sonata_admin is set to false');
106141
}
142+
143+
$container->setParameter($prefix . '.manager_name', $config['manager_name']);
144+
145+
$container->setParameter($prefix . '.document_class', $config['document_class']);
146+
}
147+
148+
protected function loadPhpcrRouting($config, XmlFileLoader $loader, ContainerBuilder $container)
149+
{
150+
$loader->load('routing-phpcr.xml');
151+
$prefix = $this->getAlias() . '.persistence.phpcr';
152+
153+
$routeProvider = $container->getDefinition($prefix.'.route_provider');
154+
$routeProvider->replaceArgument(0, new Reference($config['persistence']['phpcr']['manager_registry']));
155+
$container->setAlias($this->getAlias() . '.route_provider', $prefix.'.route_provider');
156+
157+
$generator = $container->getDefinition($this->getAlias().'.generator');
158+
$generator->addMethodCall('setContentRepository', array(
159+
new Reference($config['routing']['content_repository_id'])
160+
));
107161
}
108162

109-
protected function loadMenu($config, XmlFileLoader $loader, ContainerBuilder $container)
163+
protected function loadPhpcrMenu($config, XmlFileLoader $loader, ContainerBuilder $container)
110164
{
111165
$bundles = $container->getParameter('kernel.bundles');
112166
if ('auto' === $config['use_menu'] && !isset($bundles['CmfMenuBundle'])) {
113167
return;
114168
}
115169

116-
$loader->load('menu.xml');
170+
$loader->load('menu-phpcr.xml');
117171
}
118172

119173
protected function loadSonataAdmin($config, XmlFileLoader $loader, ContainerBuilder $container)
@@ -123,10 +177,10 @@ protected function loadSonataAdmin($config, XmlFileLoader $loader, ContainerBuil
123177
return;
124178
}
125179

126-
$container->setParameter($this->getAlias() . '.admin.sort',
180+
$container->setParameter($this->getAlias() . '.persistence.phpcr.admin.sort',
127181
isset($config['sonata_admin'])
128-
? $config['sonata_admin']['sort']
129-
: false
182+
? $config['sonata_admin']['sort']
183+
: false
130184
);
131185

132186
$loader->load('admin.xml');

DependencyInjection/Configuration.php

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,33 +13,47 @@ public function getConfigTreeBuilder()
1313

1414
$treeBuilder->root('cmf_simple_cms')
1515
->children()
16-
->enumNode('use_sonata_admin')
17-
->values(array(true, false, 'auto'))
18-
->defaultValue('auto')
19-
->end()
20-
->arrayNode('sonata_admin')
16+
17+
->arrayNode('persistence')
2118
->children()
22-
->enumNode('sort')
23-
->values(array(false, 'asc', 'desc'))
24-
->defaultValue(false)
19+
->arrayNode('phpcr')
20+
->children()
21+
->scalarNode('enabled')->defaultNull()->end()
22+
->scalarNode('basepath')->defaultValue('/cms/simple')->end()
23+
->scalarNode('manager_registry')->defaultValue('doctrine_phpcr')->end()
24+
->scalarNode('manager_name')->defaultNull()->end()
25+
->scalarNode('document_class')->defaultValue('Symfony\Cmf\Bundle\SimpleCmsBundle\Doctrine\Phpcr\Page')->end()
26+
27+
->enumNode('use_sonata_admin')
28+
->values(array(true, false, 'auto'))
29+
->defaultValue('auto')
30+
->end()
31+
->arrayNode('sonata_admin')
32+
->children()
33+
->enumNode('sort')
34+
->values(array(false, 'asc', 'desc'))
35+
->defaultValue(false)
36+
->end()
37+
->end()
38+
->end()
39+
->end()
2540
->end()
2641
->end()
2742
->end()
43+
2844
->enumNode('use_menu')
2945
->values(array(true, false, 'auto'))
3046
->defaultValue('auto')
3147
->end()
32-
->scalarNode('document_class')->defaultValue('Symfony\Cmf\Bundle\SimpleCmsBundle\Document\Page')->end()
33-
->scalarNode('generic_controller')->defaultValue('cmf_content.controller:indexAction')->end()
34-
->scalarNode('basepath')->defaultValue('/cms/simple')->end()
35-
->scalarNode('manager_registry')->defaultValue('doctrine_phpcr')->end()
36-
->scalarNode('manager_name')->defaultValue('default')->end()
48+
49+
3750
->arrayNode('routing')
3851
->fixXmlConfig('controller_by_alias', 'controllers_by_alias')
3952
->fixXmlConfig('controller_by_class', 'controllers_by_class')
4053
->fixXmlConfig('template_by_class', 'templates_by_class')
4154
->addDefaultsIfNotSet()
4255
->children()
56+
->scalarNode('generic_controller')->defaultValue('cmf_content.controller:indexAction')->end()
4357
->scalarNode('content_repository_id')->defaultValue('cmf_routing.content_repository')->end()
4458
->scalarNode('uri_filter_regexp')->defaultValue('')->end()
4559
->arrayNode('controllers_by_alias')
@@ -56,14 +70,6 @@ public function getConfigTreeBuilder()
5670
->end()
5771
->end()
5872
->end()
59-
->arrayNode('multilang')
60-
->fixXmlConfig('locale')
61-
->children()
62-
->arrayNode('locales')
63-
->prototype('scalar')->end()
64-
->end()
65-
->end()
66-
->end()
6773
->end()
6874
;
6975

Document/MultilangRoute.php renamed to Doctrine/Phpcr/MultilangRoute.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@
77
use Doctrine\ODM\PHPCR\Mapping\Annotations as PHPCRODM;
88

99
/**
10-
* @PHPCRODM\Document
11-
*
12-
* provides multi language support when using MultilangRouteProvider
10+
* Provides multi language support when using MultilangRouteProvider
1311
*/
1412
class MultilangRoute extends Route
1513
{

0 commit comments

Comments
 (0)