. // }}} namespace Plugin\Reply; use App\Core\Event; use App\Core\Form; use App\Core\Modules\NoteHandlerPlugin; use App\Entity\Note; use App\Util\Common; use App\Util\Exception\RedirectException; use Component\Posting\Posting; use Plugin\Reply\Controller\Reply as ReplyController; use Symfony\Component\Form\Extension\Core\Type\HiddenType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\HttpFoundation\Request; class Reply extends NoteHandlerPlugin { public function onAddRoute($r) { $r->connect('note_reply', '/note/reply/{reply_to<\\d*>}', ReplyController::class); return Event::next; } /** * HTML rendering event that adds the reply form as a note action, * if a user is logged in * * @throws RedirectException */ public function onAddNoteActions(Request $request, Note $note, array &$actions) { if (($user = Common::user()) === null) { return Event::next; } $form = Form::create([ ['content', HiddenType::class, ['label' => ' ', 'required' => false]], ['attachments', HiddenType::class, ['label' => ' ', 'required' => false]], ['note_id', HiddenType::class, ['data' => $note->getId()]], ['reply', SubmitType::class, [ 'label' => ' ', 'attr' => [ 'class' => 'note-actions-unset button-container reply-button-container', 'title' => 'Reply to this note!', ], ], ], ]); // Handle form $ret = self::noteActionHandle($request, $form, $note, 'reply', function ($note, $data, $user) use ($request) { if ($data['content'] !== null) { // JS submitted // TODO Implement in JS Posting::storeLocalNote( actor: $user->getActor(), content: $data['content'], content_type: 'text/plain', attachments: $data['attachments'], reply_to: $data['reply_to'], repeat_of: null ); } else { // JS disabled, redirect throw new RedirectException('note_reply', ['reply_to' => $note->getId(), 'return_to' => $request->getRequestUri()]); return Event::stop; } }); if ($ret !== null) { return $ret; } $actions[] = $form->createView(); return Event::next; } }