From 0ddec78d09c63eceea4964a572f84ebe2b0db512 Mon Sep 17 00:00:00 2001 From: Jonny Barnes Date: Sun, 23 Oct 2022 13:11:31 +0100 Subject: [PATCH] Allow syndication targets to be added/edited in admin interface --- .../Admin/SyndicationTargetsController.php | 99 +++++++++++++++++++ app/Models/SyndicationTarget.php | 16 +++ .../views/admin/syndication/create.blade.php | 45 +++++++++ .../views/admin/syndication/edit.blade.php | 52 ++++++++++ .../views/admin/syndication/index.blade.php | 22 +++++ resources/views/admin/welcome.blade.php | 6 ++ routes/web.php | 11 +++ 7 files changed, 251 insertions(+) create mode 100644 app/Http/Controllers/Admin/SyndicationTargetsController.php create mode 100644 resources/views/admin/syndication/create.blade.php create mode 100644 resources/views/admin/syndication/edit.blade.php create mode 100644 resources/views/admin/syndication/index.blade.php diff --git a/app/Http/Controllers/Admin/SyndicationTargetsController.php b/app/Http/Controllers/Admin/SyndicationTargetsController.php new file mode 100644 index 00000000..f8c93260 --- /dev/null +++ b/app/Http/Controllers/Admin/SyndicationTargetsController.php @@ -0,0 +1,99 @@ +validate([ + 'uid' => 'required|string', + 'name' => 'required|string', + ]); + + SyndicationTarget::create($validated); + + return redirect('/admin/syndication'); + } + + /** + * Show a form to edit a syndication target. + * + * @param SyndicationTarget $syndicationTarget + * @return View + */ + public function edit(SyndicationTarget $syndicationTarget): View + { + return view('admin.syndication.edit', [ + 'syndication_target' => $syndicationTarget, + ]); + } + + /** + * Process the request to edit a client name. + * + * @param Request $request + * @param SyndicationTarget $syndicationTarget + * @return RedirectResponse + */ + public function update(Request $request, SyndicationTarget $syndicationTarget): RedirectResponse + { + $validated = $request->validate([ + 'uid' => 'required|string', + 'name' => 'required|string', + ]); + + $syndicationTarget->update($validated); + + return redirect('/admin/syndication'); + } + + /** + * Process a request to delete a client. + * + * @param SyndicationTarget $syndicationTarget + * @return RedirectResponse + */ + public function destroy(SyndicationTarget $syndicationTarget): RedirectResponse + { + $syndicationTarget->delete(); + + return redirect('/admin/syndication'); + } +} diff --git a/app/Models/SyndicationTarget.php b/app/Models/SyndicationTarget.php index 74366afa..85d674c1 100644 --- a/app/Models/SyndicationTarget.php +++ b/app/Models/SyndicationTarget.php @@ -12,6 +12,22 @@ class SyndicationTarget extends Model { use HasFactory; + /** + * The attributes that are mass assignable. + * + * @var array + */ + protected $fillable = [ + 'uid', + 'name', + 'service_name', + 'service_url', + 'service_photo', + 'user_name', + 'user_url', + 'user_photo', + ]; + /** * The attributes that are visible when serializing the model. * diff --git a/resources/views/admin/syndication/create.blade.php b/resources/views/admin/syndication/create.blade.php new file mode 100644 index 00000000..df196e93 --- /dev/null +++ b/resources/views/admin/syndication/create.blade.php @@ -0,0 +1,45 @@ +@extends('master') + +@section('title')New Syndication Target « Admin CP « @stop + +@section('content') +

New Syndication Target

+
+ {{ csrf_field() }} +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+@stop diff --git a/resources/views/admin/syndication/edit.blade.php b/resources/views/admin/syndication/edit.blade.php new file mode 100644 index 00000000..400ff5d4 --- /dev/null +++ b/resources/views/admin/syndication/edit.blade.php @@ -0,0 +1,52 @@ +@extends('master') + +@section('title')Edit Syndication Target « Admin CP « @stop + +@section('content') +

Edit syndication target

+
+ {{ csrf_field() }} + {{ method_field('PUT') }} +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+ {{ csrf_field() }} + {{ method_field('DELETE') }} + +
+@stop diff --git a/resources/views/admin/syndication/index.blade.php b/resources/views/admin/syndication/index.blade.php new file mode 100644 index 00000000..513e2c76 --- /dev/null +++ b/resources/views/admin/syndication/index.blade.php @@ -0,0 +1,22 @@ +@extends('master') + +@section('title')List Syndication Targets « Admin CP « @stop + +@section('content') +

Syndication Targets

+ @if($targets->isEmpty()) +

No saved syndication targets.

+ @else + + @endif +

+ Create a new syndication target? +

+@stop diff --git a/resources/views/admin/welcome.blade.php b/resources/views/admin/welcome.blade.php index d29468b0..46ac746f 100644 --- a/resources/views/admin/welcome.blade.php +++ b/resources/views/admin/welcome.blade.php @@ -40,4 +40,10 @@ You can either create new places, or edit them.

+ +

Syndication

+

+ You can either create new syndication targets, + or edit them. +

@stop diff --git a/routes/web.php b/routes/web.php index 4d83f871..f721a2df 100644 --- a/routes/web.php +++ b/routes/web.php @@ -18,6 +18,7 @@ use App\Http\Controllers\Admin\HomeController; use App\Http\Controllers\Admin\LikesController as AdminLikesController; use App\Http\Controllers\Admin\NotesController as AdminNotesController; use App\Http\Controllers\Admin\PlacesController as AdminPlacesController; +use App\Http\Controllers\Admin\SyndicationTargetsController; use App\Http\Controllers\ArticlesController; use App\Http\Controllers\AuthController; use App\Http\Controllers\BookmarksController; @@ -122,6 +123,16 @@ Route::group(['domain' => config('url.longurl')], function () { Route::put('/{id}', [AdminLikesController::class, 'update']); Route::delete('/{id}', [AdminLikesController::class, 'destroy']); }); + + // Syndication Targets + Route::group(['prefix' => 'syndication'], function () { + Route::get('/', [SyndicationTargetsController::class, 'index']); + Route::get('/create', [SyndicationTargetsController::class, 'create']); + Route::post('/', [SyndicationTargetsController::class, 'store']); + Route::get('/{syndicationTarget}/edit', [SyndicationTargetsController::class, 'edit']); + Route::put('/{syndicationTarget}', [SyndicationTargetsController::class, 'update']); + Route::delete('/{syndicationTarget}', [SyndicationTargetsController::class, 'destroy']); + }); }); // Blog pages using ArticlesController