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

Commit 3fc8bfe

Browse files
committed
Merge pull request #220 from WouterJ/admin_ux
Improve admin UX
2 parents 2aecf71 + 39b28ad commit 3fc8bfe

16 files changed

+155
-82
lines changed

Admin/AbstractMenuNodeAdmin.php

Lines changed: 2 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,9 @@ abstract class AbstractMenuNodeAdmin extends Admin
4040
protected function configureListFields(ListMapper $listMapper)
4141
{
4242
$listMapper
43-
->addIdentifier('id', 'text')
44-
->add('name', 'text')
43+
->addIdentifier('name', 'text')
4544
->add('label', 'text')
46-
->add('uri', 'text')
47-
->add('route', 'text')
48-
;
45+
;
4946
}
5047

5148
/**
@@ -59,38 +56,6 @@ protected function configureFormFields(FormMapper $formMapper)
5956
->add('label', 'text')
6057
->end()
6158
;
62-
63-
if (null === $this->getParentFieldDescription()) {
64-
65-
// Add the choice for the node links "target"
66-
$formMapper
67-
->with('form.group_general')
68-
->add('linkType', 'choice_field_mask', array(
69-
'choices' => array(
70-
'route' => 'route',
71-
'uri' => 'uri',
72-
'content' => 'content',
73-
),
74-
'map' => array(
75-
'route' => array('route'),
76-
'uri' => array('uri'),
77-
'content' => array('content', 'doctrine_phpcr_odm_tree'),
78-
),
79-
'empty_value' => 'auto',
80-
'required' => false
81-
))
82-
->add('route', 'text', array('required' => false))
83-
->add('uri', 'text', array('required' => false))
84-
->add('content', 'doctrine_phpcr_odm_tree',
85-
array(
86-
'root_node' => $this->contentRoot,
87-
'choice_list' => array(),
88-
'required' => false
89-
)
90-
)
91-
->end()
92-
;
93-
}
9459
}
9560

9661
protected function configureShowFields(ShowMapper $showMapper)

Admin/MenuAdmin.php

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,19 @@ protected function configureFormFields(FormMapper $formMapper)
2424
parent::configureFormFields($formMapper);
2525

2626
$subject = $this->getSubject();
27-
$isNew = $subject->getId() ? false : true;
27+
$isNew = $subject->getId() === null;
2828

29-
if (false === $isNew) {
29+
if (!$isNew) {
3030
$formMapper
3131
->with('form.group_items', array())
32-
->add('children', 'doctrine_phpcr_odm_tree_manager', array(
33-
'root' => $this->menuRoot,
34-
'edit_in_overlay' => false,
35-
'create_in_overlay' => false,
36-
'delete_in_overlay' => false
37-
), array(
38-
'help' => 'help.items_help'
39-
))
32+
->add('children', 'doctrine_phpcr_odm_tree_manager', array(
33+
'root' => $this->menuRoot,
34+
'edit_in_overlay' => false,
35+
'create_in_overlay' => false,
36+
'delete_in_overlay' => false,
37+
), array(
38+
'help' => 'help.items_help',
39+
))
4040
->end()
4141
;
4242
}

Admin/MenuNodeAdmin.php

Lines changed: 115 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,31 +11,141 @@
1111

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

14+
use Symfony\Component\Form\FormBuilder;
15+
use Symfony\Component\Form\FormEvent;
16+
use Symfony\Component\Form\FormEvents;
17+
use Sonata\AdminBundle\Datagrid\ListMapper;
1418
use Sonata\AdminBundle\Form\FormMapper;
1519
use Sonata\DoctrinePHPCRAdminBundle\Admin\Admin;
1620
use Symfony\Cmf\Bundle\MenuBundle\Model\Menu;
21+
use Symfony\Cmf\Bundle\MenuBundle\Model\MenuNode;
1722
use Knp\Menu\ItemInterface as MenuItemInterface;
1823
use Doctrine\Common\Util\ClassUtils;
1924

2025
class MenuNodeAdmin extends AbstractMenuNodeAdmin
2126
{
2227
protected $recursiveBreadcrumbs = true;
2328

29+
protected function configureListFields(ListMapper $listMapper)
30+
{
31+
parent::configureListFields($listMapper);
32+
33+
$listMapper
34+
->add('uri', 'text')
35+
->add('route', 'text')
36+
;
37+
}
38+
2439
/**
2540
* {@inheritDoc}
2641
*/
2742
protected function configureFormFields(FormMapper $formMapper)
2843
{
2944
$formMapper
3045
->with('form.group_general')
31-
->add(
32-
'parent',
33-
'doctrine_phpcr_odm_tree',
34-
array('root_node' => $this->menuRoot, 'choice_list' => array(), 'select_root_node' => true)
35-
)
46+
->add('parent', 'doctrine_phpcr_odm_tree', array(
47+
'root_node' => $this->menuRoot,
48+
'choice_list' => array(),
49+
'select_root_node' => true
50+
))
3651
->end()
3752
;
53+
3854
parent::configureFormFields($formMapper);
55+
56+
if (null === $this->getParentFieldDescription()) {
57+
// Add the choice for the node links "target"
58+
$formMapper
59+
->with('form.group_general')
60+
->add('linkType', 'choice_field_mask', array(
61+
'map' => array(
62+
'route' => array('route'),
63+
'uri' => array('uri'),
64+
'content' => array('content', 'doctrine_phpcr_odm_tree'),
65+
),
66+
'empty_value' => 'auto',
67+
'required' => false
68+
))
69+
->add('link', 'text', array('required' => false, 'mapped' => false))
70+
->add('content', 'doctrine_phpcr_odm_tree',
71+
array(
72+
'root_node' => $this->contentRoot,
73+
'choice_list' => array(),
74+
'required' => false
75+
)
76+
)
77+
->end()
78+
;
79+
}
80+
}
81+
82+
/**
83+
* {@inheritdoc}
84+
*/
85+
public function defineFormBuilder(FormBuilder $formBuilder)
86+
{
87+
parent::defineFormBuilder($formBuilder);
88+
89+
$formBuilder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) {
90+
if (!$event->getForm()->has('link')) {
91+
return;
92+
}
93+
94+
$link = $event->getForm()->get('link');
95+
$node = $event->getData();
96+
97+
if (!$node instanceof MenuNode) {
98+
return;
99+
}
100+
101+
switch ($node->getLinkType()) {
102+
case 'route':
103+
$link->setData($node->getRoute());
104+
break;
105+
106+
case 'uri':
107+
$link->setData($node->getUri());
108+
break;
109+
110+
case null:
111+
$linkType = $event->getForm()->get('linkType');
112+
113+
if ($data = $node->getUri()) {
114+
$linkType->setData('uri');
115+
} else {
116+
$data = $node->getRoute();
117+
$linkType->setData('route');
118+
}
119+
120+
$link->setData($data);
121+
}
122+
});
123+
124+
$formBuilder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
125+
if (!$event->getForm()->has('link')) {
126+
return;
127+
}
128+
129+
$form = $event->getForm();
130+
$node = $event->getData();
131+
132+
if (!$node instanceof MenuNode) {
133+
return;
134+
}
135+
136+
$linkType = $form->get('linkType')->getData();
137+
$link = $form->get('link')->getData();
138+
139+
switch ($linkType) {
140+
case 'route':
141+
$node->setRoute($link);
142+
break;
143+
144+
case 'uri':
145+
$node->setUri($link);
146+
break;
147+
}
148+
});
39149
}
40150

41151
/**

Resources/translations/CmfMenuBundle.cs.xliff

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@
8080
</trans-unit>
8181
<trans-unit id="form.label_parent">
8282
<source>form.label_parent</source>
83-
<target>Rodič</target>
83+
<target>Menu</target>
8484
</trans-unit>
8585
<trans-unit id="form.label_name">
8686
<source>form.label_name</source>

Resources/translations/CmfMenuBundle.de.xliff

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@
8080
</trans-unit>
8181
<trans-unit id="form.label_parent">
8282
<source>form.label_parent</source>
83-
<target>Übergeordnet</target>
83+
<target>Menüs</target>
8484
</trans-unit>
8585
<trans-unit id="form.label_name">
8686
<source>form.label_name</source>

Resources/translations/CmfMenuBundle.en.xliff

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@
8080
</trans-unit>
8181
<trans-unit id="form.label_parent">
8282
<source>form.label_parent</source>
83-
<target>Parent</target>
83+
<target>Menu</target>
8484
</trans-unit>
8585
<trans-unit id="form.label_name">
8686
<source>form.label_name</source>

Resources/translations/CmfMenuBundle.fr.xliff

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@
8080
</trans-unit>
8181
<trans-unit id="form.label_parent">
8282
<source>form.label_parent</source>
83-
<target>Parent</target>
83+
<target>Menus</target>
8484
</trans-unit>
8585
<trans-unit id="form.label_name">
8686
<source>form.label_name</source>

Resources/translations/CmfMenuBundle.sk.xliff

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@
8080
</trans-unit>
8181
<trans-unit id="form.label_parent">
8282
<source>form.label_parent</source>
83-
<target>Rodič</target>
83+
<target>Menu</target>
8484
</trans-unit>
8585
<trans-unit id="form.label_name">
8686
<source>form.label_name</source>

Resources/translations/CmfMenuBundle.sl.xliff

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@
8080
</trans-unit>
8181
<trans-unit id="form.label_parent">
8282
<source>form.label_parent</source>
83-
<target>Vrhnji</target>
83+
<target>Meniji</target>
8484
</trans-unit>
8585
<trans-unit id="form.label_name">
8686
<source>form.label_name</source>

Tests/WebTest/Admin/Extension/MenuNodeReferrersExtensionTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public function testEdit()
2727
{
2828
$crawler = $this->client->request('GET', '/admin/cmf/menu-test/content/test/content-1/edit');
2929
$res = $this->client->getResponse();
30-
$this->assertEquals(200, $res->getStatusCode());
30+
$this->assertResponseSuccess($res);
3131

3232
$button = $crawler->selectButton('Update');
3333
$form = $button->form();

0 commit comments

Comments
 (0)