123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- <?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;
- }
- }
|