. // }}} namespace Plugin\Repeat; use App\Core\DB\DB; use App\Core\Event; use App\Core\Form; use App\Core\Modules\Module; use App\Entity\Note; use App\Util\Common; use App\Util\Exception\NotFoundException; use Symfony\Component\Form\Extension\Core\Type\HiddenType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\HttpFoundation\Request; class Repeat extends Module { /** * HTML rendering event that adds the repeat form as a note * action, if a user is logged in */ public function onAddNoteActions(Request $request, Note $note, array &$actions) { if (($user = Common::user()) == null) { return Event::next; } $opts = ['gsactor_id' => $user->getId(), 'repeat_of' => $note->getId()]; try { $is_set = DB::findOneBy('note', $opts) != null; } catch (NotFoundException $e) { // Not found $is_set = false; } $form = Form::create([ ['is_set', HiddenType::class, ['data' => $is_set ? '1' : '0']], ['note_id', HiddenType::class, ['data' => $note->getId()]], ['repeat', SubmitType::class, ['label' => ' ']], ]); // Handle form $ret = self::noteActionHandle($request, $form, $note, 'repeat', function ($note, $data, $user) use ($opts) { $note = DB::findOneBy('note', $opts); if (!$data['is_set'] && $note == null) { DB::persist(Note::create([ 'gsactor_id' => $user->getId(), 'repeat_of' => $note->getId(), 'content' => $note->getContent(), 'is_local' => true, ])); DB::flush(); } else { DB::remove($note); DB::flush(); } return Event::stop; }); if ($ret != null) { return $ret; } $actions[] = $form->createView(); return Event::next; } }