status = $status; } /** * Execute the job. * * @return void */ public function handle() { $status = $this->status; if(config('pixelfed.activitypub_enabled') == true) { $this->fanoutDelete($status); } else { $this->unlinkRemoveMedia($status); } } public function unlinkRemoveMedia($status) { 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) { } } $comments = Status::where('in_reply_to_id', $status->id)->get(); foreach ($comments as $comment) { $comment->in_reply_to_id = null; $comment->save(); Notification::whereItemType('App\Status') ->whereItemId($comment->id) ->delete(); } $status->likes()->delete(); Notification::whereItemType('App\Status') ->whereItemId($status->id) ->delete(); StatusHashtag::whereStatusId($status->id)->delete(); Report::whereObjectType('App\Status') ->whereObjectId($status->id) ->delete(); $status->delete(); return true; } protected function fanoutDelete($status) { $audience = $status->profile->getAudienceInbox(); $profile = $status->profile; $fractal = new Fractal\Manager(); $fractal->setSerializer(new ArraySerializer()); $resource = new Fractal\Resource\Item($status, new DeleteNote()); $activity = $fractal->createData($resource)->toArray(); $this->unlinkRemoveMedia($status); foreach($audience as $url) { Helpers::sendSignedObject($profile, $url, $activity); } } }