Browse Source

Update StatusController

Daniel Supernault 6 năm trước cách đây
mục cha
commit
83de8b98e6

+ 76 - 11
app/Http/Controllers/StatusController.php

@@ -21,17 +21,33 @@ class StatusController extends Controller
                 ->withCount(['likes', 'comments', 'media'])
                 ->withCount(['likes', 'comments', 'media'])
                 ->findOrFail($id);
                 ->findOrFail($id);
 
 
-        if(!$status->media_path && $status->in_reply_to_id) {
-          return redirect($status->url());
-        }
-
         if($request->wantsJson() && config('pixelfed.activitypub_enabled')) {
         if($request->wantsJson() && config('pixelfed.activitypub_enabled')) {
           return $this->showActivityPub($request, $status);
           return $this->showActivityPub($request, $status);
         }
         }
 
 
+        $template = $this->detectTemplate($status);
+
         $replies = Status::whereInReplyToId($status->id)->simplePaginate(30);
         $replies = Status::whereInReplyToId($status->id)->simplePaginate(30);
 
 
-        return view('status.show', compact('user', 'status', 'replies'));
+        return view($template, compact('user', 'status', 'replies'));
+    }
+
+    protected function detectTemplate($status)
+    {
+        $template = Cache::rememberForever('template:status:type:'.$status->id, function () use($status) {
+          $template = 'status.show.photo';
+          if(!$status->media_path && $status->in_reply_to_id) {
+            $template = 'status.reply';
+          }
+          if($status->media->count() > 1) {
+            $template = 'status.show.album';
+          }
+          if($status->viewType() == 'video') {
+            $template = 'status.show.video';
+          }
+          return $template;
+        });
+        return $template;
     }
     }
 
 
     public function compose()
     public function compose()
@@ -42,11 +58,7 @@ class StatusController extends Controller
 
 
     public function store(Request $request)
     public function store(Request $request)
     {
     {
-        if(Auth::check() == false)
-        { 
-          abort(403); 
-        }
-
+        $this->authCheck();
         $user = Auth::user();
         $user = Auth::user();
 
 
         $size = Media::whereUserId($user->id)->sum('size') / 1000;
         $size = Media::whereUserId($user->id)->sum('size') / 1000;
@@ -56,7 +68,7 @@ class StatusController extends Controller
         }
         }
 
 
         $this->validate($request, [
         $this->validate($request, [
-          'photo.*'   => 'required|mimes:jpeg,png,bmp,gif|max:' . config('pixelfed.max_photo_size'),
+          'photo.*'   => 'required|mimes:jpeg,png,gif|max:' . config('pixelfed.max_photo_size'),
           'caption' => 'string|max:' . config('pixelfed.max_caption_length'),
           'caption' => 'string|max:' . config('pixelfed.max_caption_length'),
           'cw'      => 'nullable|string',
           'cw'      => 'nullable|string',
           'filter_class' => 'nullable|string',
           'filter_class' => 'nullable|string',
@@ -83,11 +95,13 @@ class StatusController extends Controller
         foreach ($photos as $k => $v) {
         foreach ($photos as $k => $v) {
           $storagePath = "public/m/{$monthHash}/{$userHash}";
           $storagePath = "public/m/{$monthHash}/{$userHash}";
           $path = $v->store($storagePath);
           $path = $v->store($storagePath);
+          $hash = \hash_file('sha256', $v);
           $media = new Media;
           $media = new Media;
           $media->status_id = $status->id;
           $media->status_id = $status->id;
           $media->profile_id = $profile->id;
           $media->profile_id = $profile->id;
           $media->user_id = $user->id;
           $media->user_id = $user->id;
           $media->media_path = $path;
           $media->media_path = $path;
+          $media->original_sha256 = $hash;
           $media->size = $v->getClientSize();
           $media->size = $v->getClientSize();
           $media->mime = $v->getClientMimeType();
           $media->mime = $v->getClientMimeType();
           $media->filter_class = $request->input('filter_class');
           $media->filter_class = $request->input('filter_class');
@@ -172,6 +186,57 @@ class StatusController extends Controller
       return response(json_encode($res['data']))->header('Content-Type', 'application/activity+json');
       return response(json_encode($res['data']))->header('Content-Type', 'application/activity+json');
     }
     }
 
 
+    public function edit(Request $request, $username, $id)
+    {
+        $this->authCheck();
+        $user = Auth::user()->profile;
+        $status = Status::whereProfileId($user->id)
+                ->with(['media'])
+                ->findOrFail($id);
+        return view('status.edit', compact('user', 'status'));
+    }
+
+
+    public function editStore(Request $request, $username, $id)
+    {
+        $this->authCheck();
+        $user = Auth::user()->profile;
+        $status = Status::whereProfileId($user->id)
+                ->with(['media'])
+                ->findOrFail($id);
+
+        $this->validate($request, [
+          'id' => 'required|integer|min:1',
+          'caption' => 'nullable',
+          'filter' => 'nullable|alpha_dash|max:30'
+        ]);
+
+        $id = $request->input('id');
+        $caption = $request->input('caption');
+        $filter = $request->input('filter');
+
+        $media = Media::whereProfileId($user->id)
+            ->whereStatusId($status->id)
+            ->find($id);
+
+        $changed = false;
+
+        if($media->caption != $caption) {
+          $media->caption = $caption;
+          $changed = true;
+        }
+
+        if($media->filter_class != $filter) {
+          $media->filter_class = $filter;
+          $changed = true;
+        }
+
+        if($changed === true) {
+          $media->save();
+        }
+        return response()->json([], 200);
+    }
+
     protected function authCheck()
     protected function authCheck()
     {
     {
         if(Auth::check() == false)
         if(Auth::check() == false)