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

Commit 7f36a0f

Browse files
committed
Made uri config easier
1 parent 910fda7 commit 7f36a0f

File tree

1 file changed

+66
-2
lines changed

1 file changed

+66
-2
lines changed

Admin/MenuNodeAdmin.php

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,14 @@
1111

1212
namespace Symfony\Cmf\Bundle\MenuBundle\Admin;
1313

14+
use Symfony\Component\Form\FormBuilderInterface;
15+
use Symfony\Component\Form\FormEvent;
16+
use Symfony\Component\Form\FormEvents;
1417
use Sonata\AdminBundle\Datagrid\ListMapper;
1518
use Sonata\AdminBundle\Form\FormMapper;
1619
use Sonata\DoctrinePHPCRAdminBundle\Admin\Admin;
1720
use Symfony\Cmf\Bundle\MenuBundle\Model\Menu;
21+
use Symfony\Cmf\Bundle\MenuBundle\Model\MenuNode;
1822
use Knp\Menu\ItemInterface as MenuItemInterface;
1923
use Doctrine\Common\Util\ClassUtils;
2024

@@ -63,8 +67,7 @@ protected function configureFormFields(FormMapper $formMapper)
6367
'empty_value' => 'auto',
6468
'required' => false
6569
))
66-
->add('route', 'text', array('required' => false))
67-
->add('uri', 'text', array('required' => false))
70+
->add('link', 'text', array('required' => false, 'mapped' => false))
6871
->add('content', 'doctrine_phpcr_odm_tree',
6972
array(
7073
'root_node' => $this->contentRoot,
@@ -77,6 +80,67 @@ protected function configureFormFields(FormMapper $formMapper)
7780
}
7881
}
7982

83+
/**
84+
* {@inheritdoc}
85+
*/
86+
public function defineFormBuilder(FormBuilderInterface $formBuilder)
87+
{
88+
parent::defineFormBuilder($formBuilder);
89+
90+
$formBuilder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) {
91+
$link = $event->getForm()->get('link');
92+
$node = $event->getData();
93+
94+
if (!$node instanceof MenuNode) {
95+
return;
96+
}
97+
98+
switch ($node->getLinkType()) {
99+
case 'route':
100+
$link->setData($node->getRoute());
101+
break;
102+
103+
case 'uri':
104+
$link->setData($node->getUri());
105+
break;
106+
107+
case null:
108+
$linkType = $event->getForm()->get('linkType');
109+
110+
if ($data = $node->getUri()) {
111+
$linkType->setData('uri');
112+
} else {
113+
$data = $node->getRoute();
114+
$linkType->setData('route');
115+
}
116+
117+
$link->setData($data);
118+
}
119+
});
120+
121+
$formBuilder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
122+
$form = $event->getForm();
123+
$node = $event->getData();
124+
125+
if (!$node instanceof MenuNode) {
126+
return;
127+
}
128+
129+
$linkType = $form->get('linkType')->getData();
130+
$link = $form->get('link')->getData();
131+
132+
switch ($linkType) {
133+
case 'route':
134+
$node->setRoute($link);
135+
break;
136+
137+
case 'uri':
138+
$node->setUri($link);
139+
break;
140+
}
141+
});
142+
}
143+
80144
/**
81145
* {@inheritDoc}
82146
*/

0 commit comments

Comments
 (0)