Skip to content

Commit bcb7f8d

Browse files
committed
utilize some new EAB features
1 parent 3b44666 commit bcb7f8d

13 files changed

Lines changed: 62 additions & 107 deletions

File tree

bundles/org.zikula.modulestudio.generator/src/org/zikula/modulestudio/generator/cartridges/symfony/SymfonyBundleGenerator.xtend

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@ import org.zikula.modulestudio.generator.application.IMostFileSystemAccess
99
import org.zikula.modulestudio.generator.application.config.AppConfig
1010
import org.zikula.modulestudio.generator.cartridges.symfony.controller.ControllerLayer
1111
import org.zikula.modulestudio.generator.cartridges.symfony.controller.EventSubscribers
12+
import org.zikula.modulestudio.generator.cartridges.symfony.controller.FormHandlerOLD
1213
import org.zikula.modulestudio.generator.cartridges.symfony.controller.HelperServices
13-
import org.zikula.modulestudio.generator.cartridges.symfony.controller.Workflow
1414
import org.zikula.modulestudio.generator.cartridges.symfony.controller.bundle.Configuration
1515
import org.zikula.modulestudio.generator.cartridges.symfony.controller.bundle.Initializer
1616
import org.zikula.modulestudio.generator.cartridges.symfony.controller.bundle.MetaData
1717
import org.zikula.modulestudio.generator.cartridges.symfony.controller.bundle.ServiceDefinitions
18+
import org.zikula.modulestudio.generator.cartridges.symfony.controller.workflows.Definition
1819
import org.zikula.modulestudio.generator.cartridges.symfony.models.Entities
1920
import org.zikula.modulestudio.generator.cartridges.symfony.models.EntityInitializer
2021
import org.zikula.modulestudio.generator.cartridges.symfony.models.Repository
@@ -38,7 +39,6 @@ import org.zikula.modulestudio.generator.cartridges.symfony.view.Views
3839
import org.zikula.modulestudio.generator.extensions.ModelExtensions
3940
import org.zikula.modulestudio.generator.extensions.Utils
4041
import org.zikula.modulestudio.generator.extensions.transformation.ConfigurationDeriver
41-
import org.zikula.modulestudio.generator.cartridges.symfony.controller.FormHandlerOLD
4242

4343
class SymfonyBundleGenerator implements IGenerator {
4444

@@ -134,8 +134,8 @@ class SymfonyBundleGenerator implements IGenerator {
134134
'Generating Event listeners'.printIfNotTesting(fsa)
135135
new EventSubscribers().generate(it, fsa)
136136
pm?.subTask('Controller: Workflows')
137-
'Generating workflows'.printIfNotTesting(fsa)
138-
new Workflow().generate(it, fsa)
137+
'Generating workflow definitions'.printIfNotTesting(fsa)
138+
new Definition().generate(it, fsa)
139139
pm?.subTask('Controller: JavaScript files')
140140
'Generating JavaScript files'.printIfNotTesting(fsa)
141141
new JavaScriptFiles().generate(it, fsa)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ class ControllerLayer {
148148
«ENDIF»
149149
«FOR action : customActions»
150150
«IF action.requiredFor(it
151-
«action.controllerInjection(application)»
151+
«action.controllerInjection(application)»,
152152
«ENDIF»
153153
«ENDFOR»
154154
) {

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

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

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ abstract class AbstractAction implements ActionInterface {
134134
'''
135135
136136
def private invocationArgumentsInCall(Application it) {
137-
invocationArguments(true).map[a|a.split(' ').get(1)].join(', ')
137+
invocationArguments(true).map[a | a.split(' ').last].join(', ')
138138
}
139139
140140
def protected route(Application it, Entity entity) '''

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ class ApplyTreeOperation extends AbstractAction {
9696
9797
override protected routeMethods(Entity it) '''['POST']'''
9898
99-
override protected routeOptions(Entity it) '''options: ['expose' => true]'''
99+
override protected routeOptions(Entity it) '''«''»'options' => ['expose' => true]'''
100100
101101
override protected implBody(Application it) '''
102102
if (!$request->isXmlHttpRequest()) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class DetectDuplicate extends AbstractAction {
6464
6565
override protected routeMethods(Entity it) '''['GET']'''
6666
67-
override protected routeOptions(Entity it) '''options: ['expose' => true]'''
67+
override protected routeOptions(Entity it) '''«''»'options' => ['expose' => true]'''
6868
6969
override protected implBody(Application it) '''
7070
if (!$request->isXmlHttpRequest()) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class UpdateSortPositions extends AbstractAction {
6666
6767
override protected routeMethods(Entity it) '''['POST']'''
6868
69-
override protected routeOptions(Entity it) '''options: ['expose' => true]'''
69+
override protected routeOptions(Entity it) '''«''»'options' => ['expose' => true]'''
7070
7171
override protected implBody(Application it) '''
7272
if (!$request->isXmlHttpRequest()) {

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

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ class ConfigureActions implements ControllerMethodInterface {
6161

6262
return $actions;
6363
}
64-
«autocomplete»
6564
'''
6665
6766
def private standardActions(Entity it) '''
@@ -124,57 +123,6 @@ class ConfigureActions implements ControllerMethodInterface {
124123
«ENDIF»
125124
'''
126125
127-
def private autocomplete(Entity it) {
128-
if (!getIncomingRelationsWithAutocomplete.empty || !getOutcomingRelationsWithAutocomplete.empty) '''
129-
public function autocomplete(AdminContext $context): JsonResponse
130-
{
131-
$response = parent::autocomplete($context);
132-
133-
$payload = json_decode($response->getContent() ?? '[]', true, flags: \JSON_THROW_ON_ERROR);
134-
135-
if (!isset($payload['results']) || !is_array($payload['results'])) {
136-
return $response;
137-
}
138-
139-
$ids = [];
140-
foreach ($payload['results'] as $row) {
141-
if (isset($row['id']) && '' !== $row['id']) {
142-
$ids[] = $row['id'];
143-
}
144-
}
145-
146-
if ([] === $ids) {
147-
return $response;
148-
}
149-
150-
$entities = $this->em->getRepository(«name.formatForCodeCapital»::class)->createQueryBuilder('p')
151-
->andWhere('p.id IN (:ids)')
152-
->setParameter('ids', $ids)
153-
->getQuery()
154-
->getResult();
155-
156-
$byId = [];
157-
foreach ($entities as $entity) {
158-
$byId[(string) $entity->getId()] = $entity;
159-
}
160-
161-
foreach ($payload['results'] as &$row) {
162-
$id = isset($row['id']) ? (string) $row['id'] : null;
163-
if ($id && isset($byId[$id])) {
164-
$row['text'] = $this->entityDisplayHelper->format«name.formatForCodeCapital»($byId[$id]);
165-
}
166-
}
167-
unset($row);
168-
169-
return new JsonResponse(
170-
$payload,
171-
$response->getStatusCode(),
172-
$response->headers->all()
173-
);
174-
}
175-
'''
176-
}
177-
178126
def private getIncomingRelationsWithAutocomplete(Entity it) {
179127
getCommonRelations(true).filter[usesAutoCompletion(false)]
180128
}

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

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,10 @@ class ConfigureFields implements ControllerMethodInterface {
152152
$uploaderHelper = $this->uploaderHelper;
153153
«ENDIF»
154154
«ENDIF»
155+
«IF !incomingRelations.filter[usesAutoCompletion(false)].empty
156+
|| !outgoingRelations.filter[usesAutoCompletion(true)].empty»
157+
$entityDisplayHelper = $this->entityDisplayHelper;
158+
«ENDIF»
155159
«FOR field : getAllEntityFields»
156160
«IF field instanceof UploadField»
157161
$basePath = str_replace('public/', '', $this->uploadHelper->getFileBaseFolder('«name.formatForCode»', '«field.name.formatForCode»'));
@@ -797,12 +801,12 @@ class ConfigureFields implements ControllerMethodInterface {
797801
var calls = ''
798802
if ('Association' == relationFieldType) {
799803
if (autoComplete) {
800-
calls += '''->autocomplete()'''
804+
calls += '''->autocomplete(callback: static fn(«relatedEntity.name.formatForCodeCapital» $entity) => $entityDisplayHelper->format«relatedEntity.name.formatForCodeCapital»($entity))'''
801805
} else if (!expanded) {
802806
calls += '''->renderAsNativeWidget()'''
803807
}
804808
// renderAsEmbeddedForm
805-
if (thisEntity.hasEditAction) {
809+
if (thisEntity.hasEditAction && !autoComplete) {
806810
calls += '''->setFormTypeOption('choice_label', fn («relatedEntity.name.formatForCodeCapital» $entity): string => $this->entityDisplayHelper->format«relatedEntity.name.formatForCodeCapital»($entity))'''
807811
}
808812
} else if ('Collection' == relationFieldType) {
@@ -812,9 +816,9 @@ class ConfigureFields implements ControllerMethodInterface {
812816
if (thisEntity.hasEditAction) {
813817
calls += '''->setEntryToStringMethod(fn («relatedEntity.name.formatForCodeCapital» $entity, TranslatorInterface $translator): string => $this->entityDisplayHelper->format«relatedEntity.name.formatForCodeCapital»($entity))'''
814818
}
815-
}
816-
if (expanded) {
817-
calls += '''->renderExpanded()'''
819+
if (expanded) {
820+
calls += '''->renderExpanded()'''
821+
}
818822
}
819823
if (thisEntity.hasIndexAction || thisEntity.hasDetailAction) {
820824
calls += '''->setTemplatePath('@«application.vendor.formatForCodeCapital + application.name.formatForCodeCapital»/admin/crud/field/association.html.twig')'''

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

Lines changed: 39 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -53,45 +53,45 @@ class ConfigureFilters implements ControllerMethodInterface {
5353
) {
5454
imports.add(nsEabFilter + 'ChoiceFilter')
5555
}
56+
if (hasCountryFieldsEntity) {
57+
imports.add(nsEabFilter + 'CountryFilter')
58+
}
59+
if (hasCurrencyFieldsEntity) {
60+
imports.add(nsEabFilter + 'CurrencyFilter')
61+
}
5662
if (!allEntityFields.filter(DatetimeField).empty) {
5763
imports.add(nsEabFilter + 'DateTimeFilter')
5864
}
5965
if (!allEntityFields.filter(UserField).empty || !incomingRelations.empty || !outgoingRelations.empty) {
6066
imports.add(nsEabFilter + 'EntityFilter')
6167
}
68+
if (hasLanguageFieldsEntity) {
69+
imports.add(nsEabFilter + 'LanguageFilter')
70+
}
71+
if (hasLocaleFieldsEntity) {
72+
imports.add(nsEabFilter + 'LocaleFilter')
73+
}
6274
if (!formFields.filter(NumberField).empty) {
6375
imports.add(nsEabFilter + 'NumericFilter')
6476
}
6577
imports.add(nsEabFilter + 'TextFilter')
78+
if (hasTimezoneFieldsEntity) {
79+
imports.add(nsEabFilter + 'TimezoneFilter')
80+
}
6681

6782
val nsSymfonyFormType = 'Symfony\\Component\\Form\\Extension\\Core\\Type\\'
6883
if (!formFields.filter(StringField).filter[f|f.role === StringRole.COLOUR].empty) {
6984
imports.add(nsSymfonyFormType + 'ColorType')
7085
}
71-
if (hasCountryFieldsEntity) {
72-
imports.add(nsSymfonyFormType + 'CountryType')
73-
}
74-
if (hasCurrencyFieldsEntity) {
75-
imports.add(nsSymfonyFormType + 'CurrencyType')
76-
}
7786
if (!formFields.filter(StringField).filter[role == StringRole.ICON].empty) {
7887
imports.add('Zikula\\ThemeBundle\\Form\\Type\\IconType')
7988
}
80-
if (hasLanguageFieldsEntity) {
81-
imports.add(nsSymfonyFormType + 'LanguageType')
82-
}
83-
if (hasLocaleFieldsEntity) {
84-
imports.add(nsSymfonyFormType + 'LocaleType')
85-
}
8689
if (!formFields.filter(StringField).filter[f|f.role === StringRole.PASSWORD].empty) {
8790
imports.add(nsSymfonyFormType + 'PasswordType')
8891
}
8992
if (!formFields.filter(StringField).filter[f|f.role === StringRole.PHONE_NUMBER].empty) {
9093
imports.add(nsSymfonyFormType + 'TelType')
9194
}
92-
if (hasTimezoneFieldsEntity) {
93-
imports.add(nsSymfonyFormType + 'TimezoneType')
94-
}
9595
if (!formFields.filter(StringField).filter[f|f.role === StringRole.URL].empty) {
9696
imports.add(nsSymfonyFormType + 'UrlType')
9797
}
@@ -135,6 +135,7 @@ class ConfigureFilters implements ControllerMethodInterface {
135135
«ENDFOR»
136136
'''
137137
138+
// https://symfony.com/bundles/EasyAdminBundle/current/filters.html#booleanfilter
138139
def private dispatch filter(Field it) '''
139140
->add('«name.formatForCode»')
140141
'''
@@ -145,41 +146,58 @@ class ConfigureFilters implements ControllerMethodInterface {
145146
'''
146147
147148
def private dispatch filter(StringField it) '''
148-
->add(TextFilter::new('«name.formatForCode»', «label»)«options»)
149+
->add(«filterType»Filter::new('«name.formatForCode»', «label»)«options»)
149150
'''
151+
def private filterType(StringField it) {
152+
// https://symfony.com/bundles/EasyAdminBundle/current/filters.html#countryfilter
153+
if (role === StringRole.COUNTRY) 'Country'
154+
// https://symfony.com/bundles/EasyAdminBundle/current/filters.html#currencyfilter
155+
else if (role === StringRole.CURRENCY) 'Currency'
156+
// https://symfony.com/bundles/EasyAdminBundle/current/filters.html#languagefilter
157+
else if (role === StringRole.LANGUAGE) 'Language'
158+
// https://symfony.com/bundles/EasyAdminBundle/current/filters.html#localefilter
159+
else if (role === StringRole.LOCALE) 'Locale'
160+
// https://symfony.com/bundles/EasyAdminBundle/current/filters.html#timezonefilter
161+
else if (role === StringRole.TIME_ZONE) 'Timezone'
162+
else 'Text'
163+
}
150164
def private dispatch options(StringField it) {
151165
if (role === StringRole.COLOUR) '''->setFormTypeOptions(['value_type' => ColorType::class])''' else
152-
if (role === StringRole.COUNTRY) '''->setFormTypeOptions(['value_type' => CountryType::class])''' else
153-
if (role === StringRole.CURRENCY) '''->setFormTypeOptions(['value_type' => CurrencyType::class])''' else
154166
//if (role === StringRole.ICON) '''->setFormTypeOptions(['value_type' => IconType::class])''' else
155-
if (role === StringRole.LANGUAGE) '''->setFormTypeOptions(['value_type' => LanguageType::class])''' else
156-
if (role === StringRole.LOCALE) '''->setFormTypeOptions(['value_type' => LocaleType::class])''' else
157167
if (role === StringRole.PASSWORD) '''->setFormTypeOptions(['value_type' => PasswordType::class])''' else
158168
if (role === StringRole.PHONE_NUMBER) '''->setFormTypeOptions(['value_type' => TelType::class])''' else
159-
if (role === StringRole.TIME_ZONE) '''->setFormTypeOptions(['value_type' => TimezoneType::class])''' else
160169
if (role === StringRole.URL) '''->setFormTypeOptions(['value_type' => UrlType::class])''' else
161170
if (role === StringRole.WEEK) '''->setFormTypeOptions(['value_type' => WeekType::class])''' else
162171
''
163172
}
164173
174+
// https://symfony.com/bundles/EasyAdminBundle/current/filters.html#textfilter
165175
def private dispatch filter(TextField it) '''
166176
->add(TextFilter::new('«name.formatForCode»', «label»)«options»)
167177
'''
168178
179+
// https://symfony.com/bundles/EasyAdminBundle/current/filters.html#numericfilter
169180
def private dispatch filter(NumberField it) '''
170181
->add(NumericFilter::new('«name.formatForCode»', «label»)«options»)
171182
'''
183+
172184
/* use TextFilter for array fields instead because its not easy to detect the choices
185+
*
186+
// https://symfony.com/bundles/EasyAdminBundle/current/filters.html#arrayfilter
173187
def private dispatch filter(ArrayField it) '''
174188
->add(ArrayFilter::new('«name.formatForCode»', «label»)->canSelectMultiple(true)->setTranslatableChoices(...))
175189
'''*/
176190
def private dispatch filter(ArrayField it) '''
177191
->add(TextFilter::new('«name.formatForCode»', «label»)«options»)
178192
'''
193+
194+
// https://symfony.com/bundles/EasyAdminBundle/current/filters.html#choicefilter
179195
def private dispatch filter(ListField it) '''
180196
->add(ChoiceFilter::new('«name.formatForCode»', «label»)«options»)
181197
'''
182198
def private dispatch options(ListField it) '''->setTranslatableChoices($«name.formatForCode»ChoicesIF expanded»->renderExpanded(trueENDIF»«IF multiple»->canSelectMultiple(trueENDIF»'''
199+
200+
// https://symfony.com/bundles/EasyAdminBundle/current/filters.html#datetimefilter
183201
def private dispatch filter(DatetimeField it) '''
184202
->add(DateTimeFilter::new('«name.formatForCode»', «label»)«options»)
185203
'''

0 commit comments

Comments
 (0)