From 91a6f8eba53105253d3f7cb35277e06284eeca64 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Fri, 1 Jun 2018 15:04:33 -0600 Subject: [PATCH] Add post delete method --- app/Http/Controllers/StatusController.php | 22 +++++++- app/Jobs/StatusPipeline/StatusDelete.php | 68 +++++++++++++++++++++++ resources/views/status/show.blade.php | 18 +++++- resources/views/status/template.blade.php | 24 +++++++- routes/web.php | 1 + 5 files changed, 128 insertions(+), 5 deletions(-) create mode 100644 app/Jobs/StatusPipeline/StatusDelete.php diff --git a/app/Http/Controllers/StatusController.php b/app/Http/Controllers/StatusController.php index 3ad994eed..0220b6d0f 100644 --- a/app/Http/Controllers/StatusController.php +++ b/app/Http/Controllers/StatusController.php @@ -3,7 +3,7 @@ namespace App\Http\Controllers; use Auth, Cache; -use App\Jobs\StatusPipeline\NewStatusPipeline; +use App\Jobs\StatusPipeline\{NewStatusPipeline, StatusDelete}; use Illuminate\Http\Request; use App\{Media, Profile, Status, User}; use Vinkla\Hashids\Facades\Hashids; @@ -60,4 +60,24 @@ class StatusController extends Controller return redirect($status->url()); } + + public function delete(Request $request) + { + if(!Auth::check()) { + abort(403); + } + + $this->validate($request, [ + 'type' => 'required|string', + 'item' => 'required|integer|min:1' + ]); + + $status = Status::findOrFail($request->input('item')); + + if($status->profile_id === Auth::user()->profile->id || Auth::user()->is_admin == true) { + StatusDelete::dispatch($status); + } + + return redirect(Auth::user()->url()); + } } diff --git a/app/Jobs/StatusPipeline/StatusDelete.php b/app/Jobs/StatusPipeline/StatusDelete.php new file mode 100644 index 000000000..571b41a55 --- /dev/null +++ b/app/Jobs/StatusPipeline/StatusDelete.php @@ -0,0 +1,68 @@ +status = $status; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + $status = $this->status; + $this->unlinkRemoveMedia($status); + } + + public function unlinkRemoveMedia($status) + { + if($status->media()->count() == 0) { + return; + } + + foreach($status->media as $media) { + $thumbnail = storage_path("app/{$media->thumbnail_path}"); + $photo = storage_path("app/{$media->media_path}"); + + try { + if(is_file($thumbnail)) { + unlink($thumbnail); + } + if(is_file($photo)) { + unlink($photo); + } + $media->delete(); + } catch (Exception $e) { + + } + } + + $status->likes()->delete(); + StatusHashtag::whereStatusId($status->id)->delete(); + $status->delete(); + + return true; + } +} diff --git a/resources/views/status/show.blade.php b/resources/views/status/show.blade.php index 667eabc05..7c882def9 100644 --- a/resources/views/status/show.blade.php +++ b/resources/views/status/show.blade.php @@ -44,9 +44,23 @@ - + + @if(Auth::check()) + @if(Auth::user()->profile->id === $status->profile->id || Auth::user()->is_admin == true) +
+ @csrf + + + +
+ @endif + @endif - +
+ @csrf + + +
diff --git a/resources/views/status/template.blade.php b/resources/views/status/template.blade.php index b0019e989..271d98592 100644 --- a/resources/views/status/template.blade.php +++ b/resources/views/status/template.blade.php @@ -13,6 +13,17 @@ Go to post Report Inappropriate Embed + @if(Auth::check()) + @if(Auth::user()->profile->id === $item->profile->id || Auth::user()->is_admin == true) +
+ @csrf + + + +
+ @endif + @endif +
@@ -55,8 +66,17 @@
@if(isset($showSingleComment) && $showSingleComment === true)

- {{$status->profile->username}} - {!!$status->rendered!!}{{$status->created_at->diffForHumans(null, true, true, true)}} + + + {{$status->profile->username}} + + + {!!$status->rendered!!} + + + {{$status->created_at->diffForHumans(null, true, true, true)}} + +

@else @foreach($item->comments->reverse()->take(3) as $comment) diff --git a/routes/web.php b/routes/web.php index 7b9e1f8f5..3cc8d559c 100644 --- a/routes/web.php +++ b/routes/web.php @@ -56,6 +56,7 @@ Route::domain(config('pixelfed.domain.app'))->group(function() { Route::get('remote-follow', 'FederationController@remoteFollow')->name('remotefollow'); Route::post('remote-follow', 'FederationController@remoteFollowStore'); Route::post('comment', 'CommentController@store'); + Route::post('delete', 'StatusController@delete'); Route::post('like', 'LikeController@store'); Route::post('follow', 'FollowerController@store'); Route::post('bookmark', 'BookmarkController@store');