1
0

StatusEditController.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. $caption = nl2br(strip_tags(str_replace('</p>', "\n", $edit->caption)));
  40. return [
  41. 'content' => Autolink::create()->autolink($caption),
  42. 'spoiler_text' => $edit->spoiler_text,
  43. 'sensitive' => (bool) $edit->is_nsfw,
  44. 'created_at' => str_replace('+00:00', 'Z', $edit->created_at->format(DATE_RFC3339_EXTENDED)),
  45. 'account' => $cached['account'],
  46. 'media_attachments' => $cached['media_attachments'],
  47. 'emojis' => $cached['emojis'],
  48. ];
  49. })->reverse()->values()->toArray();
  50. return $res;
  51. }
  52. }