Skip to content

Commit ea14e81

Browse files
committed
Refacto and UI imrpovement
1 parent 57dcf57 commit ea14e81

3 files changed

Lines changed: 82 additions & 6 deletions

File tree

src/Controllers/AdminController.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,13 +263,21 @@ public function editStream(Request $request, Response $response, array $args): R
263263
$parentEvent = $this->eventRepository->selectByUserAndId($user, $charityStream->charity_event_id);
264264
}
265265

266+
// Liste des events accessibles pour le lien stream ↔ event
267+
if ($user->role === 'ADMIN') {
268+
$availableEvents = $this->eventRepository->selectList();
269+
} else {
270+
$availableEvents = $this->eventRepository->selectListByUser($user);
271+
}
272+
266273
$donationUrl = $_SERVER['HA_URL'] . '/associations/' . $charityStream->organization_slug . '/formulaires/' . $charityStream->form_slug;
267274
$routeParser = RouteContext::fromRequest($request)->getRouteParser();
268275

269276
$data = [
270277
"logged" => true,
271278
"charityStream" => $charityStream,
272279
"parentEvent" => $parentEvent,
280+
"availableEvents" => $availableEvents,
273281
"donationGoalWidget" => $donationGoalWidget,
274282
"alertBoxWidget" => $alertBoxWidget,
275283
"alertBoxWidgetPictureUrl" => ($alertBoxWidget && $alertBoxWidget->image) ? $this->fileManager->getPictureUrl($alertBoxWidget->image) : null,
@@ -280,6 +288,7 @@ public function editStream(Request $request, Response $response, array $args): R
280288
"widgetDonationGoalUrl" => $_SERVER['WEBSITE_DOMAIN'] . $routeParser->urlFor('app_stream_widget_donation', ["id" => $guid]),
281289
"widgetAlertBoxUrl" => $_SERVER['WEBSITE_DOMAIN'] . $routeParser->urlFor('app_stream_widget_alert', ["id" => $guid]),
282290
"widgetCardUrl" => $_SERVER['WEBSITE_DOMAIN'] . $routeParser->urlFor('app_stream_widget_card', ["id" => $guid]),
291+
"messages" => $this->messages->getMessages(),
283292
];
284293

285294
return $this->view->render($response, 'stream/edit.html.twig', $data);
@@ -304,6 +313,24 @@ public function editStreamPost(Request $request, Response $response, array $args
304313
$this->streamRepository->update($charityStream, $updateData);
305314
}
306315

316+
if (isset($body['link_event'])) {
317+
$eventId = !empty($body['event_id']) ? (int) $body['event_id'] : null;
318+
if ($eventId) {
319+
$event = $this->eventRepository->selectByUserAndId($user, $eventId);
320+
if ($event) {
321+
$this->streamRepository->updateEventLink($charityStream, $event->id);
322+
$this->messages->addMessage('success', 'Stream lié à l\'événement « ' . $event->title . ' »');
323+
} else {
324+
$this->messages->addMessage('error', 'Événement introuvable ou non autorisé');
325+
}
326+
}
327+
}
328+
329+
if (isset($body['unlink_event'])) {
330+
$this->streamRepository->updateEventLink($charityStream, null);
331+
$this->messages->addMessage('success', 'Stream délié de son événement');
332+
}
333+
307334
if (isset($body['save_alert_box'])) {
308335
$uploadedFiles = $request->getUploadedFiles();
309336
$image = isset($uploadedFiles['image']) && $uploadedFiles['image']->getSize() > 0

src/Repositories/StreamRepository.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,17 @@ public function insert(string $form_slug, string $organization_slug, string $tit
164164
}
165165
}
166166

167+
public function updateEventLink(Stream $stream, ?int $eventId): void
168+
{
169+
$stmt = $this->pdo->prepare('
170+
UPDATE ' . $this->prefix . 'charity_stream
171+
SET charity_event_id = ?
172+
WHERE id = ?
173+
');
174+
$stmt->execute([$eventId, $stream->id]);
175+
$stream->charity_event_id = $eventId;
176+
}
177+
167178
public function update(Stream $stream, array $data): void
168179
{
169180
$fields = [];

src/views/stream/edit.html.twig

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,52 @@
77
<div class="container">
88
<h1 class="my-4 text-center">Édition du stream</h1>
99

10-
<a href="/admin" class="btn btn-secondary mb-4">Retour</a>
10+
<a href="/admin" class="btn btn-secondary mb-4">Retour</a>
1111

12-
{% if parentEvent %}
13-
<div class="alert alert-info d-flex align-items-center gap-2 mb-3">
14-
<span>📅 Événement parent :</span>
15-
<a href="/admin/event/{{ parentEvent.guid }}/edit" class="fw-bold text-decoration-underline">{{ parentEvent.title }}</a>
12+
{% for key, msgs in messages|default({}) %}
13+
{% for msg in msgs %}
14+
<div class="alert alert-{{ key == 'error' ? 'danger' : key }} alert-dismissible fade show" role="alert">
15+
{{ msg }}
16+
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
1617
</div>
17-
{% endif %}
18+
{% endfor %}
19+
{% endfor %}
20+
21+
{# ── Événement parent (lier / délier) ──────────────────────── #}
22+
<div class="card mb-4">
23+
<div class="card-header">
24+
<h5 class="mb-0">📅 Événement parent</h5>
25+
</div>
26+
<div class="card-body">
27+
{% if parentEvent %}
28+
<div class="d-flex align-items-center justify-content-between">
29+
<div>
30+
<span class="fw-semibold">{{ parentEvent.title }}</span>
31+
<a href="/admin/event/{{ parentEvent.guid }}/edit" class="btn btn-sm btn-outline-primary ms-2">🔗 Voir l'événement</a>
32+
</div>
33+
<form method="POST" class="d-inline" onsubmit="return confirm('Délier ce stream de l\'événement « {{ parentEvent.title | e('js') }} » ?')">
34+
<button type="submit" class="btn btn-sm btn-outline-danger" name="unlink_event" value="1">❌ Délier</button>
35+
</form>
36+
</div>
37+
{% else %}
38+
<form method="POST" class="d-flex align-items-end gap-3">
39+
<div class="flex-grow-1">
40+
<label for="event_id" class="form-label fw-semibold">Lier à un événement</label>
41+
<select class="form-select" id="event_id" name="event_id" required>
42+
<option value="">— Sélectionner un événement —</option>
43+
{% for event in availableEvents %}
44+
<option value="{{ event.id }}">{{ event.title }}</option>
45+
{% endfor %}
46+
</select>
47+
</div>
48+
<button type="submit" class="btn btn-success" name="link_event" value="1">🔗 Lier</button>
49+
</form>
50+
{% if availableEvents is empty %}
51+
<p class="text-muted mt-2 mb-0">Aucun événement disponible. <a href="/admin?createEvent=1">Créer un événement</a>.</p>
52+
{% endif %}
53+
{% endif %}
54+
</div>
55+
</div>
1856

1957
{# ── Informations du stream ────────────────────────────────── #}
2058
<div class="card mb-4">

0 commit comments

Comments
 (0)