1
0

StatusEditController.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use App\Http\Requests\Status\StoreStatusEditRequest;
  5. use App\Status;
  6. use App\Models\StatusEdit;
  7. use Purify;
  8. use App\Services\Status\UpdateStatusService;
  9. use App\Services\StatusService;
  10. use App\Util\Lexer\Autolink;
  11. use App\Jobs\StatusPipeline\StatusLocalUpdateActivityPubDeliverPipeline;
  12. class StatusEditController extends Controller
  13. {
  14. public function __construct()
  15. {
  16. $this->middleware('auth');
  17. abort_if(!config('exp.pue'), 404, 'Post editing is not enabled on this server.');
  18. }
  19. public function store(StoreStatusEditRequest $request, $id)
  20. {
  21. $validated = $request->validated();
  22. $status = Status::findOrFail($id);
  23. abort_if(StatusEdit::whereStatusId($status->id)->count() >= 10, 400, 'You cannot edit your post more than 10 times.');
  24. $res = UpdateStatusService::call($status, $validated);
  25. $status = Status::findOrFail($id);
  26. StatusLocalUpdateActivityPubDeliverPipeline::dispatch($status)->delay(now()->addMinutes(1));
  27. return $res;
  28. }
  29. public function history(Request $request, $id)
  30. {
  31. abort_if(!$request->user(), 403);
  32. $status = Status::whereNull('reblog_of_id')->findOrFail($id);
  33. abort_if(!in_array($status->scope, ['public', 'unlisted']), 403);
  34. if(!$status->edits()->count()) {
  35. return [];
  36. }
  37. $cached = StatusService::get($status->id, false);
  38. $res = $status->edits->map(function($edit) use($cached) {
  39. return [
  40. 'content' => Autolink::create()->autolink($edit->caption),
  41. 'spoiler_text' => $edit->spoiler_text,
  42. 'sensitive' => (bool) $edit->is_nsfw,
  43. 'created_at' => str_replace('+00:00', 'Z', $edit->created_at->format(DATE_RFC3339_EXTENDED)),
  44. 'account' => $cached['account'],
  45. 'media_attachments' => $cached['media_attachments'],
  46. 'emojis' => $cached['emojis'],
  47. ];
  48. })->reverse()->values()->toArray();
  49. return $res;
  50. }
  51. }