Skip to content

Commit d438ad9

Browse files
committed
3644: Cleaned up template and controller
1 parent 4a10e9f commit d438ad9

8 files changed

Lines changed: 210 additions & 70 deletions

File tree

.editorconfig

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# EditorConfig is awesome: https://editorconfig.org
2+
3+
# top-most EditorConfig file
4+
root = true
5+
6+
# Unix-style newlines with a newline ending every file
7+
[*]
8+
end_of_line = lf
9+
insert_final_newline = true
10+
charset = utf-8
11+
indent_style = space
12+
indent_size = 4
13+
14+
[*.{css,js,twig}]
15+
indent_size = 2

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ See [keep a changelog] for information about writing changes to this log.
88

99
## [Unreleased]
1010

11+
* [PR-32](https://github.com/itk-dev/sysstatus/pull/32)
12+
3644: Cleaned up template and controller
1113
* [PR-31](https://github.com/itk-dev/sysstatus/pull/31)
1214
Upgraded to Symfony 7.2
1315
* [PR-30](https://github.com/itk-dev/sysstatus/pull/30)

assets/styles/app.css

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,3 +217,10 @@ body.list table tbody td.dashboard--table-answer {
217217
}
218218
}
219219
}
220+
221+
/* Don't let fragment links stand out */
222+
h2 {
223+
a {
224+
color: inherit;
225+
}
226+
}

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
"symfony/validator": "~7.2.4",
3030
"symfony/yaml": "~7.2.3",
3131
"twig/extra-bundle": "^2.12 || ^3.20",
32+
"twig/string-extra": "^3.20",
3233
"twig/twig": "^2.12 || ^3.20"
3334
},
3435
"require-dev": {

composer.lock

Lines changed: 68 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Controller/Admin/AnswerCrudController.php

Lines changed: 71 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,43 +3,88 @@
33
namespace App\Controller\Admin;
44

55
use App\Entity\Answer;
6+
use App\Entity\Question;
7+
use App\Entity\System;
68
use Doctrine\ORM\EntityManagerInterface;
79
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
810
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
911
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
12+
use EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext;
1013
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
1114
use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
1215
use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField;
1316
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
1417
use Symfony\Component\HttpFoundation\RedirectResponse;
18+
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
19+
use Symfony\Component\Translation\TranslatableMessage;
1520

1621
class AnswerCrudController extends AbstractCrudController
1722
{
23+
public function __construct(
24+
private readonly EntityManagerInterface $entityManager,
25+
) {
26+
}
27+
1828
public static function getEntityFqcn(): string
1929
{
2030
return Answer::class;
2131
}
2232

2333
#[\Override]
24-
public function updateEntity(EntityManagerInterface $entityManager, mixed $entityInstance): void
34+
protected function getRedirectResponseAfterSave(AdminContext $context, string $action): RedirectResponse
35+
{
36+
// Lifted from parent::getRedirectResponseAfterSave().
37+
$submitButtonName = $context->getRequest()->request->all()['ea']['newForm']['btn'] ?? null;
38+
39+
// Answers don't have an index which is where EasyAdmin will return to by default on save.
40+
// Therefore we return to somewhere else on save.
41+
if (Action::SAVE_AND_RETURN === $submitButtonName) {
42+
$request = $context->getRequest();
43+
44+
// Check if we have a “referer” (sic!) set.
45+
if ($referer = $request->get('referer')) {
46+
return $this->redirect($referer);
47+
}
48+
// Check if we have a “system” set.
49+
if ($system = $request->get('system')) {
50+
return $this->redirectToRoute('admin_system_detail', ['entityId' => $system]);
51+
}
52+
53+
// Use system index as fallback.
54+
return $this->redirectToRoute('admin_system_index');
55+
}
56+
57+
return parent::getRedirectResponseAfterSave($context, $action);
58+
}
59+
60+
#[\Override]
61+
public function createEntity(string $entityFqcn): Answer
2562
{
26-
// TODO: Change the autogenerated stub
27-
parent::updateEntity($entityManager, $entityInstance);
63+
/** @var Answer $entity */
64+
$entity = parent::createEntity($entityFqcn);
65+
66+
// Set system and question on new answers.
67+
$params = $this->getContext()->getRequest()->query->all();
68+
if (isset($params['system'], $params['question'])) {
69+
$system = $this->entityManager->getRepository(System::class)->find($params['system']);
70+
$question = $this->entityManager->getRepository(Question::class)->find($params['question']);
71+
if ($system && $question) {
72+
$entity
73+
->setSystem($system)
74+
->setQuestion($question);
75+
} else {
76+
throw new BadRequestHttpException();
77+
}
78+
}
2879

29-
$url = $this->generateUrl('dashboard', ['entityType' => 'system']);
30-
$response = new RedirectResponse($url);
31-
$response->send();
80+
return $entity;
3281
}
3382

3483
#[\Override]
3584
public function configureActions(Actions $actions): Actions
3685
{
3786
return $actions
38-
39-
->add(Crud::PAGE_EDIT, Action::EDIT)
40-
->add(Crud::PAGE_DETAIL, Action::DETAIL)
41-
->disable(Action::NEW, Action::DELETE, Action::INDEX)
42-
;
87+
->disable(Action::SAVE_AND_ADD_ANOTHER, Action::DELETE, Action::INDEX, Action::DETAIL);
4388
}
4489

4590
/**
@@ -48,20 +93,21 @@ public function configureActions(Actions $actions): Actions
4893
#[\Override]
4994
public function configureFields(string $pageName): iterable
5095
{
51-
$question = TextField::new('question')->setFormTypeOptions(['disabled' => true]);
52-
$smiley = ChoiceField::new('smiley')->setChoices([
53-
'GREEN' => 'GREEN',
54-
'RED' => 'RED',
55-
'BLUE' => 'BLUE',
56-
'YELLOW' => 'YELLOW',
57-
]);
58-
$note = TextareaField::new('note');
59-
if (Crud::PAGE_EDIT === $pageName) {
60-
return [$question, $smiley, $note];
61-
} elseif (Crud::PAGE_DETAIL === $pageName) {
62-
return [$question, $smiley, $note];
63-
} else {
64-
throw new \Exception('Invalid page: '.$pageName);
96+
$question = TextField::new('question')
97+
->setFormTypeOptions(['disabled' => true]);
98+
if (Crud::PAGE_NEW === $pageName) {
99+
// $question->setRequired(false);
65100
}
101+
yield $question;
102+
yield ChoiceField::new('smiley')
103+
->setTranslatableChoices([
104+
'GREEN' => new TranslatableMessage('smiley.GREEN'),
105+
'RED' => new TranslatableMessage('smiley.RED'),
106+
'BLUE' => new TranslatableMessage('smiley.BLUE'),
107+
'YELLOW' => new TranslatableMessage('smiley.YELLOW'),
108+
])
109+
// ->setRequired(true)
110+
;
111+
yield TextareaField::new('note');
66112
}
67113
}
Lines changed: 41 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11

2-
{% set itemClass = getclass(entity.instance)|split('\\')|last %}
32
{% set alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] %}
4-
{% set numberOfCategories = 0 %}
3+
{% set categoryCounter = 0 %}
54

65
{% for theme in entity.instance.getAnswerArea %}
76
{% for themeCategory in theme.themeCategories|sort_order %}
87
{% set category = themeCategory.category %}
9-
{% set numberOfCategories = numberOfCategories + 1 %}
10-
<h2>{{ category.name }}</h2>
8+
{% set categoryCounter = categoryCounter + 1 %}
9+
{% set section_id = category.name|slug|lower %}
10+
<h2 id="{{ section_id }}"><a href="#{{ section_id }}">{{ category.name }}</a></h2>
1111
<table class="smiley-table table table-hover">
1212
<thead>
1313
<tr>
@@ -17,11 +17,12 @@
1717
<th>{{ 'answers_show.actions'|trans }}</th>
1818
</tr>
1919
</thead>
20-
{% set numberOfQuestions = 0 %}
21-
{% for question in category.questions|sort_order %}
22-
{% set numberOfQuestions = numberOfQuestions + 1 %}
23-
<tr>
24-
<td>{{ alphabet[numberOfCategories - 1] }}{{ numberOfQuestions }}</td>
20+
{% set questionCounter = 0 %}
21+
{% for index, question in category.questions|sort_order %}
22+
{% set questionCounter = questionCounter + 1 %}
23+
{% set question_id = section_id ~ '-' ~ questionCounter %}
24+
<tr id="{{ question_id }}">
25+
<td>{{ alphabet[categoryCounter - 1] }}{{ questionCounter }}</td>
2526
<td>
2627
<a class="" href="{{ ea_url()
2728
.setController('App\\Controller\\Admin\\AnswerCrudController')
@@ -30,52 +31,48 @@
3031
{{ question.question }}
3132
</a>
3233
</td>
33-
{% set numberOfAnswers = 0 %}
3434

35-
{% for answer in question.answers %}
36-
{% if answer in entity.instance.answers %}
37-
<td>
38-
{{ include('easy_admin_overrides/field_smiley.html.twig', {value: answer.smiley, title: answer.note, width: 25}) }}
39-
</td>
40-
{% endif %}
41-
{% if answer in entity.instance.answers %}
35+
{# Get a list of answers within the system #}
36+
{% set answers = question.answers|filter(a => a in entity.instance.answers) %}
4237

43-
{% set numberOfAnswers = numberOfAnswers + 1 %}
44-
<td>
45-
{# <a href="{{ easyadmin_path('Answer', 'edit', { id: answer.id }) }}"> #}
46-
47-
<a class="" href="{{ ea_url()
48-
.setController('App\\Controller\\Admin\\AnswerCrudController')
49-
.setAction('edit')
50-
.setEntityId(answer.id)
51-
}}">
38+
{% set referer = app.request.pathinfo ~ '#' ~ question_id %}
39+
{# @todo The layout will break if ww have more that one answer #}
40+
{% for answer in answers %}
41+
<td>
42+
{{ include('easy_admin_overrides/field_smiley.html.twig', {value: answer.smiley, title: answer.note, width: 25}) }}
43+
</td>
5244

53-
<i class="fa fa-edit edit-icon"></i> {{ 'answers_show.edit'|trans }}
54-
</a>
55-
</td>
56-
{% endif %}
57-
{% endfor %}
58-
{% if numberOfAnswers == 0 %}
45+
<td>
46+
<a href="{{ ea_url({
47+
referer,
48+
})
49+
.setController('App\\Controller\\Admin\\AnswerCrudController')
50+
.setAction('edit')
51+
.setEntityId(answer.id)
52+
}}">
53+
<i class="fa fa-edit edit-icon"></i> {{ 'answers_show.edit'|trans }}
54+
</a>
55+
</td>
56+
{% else %}
5957
<td></td>
6058
<td>
61-
{# {{ dump(itemClass) }} #}
62-
{# /admin/{entityType} #}
63-
<a href="answer/new?question={{ question.id }}&{{ itemClass|lower }}={{ entity.instance.id }}&redirect=www.google.com">
59+
<a href="{{ ea_url({
60+
system: entity.instance.id,
61+
question: question.id,
62+
referer,
63+
})
64+
.setController('App\\Controller\\Admin\\AnswerCrudController')
65+
.setAction('new')
66+
.setEntityId(null)
67+
}}">
6468
<i class="fa fa-add new-icon"></i> {{ 'Opret Ny'|trans }}
6569
</a>
66-
67-
{# <a href="answer/new?question={{ question.id }}&{{ itemClass | lower }}={{ entity.instance.id }} #}
68-
{# &redirect={{ path('dashboard'/itemClass }) | url_encode }}"> #}
69-
{# <i class="fa fa-add new-icon"></i> {{ 'Opret Ny' | trans }} #}
70-
{# </a> #}
71-
{# #}
72-
7370
</td>
74-
{% endif %}
71+
{% endfor %}
7572
</td>
7673
</tr>
7774
{% endfor %}
7875
</table>
79-
<br><br>
76+
8077
{% endfor %}
8178
{% endfor %}

translations/messages.da.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,3 +285,8 @@ export:
285285
group.placeholder: Magistrat
286286
sysOwnerSub.placeholder: Afdeling
287287
selfServiceAvailableFromItems.placeholder: Selvbetjeningsløsning
288+
289+
smiley.GREEN: 'Grøn'
290+
smiley.RED: 'Rød'
291+
smiley.BLUE: 'Blå'
292+
smiley.YELLOW: 'Gul'

0 commit comments

Comments
 (0)