From 7fc59f1c58fa4a88273995970478833160670b50 Mon Sep 17 00:00:00 2001 From: St John Karp Date: Sun, 24 Mar 2019 19:45:36 +0000 Subject: [PATCH] Fix #5 - Implement deleting statuses Added a link (and a confirmation page) that allows a user to delete their own Statuses. --- README.md | 6 ++-- app/Http/Controllers/StatusController.php | 41 +++++++++++++++++++++++ public/css/styles.css | 8 +++++ resources/views/delete_status.blade.php | 25 ++++++++++++++ resources/views/status.blade.php | 9 ++++- routes/web.php | 4 +++ 6 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 resources/views/delete_status.blade.php diff --git a/README.md b/README.md index e9cda72..e67f48d 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,9 @@ Currently implemented features are: * pagination -* posting, favouriting, reblogging, and replying to statuses +* posting and deleting statuses + +* favouriting, reblogging, and replying to statuses * spoiler/content warnings @@ -40,8 +42,6 @@ Currently implemented features are: Features still to be implemented include: -* deleting statuses - * muting/blocking accounts * uploading attachments diff --git a/app/Http/Controllers/StatusController.php b/app/Http/Controllers/StatusController.php index 5545aaf..f216400 100644 --- a/app/Http/Controllers/StatusController.php +++ b/app/Http/Controllers/StatusController.php @@ -203,6 +203,47 @@ class StatusController extends Controller return redirect()->route('home'); } + /** + * + * Delete a Status. + * + * @param string $status_id The ID of the Status to be deleted. + * + * @return Illuminate\Routing\Redirector Redirect to the home timeline page. + */ + public function delete_status(string $status_id) + { + $user = session('user'); + + if (session()->has('delete_status') && session('delete_status') === $status_id) + { + # The user has confirmed the deletion, so go ahead and delete the Status. + + Mastodon::domain(env('MASTODON_DOMAIN')) + ->token($user->token) + ->call('DELETE', '/statuses/' . $status_id); + + return redirect()->route('home'); + } + else + { + # Render the confirmation page. + + session()->flash('delete_status', $status_id); + + $status = Mastodon::domain(env('MASTODON_DOMAIN')) + ->token(session('user')->token) + ->get('/statuses/' . $status_id); + + $vars = [ + 'status' => $status, + 'mastodon_domain' => explode('//', env('MASTODON_DOMAIN'))[1] + ]; + } + + return view('delete_status', $vars); + } + /** * Show the context of a Status. * diff --git a/public/css/styles.css b/public/css/styles.css index c87929c..cee05ce 100644 --- a/public/css/styles.css +++ b/public/css/styles.css @@ -71,6 +71,10 @@ div.actions span.reblogged a { color: green; } +span#delete { + font-size: smaller; +} + time, span.event-indicators { font-size: smaller; margin-left: 1em; @@ -96,3 +100,7 @@ nav ul li { display: inline; margin-top: 0; } + +p.warning { + color: red; +} diff --git a/resources/views/delete_status.blade.php b/resources/views/delete_status.blade.php new file mode 100644 index 0000000..64489d0 --- /dev/null +++ b/resources/views/delete_status.blade.php @@ -0,0 +1,25 @@ + + + + + + + + {{ $mastodon_domain }} | Delete Status + + + + +

{{ $mastodon_domain }} | Delete Status

+ + @component('navigation') + @endcomponent + +

Are you sure you want to delete this status? Click the delete link again to confirm.

+ + + + diff --git a/resources/views/status.blade.php b/resources/views/status.blade.php index ddae5fa..631f18c 100644 --- a/resources/views/status.blade.php +++ b/resources/views/status.blade.php @@ -54,6 +54,13 @@ @endif {{ $status['favourites_count'] }} - + + + + @if (Session::has('user') && Session::get('user')->id === $status['account']['id']) + + 🗙 + + @endif diff --git a/routes/web.php b/routes/web.php index 1660604..e08be12 100644 --- a/routes/web.php +++ b/routes/web.php @@ -48,6 +48,10 @@ Route::get('/status/{status_id}/unfavourite', 'StatusController@unfavourite_stat ->name('unfavourite') ->middleware('authorize'); +Route::get('/status/{status_id}/delete', 'StatusController@delete_status') + ->name('delete') + ->middleware('authorize'); + Route::get('/status/{status_id}/thread', 'StatusController@context') ->name('thread');