Skip to content
Snippets Groups Projects
Commit 3f8b51ac authored by Sofiane Lasri's avatar Sofiane Lasri
Browse files

feat: update social media links management

- Renamed methods in `CategoryController` to `createPage` and `editPage`.
- Added `createPage`, `editPage`, `store`, `update`, and `delete` methods in `SocialMediaLinksController` for better handling of social media links.
- Introduced validation for slug uniqueness in `CreationController` and `CategoryController`.
- Improved the form in the `edit` view for social media links to include error handling and success messages.
parent 6ddde851
Branches
No related tags found
1 merge request!5feat: add social media links management to admin panel
Pipeline #632 passed
......@@ -38,7 +38,7 @@ public function index(): View
]);
}
public function create(): View
public function createPage(): View
{
return view('admin.categories.edit', [
'title' => 'Créer une catégorie',
......@@ -46,7 +46,7 @@ public function create(): View
]);
}
public function edit(Request $request, int $id): View
public function editPage(Request $request, int $id): View
{
$request->validate([
'lang' => 'sometimes|string|in:fr,en',
......@@ -74,6 +74,12 @@ public function store(Request $request): RedirectResponse
$slug = Str::slug($request->input('slug'));
if (Category::where('slug', $slug)->exists()) {
return redirect()->route('admin.categories.create')
->withInput()
->with('error', 'Un catégorie avec ce slug existe déjà.');
}
$translationKey = TranslationKey::create([
'key' => 'category_'.Str::uuid(),
]);
......@@ -105,6 +111,12 @@ public function update(Request $request, int $id): RedirectResponse
$slug = Str::slug($request->input('slug'));
if (Category::where('slug', $slug)->where('id', '!=', $id)->exists()) {
return redirect()->route('admin.categories.edit', ['category' => $id])
->withInput()
->with('error', 'Un catégorie avec ce slug existe déjà.');
}
$category = Category::findOrFail($id);
$translationKey = $category->nameTranslationKey;
......
......@@ -116,6 +116,13 @@ public function store(Request $request): RedirectResponse
]);
$slug = Str::slug($request->input('slug'));
if (Creation::where('slug', $slug)->exists()) {
return redirect()->route('admin.creations.create')
->withInput()
->with('error', 'Un élément avec ce slug existe déjà.');
}
$shortDescription = ! empty($request->input('short_description')) ? $request->input('short_description') : '';
$description = ! empty($request->input('description')) ? $request->input('description') : '';
......@@ -157,6 +164,7 @@ public function store(Request $request): RedirectResponse
]);
return redirect()->route('admin.creations.create')
->withInput()
->with('error', 'Une erreur est survenue lors de l\'enregistrement de l\'image.');
}
......@@ -218,6 +226,14 @@ public function update(Request $request, int $id): RedirectResponse
$creation = Creation::findOrFail($id);
$slug = Str::slug($request->input('slug'));
if (Creation::where('slug', $slug)->where('id', '!=', $id)->exists()) {
return redirect()->route('admin.creations.edit', [
'creation' => $creation->id,
'lang' => $request->input('lang'),
])->with('error', 'Un élément avec ce slug existe déjà.');
}
$shortDescription = ! empty($request->input('short_description')) ? $request->input('short_description') : '';
$description = ! empty($request->input('description')) ? $request->input('description') : '';
......
......@@ -4,6 +4,8 @@
use App\Http\Controllers\Controller;
use App\Models\SocialMediaLink;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;
class SocialMediaLinksController extends Controller
......@@ -31,13 +33,60 @@ public function listPage(): View
]);
}
public function createPage() {}
public function createPage(): View
{
return view('admin.social-media-links.edit', [
'title' => 'Ajouter un lien',
'headerRoutes' => $this->headerRoutes,
]);
}
public function editPage(Request $request, int $id)
{
$socialMediaLink = SocialMediaLink::findOrFail($id);
return view('admin.social-media-links.edit', [
'title' => 'Modifier un lien',
'headerRoutes' => $this->headerRoutes,
'link' => $socialMediaLink,
]);
}
public function store(Request $request): RedirectResponse
{
$request->validate([
'icon_name' => 'required|string',
'name' => 'required|string',
'url' => 'required|url',
]);
$socialMediaLink = SocialMediaLink::create($request->all());
public function editPage() {}
return redirect()->route('admin.social-media-links.edit', ['socialMediaLink' => $socialMediaLink->id])
->with('success', 'Le lien a bien été ajouté.');
}
public function store() {}
public function update(Request $request): RedirectResponse
{
$request->validate([
'id' => 'required|integer',
'icon_name' => 'required|string',
'name' => 'required|string',
'url' => 'required|url',
]);
public function update() {}
$socialMediaLink = SocialMediaLink::findOrFail($request->input('id'));
$socialMediaLink->update($request->all());
public function delete() {}
return redirect()->route('admin.social-media-links.edit', ['socialMediaLink' => $socialMediaLink->id])
->with('success', 'Le lien a bien été modifié.');
}
public function delete(int $id): RedirectResponse
{
SocialMediaLink::destroy($id);
return redirect()->route('admin.social-media-links.index')
->with('success', 'Le lien a bien été supprimé.');
}
}
@extends('layouts.admin', ['title' => $title, 'headerRoutes' => $headerRoutes])
@section('content')
<div class="grid">
<div class="g-col-12 g-col-md-6">
<h5>Information</h5>
<p>Lorem ipsum.</p>
<form
action="{{ !empty($link) ? route('admin.social-media-links.update', $link->id) : route('admin.social-media-links.store') }}"
method="post">
@csrf
@if(!empty($link))
@method('PUT')
<input type="hidden" name="id" value="{{ $link->id }}"/>
@endif
<div class="mb-3">
<x-bs.input
label="Nom de l'icône"
name="icon_name"
class=""
value="{{ old('icon_name', $link->icon_name ?? '') }}"
required
data-form-type="other"
/>
<div class="text-muted">
La liste des icônes disponibles est disponible sur le site de
<a href="https://fontawesome.com/v6/search?o=r&ic=brands"
target="_blank">Font Awesome</a>.
</div>
<div class="text-muted">
Attention, il faut prendre le nom de l'icône sans le
préfixe <code>fa-</code> et vérifier que l'icône est bien une icône de marque.
</div>
<div class="mt-2 text-muted">
Exemple: <code>twitter</code> pour l'icône
<code>&lt;i class=&quot;fa-brands fa-twitter&quot;&gt;&lt;/i&gt;</code>
</div>
</div>
<x-bs.input
label="Nom du réseau"
name="name"
class="mb-3"
value="{{ old('name', $link->name ?? '') }}"
required
data-form-type="other"
/>
<x-bs.input
label="Lien"
name="url"
class="mb-3"
value="{{ old('slug', !empty($link) ? $link->url : '') }}"
required
/>
<x-bs.button type="submit">Enregistrer</x-bs.button>
</form>
@if ($errors->any())
<x-bs.alert type="danger" class="mt-3">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</x-bs.alert>
@endif
@if (session('success'))
<x-bs.alert type="success" class="mt-3">
{{ session('success') }}
</x-bs.alert>
@endif
</div>
</div>
@endsection
\ No newline at end of file
......@@ -25,7 +25,7 @@
<tr>
<th scope="row">{{ $link->id }}</th>
<td>
<x-font-awesome :icon="$link->icon_name" type="brands"/>
<x-font-awesome :icon="$link->icon_name" type="brands" height="1.5rem" style="fill: var(--bs-body-color);"/>
</td>
<td>{{ $link->name }}</td>
<td>{{ $link->url }}</td>
......
......@@ -27,11 +27,11 @@
Route::prefix('categories')->name('admin.categories.')->group(function () {
Route::get('/', [CategoryController::class, 'index'])
->name('index');
Route::get('/create', [CategoryController::class, 'create'])
Route::get('/create', [CategoryController::class, 'createPage'])
->name('create');
Route::post('/', [CategoryController::class, 'store'])
->name('store');
Route::get('/{category}/edit', [CategoryController::class, 'edit'])
Route::get('/{category}/edit', [CategoryController::class, 'editPage'])
->name('edit');
Route::put('/{category}', [CategoryController::class, 'update'])
->name('update');
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment