11
11
12
12
namespace Symfony \Cmf \Bundle \MenuBundle \Admin ;
13
13
14
+ use Symfony \Component \Form \FormBuilderInterface ;
15
+ use Symfony \Component \Form \FormEvent ;
16
+ use Symfony \Component \Form \FormEvents ;
14
17
use Sonata \AdminBundle \Datagrid \ListMapper ;
15
18
use Sonata \AdminBundle \Form \FormMapper ;
16
19
use Sonata \DoctrinePHPCRAdminBundle \Admin \Admin ;
17
20
use Symfony \Cmf \Bundle \MenuBundle \Model \Menu ;
21
+ use Symfony \Cmf \Bundle \MenuBundle \Model \MenuNode ;
18
22
use Knp \Menu \ItemInterface as MenuItemInterface ;
19
23
use Doctrine \Common \Util \ClassUtils ;
20
24
@@ -63,8 +67,7 @@ protected function configureFormFields(FormMapper $formMapper)
63
67
'empty_value ' => 'auto ' ,
64
68
'required ' => false
65
69
))
66
- ->add ('route ' , 'text ' , array ('required ' => false ))
67
- ->add ('uri ' , 'text ' , array ('required ' => false ))
70
+ ->add ('link ' , 'text ' , array ('required ' => false , 'mapped ' => false ))
68
71
->add ('content ' , 'doctrine_phpcr_odm_tree ' ,
69
72
array (
70
73
'root_node ' => $ this ->contentRoot ,
@@ -77,6 +80,67 @@ protected function configureFormFields(FormMapper $formMapper)
77
80
}
78
81
}
79
82
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
+
80
144
/**
81
145
* {@inheritDoc}
82
146
*/
0 commit comments