From dbb55362c8a02dba42bbd7b62b2217c534b2218a Mon Sep 17 00:00:00 2001 From: Daniel Date: Tue, 3 Nov 2020 15:53:46 +0000 Subject: [PATCH] [Poll] Fixed ShowPoll route, moved Poll Entity, created NewPollForm Entity was temporarily moved to src/Entity in order to load from DB, since it is yet no possible to do that from Plugin --- plugins/PollPlugin/Controller/NewPoll.php | 26 +++++------- plugins/PollPlugin/Controller/ShowPoll.php | 14 ++++++- plugins/PollPlugin/Forms/NewPollForm.php | 45 +++++++++++++++++++++ plugins/PollPlugin/PollPlugin.php | 3 +- plugins/Reply/Reply.php | 2 + {plugins/PollPlugin => src}/Entity/Poll.php | 4 +- 6 files changed, 74 insertions(+), 20 deletions(-) create mode 100644 plugins/PollPlugin/Forms/NewPollForm.php rename {plugins/PollPlugin => src}/Entity/Poll.php (98%) diff --git a/plugins/PollPlugin/Controller/NewPoll.php b/plugins/PollPlugin/Controller/NewPoll.php index 2c952c294b..23e0587833 100644 --- a/plugins/PollPlugin/Controller/NewPoll.php +++ b/plugins/PollPlugin/Controller/NewPoll.php @@ -22,35 +22,29 @@ namespace Plugin\PollPlugin\Controller; use App\Core\DB\DB; -use App\Core\Form; -use function App\Core\I18n\_m; -use Plugin\PollPlugin\Entity\Poll; -use Symfony\Component\Form\Extension\Core\Type\SubmitType; -use Symfony\Component\Form\Extension\Core\Type\TextType; +use App\Entity\Poll; +use Plugin\PollPlugin\Forms\NewPollForm; use Symfony\Component\HttpFoundation\Request; class NewPoll { public function newpoll(Request $request) { - $form = Form::create([ - ['Option_1', TextType::class, ['label' => _m('Option 1')]], - ['Option_2', TextType::class, ['label' => _m('Option 2')]], - ['Option_3', TextType::class, ['label' => _m('Option 3')]], - ['Option_4', TextType::class, ['label' => _m('Option 4')]], - ['save', SubmitType::class, ['label' => _m('Submit Poll')]], - ]); + $form = NewPollForm::make(3); $form->handleRequest($request); if ($form->isSubmitted()) { $data = $form->getData(); + //var_dump($data); } - //testing + /* testing $test = Poll::create(['id' => '0', 'uri' => 'a']); - //DB::persist($test); - //DB::flush(); - //$loadpoll = Poll::getFromId('0'); //need to add plugin support for DB::__callStatic + DB::persist($test); + DB::flush(); + $loadpoll = Poll::getFromId('0'); + var_dump($loadpoll); + */ return ['_template' => 'Poll/newpoll.html.twig', 'form' => $form->createView()]; } diff --git a/plugins/PollPlugin/Controller/ShowPoll.php b/plugins/PollPlugin/Controller/ShowPoll.php index 82544f3c5d..1b7ccc89b3 100644 --- a/plugins/PollPlugin/Controller/ShowPoll.php +++ b/plugins/PollPlugin/Controller/ShowPoll.php @@ -21,11 +21,23 @@ namespace Plugin\PollPlugin\Controller; +use App\Entity\Poll; +use App\Util\Common; use Symfony\Component\HttpFoundation\Request; class ShowPoll { - public function showpoll(Request $request) + public function showpoll(Request $request, string $id) { + $user = Common::ensureLoggedIn(); + + $poll = Poll::getFromId((int) $id); + //var_dump($poll); + + if ($poll == null) {//|| !$poll->isVisibleTo($user)) { todo + throw new NoSuchPollException(); //? + } + + return ['_template' => 'base.html.twig']; } } diff --git a/plugins/PollPlugin/Forms/NewPollForm.php b/plugins/PollPlugin/Forms/NewPollForm.php new file mode 100644 index 0000000000..d012daf76e --- /dev/null +++ b/plugins/PollPlugin/Forms/NewPollForm.php @@ -0,0 +1,45 @@ +. + +// }}} + +namespace Plugin\PollPlugin\Forms; + +use App\Core\Form; +use function App\Core\I18n\_m; +use Symfony\Component\Form\Extension\Core\Type\SubmitType; +use Symfony\Component\Form\Extension\Core\Type\TextType; +use Symfony\Component\Form\Form as SymfForm; + +const MAX_OPT = 5; +class NewPollForm extends Form +{ + public static function make(int $optionNum): SymfForm + { + $optionNum = min(MAX_OPT,$optionNum); + $options = []; + for ($i = 1; $i <= $optionNum; ++$i) { + //['Option_i', TextType::class, ['label' => _m('Option i')]], + array_push($options,['Option_' . $i, TextType::class, ['label' => _m(('Option ' . $i))]]); + } + array_push($options, ['save', SubmitType::class, ['label' => _m('Submit Poll')]]); + + return parent::create($options); + } +} diff --git a/plugins/PollPlugin/PollPlugin.php b/plugins/PollPlugin/PollPlugin.php index b2b8e0b7a1..f47a403da7 100644 --- a/plugins/PollPlugin/PollPlugin.php +++ b/plugins/PollPlugin/PollPlugin.php @@ -64,7 +64,8 @@ class PollPlugin extends Module public function onAddRoute($r) { $r->connect('newpoll', 'main/poll/new', [Controller\NewPoll::class, 'newpoll']); - $r->connect('showpoll', 'main/poll/{id<' . ID_FMT . '>}' , [Controller\ShowPoll::class, 'showpoll']); + //$r->connect('showpoll', 'main/poll/:{id<' . ID_FMT . '>}' , [Controller\ShowPoll::class, 'showpoll']); //doesnt work + $r->connect('showpoll', 'main/poll/{id<\\d*>}',[Controller\ShowPoll::class, 'showpoll']); return Event::next; } diff --git a/plugins/Reply/Reply.php b/plugins/Reply/Reply.php index c876eca566..054e6058d5 100644 --- a/plugins/Reply/Reply.php +++ b/plugins/Reply/Reply.php @@ -42,6 +42,8 @@ class Reply extends Module public function onAddRoute($r) { $r->connect('note_reply', '/note/reply/{reply_to<\\d*>}', [self::class, 'replyController']); + + return Event::next; } /** diff --git a/plugins/PollPlugin/Entity/Poll.php b/src/Entity/Poll.php similarity index 98% rename from plugins/PollPlugin/Entity/Poll.php rename to src/Entity/Poll.php index a664ea0f70..784ee2fc94 100644 --- a/plugins/PollPlugin/Entity/Poll.php +++ b/src/Entity/Poll.php @@ -19,7 +19,7 @@ // }}} -namespace Plugin\PollPlugin\Entity; +namespace App\Entity; use App\Core\DB\DB; use App\Core\Entity; @@ -129,7 +129,7 @@ class Poll extends Entity public static function getFromId(int $id): ?self { - return DB::find('poll', ['id' => $id]); //not working yet + return DB::find('poll', ['id' => $id]); } //from old version