. // }}} namespace Plugin\Poll\Controller; use App\Core\DB\DB; use App\Core\Security; use App\Entity\Poll; use App\Util\Common; use App\Util\Exception\InvalidFormException; use App\Util\Exception\RedirectException; use Plugin\Poll\Forms\NewPollForm; use Symfony\Component\HttpFoundation\Request; const MAX_OPTS = 5; const MIN_OPTS = 2; class NewPoll { /** * Create poll * * @param Request $request * @param int $num num of options * * @throws InvalidFormException invalid form * @throws RedirectException * @throws \App\Util\Exception\NoLoggedInUser user is not logged in * * @return array template */ public function newPoll(Request $request, int $num) { $user = Common::ensureLoggedIn(); $numOptions = Common::clamp($num,MIN_OPTS,MAX_OPTS); $form = NewPollForm::make($numOptions); $form->handleRequest($request); $opt = []; if ($form->isSubmitted()) { if ($form->isValid()) { $data = $form->getData(); Security::sanitize($question = $data['Question']); for ($i = 1; $i <= $numOptions; ++$i) { Security::sanitize($opt[$i - 1] = $data['Option_' . $i]); } $options = implode("\n",$opt); $poll = Poll::create(['gsactor_id' => $user->getId(), 'question' => $question, 'options' => $options]); DB::persist($poll); DB::flush(); throw new RedirectException('showpoll', ['id' => $poll->getId()]); } else { throw new InvalidFormException(); } } return ['_template' => 'Poll/newpoll.html.twig', 'form' => $form->createView()]; } }