<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests\Status\StoreStatusEditRequest; use App\Status; use App\Models\StatusEdit; use Purify; use App\Services\Status\UpdateStatusService; use App\Services\StatusService; use App\Util\Lexer\Autolink; use App\Jobs\StatusPipeline\StatusLocalUpdateActivityPubDeliverPipeline; class StatusEditController extends Controller { public function __construct() { $this->middleware('auth'); abort_if(!config('exp.pue'), 404, 'Post editing is not enabled on this server.'); } public function store(StoreStatusEditRequest $request, $id) { $validated = $request->validated(); $status = Status::findOrFail($id); abort_if(StatusEdit::whereStatusId($status->id)->count() >= 10, 400, 'You cannot edit your post more than 10 times.'); $res = UpdateStatusService::call($status, $validated); $status = Status::findOrFail($id); StatusLocalUpdateActivityPubDeliverPipeline::dispatch($status)->delay(now()->addMinutes(1)); return $res; } public function history(Request $request, $id) { abort_if(!$request->user(), 403); $status = Status::whereNull('reblog_of_id')->findOrFail($id); abort_if(!in_array($status->scope, ['public', 'unlisted']), 403); if(!$status->edits()->count()) { return []; } $cached = StatusService::get($status->id, false); $res = $status->edits->map(function($edit) use($cached) { $caption = nl2br(strip_tags(str_replace('</p>', "\n", $edit->caption))); return [ 'content' => Autolink::create()->autolink($caption), 'spoiler_text' => $edit->spoiler_text, 'sensitive' => (bool) $edit->is_nsfw, 'created_at' => str_replace('+00:00', 'Z', $edit->created_at->format(DATE_RFC3339_EXTENDED)), 'account' => $cached['account'], 'media_attachments' => $cached['media_attachments'], 'emojis' => $cached['emojis'], ]; })->reverse()->values()->toArray(); return $res; } }