Skip to content

Commit 2b3b4cf

Browse files
author
HugoFara
committed
refactor(routes): use RESTful URLs for language delete and refresh
Replace query parameter routes with proper RESTful routes: - DELETE /languages/{id} instead of /languages?del={id} - POST /languages/{id}/refresh instead of /languages?refresh={id} Add dedicated controller methods: - delete(int $id): handles language deletion with redirect - refresh(int $id): handles text reparsing with redirect Update index() to only show list view, removing old query param handling.
1 parent 98a4143 commit 2b3b4cf

File tree

1 file changed

+79
-29
lines changed

1 file changed

+79
-29
lines changed

src/Modules/Language/Http/LanguageController.php

Lines changed: 79 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -89,42 +89,23 @@ public function new(array $params): void
8989
}
9090

9191
/**
92-
* Languages index page - handles all language operations.
92+
* Edit language form.
9393
*
94-
* Routes based on request parameters:
95-
* - chg=[id]: Show edit form for language
96-
* - del=[id]: Delete language
97-
* - refresh=[id]: Reparse texts for language
98-
* - op=Save: Create new language
99-
* - op=Change: Update existing language
100-
* - (default): Show language list
94+
* Route: GET/POST /languages/{id}/edit
10195
*
102-
* @param array $params Route parameters
96+
* @param int $id Language ID from route parameter
10397
*
10498
* @return void
10599
*/
106-
public function index(array $params): void
100+
public function edit(int $id): void
107101
{
108102
PageLayoutHelper::renderPageStart('Languages', true);
109103

110104
$message = '';
111105

112-
// Handle actions
113-
$refreshId = $this->paramInt('refresh');
114-
if ($refreshId !== null) {
115-
$result = $this->languageFacade->refresh($refreshId);
116-
$message = "Sentences deleted: {$result['sentencesDeleted']} / " .
117-
"Text items deleted: {$result['textItemsDeleted']} / " .
118-
"Sentences added: {$result['sentencesAdded']} / " .
119-
"Text items added: {$result['textItemsAdded']}";
120-
}
121-
122-
$delId = $this->paramInt('del');
106+
// Handle update operation
123107
$op = $this->param('op');
124-
if ($delId !== null) {
125-
$result = $this->languageFacade->delete($delId);
126-
$message = $result['error'] ?? "Deleted: {$result['count']}";
127-
} elseif ($op === 'Change') {
108+
if ($op === 'Change') {
128109
$lgId = $this->paramInt('LgID', 0) ?? 0;
129110
$result = $this->languageFacade->update($lgId);
130111
if ($result['error'] !== null) {
@@ -134,14 +115,83 @@ public function index(array $params): void
134115
} else {
135116
$message = "Updated: 1 / Reparsing not needed";
136117
}
118+
// After successful update, redirect to languages list
119+
if ($result['error'] === null) {
120+
header('Location: ' . url('/languages'));
121+
exit;
122+
}
137123
}
138124

139-
// Display appropriate view
140-
if ($this->hasParam('chg')) {
141-
$this->showEditForm($this->paramInt('chg', 0) ?? 0);
125+
$this->showEditForm($id);
126+
127+
PageLayoutHelper::renderPageEnd();
128+
}
129+
130+
/**
131+
* Delete a language.
132+
*
133+
* Route: DELETE /languages/{id}
134+
*
135+
* @param int $id Language ID from route parameter
136+
*
137+
* @return void
138+
*/
139+
public function delete(int $id): void
140+
{
141+
$result = $this->languageFacade->delete($id);
142+
$error = $result['error'];
143+
144+
if ($error !== null) {
145+
// Error - redirect back with error message
146+
header('Location: ' . url('/languages') . '?error=' . urlencode($error));
142147
} else {
143-
$this->showList($message);
148+
// Success - redirect to languages list
149+
header('Location: ' . url('/languages'));
144150
}
151+
exit;
152+
}
153+
154+
/**
155+
* Refresh (reparse) all texts for a language.
156+
*
157+
* Route: POST /languages/{id}/refresh
158+
*
159+
* @param int $id Language ID from route parameter
160+
*
161+
* @return void
162+
*/
163+
public function refresh(int $id): void
164+
{
165+
$result = $this->languageFacade->refresh($id);
166+
167+
$message = "Sentences deleted: {$result['sentencesDeleted']} / " .
168+
"Text items deleted: {$result['textItemsDeleted']} / " .
169+
"Sentences added: {$result['sentencesAdded']} / " .
170+
"Text items added: {$result['textItemsAdded']}";
171+
172+
// Redirect to languages list with message
173+
header('Location: ' . url('/languages') . '?message=' . urlencode($message));
174+
exit;
175+
}
176+
177+
/**
178+
* Languages index page - shows language list.
179+
*
180+
* Route: GET /languages
181+
*
182+
* @param array $params Route parameters
183+
*
184+
* @return void
185+
*/
186+
public function index(array $params): void
187+
{
188+
PageLayoutHelper::renderPageStart('Languages', true);
189+
190+
// Check for message from redirect (e.g., after refresh/delete)
191+
$message = $this->hasParam('message') ? $this->param('message') :
192+
($this->hasParam('error') ? $this->param('error') : '');
193+
194+
$this->showList($message);
145195

146196
PageLayoutHelper::renderPageEnd();
147197
}

0 commit comments

Comments
 (0)