Skip to content

Commit 546bc15

Browse files
committed
Refacto and UI imrpovement
1 parent fc74253 commit 546bc15

15 files changed

Lines changed: 571 additions & 621 deletions
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
-- Ajouter la colonne goal aux tables stream et event
2+
ALTER TABLE {prefix}charity_stream ADD goal INT NOT NULL DEFAULT 1000;
3+
ALTER TABLE {prefix}charity_event ADD goal INT NOT NULL DEFAULT 1000;
4+
5+
-- Copier les objectifs existants depuis les widgets barre de don
6+
UPDATE {prefix}charity_stream cs
7+
INNER JOIN {prefix}widget_donation_goal_bar w ON w.charity_stream_guid = cs.guid
8+
SET cs.goal = w.goal
9+
WHERE w.goal IS NOT NULL AND w.goal > 0;
10+
11+
UPDATE {prefix}charity_event ce
12+
INNER JOIN {prefix}widget_donation_goal_bar w ON w.charity_event_guid = ce.guid
13+
SET ce.goal = w.goal
14+
WHERE w.goal IS NOT NULL AND w.goal > 0;
15+

src/Assets/js/admin.js

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ function updateDonationGoalPreview() {
1717
const front = document.querySelector('.front');
1818
const backTitle = document.getElementById('back-title');
1919
const frontTitle = document.getElementById('front-title');
20-
const goal = document.getElementById('goal');
20+
// L'objectif est maintenant dans le formulaire d'infos (stream_goal ou event_goal)
21+
const goalInput = document.getElementById('stream_goal') || document.getElementById('event_goal');
2122

2223
back.style.backgroundColor = document.getElementById('background_color').value;
2324
front.style.backgroundColor = document.getElementById('bar_color').value;
@@ -29,7 +30,7 @@ function updateDonationGoalPreview() {
2930
backTitle.textContent = textContent;
3031
frontTitle.textContent = textContent;
3132

32-
const goalValue = parseFloat(goal.value) || 0;
33+
const goalValue = goalInput ? (parseFloat(goalInput.value) || 0) : 0;
3334
const currentDonation = goalValue / 2;
3435

3536
document.getElementById('back-goal-total').textContent = `${goalValue} €`;
@@ -43,7 +44,7 @@ function updateDonationGoalPreview() {
4344
const donationBarForm = document.getElementById('donationBarForm');
4445
if (donationBarForm) {
4546
bindPreviewInputs(
46-
['text_color_main', 'text_color_alt', 'text_content', 'bar_color', 'background_color', 'goal'],
47+
['text_color_main', 'text_color_alt', 'text_content', 'bar_color', 'background_color', 'stream_goal', 'event_goal'],
4748
updateDonationGoalPreview
4849
);
4950
}
@@ -74,7 +75,9 @@ if (cardWidgetForm) {
7475
const barBgColor = document.getElementById('card_bar_background_color').value;
7576
const tagColor = document.getElementById('card_tag_color').value;
7677
const tagBgColor = document.getElementById('card_tag_background_color').value;
77-
const goalValue = parseFloat(document.getElementById('card_goal').value) || 1;
78+
// L'objectif est maintenant dans le formulaire d'infos (stream_goal ou event_goal)
79+
const goalInput = document.getElementById('stream_goal') || document.getElementById('event_goal');
80+
const goalValue = goalInput ? (parseFloat(goalInput.value) || 1) : 1;
7881

7982
if (preview) {
8083
preview.style.backgroundColor = bgColor;
@@ -101,9 +104,10 @@ if (cardWidgetForm) {
101104

102105
bindPreviewInputs(
103106
[
104-
'card_tag', 'card_title', 'card_description', 'card_goal',
107+
'card_tag', 'card_title', 'card_description',
105108
'card_background_color', 'card_text_color', 'card_bar_color',
106109
'card_bar_background_color', 'card_tag_color', 'card_tag_background_color',
110+
'stream_goal', 'event_goal',
107111
],
108112
updateCardPreview
109113
);

src/Controllers/AdminController.php

Lines changed: 56 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,28 @@ public function __construct(
3232
private AuthorizationCodeRepository $authorizationCodeRepository,
3333
) {}
3434

35+
/**
36+
* Retourne les slugs d'organisation dont le token est expiré parmi les streams donnés.
37+
*/
38+
private function getInvalidTokenSlugs(array $streams): array
39+
{
40+
$validSlugs = $this->accessTokenRepository->getValidOrganizationSlugs();
41+
$invalidSlugs = [];
42+
foreach ($streams as $stream) {
43+
if ($stream->organization_slug && !in_array($stream->organization_slug, $validSlugs)) {
44+
$invalidSlugs[] = $stream->organization_slug;
45+
}
46+
}
47+
return array_unique($invalidSlugs);
48+
}
49+
50+
private function redirectToRoute(Request $request, Response $response, string $routeName, array $params = []): Response
51+
{
52+
$routeParser = RouteContext::fromRequest($request)->getRouteParser();
53+
$url = $routeParser->urlFor($routeName, $params);
54+
return $response->withHeader('Location', $url)->withStatus(302);
55+
}
56+
3557
public function index(Request $request, Response $response): Response
3658
{
3759
$user = $request->getAttribute('user');
@@ -43,13 +65,6 @@ public function index(Request $request, Response $response): Response
4365
$events = $this->eventRepository->selectListByUser($user);
4466
}
4567

46-
$validSlugs = $this->accessTokenRepository->getValidOrganizationSlugs();
47-
$invalidTokenSlugs = [];
48-
foreach ($streams as $stream) {
49-
if ($stream->organization_slug && !in_array($stream->organization_slug, $validSlugs)) {
50-
$invalidTokenSlugs[] = $stream->organization_slug;
51-
}
52-
}
5368

5469
$data = [
5570
"streams" => $streams,
@@ -58,7 +73,7 @@ public function index(Request $request, Response $response): Response
5873
"currentUser" => $user,
5974
"selectedEventId" => $request->getQueryParams()['eventId'] ?? null,
6075
"openCreateStream" => isset($request->getQueryParams()['createStream']),
61-
"invalidTokenSlugs" => $invalidTokenSlugs,
76+
"invalidTokenSlugs" => $this->getInvalidTokenSlugs($streams),
6277
];
6378

6479
$template = $user->role === "ADMIN" ? 'stream/index-admin.html.twig' : 'stream/index.html.twig';
@@ -74,28 +89,23 @@ public function newEvent(Request $request, Response $response): Response
7489
$this->userRepository->insertRight($user, null, $event);
7590

7691
$this->messages->addMessage('success', 'Évènement ajouté');
77-
$routeParser = RouteContext::fromRequest($request)->getRouteParser();
78-
$url = $routeParser->urlFor('app_admin_index');
79-
80-
return $response->withHeader('Location', $url)->withStatus(302);
92+
return $this->redirectToRoute($request, $response, 'app_admin_index');
8193
}
8294

8395
public function deleteEvent(Request $request, Response $response, array $args): Response
8496
{
8597
$user = $request->getAttribute('user');
86-
$routeParser = RouteContext::fromRequest($request)->getRouteParser();
87-
$url = $routeParser->urlFor('app_admin_index');
8898

8999
$event = $this->eventRepository->selectByUserAndGuid($user, $args['id']);
90100
if (!$event) {
91101
$this->messages->addMessage('error', 'Tu n\'as pas accès cet évènement');
92-
return $response->withHeader('Location', $url)->withStatus(302);
102+
return $this->redirectToRoute($request, $response, 'app_admin_index');
93103
}
94104

95105
$this->eventRepository->delete($event);
96106
$this->messages->addMessage('success', 'Évènement supprimé');
97107

98-
return $response->withHeader('Location', $url)->withStatus(302);
108+
return $this->redirectToRoute($request, $response, 'app_admin_index');
99109
}
100110

101111
public function editEvent(Request $request, Response $response, array $args): Response
@@ -107,19 +117,11 @@ public function editEvent(Request $request, Response $response, array $args): Re
107117
$streams = $this->streamRepository->selectListByEvent($event);
108118
$routeParser = RouteContext::fromRequest($request)->getRouteParser();
109119

110-
$validSlugs = $this->accessTokenRepository->getValidOrganizationSlugs();
111-
$invalidTokenSlugs = [];
112-
foreach ($streams as $stream) {
113-
if ($stream->organization_slug && !in_array($stream->organization_slug, $validSlugs)) {
114-
$invalidTokenSlugs[] = $stream->organization_slug;
115-
}
116-
}
117-
118120
$data = [
119121
"logged" => true,
120122
"event" => $event,
121123
"streams" => $streams,
122-
"invalidTokenSlugs" => $invalidTokenSlugs,
124+
"invalidTokenSlugs" => $this->getInvalidTokenSlugs($streams),
123125
"donationGoalWidget" => $donationGoalWidget,
124126
"cardWidget" => $cardWidget,
125127
"cardWidgetPictureUrl" => ($cardWidget && $cardWidget->image) ? $this->fileManager->getPictureUrl($cardWidget->image) : null,
@@ -135,12 +137,22 @@ public function editEventPost(Request $request, Response $response, array $args)
135137
$user = $request->getAttribute('user');
136138
$event = $this->eventRepository->selectByUserAndGuid($user, $args['id']);
137139

138-
$this->handleWidgetFormSave($request, null, $event->guid);
140+
$body = $request->getParsedBody();
139141

140-
$routeParser = RouteContext::fromRequest($request)->getRouteParser();
141-
$url = $routeParser->urlFor('app_event_edit', ["id" => $event->guid]);
142+
if (isset($body['save_event_info'])) {
143+
$updateData = [];
144+
if (isset($body['event_title'])) {
145+
$updateData['title'] = $body['event_title'];
146+
}
147+
if (isset($body['event_goal'])) {
148+
$updateData['goal'] = (int) $body['event_goal'];
149+
}
150+
$this->eventRepository->update($event, $updateData);
151+
}
142152

143-
return $response->withHeader('Location', $url)->withStatus(302);
153+
$this->handleWidgetFormSave($request, null, $event->guid);
154+
155+
return $this->redirectToRoute($request, $response, 'app_event_edit', ["id" => $event->guid]);
144156
}
145157

146158
public function newStream(Request $request, Response $response): Response
@@ -177,28 +189,23 @@ public function newStream(Request $request, Response $response): Response
177189
}
178190

179191
$this->messages->addMessage('success', 'Stream ajouté');
180-
$routeParser = RouteContext::fromRequest($request)->getRouteParser();
181-
$url = $routeParser->urlFor('app_admin_index');
182-
183-
return $response->withHeader('Location', $url)->withStatus(302);
192+
return $this->redirectToRoute($request, $response, 'app_admin_index');
184193
}
185194

186195
public function deleteStream(Request $request, Response $response, array $args): Response
187196
{
188197
$user = $request->getAttribute('user');
189-
$routeParser = RouteContext::fromRequest($request)->getRouteParser();
190-
$url = $routeParser->urlFor('app_admin_index');
191198

192199
$stream = $this->streamRepository->selectByUserAndGuid($user, $args['id']);
193200
if (!$stream) {
194201
$this->messages->addMessage('error', 'Tu n\'as pas accès ce stream');
195-
return $response->withHeader('Location', $url)->withStatus(302);
202+
return $this->redirectToRoute($request, $response, 'app_admin_index');
196203
}
197204

198205
$this->streamRepository->delete($stream);
199206
$this->messages->addMessage('success', 'Stream supprimé');
200207

201-
return $response->withHeader('Location', $url)->withStatus(302);
208+
return $this->redirectToRoute($request, $response, 'app_admin_index');
202209
}
203210

204211
public function editStream(Request $request, Response $response, array $args): Response
@@ -246,6 +253,17 @@ public function editStreamPost(Request $request, Response $response, array $args
246253

247254
$body = $request->getParsedBody();
248255

256+
if (isset($body['save_stream_info'])) {
257+
$updateData = [];
258+
if (isset($body['stream_title'])) {
259+
$updateData['title'] = $body['stream_title'];
260+
}
261+
if (isset($body['stream_goal'])) {
262+
$updateData['goal'] = (int) $body['stream_goal'];
263+
}
264+
$this->streamRepository->update($charityStream, $updateData);
265+
}
266+
249267
if (isset($body['save_alert_box'])) {
250268
$uploadedFiles = $request->getUploadedFiles();
251269
$image = isset($uploadedFiles['image']) && $uploadedFiles['image']->getSize() > 0
@@ -260,10 +278,7 @@ public function editStreamPost(Request $request, Response $response, array $args
260278

261279
$this->handleWidgetFormSave($request, $guid, null);
262280

263-
$routeParser = RouteContext::fromRequest($request)->getRouteParser();
264-
$url = $routeParser->urlFor('app_stream_edit', ["id" => $guid]);
265-
266-
return $response->withHeader('Location', $url)->withStatus(302);
281+
return $this->redirectToRoute($request, $response, 'app_stream_edit', ["id" => $guid]);
267282
}
268283

269284
/**

src/Controllers/ApiController.php

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,17 @@
22

33
namespace App\Controllers;
44

5-
use App\Repositories\FileManager;
65
use App\Repositories\StreamRepository;
76
use App\Repositories\UserRepository;
87
use Psr\Http\Message\ResponseInterface as Response;
98
use Psr\Http\Message\ServerRequestInterface as Request;
10-
use Slim\Flash\Messages;
119
use Slim\Routing\RouteContext;
12-
use Slim\Views\Twig;
1310

1411
class ApiController
1512
{
1613
public function __construct(
17-
private Twig $view,
18-
private FileManager $fileManager,
1914
private StreamRepository $streamRepository,
2015
private UserRepository $userRepository,
21-
private Messages $messages,
2216
) {}
2317

2418
public function new(Request $request, Response $response): Response

0 commit comments

Comments
 (0)