Skip to content

Commit 2e48f64

Browse files
committed
one step further to letting EAB handle action routes
1 parent d92d96b commit 2e48f64

16 files changed

Lines changed: 94 additions & 61 deletions

File tree

bundles/org.zikula.modulestudio.generator/src/org/zikula/modulestudio/generator/cartridges/symfony/controller/ControllerLayer.xtend

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import org.zikula.modulestudio.generator.extensions.FormattingExtensions
2727
import org.zikula.modulestudio.generator.extensions.ModelBehaviourExtensions
2828
import org.zikula.modulestudio.generator.extensions.ModelExtensions
2929
import org.zikula.modulestudio.generator.extensions.NamingExtensions
30+
import org.zikula.modulestudio.generator.extensions.UrlExtensions
3031
import org.zikula.modulestudio.generator.extensions.Utils
3132
import org.zikula.modulestudio.generator.extensions.WorkflowExtensions
3233

@@ -37,6 +38,7 @@ class ControllerLayer {
3738
extension ModelBehaviourExtensions = new ModelBehaviourExtensions
3839
extension ModelExtensions = new ModelExtensions
3940
extension NamingExtensions = new NamingExtensions
41+
extension UrlExtensions = new UrlExtensions
4042
extension Utils = new Utils
4143
extension WorkflowExtensions = new WorkflowExtensions
4244

@@ -259,9 +261,9 @@ class ControllerLayer {
259261
def private collectImplImports(Entity it) {
260262
val imports = new ImportList
261263
imports.addAll(#[
264+
'EasyCorp\\Bundle\\EasyAdminBundle\\Attribute\\AdminRoute',
262265
'Symfony\\Component\\HttpFoundation\\Request',
263266
'Symfony\\Component\\HttpFoundation\\Response',
264-
'Symfony\\Component\\Routing\\Annotation\\Route',
265267
'Symfony\\Component\\Routing\\Requirement\\Requirement',
266268
app.appNamespace + '\\Controller\\Base\\Abstract' + name.formatForCodeCapital + 'Controller'
267269
])
@@ -291,7 +293,7 @@ class ControllerLayer {
291293
/**
292294
* «name.formatForDisplayCapital» controller class providing navigation and interaction functionality.
293295
*/
294-
#[Route('/«application.name.formatForDB»')]
296+
#[AdminRoute(path: '/«application.name.formatForDB»/«nameMultiple.formatForDB»', name: '«application.routePrefix»_«nameMultiple.formatForDB»')]
295297
class «name.formatForCodeCapital»Controller extends Abstract«name.formatForCodeCapital»Controller
296298
{
297299
«/* put display method at the end to avoid conflict between delete/edit and display for slugs */»

bundles/org.zikula.modulestudio.generator/src/org/zikula/modulestudio/generator/cartridges/symfony/controller/FormHandler.xtend

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import org.zikula.modulestudio.generator.extensions.FormattingExtensions
2121
import org.zikula.modulestudio.generator.extensions.ModelBehaviourExtensions
2222
import org.zikula.modulestudio.generator.extensions.ModelExtensions
2323
import org.zikula.modulestudio.generator.extensions.NamingExtensions
24+
import org.zikula.modulestudio.generator.extensions.UrlExtensions
2425
import org.zikula.modulestudio.generator.extensions.Utils
2526
import org.zikula.modulestudio.generator.extensions.WorkflowExtensions
2627

@@ -31,6 +32,7 @@ class FormHandler {
3132
extension ModelExtensions = new ModelExtensions
3233
extension ModelBehaviourExtensions = new ModelBehaviourExtensions
3334
extension NamingExtensions = new NamingExtensions
35+
extension UrlExtensions = new UrlExtensions
3436
extension Utils = new Utils
3537
extension WorkflowExtensions = new WorkflowExtensions
3638

@@ -343,7 +345,7 @@ class FormHandler {
343345
«IF !entities.filter[hasDetailAction && hasEditAction && hasSluggableFields].empty»
344346
if (null !== $session && in_array($this->objectType, ['«entities.filter[hasDetailAction && hasEditAction && hasSluggableFields].map[name.formatForCode].join('\', \'''], true)) {
345347
// map display return urls to redirect codes because slugs may change
346-
$routePrefix = '«app.appName.formatForDB»_' . mb_strtolower($this->objectType) . '_';
348+
$routePrefix = '«app.routePrefix»_' . mb_strtolower($this->objectType) . '_';
347349
$userDetailUrl = $this->router->generate(
348350
$routePrefix . 'detail',
349351
$entity->createUrlArgs(),

bundles/org.zikula.modulestudio.generator/src/org/zikula/modulestudio/generator/cartridges/symfony/controller/action/AjaxController.xtend

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import org.zikula.modulestudio.generator.extensions.ControllerExtensions
77
import org.zikula.modulestudio.generator.extensions.FormattingExtensions
88
import org.zikula.modulestudio.generator.extensions.ModelBehaviourExtensions
99
import org.zikula.modulestudio.generator.extensions.ModelExtensions
10+
import org.zikula.modulestudio.generator.extensions.UrlExtensions
1011
import org.zikula.modulestudio.generator.extensions.Utils
1112

1213
class AjaxController {
@@ -15,6 +16,7 @@ class AjaxController {
1516
extension FormattingExtensions = new FormattingExtensions
1617
extension ModelBehaviourExtensions = new ModelBehaviourExtensions
1718
extension ModelExtensions = new ModelExtensions
19+
extension UrlExtensions = new UrlExtensions
1820
extension Utils = new Utils
1921

2022
def generate(Application it, IMostFileSystemAccess fsa) {
@@ -430,7 +432,7 @@ class AjaxController {
430432
if (!$success) {
431433
$returnValue['result'] = 'failure';
432434
} elseif (in_array($objectType, ['«entitiesWithEditableTree.map[name.formatForCode].join('\', \'''], true)) {
433-
$routeName = '«appName.formatForDB»_' . mb_strtolower($objectType) . '_edit';
435+
$routeName = '«routePrefix»_' . mb_strtolower($objectType) . '_edit';
434436
«IF !entities.filter[tree && hasEditAction && hasSluggableFields].empty»
435437
$needsArg = in_array($objectType, ['«entitiesWithEditableTree.filter[hasSluggableFields].map[name.formatForCode].join('\', \'''], true);
436438
$urlArgs = $needsArg ? $childEntity->createUrlArgs(true) : $childEntity->createUrlArgs();

bundles/org.zikula.modulestudio.generator/src/org/zikula/modulestudio/generator/cartridges/symfony/controller/actionhandler/Redirect.xtend

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import org.zikula.modulestudio.generator.extensions.FormattingExtensions
77
import org.zikula.modulestudio.generator.extensions.ModelBehaviourExtensions
88
import org.zikula.modulestudio.generator.extensions.ModelJoinExtensions
99
import org.zikula.modulestudio.generator.extensions.NamingExtensions
10+
import org.zikula.modulestudio.generator.extensions.UrlExtensions
1011
import org.zikula.modulestudio.generator.extensions.Utils
1112

1213
/**
@@ -19,6 +20,7 @@ class Redirect {
1920
extension ModelBehaviourExtensions = new ModelBehaviourExtensions
2021
extension ModelJoinExtensions = new ModelJoinExtensions
2122
extension NamingExtensions = new NamingExtensions
23+
extension UrlExtensions = new UrlExtensions
2224
extension Utils = new Utils
2325

2426
def getRedirectCodes(Application it) '''
@@ -106,7 +108,7 @@ class Redirect {
106108
}
107109

108110
«IF hasIndexAction || hasDetailAction && tree»
109-
$routePrefix = '«app.appName.formatForDB»_' . $this->objectTypeLower . '_';
111+
$routePrefix = '«app.routePrefix»_' . $this->objectTypeLower . '_';
110112

111113
«ENDIF»
112114
«IF hasIndexAction»
@@ -143,7 +145,7 @@ class Redirect {
143145
];
144146

145147
// inline usage, return to special function for closing the modal window instance
146-
return $this->router->generate('«app.appName.formatForDB»_' . $this->objectTypeLower . '_handleinlineredirect', $urlArgs);
148+
return $this->router->generate('«app.routePrefix»_' . $this->objectTypeLower . '_handleinlineredirect', $urlArgs);
147149
}
148150

149151
«ENDIF»
@@ -153,9 +155,10 @@ class Redirect {
153155

154156
$request = $this->requestStack->getCurrentRequest();
155157
if ($request->hasSession() && ($session = $request->getSession())) {
156-
if ($session->has('«app.appName.formatForDB»' . $this->objectTypeCapital . 'Referer')) {
157-
$this->returnTo = $session->get('«app.appName.formatForDB»' . $this->objectTypeCapital . 'Referer');
158-
$session->remove('«app.appName.formatForDB»' . $this->objectTypeCapital . 'Referer');
158+
$refererKey = '«app.appName.formatForDB»' . $this->objectTypeCapital . 'Referer';
159+
if ($session->has($refererKey)) {
160+
$this->returnTo = $session->get($refererKey);
161+
$session->remove($refererKey);
159162
}
160163
}
161164

@@ -172,7 +175,7 @@ class Redirect {
172175
return $this->getDefaultReturnUrl($args);
173176
}
174177

175-
$routePrefix = '«app.appName.formatForDB»_' . $this->objectTypeLower . '_';
178+
$routePrefix = '«app.routePrefix»_' . $this->objectTypeLower . '_';
176179

177180
// parse given redirect code and return corresponding url
178181
switch ($this->returnTo) {
@@ -204,18 +207,18 @@ class Redirect {
204207
«IF sourceEntity.hasIndexAction»
205208
case 'userIndex«sourceEntity.nameMultiple.formatForCodeCapital»':
206209
case 'adminIndex«sourceEntity.nameMultiple.formatForCodeCapital»':
207-
return $this->router->generate('«app.appName.formatForDB»_«sourceEntity.name.formatForDB»_index');
210+
return $this->router->generate('«sourceEntity.route('index'');
208211
«IF sourceEntity.standardFields»
209212
case 'userOwnIndex«sourceEntity.nameMultiple.formatForCodeCapital»':
210213
case 'adminOwnIndex«sourceEntity.nameMultiple.formatForCodeCapital»':
211-
return $this->router->generate('«app.appName.formatForDB»_«sourceEntity.name.formatForDB»_index', ['own' => 1]);
214+
return $this->router->generate('«sourceEntity.route('index'', ['own' => 1]);
212215
«ENDIF»
213216
«ENDIF»
214217
«IF sourceEntity.hasDetailAction»
215218
case 'userDetail«sourceEntity.name.formatForCodeCapital»':
216219
case 'adminDetail«sourceEntity.name.formatForCodeCapital»':
217220
if (!empty($this->relationPresets['«incomingRelation.getRelationAliasName(false)»']) || (method_exists($this->entityRef, 'get«incomingRelation.getRelationAliasName(false).toFirstUpper»') && null !== $this->entityRef->get«incomingRelation.getRelationAliasName(false).toFirstUpper»())) {
218-
$routeName = '«app.appName.formatForDB»_«sourceEntity.name.formatForDB»_detail';
221+
$routeName = '«sourceEntity.route('detail'';
219222
$«incomingRelation.getRelationAliasName(falseId = !empty($this->relationPresets['«incomingRelation.getRelationAliasName(false)»']) ? $this->relationPresets['«incomingRelation.getRelationAliasName(false)»'] : $this->entityRef->get«incomingRelation.getRelationAliasName(false).toFirstUpper»();
220223

221224
return $this->router->generate($routeName, ['id' => $«incomingRelation.getRelationAliasName(falseId]);

bundles/org.zikula.modulestudio.generator/src/org/zikula/modulestudio/generator/cartridges/symfony/controller/config/ConfigureFilters.xtend

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
package org.zikula.modulestudio.generator.cartridges.symfony.controller.config
22

33
import de.guite.modulestudio.metamodel.ArrayField
4+
import de.guite.modulestudio.metamodel.BooleanField
45
import de.guite.modulestudio.metamodel.DatetimeField
56
import de.guite.modulestudio.metamodel.Entity
67
import de.guite.modulestudio.metamodel.Field
78
import de.guite.modulestudio.metamodel.ListField
9+
import de.guite.modulestudio.metamodel.NumberField
810
import de.guite.modulestudio.metamodel.Relationship
911
import de.guite.modulestudio.metamodel.StringField
1012
import de.guite.modulestudio.metamodel.StringRole
13+
import de.guite.modulestudio.metamodel.TextField
14+
import de.guite.modulestudio.metamodel.UploadField
15+
import de.guite.modulestudio.metamodel.UserField
1116
import org.zikula.modulestudio.generator.cartridges.symfony.controller.ControllerMethodInterface
1217
import org.zikula.modulestudio.generator.extensions.FormattingExtensions
1318
import org.zikula.modulestudio.generator.extensions.ModelExtensions
1419
import org.zikula.modulestudio.generator.extensions.ModelJoinExtensions
1520
import org.zikula.modulestudio.generator.extensions.NamingExtensions
1621
import org.zikula.modulestudio.generator.extensions.WorkflowExtensions
17-
import de.guite.modulestudio.metamodel.BooleanField
18-
import de.guite.modulestudio.metamodel.NumberField
19-
import de.guite.modulestudio.metamodel.UserField
20-
import de.guite.modulestudio.metamodel.TextField
21-
import de.guite.modulestudio.metamodel.UploadField
2222

2323
class ConfigureFilters implements ControllerMethodInterface {
2424

@@ -48,8 +48,7 @@ class ConfigureFilters implements ControllerMethodInterface {
4848
imports.add(nsEabFilter + 'ArrayFilter')
4949
}*/
5050
if (
51-
!formFields.filter(StringField).filter[f|f.role === StringRole.LOCALE].empty
52-
|| !hasVisibleWorkflow && hasListFieldsEntity
51+
!hasVisibleWorkflow && hasListFieldsEntity
5352
|| hasVisibleWorkflow && 1 < getListFieldsEntity.length
5453
) {
5554
imports.add(nsEabFilter + 'ChoiceFilter')
@@ -146,13 +145,7 @@ class ConfigureFilters implements ControllerMethodInterface {
146145
'''
147146
148147
def private dispatch filter(StringField it) '''
149-
«IF role === StringRole.LOCALE»
150-
->add(ChoiceFilter::new('«name.formatForCode»', «label»)«options»)
151-
«ELSEIF hasSelectorRole»
152-
->add(TextFilter::new('«name.formatForCode»', «label»)«options»)
153-
«ELSE»
154-
->add(TextFilter::new('«name.formatForCode»', «label»)«options»)
155-
«ENDIF»
148+
->add(TextFilter::new('«name.formatForCode»', «label»)«options»)
156149
'''
157150
def private dispatch options(StringField it) {
158151
if (role === StringRole.COLOUR) '''->setFormTypeOptions(['value_type' => ColorType::class])''' else
@@ -168,9 +161,6 @@ class ConfigureFilters implements ControllerMethodInterface {
168161
if (role === StringRole.WEEK) '''->setFormTypeOptions(['value_type' => WeekType::class])''' else
169162
''
170163
}
171-
def private hasSelectorRole(StringField it) {
172-
#[StringRole.COLOUR, StringRole.COUNTRY, StringRole.CURRENCY, StringRole.LANGUAGE, StringRole.LOCALE, StringRole.TIME_ZONE].contains(role)
173-
}
174164
175165
def private dispatch filter(TextField it) '''
176166
->add(TextFilter::new('«name.formatForCode»', «label»)«options»)

bundles/org.zikula.modulestudio.generator/src/org/zikula/modulestudio/generator/cartridges/symfony/controller/helper/NotificationHelper.xtend

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@ import org.zikula.modulestudio.generator.application.ImportList
66
import org.zikula.modulestudio.generator.extensions.ControllerExtensions
77
import org.zikula.modulestudio.generator.extensions.FormattingExtensions
88
import org.zikula.modulestudio.generator.extensions.ModelBehaviourExtensions
9+
import org.zikula.modulestudio.generator.extensions.UrlExtensions
910
import org.zikula.modulestudio.generator.extensions.Utils
1011

1112
class NotificationHelper {
1213

1314
extension ControllerExtensions = new ControllerExtensions
1415
extension FormattingExtensions = new FormattingExtensions
1516
extension ModelBehaviourExtensions = new ModelBehaviourExtensions
17+
extension UrlExtensions = new UrlExtensions
1618
extension Utils = new Utils
1719

1820
def generate(Application it, IMostFileSystemAccess fsa) {
@@ -373,7 +375,7 @@ class NotificationHelper {
373375

374376
$hasDetailAction = in_array($objectType, ['«entities.filter[hasDetailAction].map[name.formatForCode].join('\', \'''], true);
375377
$hasEditAction = in_array($objectType, ['«entities.filter[hasEditAction].map[name.formatForCode].join('\', \'''], true);
376-
$routePrefix = '«appName.formatForDB»_' . mb_strtolower($objectType) . '_';
378+
$routePrefix = '«routePrefix»_' . mb_strtolower($objectType) . '_';
377379
378380
$urlArgs = $this->entity->createUrlArgs();
379381
$detailUrl = $hasDetailAction

bundles/org.zikula.modulestudio.generator/src/org/zikula/modulestudio/generator/cartridges/symfony/controller/menu/ExtensionMenu.xtend

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,20 @@ package org.zikula.modulestudio.generator.cartridges.symfony.controller.menu
33
import de.guite.modulestudio.metamodel.Application
44
import de.guite.modulestudio.metamodel.Entity
55
import org.zikula.modulestudio.generator.application.IMostFileSystemAccess
6+
import org.zikula.modulestudio.generator.application.ImportList
67
import org.zikula.modulestudio.generator.extensions.ControllerExtensions
78
import org.zikula.modulestudio.generator.extensions.FormattingExtensions
89
import org.zikula.modulestudio.generator.extensions.ModelExtensions
10+
import org.zikula.modulestudio.generator.extensions.UrlExtensions
911
import org.zikula.modulestudio.generator.extensions.Utils
1012
import org.zikula.modulestudio.generator.extensions.WorkflowExtensions
11-
import org.zikula.modulestudio.generator.application.ImportList
1213

1314
class ExtensionMenu {
1415

1516
extension ControllerExtensions = new ControllerExtensions
1617
extension FormattingExtensions = new FormattingExtensions
1718
extension ModelExtensions = new ModelExtensions
19+
extension UrlExtensions = new UrlExtensions
1820
extension Utils = new Utils
1921
extension WorkflowExtensions = new WorkflowExtensions
2022

@@ -56,9 +58,11 @@ class ExtensionMenu {
5658
public function __construct(
5759
protected readonly Security $security,
5860
protected readonly ControllerHelper $controllerHelper,
59-
protected readonly PermissionHelper $permissionHelper«IF needsApproval»,
60-
protected readonly WorkflowHelper $workflowHelper«ENDIF»,
61-
protected readonly array $listViewConfig
61+
protected readonly PermissionHelper $permissionHelper,
62+
«IF needsApproval»
63+
protected readonly WorkflowHelper $workflowHelper,
64+
«ENDIF»
65+
protected readonly array $listViewConfig,
6266
) {
6367
}
6468

@@ -93,7 +97,7 @@ class ExtensionMenu {
9397

9498
«ENDFOR»
9599
if ($this->permissionHelper->hasPermission(/*ACCESS_ADMIN*/)) {
96-
yield 'backend' => MenuItem::linktoRoute(t('«name.formatForDisplayCapital» Backend'), 'fas fa-wrench', '«appName.formatForDB»_«getLeadingEntity.name.formatForDB»_admin«getLeadingEntity.getPrimaryAction»');
100+
yield 'backend' => MenuItem::linktoRoute(t('«name.formatForDisplayCapital» Backend'), 'fas fa-wrench', 'admin_«getLeadingEntity.route(getLeadingEntity.getPrimaryAction)»');
97101
}
98102
}
99103

@@ -148,11 +152,11 @@ class ExtensionMenu {
148152
def private menuEntriesBetweenControllers(Application it) '''
149153
if ($isAdmin) {
150154
if ($this->permissionHelper->hasPermission(/*ACCESS_READ*/)) {
151-
yield 'frontend' => MenuItem::linktoRoute(t('Frontend'), 'fas fa-home', '«appName.formatForDB»_«getLeadingEntity.name.formatForDB»_«getLeadingEntity.getPrimaryAction»');
155+
yield 'frontend' => MenuItem::linktoRoute(t('Frontend'), 'fas fa-home', 'user_«getLeadingEntity.route(getLeadingEntity.getPrimaryAction)»');
152156
}
153157
} else {
154158
if ($this->permissionHelper->hasPermission(/*ACCESS_ADMIN*/)) {
155-
yield 'backend' => MenuItem::linktoRoute(t('Backend'), 'fas fa-wrench', '«appName.formatForDB»_«getLeadingEntity.name.formatForDB»_admin«getLeadingEntity.getPrimaryAction»');
159+
yield 'backend' => MenuItem::linktoRoute(t('Backend'), 'fas fa-wrench', 'admin_«getLeadingEntity.route(getLeadingEntity.getPrimaryAction)»');
156160
}
157161
}
158162
'''

0 commit comments

Comments
 (0)