forked from mirror/pixelfed
61 lines
2.0 KiB
PHP
61 lines
2.0 KiB
PHP
<?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;
|
|
}
|
|
}
|