From 7f7265c851467a1b80674ed1666f0a43281a8ffe Mon Sep 17 00:00:00 2001 From: Tykayn Date: Tue, 27 Apr 2021 10:22:16 +0200 Subject: [PATCH] reformat src folder --- src/Controller/AdminController.php | 4 +- src/Controller/DefaultController.php | 5 - src/Controller/EmailsController.php | 65 +-- src/Controller/MigrationController.php | 170 +++---- src/Controller/PollController.php | 165 ++++--- src/Controller/api/CommentController.php | 28 +- src/Controller/api/PollController.php | 49 +- src/Controller/api/VoteController.php | 37 +- src/DataFixtures/AppFixtures.php | 14 +- src/DataFixtures/AppPollFixtures.php | 82 ++-- src/DataFixtures/VotesStacksFixtures.php | 10 +- src/Entity/Choice.php | 270 +++++------ src/Entity/Comment.php | 99 ++-- src/Entity/Owner.php | 20 +- src/Entity/Poll.php | 553 +++++++++++----------- src/Entity/StackOfVotes.php | 109 +++-- src/Entity/Vote.php | 45 +- src/Form/PollType.php | 52 +- src/Kernel.php | 46 +- src/Repository/ChoiceRepository.php | 70 ++- src/Repository/CommentRepository.php | 70 ++- src/Repository/OwnerRepository.php | 70 ++- src/Repository/PollRepository.php | 74 ++- src/Repository/StackOfVotesRepository.php | 70 ++- src/Repository/VoteRepository.php | 70 ++- src/Service/MailService.php | 127 +++-- src/Traits/TimeStampableTraitTrait.php | 8 +- 27 files changed, 1179 insertions(+), 1203 deletions(-) diff --git a/src/Controller/AdminController.php b/src/Controller/AdminController.php index 381423f..af6e43b 100755 --- a/src/Controller/AdminController.php +++ b/src/Controller/AdminController.php @@ -83,14 +83,14 @@ class AdminController extends EmailsController { // TODO // fetch old polls and store their properties in new poll objects - $foundPolls = []; + $foundPolls = []; $database_name = 'symfony'; $em = $this->getDoctrine()->getManager(); $emPoll = $this->getDoctrine()->getRepository( Poll::class ); return $this->json( [ - 'message' => 'migration done for: ' . count( $foundPolls ). ' - this feature is not ready to work YET.', + 'message' => 'migration done for: ' . count( $foundPolls ) . ' - this feature is not ready to work YET.', 'data' => [ 'count' => count( $foundPolls ), ], diff --git a/src/Controller/DefaultController.php b/src/Controller/DefaultController.php index 338be79..eb94c64 100755 --- a/src/Controller/DefaultController.php +++ b/src/Controller/DefaultController.php @@ -2,14 +2,9 @@ namespace App\Controller; -use App\Entity\Owner; use App\Entity\Poll; -use App\Repository\PollRepository; -use App\Service\MailService; use FOS\RestBundle\Controller\Annotations\Get; use FOS\RestBundle\Controller\Annotations\Route; -use JMS\Serializer\Type\Exception\Exception; -use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\Mailer\Exception\TransportExceptionInterface; /** diff --git a/src/Controller/EmailsController.php b/src/Controller/EmailsController.php index 1a3ee06..187d09a 100644 --- a/src/Controller/EmailsController.php +++ b/src/Controller/EmailsController.php @@ -5,8 +5,10 @@ namespace App\Controller; use App\Entity\Owner; use App\Entity\Poll; use JMS\Serializer\Type\Exception\Exception; +use Swift_Mailer; use Swift_Message; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\Mailer\Exception\TransportExceptionInterface; /** * sending emails controller @@ -18,16 +20,37 @@ class EmailsController extends AbstractController { private $mail_service; - public function __construct( \Swift_Mailer $mailer ) { + public function __construct( Swift_Mailer $mailer ) { $this->mail_service = $mailer; } + /** + * send created polls to an owner + * + * @param Owner $owner + * + * @return int|void + * @throws Exception + * @throws TransportExceptionInterface + */ + public function sendOwnerPollsAction( Owner $owner ) { + + $config = [ + 'owner' => $owner, + 'title' => $this->getParameter( 'WEBSITE_NAME' ) . ' | Mes sondages', + 'email_template' => 'emails/owner-list.html.twig', + ]; + $this->sendMailWithVars( $config ); + + return 1; + } + /** * generic way to send email with html template * * @param $config * - * @throws \Symfony\Component\Mailer\Exception\TransportExceptionInterface + * @throws TransportExceptionInterface */ public function sendMailWithVars( $config ) { @@ -57,7 +80,7 @@ class EmailsController extends AbstractController { $config[ 'email_template' ], $config ); - $message = ( new Swift_Message( $config[ 'title' ] ) ) + $message = ( new Swift_Message( $config[ 'title' ] ) ) ->setContentType( "text/html" ) ->setCharset( 'UTF-8' ) ->setFrom( [ 'ne-pas-repondre@framadate-api.cipherbliss.com' ] ) @@ -72,33 +95,11 @@ class EmailsController extends AbstractController { } - - /** - * send created polls to an owner - * - * @param Owner $owner - * - * @return int|void - * @throws Exception - * @throws \Symfony\Component\Mailer\Exception\TransportExceptionInterface - */ - public function sendOwnerPollsAction( Owner $owner ) { - - $config = [ - 'owner' => $owner, - 'title' => $this->getParameter( 'WEBSITE_NAME' ) . ' | Mes sondages', - 'email_template' => 'emails/owner-list.html.twig', - ]; - $this->sendMailWithVars( $config ); - - return 1; - } - /** * @param Owner $foundOwner * @param Poll|null $poll * - * @throws \Symfony\Component\Mailer\Exception\TransportExceptionInterface + * @throws TransportExceptionInterface */ public function sendCreationMailAction( Owner $foundOwner, Poll $poll = null ) { @@ -120,14 +121,14 @@ class EmailsController extends AbstractController { * @param $comment * * @return int - * @throws \Symfony\Component\Mailer\Exception\TransportExceptionInterface + * @throws TransportExceptionInterface */ public function sendCommentNotificationAction( Owner $owner, $comment ) { $config = [ 'owner' => $owner, - 'comment' => $comment, - 'poll' => $comment->getPoll(), + 'comment' => $comment, + 'poll' => $comment->getPoll(), 'title' => 'Framadate | Commentaire de "' . $owner->getPseudo() . '" - sondage ' . $comment->getPoll()->getTitle(), 'email_template' => 'emails/comment-notification.html.twig', ]; @@ -141,14 +142,14 @@ class EmailsController extends AbstractController { * @param $stackOfVotes * * @return int - * @throws \Symfony\Component\Mailer\Exception\TransportExceptionInterface + * @throws TransportExceptionInterface */ public function sendVoteNotificationAction( Owner $owner, $stackOfVotes ) { $config = [ 'owner' => $owner, - 'comment' => $stackOfVotes, - 'poll' => $stackOfVotes->getPoll(), + 'comment' => $stackOfVotes, + 'poll' => $stackOfVotes->getPoll(), 'title' => 'Framadate | Vote de "' . $owner->getPseudo() . '" - sondage ' . $stackOfVotes->getPoll()->getTitle(), 'email_template' => 'emails/vote-notification.html.twig', ]; diff --git a/src/Controller/MigrationController.php b/src/Controller/MigrationController.php index 6c22dd0..6eeb6b1 100755 --- a/src/Controller/MigrationController.php +++ b/src/Controller/MigrationController.php @@ -1,20 +1,19 @@ 'NOPE! veuillez vérifier votre fichier .env', ] ); - }; + } // fetch old Database $debug = ''; - $em = $this->getDoctrine()->getManager(); + $em = $this->getDoctrine()->getManager(); $pollsBySlug = []; - $pdo_options[ \PDO::ATTR_ERRMODE ] = \PDO::ERRMODE_EXCEPTION; - $bdd = new \PDO( 'mysql:host=localhost;dbname=' . $this->getParameter( 'OLD_DATABASE_NAME' ), + $pdo_options[ PDO::ATTR_ERRMODE ] = PDO::ERRMODE_EXCEPTION; + $bdd = new PDO( 'mysql:host=localhost;dbname=' . $this->getParameter( 'OLD_DATABASE_NAME' ), $this->getParameter( 'OLD_DATABASE_USER' ), $this->getParameter( 'OLD_DATABASE_PASS' ), $pdo_options ); - $res_polls = $bdd->query( 'SELECT * FROM fd_poll' ); - while ( $d = $res_polls->fetch( \PDO::FETCH_OBJ ) ) { + $res_polls = $bdd->query( 'SELECT * FROM fd_poll' ); + while ( $d = $res_polls->fetch( PDO::FETCH_OBJ ) ) { - $debug .= "
ajout de sondage : ".$d->title .' - '. $d->id ; + $debug .= "
ajout de sondage : " . $d->title . ' - ' . $d->id; - $newPoll = new Poll(); - $owner = new Owner(); + $newPoll = new Poll(); + $owner = new Owner(); $owner->setEmail( $d->admin_mail ) ->setPseudo( $d->admin_name ) - ->addPoll($newPoll); + ->addPoll( $newPoll ); $newPoll ->setOwner( $owner ) ->setCustomURL( $d->id ) ->setKind( $d->id === 'D' ? 'date' : 'text' ) - ->setHideResults( ! $d->results_publicly_visible ) + ->setHideResults( ! $d->results_publicly_visible ) ->setAdminKey( $d->admin_id ) ->setTitle( $d->title ) ->setVotesAllowed( $d->receiveNewVotes ) @@ -84,105 +83,102 @@ class MigrationController extends EmailsController { $em->persist( $newPoll ); } // get choices, slots and link them with poll by their slug - $res_slots = $bdd->query( 'SELECT * FROM fd_slot' ); + $res_slots = $bdd->query( 'SELECT * FROM fd_slot' ); $pollChoicesOrderedBySlug = []; - $choicesCreated = []; + $choicesCreated = []; - while ( $d = $res_slots->fetch( \PDO::FETCH_OBJ ) ) { + while ( $d = $res_slots->fetch( PDO::FETCH_OBJ ) ) { - $debug .= "
ajout de slot, converti en choix de réponse : ".$d->poll_id. ' : '. $d->moments; + $debug .= "
ajout de slot, converti en choix de réponse : " . $d->poll_id . ' : ' . $d->moments; $pollSlug = $d->poll_id; - $poll = $pollsBySlug[$pollSlug]; + $poll = $pollsBySlug[ $pollSlug ]; - $moments = explode(',' , $d->moments); + $moments = explode( ',', $d->moments ); foreach ( $moments as $moment ) { - $newChoice = new Choice(); - $newChoice - ->setPoll($poll) - ->setDateTime(date_create( strtotime( $d->title))) - ->setName($moment); + $newChoice = new Choice(); + $newChoice + ->setPoll( $poll ) + ->setDateTime( date_create( strtotime( $d->title ) ) ) + ->setName( $moment ); - $pollChoicesOrderedBySlug[$pollSlug][] = $newChoice; - $poll->addChoice($newChoice); + $pollChoicesOrderedBySlug[ $pollSlug ][] = $newChoice; + $poll->addChoice( $newChoice ); - $em->persist( $newChoice ); - $em->persist( $newPoll ); + $em->persist( $newChoice ); + $em->persist( $newPoll ); $choicesCreated[] = $newChoice; } } // get votes $stacksOfVote = []; - $res_votes = $bdd->query( 'SELECT * FROM fd_vote' ); - while ( $d = $res_votes->fetch( \PDO::FETCH_OBJ ) ) { + $res_votes = $bdd->query( 'SELECT * FROM fd_vote' ); + while ( $d = $res_votes->fetch( PDO::FETCH_OBJ ) ) { - $debug .= "
ajout de stack de vote : ".$d->name; + $debug .= "
ajout de stack de vote : " . $d->name; $pollSlug = $d->poll_id; $poll = $pollsBySlug[ $pollSlug ]; $newStack = new StackOfVotes(); $newOwner = new Owner(); $newOwner - ->setPseudo($d->name) - ->setEmail('the_anonymous_email_from_@_migration_offramadate.org') - ->setModifierToken($d->uniqId) - ; + ->setPseudo( $d->name ) + ->setEmail( 'the_anonymous_email_from_@_migration_offramadate.org' ) + ->setModifierToken( $d->uniqId ); - $newStack->setPoll($poll) - ->setOwner($newOwner) - ->setPseudo($d->name) - ; + $newStack->setPoll( $poll ) + ->setOwner( $newOwner ) + ->setPseudo( $d->name ); // each choice answer is encoded in a value : - $voteCodes = str_split($d->choices); + $voteCodes = str_split( $d->choices ); // get choices of the poll and answer accordingly - $ii=0; + $ii = 0; foreach ( $voteCodes as $vote_code ) { - if($vote_code !== ' '){ - $choice = $pollChoicesOrderedBySlug[$pollSlug][$ii]; + if ( $vote_code !== ' ' ) { + $choice = $pollChoicesOrderedBySlug[ $pollSlug ][ $ii ]; $newVote = new Vote(); $newVote - ->setChoice($choice) - ->setStacksOfVotes($newStack) - ->setPoll($poll) - ->setValue( $this->mapAnswerNumberToWord($vote_code)) - ; - $newStack->addVote($newVote); + ->setChoice( $choice ) + ->setStacksOfVotes( $newStack ) + ->setPoll( $poll ) + ->setValue( $this->mapAnswerNumberToWord( $vote_code ) ); + $newStack->addVote( $newVote ); $em->persist( $newVote ); $votes[] = $newVote; } - $ii++; + $ii ++; } - $poll->addStackOfVote($newStack); + $poll->addStackOfVote( $newStack ); $em->persist( $newStack ); $stacksOfVote[] = $newStack; } - $comments = []; - $res_comments = $bdd->query( 'SELECT * FROM fd_comment' ); - while ( $d = $res_comments->fetch( \PDO::FETCH_OBJ ) ) { + $comments = []; + $res_comments = $bdd->query( 'SELECT * FROM fd_comment' ); + while ( $d = $res_comments->fetch( PDO::FETCH_OBJ ) ) { - $debug .= "
ajout de commentaire : ".$d->name. ' '. $d->comment; + $debug .= "
ajout de commentaire : " . $d->name . ' ' . $d->comment; - $pollSlug = $d->poll_id; - $poll = $pollsBySlug[ $pollSlug ]; + $pollSlug = $d->poll_id; + $poll = $pollsBySlug[ $pollSlug ]; $newComment = new Comment(); - $poll->addComment($newComment); + $poll->addComment( $newComment ); - $newComment->setPoll($poll) - ->setCreatedAt( date_create($d->date)) - ->setText( $d->comment) + $newComment->setPoll( $poll ) + ->setCreatedAt( date_create( $d->date ) ) + ->setText( $d->comment ) // TODO update entities - ->setPseudo( $d->name); + ->setPseudo( $d->name ); $em->persist( $newComment ); $comments[] = $newComment; @@ -194,41 +190,45 @@ class MigrationController extends EmailsController { // failure notice $debug .= "

ça c'est fait. "; - return $this->render('pages/migration.html.twig' , [ - "message" => "welcome to the framadate migration endpoint, it has yet to be done", - "debug" => $debug, - "OLD_DATABASE_NAME" => $this->getParameter( 'OLD_DATABASE_NAME' ), - "OLD_DATABASE_USER" => $this->getParameter( 'OLD_DATABASE_USER' ), - "counters" =>[ - 'polls' => count($pollsBySlug), - 'comments' => count($comments), - 'choices' => count($choicesCreated), - 'stacks_of_votes' => count($stacksOfVote), - 'votes' => count($votes), - ] - ]); + return $this->render( 'pages/migration.html.twig', + [ + "message" => "welcome to the framadate migration endpoint, it has yet to be done", + "debug" => $debug, + "OLD_DATABASE_NAME" => $this->getParameter( 'OLD_DATABASE_NAME' ), + "OLD_DATABASE_USER" => $this->getParameter( 'OLD_DATABASE_USER' ), + "counters" => [ + 'polls' => count( $pollsBySlug ), + 'comments' => count( $comments ), + 'choices' => count( $choicesCreated ), + 'stacks_of_votes' => count( $stacksOfVote ), + 'votes' => count( $votes ), + ], + ] ); } + /** * @param $numberToConvert * conversion of answer: * space character : no answer, 0 : no , 1 : maybe , 2 : yes + * * @return string */ - public function mapAnswerNumberToWord($numberToConvert){ + public function mapAnswerNumberToWord( $numberToConvert ) { $word = ''; - switch ($numberToConvert){ + switch ( $numberToConvert ) { case 0: $word = 'no'; break; - case 1: + case 1: $word = 'maybe'; break; - case 2: + case 2: $word = 'yes'; break; default: $word = 'no'; } + return $word; } diff --git a/src/Controller/PollController.php b/src/Controller/PollController.php index 2d38a8f..1358e0e 100644 --- a/src/Controller/PollController.php +++ b/src/Controller/PollController.php @@ -9,104 +9,103 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; /** * @Route("/poll") */ -class PollController extends AbstractController -{ - /** - * @Route("/", name="poll_index", methods={"GET"}) - */ - public function index(PollRepository $pollRepository): Response - { +class PollController extends AbstractController { + /** + * @Route("/", name="poll_index", methods={"GET"}) + */ + public function index( PollRepository $pollRepository ): Response { - $polls = $pollRepository->findAll(); - $titles=[]; - foreach ( $polls as $poll ) { - $titles[] = $poll->getTitle(); - } - return $this->render('poll/index.html.twig', [ - 'count' => count($polls), - 'titles' => $titles, - 'polls' => $polls, - ]); - } + $polls = $pollRepository->findAll(); + $titles = []; + foreach ( $polls as $poll ) { + $titles[] = $poll->getTitle(); + } - /** - * @Route("/new", name="poll_new", methods={"GET","POST"}) - */ - public function new(Request $request): Response - { - $poll = new Poll(); - $form = $this->createForm(PollType::class, $poll); - $form->handleRequest($request); + return $this->render( 'poll/index.html.twig', + [ + 'count' => count( $polls ), + 'titles' => $titles, + 'polls' => $polls, + ] ); + } - if ($form->isSubmitted() && $form->isValid()) { - $entityManager = $this->getDoctrine()->getManager(); - $entityManager->persist($poll); - $entityManager->flush(); + /** + * @Route("/new", name="poll_new", methods={"GET","POST"}) + */ + public function new( Request $request ): Response { + $poll = new Poll(); + $form = $this->createForm( PollType::class, $poll ); + $form->handleRequest( $request ); - return $this->redirectToRoute('poll_index'); - } + if ( $form->isSubmitted() && $form->isValid() ) { + $entityManager = $this->getDoctrine()->getManager(); + $entityManager->persist( $poll ); + $entityManager->flush(); - return $this->render('poll/new.html.twig', [ - 'poll' => $poll, - 'form' => $form->createView(), - ]); - } + return $this->redirectToRoute( 'poll_index' ); + } - /** - * on cherche un sondage par son url personnalisée - * @Route("/{id}", name="poll_show", methods={"GET"}) - */ - public function show($id): Response - { - $repository = $this->getDoctrine()->getRepository(Poll::class); - $foundPoll = $repository->findOneByCustomUrl($id); - if(!$foundPoll){ - return $this->json([ - 'message' => $id.' : not found' - ], 404); - } + return $this->render( 'poll/new.html.twig', + [ + 'poll' => $poll, + 'form' => $form->createView(), + ] ); + } - return $this->render('poll/show.html.twig', [ - 'poll' => $foundPoll, - ]); - } + /** + * on cherche un sondage par son url personnalisée + * @Route("/{id}", name="poll_show", methods={"GET"}) + */ + public function show( $id ): Response { + $repository = $this->getDoctrine()->getRepository( Poll::class ); + $foundPoll = $repository->findOneByCustomUrl( $id ); + if ( ! $foundPoll ) { + return $this->json( [ + 'message' => $id . ' : not found', + ], + 404 ); + } - /** - * @Route("/{id}/edit", name="poll_edit", methods={"GET","POST"}) - */ - public function edit(Request $request, Poll $poll): Response - { - $form = $this->createForm(PollType::class, $poll); - $form->handleRequest($request); + return $this->render( 'poll/show.html.twig', + [ + 'poll' => $foundPoll, + ] ); + } - if ($form->isSubmitted() && $form->isValid()) { - $this->getDoctrine()->getManager()->flush(); + /** + * @Route("/{id}/edit", name="poll_edit", methods={"GET","POST"}) + */ + public function edit( Request $request, Poll $poll ): Response { + $form = $this->createForm( PollType::class, $poll ); + $form->handleRequest( $request ); - return $this->redirectToRoute('poll_index'); - } + if ( $form->isSubmitted() && $form->isValid() ) { + $this->getDoctrine()->getManager()->flush(); - return $this->render('poll/edit.html.twig', [ - 'poll' => $poll, - 'form' => $form->createView(), - ]); - } + return $this->redirectToRoute( 'poll_index' ); + } - /** - * @Route("/{id}", name="poll_delete", methods={"DELETE"}) - */ - public function delete(Request $request, Poll $poll): Response - { - if ($this->isCsrfTokenValid('delete'.$poll->getId(), $request->request->get('_token'))) { - $entityManager = $this->getDoctrine()->getManager(); - $entityManager->remove($poll); - $entityManager->flush(); - } + return $this->render( 'poll/edit.html.twig', + [ + 'poll' => $poll, + 'form' => $form->createView(), + ] ); + } - return $this->redirectToRoute('poll_index'); - } + /** + * @Route("/{id}", name="poll_delete", methods={"DELETE"}) + */ + public function delete( Request $request, Poll $poll ): Response { + if ( $this->isCsrfTokenValid( 'delete' . $poll->getId(), $request->request->get( '_token' ) ) ) { + $entityManager = $this->getDoctrine()->getManager(); + $entityManager->remove( $poll ); + $entityManager->flush(); + } + + return $this->redirectToRoute( 'poll_index' ); + } } diff --git a/src/Controller/api/CommentController.php b/src/Controller/api/CommentController.php index 2224094..0c762b7 100644 --- a/src/Controller/api/CommentController.php +++ b/src/Controller/api/CommentController.php @@ -36,13 +36,15 @@ class CommentController extends EmailsController { SerializerInterface $serializer, Poll $poll ) { - $jsonResponse = $serializer->serialize([ + $jsonResponse = $serializer->serialize( [ 'message' => 'here are your comments of the poll', - 'data' => $poll->getComments()], 'json'); + 'data' => $poll->getComments(), + ], + 'json' ); - $response = new Response($jsonResponse); - $response->headers->set('Content-Type', 'application/json'); - $response->setStatusCode(200); + $response = new Response( $jsonResponse ); + $response->headers->set( 'Content-Type', 'application/json' ); + $response->setStatusCode( 200 ); return $response; @@ -72,8 +74,8 @@ class CommentController extends EmailsController { $em = $this->getDoctrine()->getRepository( Owner::class ); $data = json_decode( $data, true ); - if(!isset($data['email'])) { - return $this->json(["message" => "Incorrect JSON in request"], 400); + if ( ! isset( $data[ 'email' ] ) ) { + return $this->json( [ "message" => "Incorrect JSON in request" ], 400 ); } $foundOwner = $em->findOneByEmail( $data[ 'email' ] ); @@ -81,8 +83,8 @@ class CommentController extends EmailsController { if ( ! $foundOwner ) { $foundOwner = new Owner(); $foundOwner->setPseudo( $data[ 'email' ] ) - ->setEmail( $data[ 'email' ] ) - ->setModifierToken( uniqid( '', true ) ); + ->setEmail( $data[ 'email' ] ) + ->setModifierToken( uniqid( '', true ) ); } // anti flood $seconds_limit_lastpost = 5; @@ -118,8 +120,8 @@ class CommentController extends EmailsController { } } $comment->setOwner( $foundOwner ) - ->setCreatedAt( new DateTime() ) - ->setPoll( $poll ); + ->setCreatedAt( new DateTime() ) + ->setPoll( $poll ); $foundOwner->addComment( $comment ); $em = $this->getDoctrine()->getManager(); @@ -127,8 +129,8 @@ class CommentController extends EmailsController { $em->persist( $comment ); $em->flush(); - if($poll->getMailOnComment()){ - $this->sendCommentNotificationAction($foundOwner, $comment); + if ( $poll->getMailOnComment() ) { + $this->sendCommentNotificationAction( $foundOwner, $comment ); } diff --git a/src/Controller/api/PollController.php b/src/Controller/api/PollController.php index bd8d213..fcb54e8 100644 --- a/src/Controller/api/PollController.php +++ b/src/Controller/api/PollController.php @@ -7,6 +7,11 @@ use App\Entity\Choice; use App\Entity\Owner; use App\Entity\Poll; use App\Repository\PollRepository; +use FOS\RestBundle\Controller\Annotations\Delete; +use FOS\RestBundle\Controller\Annotations\Get; +use FOS\RestBundle\Controller\Annotations\Post; +use FOS\RestBundle\Controller\Annotations\Put; +use FOS\RestBundle\Controller\Annotations\Route; use JMS\Serializer\Exception\RuntimeException; use JMS\Serializer\SerializerBuilder; use JMS\Serializer\SerializerInterface; @@ -14,13 +19,6 @@ use Swift_Mailer; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; - -use FOS\RestBundle\Controller\Annotations\Get; -use FOS\RestBundle\Controller\Annotations\Put; -use FOS\RestBundle\Controller\Annotations\Delete; -use FOS\RestBundle\Controller\Annotations\Post; -use FOS\RestBundle\Controller\Annotations\Route; /** * Class DefaultController @@ -63,19 +61,6 @@ class PollController extends EmailsController { } - /** - * @param $id - * message when the poll is not found - * - * @return JsonResponse - */ - public function notFoundPoll( $id ): Response { - return $this->json( [ - 'message' => $id . ' : poll not found', - ], - 404 ); - } - /** * get a poll config by its custom URL, we do not want polls to be reachable by their numeric id * @Get( @@ -104,7 +89,6 @@ class PollController extends EmailsController { $stacks = $poll->getStacksOfVotes(); - $pass = $poll->getPassword(); @@ -125,6 +109,19 @@ class PollController extends EmailsController { } + /** + * @param $id + * message when the poll is not found + * + * @return JsonResponse + */ + public function notFoundPoll( $id ): Response { + return $this->json( [ + 'message' => $id . ' : poll not found', + ], + 404 ); + } + /** * get a poll config by its custom URL, we do not want polls to be reachable by their numeric id * @Get( @@ -196,8 +193,8 @@ class PollController extends EmailsController { $em->persist( $poll ); $em->flush(); - return $this->json( $poll->displayForAdmin() - , + return $this->json( $poll->displayForAdmin() + , 200 ); } @@ -305,9 +302,9 @@ class PollController extends EmailsController { $this->sendCreationMailAction( $foundOwner, $newpoll ); return $this->json( [ - 'message' => 'you created a poll ' . $precision, - 'poll' => $newpoll->displayForAdmin, - 'password_protected' => is_string( $newpoll->getPassword() ), + 'message' => 'you created a poll ' . $precision, + 'poll' => $newpoll->displayForAdmin, + 'password_protected' => is_string( $newpoll->getPassword() ), ], 201 ); diff --git a/src/Controller/api/VoteController.php b/src/Controller/api/VoteController.php index ecb0c0b..58fe69a 100644 --- a/src/Controller/api/VoteController.php +++ b/src/Controller/api/VoteController.php @@ -31,6 +31,7 @@ class VoteController extends EmailsController { * name = "new_vote_stack", * requirements = {"content"="\w+", "poll_id"="\d+"} * ) + * * @param SerializerInterface $serializer * @param Poll $poll * @param Request $request @@ -96,8 +97,8 @@ class VoteController extends EmailsController { 404 ); } $vote->setPoll( $poll ) - ->setChoice( $foundChoice ) - ->setValue( $voteInfo[ 'value' ] ); + ->setChoice( $foundChoice ) + ->setValue( $voteInfo[ 'value' ] ); $vote->setPoll( $poll ); $stack->addVote( $vote ); $poll->addVote( $vote ); @@ -116,17 +117,17 @@ class VoteController extends EmailsController { } $stacks = $poll->getStacksOfVotes(); - if($poll->getMailOnVote()){ - $this->sendVoteNotificationAction($stack->getOwner(), $stack); + if ( $poll->getMailOnVote() ) { + $this->sendVoteNotificationAction( $stack->getOwner(), $stack ); } $returnedVoteStack = $stack; - $jsonResponse = $serializer->serialize($returnedVoteStack, 'json'); + $jsonResponse = $serializer->serialize( $returnedVoteStack, 'json' ); - $response = new Response($jsonResponse); - $response->headers->set('Content-Type', 'application/json'); - $response->setStatusCode(200); + $response = new Response( $jsonResponse ); + $response->headers->set( 'Content-Type', 'application/json' ); + $response->setStatusCode( 200 ); return $response; @@ -139,6 +140,7 @@ class VoteController extends EmailsController { * name = "update_vote_stack", * requirements = { "id"="\d+"} * ) + * * @param SerializerInterface $serializer * @param StackOfVotes $id * @param $modifierToken @@ -171,15 +173,16 @@ class VoteController extends EmailsController { // save evrything - $jsonResponse = $serializer->serialize([ + $jsonResponse = $serializer->serialize( [ 'message' => 'ok', 'modifier_token' => $voteStack->getOwner()->getModifierToken(), 'vote_stack' => $voteStack, - ], 'json'); + ], + 'json' ); - $response = new Response($jsonResponse); - $response->headers->set('Content-Type', 'application/json'); - $response->setStatusCode(200); + $response = new Response( $jsonResponse ); + $response->headers->set( 'Content-Type', 'application/json' ); + $response->setStatusCode( 200 ); return $response; @@ -207,11 +210,13 @@ class VoteController extends EmailsController { return $this->json( [ 'message' => 'boom! les ' . $length . ' votes du sondage ont été supprimés', - ],200 ); + ], + 200 ); } else { return $this->json( [ - 'message' => 'le token d\'autorisation est invalide, vous ne pouvez pas modifier ce sondage' - ],403 ); + 'message' => 'le token d\'autorisation est invalide, vous ne pouvez pas modifier ce sondage', + ], + 403 ); } } } diff --git a/src/DataFixtures/AppFixtures.php b/src/DataFixtures/AppFixtures.php index 8838f8f..58305fd 100755 --- a/src/DataFixtures/AppFixtures.php +++ b/src/DataFixtures/AppFixtures.php @@ -6,13 +6,11 @@ use Doctrine\Bundle\FixturesBundle\Fixture; use Doctrine\Persistence\ObjectManager; -class AppFixtures extends Fixture -{ - public function load(ObjectManager $manager) - { - // $product = new Product(); - // $manager->persist($product); +class AppFixtures extends Fixture { + public function load( ObjectManager $manager ) { + // $product = new Product(); + // $manager->persist($product); - $manager->flush(); - } + $manager->flush(); + } } diff --git a/src/DataFixtures/AppPollFixtures.php b/src/DataFixtures/AppPollFixtures.php index a499990..d3f26df 100755 --- a/src/DataFixtures/AppPollFixtures.php +++ b/src/DataFixtures/AppPollFixtures.php @@ -42,12 +42,12 @@ class AppPollFixtures extends Fixture { $pollCitronOrange = new Poll(); $pollCitronOrange->setTitle( 'citron ou orange' ) - ->setCustomUrl('citron') - ->setDescription( 'votre sorbert préféré' ) - ->setModificationPolicy( 'nobody' ) - ->setPassword('le pass woute woute'); + ->setCustomUrl( 'citron' ) + ->setDescription( 'votre sorbert préféré' ) + ->setModificationPolicy( 'nobody' ) + ->setPassword( 'le pass woute woute' ); - $this->addReference(self::POLL_FIXTURE_ONE, $pollCitronOrange); + $this->addReference( self::POLL_FIXTURE_ONE, $pollCitronOrange ); $pollCitronOrange->setMailOnVote( true ); $pollCitronOrange->setOwner( $owner ); @@ -106,21 +106,21 @@ class AppPollFixtures extends Fixture { $ownerComment = new Comment(); $ownerComment ->setText( "trop bien ce sondage wohooo! signé l'auteur." ) - ->setPseudo('un gens qui commente') + ->setPseudo( 'un gens qui commente' ) ->setOwner( $owner ); $pollCitronOrange->addComment( $ownerComment ); $someoneComment = new Comment(); $someoneComment ->setText( "comme l'auteur se la raconte. PFFFF!" ) - ->setPseudo('un gens qui commente') + ->setPseudo( 'un gens qui commente' ) ->setOwner( $commenterMan ); $pollCitronOrange->addComment( $someoneComment ); $pollCitronOrange->setTitle( 'démo sondage de texte avec deux commentaires' ) - ->setCustomUrl('demo') - ->setDescription( 'description du sondage 2' ); + ->setCustomUrl( 'demo' ) + ->setDescription( 'description du sondage 2' ); $pollCitronOrange->setModificationPolicy( 'self' ); $pollCitronOrange->setMailOnComment( true ); @@ -138,9 +138,9 @@ class AppPollFixtures extends Fixture { // voting test with 2 people // poll with date type - $pollCitronOrange = new Poll(); - $choice = new Choice(); - $firstDate = new DateTime(); + $pollCitronOrange = new Poll(); + $choice = new Choice(); + $firstDate = new DateTime(); $choice->setName( $firstDate->format( 'Y-m-d H:i:s' ) ); $choice2 = new Choice(); $choice3 = new Choice(); @@ -148,42 +148,42 @@ class AppPollFixtures extends Fixture { $choice3->setName( $pollCitronOrange->addDaysToDate( $firstDate, 2 )->format( 'Y-m-d H:i:s' ) ); $pollCitronOrange->setTitle( "c'est pour aujourdhui ou pour demain" ) - ->setCustomUrl('aujourdhui-ou-demain') - ->setDescription( 'Vous avez le choix dans la date' ) - ->setKind( 'date' ) - ->setOwner( $owner ) - ->addChoice( $choice ) - ->addChoice( $choice2 ) - ->addChoice( $choice3 ) - ->setModificationPolicy( 'everybody' ); + ->setCustomUrl( 'aujourdhui-ou-demain' ) + ->setDescription( 'Vous avez le choix dans la date' ) + ->setKind( 'date' ) + ->setOwner( $owner ) + ->addChoice( $choice ) + ->addChoice( $choice2 ) + ->addChoice( $choice3 ) + ->setModificationPolicy( 'everybody' ); $manager->persist( $pollCitronOrange ); // poll with cartoon choices $pollCartoons = new Poll(); $pollCartoons->setTitle( 'dessin animé préféré' ) - ->setCustomUrl('dessin-anime') - ->setDescription( 'choisissez votre animé préféré' ) - ->setOwner( $owner ) - ->setModificationPolicy( 'nobody' ) - ->addTextChoiceArray( [ - "Vic le viking", - "Boumbo petite automobile", - "Les mystérieuses cités d'or", - "Les mondes engloutis", - "Foot 2 rue", - "Le chat, la vache, et l'océan", - "Digimon", - ] ); + ->setCustomUrl( 'dessin-anime' ) + ->setDescription( 'choisissez votre animé préféré' ) + ->setOwner( $owner ) + ->setModificationPolicy( 'nobody' ) + ->addTextChoiceArray( [ + "Vic le viking", + "Boumbo petite automobile", + "Les mystérieuses cités d'or", + "Les mondes engloutis", + "Foot 2 rue", + "Le chat, la vache, et l'océan", + "Digimon", + ] ); $someoneComment = new Comment(); $someoneComment - ->setPseudo('un gens qui commente') + ->setPseudo( 'un gens qui commente' ) ->setText( "allez boumbo!" ) ->setOwner( $commenterMan ); $pollCartoons->addComment( $someoneComment ); $someoneComment2 = new Comment(); $someoneComment2 - ->setPseudo('un gens qui commente') + ->setPseudo( 'un gens qui commente' ) ->setText( "je suis pour la team rocket de digimon" ) ->setOwner( $owner ); $pollCartoons->addComment( $someoneComment2 ); @@ -195,7 +195,7 @@ class AppPollFixtures extends Fixture { $stack ->setPoll( $pollCartoons ) ->setOwner( $voter ); - $pollCartoons->addStackOfVote($stack); + $pollCartoons->addStackOfVote( $stack ); $vote = new Vote(); $vote @@ -203,7 +203,7 @@ class AppPollFixtures extends Fixture { ->setStacksOfVotes( $stack ) ->setValue( "yes" ) ->setChoice( $pollCartoons->getChoices()[ 2 ] ); - $pollCartoons->addVote($vote); + $pollCartoons->addVote( $vote ); $vote = new Vote(); $vote @@ -211,7 +211,7 @@ class AppPollFixtures extends Fixture { ->setStacksOfVotes( $stack ) ->setValue( "maybe" ) ->setChoice( $pollCartoons->getChoices()[ 1 ] ); - $pollCartoons->addVote($vote); + $pollCartoons->addVote( $vote ); $manager->persist( $stack ); @@ -227,7 +227,7 @@ class AppPollFixtures extends Fixture { ->setStacksOfVotes( $stack ) ->setValue( "yes" ) ->setChoice( $pollCartoons->getChoices()[ 1 ] ); - $pollCartoons->addVote($vote); + $pollCartoons->addVote( $vote ); $vote = new Vote(); $vote @@ -235,7 +235,7 @@ class AppPollFixtures extends Fixture { ->setStacksOfVotes( $stack ) ->setValue( "yes" ) ->setChoice( $pollCartoons->getChoices()[ 2 ] ); - $pollCartoons->addVote($vote); + $pollCartoons->addVote( $vote ); $vote = new Vote(); $vote @@ -243,7 +243,7 @@ class AppPollFixtures extends Fixture { ->setStacksOfVotes( $stack ) ->setValue( "no" ) ->setChoice( $pollCartoons->getChoices()[ 2 ] ); - $pollCartoons->addVote($vote); + $pollCartoons->addVote( $vote ); $manager->persist( $pollCartoons ); $manager->persist( $stack ); diff --git a/src/DataFixtures/VotesStacksFixtures.php b/src/DataFixtures/VotesStacksFixtures.php index cd9960c..8eb0260 100644 --- a/src/DataFixtures/VotesStacksFixtures.php +++ b/src/DataFixtures/VotesStacksFixtures.php @@ -3,16 +3,14 @@ namespace App\DataFixtures; use App\Entity\Owner; -use App\Entity\Poll; use App\Entity\StackOfVotes; use App\Entity\Vote; use Doctrine\Bundle\FixturesBundle\Fixture; use Doctrine\Common\DataFixtures\DependentFixtureInterface; use Doctrine\Persistence\ObjectManager; -class VotesStacksFixtures extends Fixture implements DependentFixtureInterface { - public function getDependencies() - { +class VotesStacksFixtures extends Fixture implements DependentFixtureInterface { + public function getDependencies() { return [ AppPollFixtures::class, ]; @@ -32,8 +30,8 @@ class VotesStacksFixtures extends Fixture implements DependentFixtureInterface // "citron ou orange" // add vote stacks on "citron ou orange" - $pollCitronOrange = $this->getReference(AppPollFixtures::POLL_FIXTURE_ONE); - $stack1 = new StackOfVotes(); + $pollCitronOrange = $this->getReference( AppPollFixtures::POLL_FIXTURE_ONE ); + $stack1 = new StackOfVotes(); $stack1 ->setPoll( $pollCitronOrange ) ->setOwner( $people1 ); diff --git a/src/Entity/Choice.php b/src/Entity/Choice.php index cdff507..048b4b3 100755 --- a/src/Entity/Choice.php +++ b/src/Entity/Choice.php @@ -1,145 +1,145 @@ poll = new ArrayCollection(); - $this->votes = new ArrayCollection(); - $this->setDateTime( new DateTime() ); - if ( $optionalName ) { - $this->setName( $optionalName ); - } - } - - - public function display() { - return [ - 'id' => $this->getId(), - 'date' => $this->getDateTime(), - 'name' => $this->getName(), - 'url' => $this->getUrl(), - ]; - } - - public function getId(): ?int { - return $this->id; - } - - public function getDateTime(): ?DateTimeInterface { - return $this->dateTime; - } - - public function setDateTime( ?DateTimeInterface $dateTime ): self { - $this->dateTime = $dateTime; - - return $this; - } - - public function getName(): ?string { - return $this->name; - } - - public function setName( ?string $name ): self { - $this->name = $name; - - return $this; - } - - public function getPoll(): ?Poll { - return $this->poll; - } - - public function setPoll( ?Poll $poll ): self { - $this->poll = $poll; - - return $this; - } - - /** - * @return Collection|Vote[] - */ - public function getVotes(): Collection { - return $this->votes; - } - - public function addVote( Vote $vote ): self { - if ( ! $this->votes->contains( $vote ) ) { - $this->votes[] = $vote; - $vote->setChoice( $this ); - } - - return $this; - } - - public function removeVote( Vote $vote ): self { - if ( $this->votes->contains( $vote ) ) { - $this->votes->removeElement( $vote ); - // set the owning side to null (unless already changed) - if ( $vote->getChoice() === $this ) { - $vote->setChoice( null ); - } - } - - return $this; - } - - public function getUrl(): ?string { - return $this->url; - } - - public function setUrl( ?string $url ): self { - $this->url = $url; - - return $this; + public function __construct( $optionalName = null ) { + $this->poll = new ArrayCollection(); + $this->votes = new ArrayCollection(); + $this->setDateTime( new DateTime() ); + if ( $optionalName ) { + $this->setName( $optionalName ); } } + + + public function display() { + return [ + 'id' => $this->getId(), + 'date' => $this->getDateTime(), + 'name' => $this->getName(), + 'url' => $this->getUrl(), + ]; + } + + public function getId(): ?int { + return $this->id; + } + + public function getDateTime(): ?DateTimeInterface { + return $this->dateTime; + } + + public function setDateTime( ?DateTimeInterface $dateTime ): self { + $this->dateTime = $dateTime; + + return $this; + } + + public function getName(): ?string { + return $this->name; + } + + public function setName( ?string $name ): self { + $this->name = $name; + + return $this; + } + + public function getUrl(): ?string { + return $this->url; + } + + public function setUrl( ?string $url ): self { + $this->url = $url; + + return $this; + } + + public function getPoll(): ?Poll { + return $this->poll; + } + + public function setPoll( ?Poll $poll ): self { + $this->poll = $poll; + + return $this; + } + + /** + * @return Collection|Vote[] + */ + public function getVotes(): Collection { + return $this->votes; + } + + public function addVote( Vote $vote ): self { + if ( ! $this->votes->contains( $vote ) ) { + $this->votes[] = $vote; + $vote->setChoice( $this ); + } + + return $this; + } + + public function removeVote( Vote $vote ): self { + if ( $this->votes->contains( $vote ) ) { + $this->votes->removeElement( $vote ); + // set the owning side to null (unless already changed) + if ( $vote->getChoice() === $this ) { + $vote->setChoice( null ); + } + } + + return $this; + } +} diff --git a/src/Entity/Comment.php b/src/Entity/Comment.php index 5423116..05ba2ee 100755 --- a/src/Entity/Comment.php +++ b/src/Entity/Comment.php @@ -2,6 +2,7 @@ namespace App\Entity; +use DateTime; use DateTimeInterface; use Doctrine\ORM\Mapping as ORM; use JMS\Serializer\Annotation as Serializer; @@ -51,72 +52,70 @@ class Comment { */ private $poll; - function display() { - return [ - 'id' => $this->getId(), - 'text' => $this->getText(), - 'pseudo' => $this->getOwner()->getPseudo(), - 'date' => $this->getCreatedAt(), - ]; - } - function __construct() { - $this->setCreatedAt( new \DateTime() ); - } + $this->setCreatedAt( new DateTime() ); + } + + function display() { + return [ + 'id' => $this->getId(), + 'text' => $this->getText(), + 'pseudo' => $this->getOwner()->getPseudo(), + 'date' => $this->getCreatedAt(), + ]; + } public function getId(): ?int { - return $this->id; - } - - public function getOwner(): ?Owner { - return $this->owner; - } - - public function setOwner( ?Owner $owner ): self { - $this->owner = $owner; - - return $this; - } + return $this->id; + } public function getText(): ?string { - return $this->text; - } + return $this->text; + } public function setText( string $text ): self { - $this->text = $text; - - return $this; - } + $this->text = $text; + + return $this; + } + + public function getOwner(): ?Owner { + return $this->owner; + } + + public function setOwner( ?Owner $owner ): self { + $this->owner = $owner; + + return $this; + } public function getCreatedAt(): ?DateTimeInterface { - return $this->createdAt; - } + return $this->createdAt; + } public function setCreatedAt( DateTimeInterface $createdAt ): self { - $this->createdAt = $createdAt; - - return $this; - } + $this->createdAt = $createdAt; + + return $this; + } public function getPoll(): ?Poll { - return $this->poll; - } + return $this->poll; + } public function setPoll( ?Poll $poll ): self { - $this->poll = $poll; - - return $this; - } + $this->poll = $poll; - public function getPseudo(): ?string - { - return $this->pseudo; - } + return $this; + } - public function setPseudo(string $pseudo): self - { - $this->pseudo = $pseudo; + public function getPseudo(): ?string { + return $this->pseudo; + } - return $this; - } + public function setPseudo( string $pseudo ): self { + $this->pseudo = $pseudo; + + return $this; + } } diff --git a/src/Entity/Owner.php b/src/Entity/Owner.php index 761427a..66d37f0 100755 --- a/src/Entity/Owner.php +++ b/src/Entity/Owner.php @@ -2,6 +2,8 @@ namespace App\Entity; +use DateTime; +use DateTimeInterface; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; @@ -17,18 +19,18 @@ class Owner { * @Serializer\Expose() */ public $pseudo; - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ - private $id; /** * @ORM\Column(type="string", length=255) * @Serializer\Type("string") * @Serializer\Expose() */ public $email; + /** + * @ORM\Id() + * @ORM\GeneratedValue() + * @ORM\Column(type="integer") + */ + private $id; /** * @ORM\OneToMany(targetEntity="App\Entity\Poll", mappedBy="owner",cascade={"persist","remove"},orphanRemoval=true) * @Serializer\Type("App\Entity\Poll") @@ -62,7 +64,7 @@ class Owner { $this->polls = new ArrayCollection(); $this->comments = new ArrayCollection(); $this->stackOfVotes = new ArrayCollection(); - $this->setCreatedAt( new \DateTime() ); + $this->setCreatedAt( new DateTime() ); $this->setModifierToken( uniqid() ); } @@ -206,11 +208,11 @@ class Owner { return $this; } - public function getCreatedAt(): ?\DateTimeInterface { + public function getCreatedAt(): ?DateTimeInterface { return $this->createdAt; } - public function setCreatedAt( \DateTimeInterface $createdAt ): self { + public function setCreatedAt( DateTimeInterface $createdAt ): self { $this->createdAt = $createdAt; return $this; diff --git a/src/Entity/Poll.php b/src/Entity/Poll.php index b57b4ba..1daf0a7 100755 --- a/src/Entity/Poll.php +++ b/src/Entity/Poll.php @@ -2,11 +2,14 @@ namespace App\Entity; - use DateTimeInterface; - use Doctrine\Common\Collections\ArrayCollection; - use Doctrine\Common\Collections\Collection; - use Doctrine\ORM\Mapping as ORM; - use JMS\Serializer\Annotation as Serializer; +use DateTime; +use DateTimeInterface; +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Common\Collections\Collection; +use Doctrine\ORM\Mapping as ORM; +use ErrorException; +use JMS\Serializer\Annotation as Serializer; +use RangeException; /** * @ORM\Entity(repositoryClass="App\Repository\PollRepository") @@ -97,7 +100,7 @@ class Poll { * @Serializer\Type("smallint") * @Serializer\Expose() */ - public $choicesMax = -1; + public $choicesMax = - 1; /** * people can add comments @@ -168,6 +171,12 @@ class Poll { * @Serializer\Type("ArrayCollection") */ public $comments; + /** + * number of days from now for default expiracy date + * @var int + * @Serializer\Expose() + */ + public $defaultExpiracyDaysFromNow = 60; /** * vote restricted by a password in md5 format * @ORM\Column(type="string", length=255, nullable=true) @@ -179,142 +188,27 @@ class Poll { * @Serializer\Type("string") */ private $adminKey; - - /** - * number of days from now for default expiracy date - * @var int - * @Serializer\Expose() - */ - public $defaultExpiracyDaysFromNow = 60; private $maxChoicesLimit = 25; - public function computeAnswers() { - // counts each number of answer for this choice - $computedArray = []; - $maxScore = 0; - - foreach ( $this->getStacksOfVotes() as $stack_of_vote ) { - foreach ( $stack_of_vote->getVotes() as $vote ) { - $answer = $vote->getValue(); - $choice_id = $vote->getChoice()->getId(); - $choice_url = $vote->getChoice()->getUrl(); - - if ( ! isset( $computedArray[ $choice_id ] ) ) { - $computedArray[ $choice_id ] = [ - 'id' => $choice_id, - 'url' => $choice_url, - 'name' => $vote->getChoice()->getName(), - 'score' => 0, - 'yes' => [ - 'count' => 0, - 'people' => [], - ], - 'maybe' => [ - 'count' => 0, - 'people' => [], - ], - 'no' => [ - 'count' => 0, - 'people' => [], - ], - ]; - } - $computedArray[ $choice_id ][ $answer ][ 'count' ] ++; - $computedArray[ $choice_id ][ $answer ][ 'people' ][] = $stack_of_vote->getOwner()->getPseudo(); - - if ( $answer == 'yes' ) { - $computedArray[ $choice_id ][ 'score' ] += 1; - } elseif ( $answer == 'maybe' ) { - $computedArray[ $choice_id ][ 'score' ] += 0.5; - } - // compare with max value - if ( $computedArray[ $choice_id ][ 'score' ] > $maxScore ) { - $maxScore = $computedArray[ $choice_id ][ 'score' ]; - } - } - } - $answersWithStats = []; - foreach ( $computedArray as $choice_stat ) { - $answersWithStats[] = $choice_stat; - } - return [ - 'answers' => $computedArray, - 'answersWithStats' => $answersWithStats, - 'max_score' => $maxScore, - ]; - } - - public function displayForAdmin() { - $content = $this->display(); - $content['owner_modifier_token'] = $this->getOwner()->getModifierToken(); - $content['admin_key'] = $this->getAdminKey(); - $content['password_hash'] = $this->getPassword(); - $content['id'] = $this->getId(); - return $content; - } - public function display() { - - $computedAnswers = $this->computeAnswers(); - $displayedStackOfVotes = []; - foreach ( $this->getStacksOfVotes() as $stack ) { - $displayedStackOfVotes[] = $stack->display(); - } - $displayedChoices = []; - foreach ( $this->getChoices() as $choice ) { - $displayedChoices[] = $choice->display(); - } - $displayedComments = []; - foreach ( $this->getComments() as $comment ) { - $displayedComments[] = $comment->display(); - } - - - - return [ - 'title' => $this->getTitle(), - 'creation_date' => $this->getCreationDate()->format('c'), - 'expiracy_date' => $this->getExpiracyDate()->format('c'), - 'votes_max' => $this->getVotesMax(), - 'choices_max' => $this->getChoicesMax(), - 'kind' => $this->getKind(), - 'allowed_answers' => $this->getAllowedAnswers(), - 'votes_allowed' => $this->getVotesAllowed(), - 'modification_policy' => $this->getModificationPolicy(), - 'hide_results' => $this->getHideResults(), - 'show_results_even_if_password' => $this->getShowResultEvenIfPasswords(), - 'owner' => [ - 'pseudo' => $this->getOwner()->getPseudo()] - , - 'password_protected' => $this->getPassword() ? 'yes' : 'no', - 'max_score' => $computedAnswers['max_score'], - 'choices' => $displayedChoices, - 'choices_stats' => $computedAnswers['answersWithStats'], - 'stacks' => $displayedStackOfVotes, - 'comments' => $displayedComments, - ]; - } - public function __construct() { $this->initiate(); } - private function initiate() { $this->votes = new ArrayCollection(); $this->stacksOfVotes = new ArrayCollection(); $this->choices = new ArrayCollection(); $this->comments = new ArrayCollection(); $this->setAdminKey( $this->generateAdminKey() ); - $this->setCreationDate( new \DateTime() ); + $this->setCreationDate( new DateTime() ); $this->setExpiracyDate( $this->addDaysToDate( - new \DateTime(), + new DateTime(), $this->defaultExpiracyDaysFromNow ) ); $this->setAllowedAnswers( [ 'yes', 'maybe', 'no' ] ); } - public function generateAdminKey() { $rand = random_int( PHP_INT_MIN, PHP_INT_MAX ); @@ -342,7 +236,7 @@ class Poll { string $keyspace = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' ): string { if ( $length < 1 ) { - throw new \RangeException( "Length must be a positive integer" ); + throw new RangeException( "Length must be a positive integer" ); } $pieces = []; $max = mb_strlen( $keyspace, '8bit' ) - 1; @@ -353,33 +247,143 @@ class Poll { return implode( '', $pieces ); } - public function findChoiceById( int $id ) { - - $choices = $this->getChoices(); - $counter = 0; - // there must be something cleaner than this in Doctrine ArrayCollection - foreach ( $choices as $choice ) { - $counter ++; - if ( $counter > $this->maxChoicesLimit ) { - throw new \ErrorException( "max number of choices reached for this poll" ); - } - if ( $choice && $choice->getId() == $id ) { - return $choice; - } - - } - - return null; - } - - public function addDaysToDate( \DateTime $date, int $days ) { + public function addDaysToDate( DateTime $date, int $days ) { $st = strtotime( $date->getTimestamp() ); - return new \DateTime( $st ); + return new DateTime( $st ); } - public function getId(): ?int { - return $this->id; + public function displayForAdmin() { + $content = $this->display(); + $content[ 'owner_modifier_token' ] = $this->getOwner()->getModifierToken(); + $content[ 'admin_key' ] = $this->getAdminKey(); + $content[ 'password_hash' ] = $this->getPassword(); + $content[ 'id' ] = $this->getId(); + + return $content; + } + + public function display() { + + $computedAnswers = $this->computeAnswers(); + $displayedStackOfVotes = []; + foreach ( $this->getStacksOfVotes() as $stack ) { + $displayedStackOfVotes[] = $stack->display(); + } + $displayedChoices = []; + foreach ( $this->getChoices() as $choice ) { + $displayedChoices[] = $choice->display(); + } + $displayedComments = []; + foreach ( $this->getComments() as $comment ) { + $displayedComments[] = $comment->display(); + } + + + return [ + 'title' => $this->getTitle(), + 'creation_date' => $this->getCreationDate()->format( 'c' ), + 'expiracy_date' => $this->getExpiracyDate()->format( 'c' ), + 'votes_max' => $this->getVotesMax(), + 'choices_max' => $this->getChoicesMax(), + 'kind' => $this->getKind(), + 'allowed_answers' => $this->getAllowedAnswers(), + 'votes_allowed' => $this->getVotesAllowed(), + 'modification_policy' => $this->getModificationPolicy(), + 'hide_results' => $this->getHideResults(), + 'show_results_even_if_password' => $this->getShowResultEvenIfPasswords(), + 'owner' => [ + 'pseudo' => $this->getOwner()->getPseudo(), + ] + , + 'password_protected' => $this->getPassword() ? 'yes' : 'no', + 'max_score' => $computedAnswers[ 'max_score' ], + 'choices' => $displayedChoices, + 'choices_stats' => $computedAnswers[ 'answersWithStats' ], + 'stacks' => $displayedStackOfVotes, + 'comments' => $displayedComments, + ]; + } + + public function computeAnswers() { + // counts each number of answer for this choice + $computedArray = []; + $maxScore = 0; + + foreach ( $this->getStacksOfVotes() as $stack_of_vote ) { + foreach ( $stack_of_vote->getVotes() as $vote ) { + $answer = $vote->getValue(); + $choice_id = $vote->getChoice()->getId(); + $choice_url = $vote->getChoice()->getUrl(); + + if ( ! isset( $computedArray[ $choice_id ] ) ) { + $computedArray[ $choice_id ] = [ + 'id' => $choice_id, + 'url' => $choice_url, + 'name' => $vote->getChoice()->getName(), + 'score' => 0, + 'yes' => [ + 'count' => 0, + 'people' => [], + ], + 'maybe' => [ + 'count' => 0, + 'people' => [], + ], + 'no' => [ + 'count' => 0, + 'people' => [], + ], + ]; + } + $computedArray[ $choice_id ][ $answer ][ 'count' ] ++; + $computedArray[ $choice_id ][ $answer ][ 'people' ][] = $stack_of_vote->getOwner()->getPseudo(); + + if ( $answer == 'yes' ) { + $computedArray[ $choice_id ][ 'score' ] += 1; + } elseif ( $answer == 'maybe' ) { + $computedArray[ $choice_id ][ 'score' ] += 0.5; + } + // compare with max value + if ( $computedArray[ $choice_id ][ 'score' ] > $maxScore ) { + $maxScore = $computedArray[ $choice_id ][ 'score' ]; + } + } + } + $answersWithStats = []; + foreach ( $computedArray as $choice_stat ) { + $answersWithStats[] = $choice_stat; + } + + return [ + 'answers' => $computedArray, + 'answersWithStats' => $answersWithStats, + 'max_score' => $maxScore, + ]; + } + + public function getStacksOfVotes() { + return $this->stacksOfVotes; + } + + public function setStacksOfVotes( ?StackOfVotes $stacksOfVotes ): self { + $this->stacksOfVotes = $stacksOfVotes; + + return $this; + } + + /** + * @return Collection|Choice[] + */ + public function getChoices(): Collection { + return $this->choices; + } + + /** + * @return Collection|Comment[] + */ + public function getComments(): Collection { + return $this->comments; } public function getTitle(): ?string { @@ -402,46 +406,32 @@ class Poll { return $this; } + public function getExpiracyDate(): ?DateTimeInterface { + return $this->expiracyDate; + } + public function setExpiracyDate( DateTimeInterface $expiracyDate ): self { $this->expiracyDate = $expiracyDate; return $this; } - public function getOwner(): ?Owner { - return $this->owner; + public function getVotesMax() { + return $this->votesMax; } - public function setOwner( ?Owner $owner ): self { - $this->owner = $owner; + public function setVotesMax( $votesMax ): self { + $this->votesMax = $votesMax; return $this; } - /** - * @return Collection|Vote[] - */ - public function getVotes(): Collection { - return $this->votes; + public function getChoicesMax() { + return $this->choicesMax; } - - public function getAdminKey(): ?string { - return $this->adminKey; - } - - public function setAdminKey( string $adminKey ): self { - $this->adminKey = $adminKey; - - return $this; - } - - public function getDescription(): ?string { - return $this->description; - } - - public function setDescription( string $description ): self { - $this->description = $description; + public function setChoicesMax( $choicesMax ): self { + $this->choicesMax = $choicesMax; return $this; } @@ -456,22 +446,22 @@ class Poll { return $this; } - public function getCustomUrl(): ?string { - return $this->customUrl; + public function getAllowedAnswers(): ?array { + return $this->allowedAnswers; } - public function setCustomUrl( string $customUrl ): self { - $this->customUrl = $customUrl; + public function setAllowedAnswers( array $allowedAnswers ): self { + $this->allowedAnswers = $allowedAnswers; return $this; } - public function getPassword(): ?string { - return $this->password; + public function getVotesAllowed(): ?bool { + return $this->votesAllowed; } - public function setPassword( string $password ): self { - $this->password = md5( $password ); + public function setVotesAllowed( ?bool $votesAllowed ): self { + $this->votesAllowed = $votesAllowed; return $this; } @@ -486,26 +476,6 @@ class Poll { return $this; } - public function getMailOnComment(): ?bool { - return $this->mailOnComment; - } - - public function setMailOnComment( bool $mailOnComment ): self { - $this->mailOnComment = $mailOnComment; - - return $this; - } - - public function getMailOnVote(): ?bool { - return $this->mailOnVote; - } - - public function setMailOnVote( bool $mailOnVote ): self { - $this->mailOnVote = $mailOnVote; - - return $this; - } - public function getHideResults(): ?bool { return $this->hideResults; } @@ -526,12 +496,104 @@ class Poll { return $this; } + public function getOwner(): ?Owner { + return $this->owner; + } + + public function setOwner( ?Owner $owner ): self { + $this->owner = $owner; + + return $this; + } + + public function getPassword(): ?string { + return $this->password; + } + + public function setPassword( string $password ): self { + $this->password = md5( $password ); + + return $this; + } + + public function getAdminKey(): ?string { + return $this->adminKey; + } + + public function setAdminKey( string $adminKey ): self { + $this->adminKey = $adminKey; + + return $this; + } + + public function getId(): ?int { + return $this->id; + } + + public function findChoiceById( int $id ) { + + $choices = $this->getChoices(); + $counter = 0; + // there must be something cleaner than this in Doctrine ArrayCollection + foreach ( $choices as $choice ) { + $counter ++; + if ( $counter > $this->maxChoicesLimit ) { + throw new ErrorException( "max number of choices reached for this poll" ); + } + if ( $choice && $choice->getId() == $id ) { + return $choice; + } + + } + + return null; + } /** - * @return Collection|Comment[] + * @return Collection|Vote[] */ - public function getComments(): Collection { - return $this->comments; + public function getVotes(): Collection { + return $this->votes; + } + + public function getDescription(): ?string { + return $this->description; + } + + public function setDescription( string $description ): self { + $this->description = $description; + + return $this; + } + + public function getCustomUrl(): ?string { + return $this->customUrl; + } + + public function setCustomUrl( string $customUrl ): self { + $this->customUrl = $customUrl; + + return $this; + } + + public function getMailOnComment(): ?bool { + return $this->mailOnComment; + } + + public function setMailOnComment( bool $mailOnComment ): self { + $this->mailOnComment = $mailOnComment; + + return $this; + } + + public function getMailOnVote(): ?bool { + return $this->mailOnVote; + } + + public function setMailOnVote( bool $mailOnVote ): self { + $this->mailOnVote = $mailOnVote; + + return $this; } public function addComment( Comment $comment ): self { @@ -555,17 +617,6 @@ class Poll { return $this; } - public function getStacksOfVotes() { - return $this->stacksOfVotes; - } - - public function setStacksOfVotes( ?StackOfVotes $stacksOfVotes ): self { - $this->stacksOfVotes = $stacksOfVotes; - - return $this; - } - - public function addStackOfVote( StackOfVotes $stackOfVote ): self { if ( ! $this->stacksOfVotes->contains( $stackOfVote ) ) { $this->stacksOfVotes[] = $stackOfVote; @@ -587,10 +638,6 @@ class Poll { return $this; } - public function getExpiracyDate(): ?\DateTimeInterface { - return $this->expiracyDate; - } - public function addVote( Vote $vote ): self { if ( ! $this->votes->contains( $vote ) ) { $this->votes[] = $vote; @@ -612,13 +659,6 @@ class Poll { return $this; } - /** - * @return Collection|Choice[] - */ - public function getChoices(): Collection { - return $this->choices; - } - public function addTextChoiceArray( array $choiceTextArray ): self { foreach ( $choiceTextArray as $text ) { $newChoice = new Choice(); @@ -629,13 +669,17 @@ class Poll { return $this; } + public function addChoice( Choice $choice ): self { + if ( ! is_null( $this->choices ) ) { + if ( ! $this->choices->contains( $choice ) ) { + $this->choices[] = $choice; + $choice->setPoll( $this ); + } + } else { + $this->choices[] = $choice; + $choice->setPoll( $this ); + } - public function getAllowedAnswers(): ?array { - return $this->allowedAnswers; - } - - public function setAllowedAnswers( array $allowedAnswers ): self { - $this->allowedAnswers = $allowedAnswers; return $this; } @@ -661,21 +705,6 @@ class Poll { return $this; } - public function addChoice( Choice $choice ): self { - if ( ! is_null( $this->choices ) ) { - if ( ! $this->choices->contains( $choice ) ) { - $this->choices[] = $choice; - $choice->setPoll( $this ); - } - } else { - $this->choices[] = $choice; - $choice->setPoll( $this ); - } - - - return $this; - } - public function removeChoice( Choice $choice ): self { if ( $this->choices->contains( $choice ) ) { $this->choices->removeElement( $choice ); @@ -688,36 +717,6 @@ class Poll { return $this; } - public function getVotesAllowed(): ?bool { - return $this->votesAllowed; - } - - public function setVotesAllowed( ?bool $votesAllowed ): self { - $this->votesAllowed = $votesAllowed; - - return $this; - } - - public function getVotesMax() { - return $this->votesMax; - } - - public function setVotesMax( $votesMax ): self { - $this->votesMax = $votesMax; - - return $this; - } - - public function getChoicesMax() { - return $this->choicesMax; - } - - public function setChoicesMax( $choicesMax ): self { - $this->choicesMax = $choicesMax; - - return $this; - } - public function getCommentsAllowed(): ?bool { return $this->commentsAllowed; } diff --git a/src/Entity/StackOfVotes.php b/src/Entity/StackOfVotes.php index 39b321f..cb5330b 100755 --- a/src/Entity/StackOfVotes.php +++ b/src/Entity/StackOfVotes.php @@ -18,12 +18,6 @@ class StackOfVotes { use TimeStampableTrait; - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ - private $id; /** * @ORM\Column(type="string", length=255) * @Serializer\Type("string") @@ -35,6 +29,12 @@ class StackOfVotes { * @Serializer\Expose() */ public $votes; + /** + * @ORM\Id() + * @ORM\GeneratedValue() + * @ORM\Column(type="integer") + */ + private $id; /** * @ORM\ManyToOne(targetEntity="App\Entity\Poll", inversedBy="stacksOfVotes", cascade={"persist"}) */ @@ -46,6 +46,9 @@ class StackOfVotes { */ private $owner; + public function __construct() { + $this->votes = new ArrayCollection(); + } public function display() { $votes = $this->getVotes(); @@ -53,9 +56,9 @@ class StackOfVotes { $tab = [ // 'id' => $this->getId(), // 'modifier_token' => $this->getOwner()->getModifierToken(), - 'pseudo' => $this->getPseudo(), - 'created_at' => $this->getCreatedAtAsString(), - 'votes' => [], + 'pseudo' => $this->getPseudo(), + 'created_at' => $this->getCreatedAtAsString(), + 'votes' => [], ]; // prefill votes with all choices ids // foreach ( $this->getPoll()->getChoices() as $choice ) { @@ -66,27 +69,12 @@ class StackOfVotes { // } foreach ( $votes as $vote ) { - $tab[ 'votes' ][$vote->getChoice()->getId()] = $vote->display(); + $tab[ 'votes' ][ $vote->getChoice()->getId() ] = $vote->display(); } return $tab; } - /** - * @ORM\PrePersist - */ - public function prePersist() { - $this->setPseudo( $this->getOwner()->getPseudo() ); - } - - public function __construct() { - $this->votes = new ArrayCollection(); - } - - public function getId(): ?int { - return $this->id; - } - /** * @return Collection|poll[] */ @@ -94,6 +82,37 @@ class StackOfVotes { return $this->votes; } + public function getPseudo(): ?string { + return $this->pseudo; + } + + public function setPseudo( ?string $pseudo ): self { + $this->pseudo = $pseudo; + + return $this; + } + + /** + * @ORM\PrePersist + */ + public function prePersist() { + $this->setPseudo( $this->getOwner()->getPseudo() ); + } + + public function getOwner(): ?Owner { + return $this->owner; + } + + public function setOwner( ?Owner $owner ): self { + $this->owner = $owner; + + return $this; + } + + public function getId(): ?int { + return $this->id; + } + public function addVote( Vote $vote ): self { if ( ! $this->votes->contains( $vote ) ) { $vote->setPoll( $this->getPoll() ); @@ -105,6 +124,16 @@ class StackOfVotes { return $this; } + public function getPoll(): ?Poll { + return $this->poll; + } + + public function setPoll( ?Poll $poll ): self { + $this->poll = $poll; + + return $this; + } + public function removeVote( Vote $vote ): self { if ( $this->votes->contains( $vote ) ) { $this->votes->removeElement( $vote ); @@ -116,34 +145,4 @@ class StackOfVotes { return $this; } - - public function getPseudo(): ?string { - return $this->pseudo; - } - - public function setPseudo( ?string $pseudo ): self { - $this->pseudo = $pseudo; - - return $this; - } - - public function getOwner(): ?Owner { - return $this->owner; - } - - public function setOwner( ?Owner $owner ): self { - $this->owner = $owner; - - return $this; - } - - public function getPoll(): ?Poll { - return $this->poll; - } - - public function setPoll( ?Poll $poll ): self { - $this->poll = $poll; - - return $this; - } } diff --git a/src/Entity/Vote.php b/src/Entity/Vote.php index c963563..71cd808 100755 --- a/src/Entity/Vote.php +++ b/src/Entity/Vote.php @@ -2,9 +2,10 @@ namespace App\Entity; - use DateTimeInterface; - use Doctrine\ORM\Mapping as ORM; - use JMS\Serializer\Annotation as Serializer; +use DateTime; +use DateTimeInterface; +use Doctrine\ORM\Mapping as ORM; +use JMS\Serializer\Annotation as Serializer; /** * @ORM\Entity(repositoryClass="App\Repository\VoteRepository") @@ -52,6 +53,10 @@ class Vote { */ private $stacksOfVotes; + public function __construct() { + $this->setCreationDate( new DateTime() ); + } + public function display() { $value = $this->getValue(); if ( ! $value ) { @@ -67,27 +72,20 @@ class Vote { } } - public function __construct() { - $this->setCreationDate( new \DateTime() ); + public function getValue(): ?string { + return $this->value; + } + + public function setValue( ?string $value ): self { + $this->value = $value; + + return $this; } public function getId(): ?int { return $this->id; } - public function getPoll(): ?Poll { - return $this->poll; - } - - public function setPoll( ?Poll $poll ): self { - $this->poll = $poll; - if ( $poll ) { - $poll->addVote( $this ); - } - - return $this; - } - public function getChoice(): ?Choice { return $this->choice; } @@ -98,12 +96,15 @@ class Vote { return $this; } - public function getValue(): ?string { - return $this->value; + public function getPoll(): ?Poll { + return $this->poll; } - public function setValue( ?string $value ): self { - $this->value = $value; + public function setPoll( ?Poll $poll ): self { + $this->poll = $poll; + if ( $poll ) { + $poll->addVote( $this ); + } return $this; } diff --git a/src/Form/PollType.php b/src/Form/PollType.php index 56f99a6..0f764b0 100644 --- a/src/Form/PollType.php +++ b/src/Form/PollType.php @@ -7,33 +7,29 @@ use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; -class PollType extends AbstractType -{ - public function buildForm(FormBuilderInterface $builder, array $options) - { - $builder - ->add('title') - ->add('customUrl') - ->add('description') - ->add('creationDate') - ->add('expiracyDate') - ->add('kind') - ->add('allowedAnswers') - ->add('modificationPolicy') - ->add('mailOnComment') - ->add('mailOnVote') - ->add('hideResults') - ->add('showResultEvenIfPasswords') - ->add('password') - ->add('adminKey') - ->add('owner') - ; - } +class PollType extends AbstractType { + public function buildForm( FormBuilderInterface $builder, array $options ) { + $builder + ->add( 'title' ) + ->add( 'customUrl' ) + ->add( 'description' ) + ->add( 'creationDate' ) + ->add( 'expiracyDate' ) + ->add( 'kind' ) + ->add( 'allowedAnswers' ) + ->add( 'modificationPolicy' ) + ->add( 'mailOnComment' ) + ->add( 'mailOnVote' ) + ->add( 'hideResults' ) + ->add( 'showResultEvenIfPasswords' ) + ->add( 'password' ) + ->add( 'adminKey' ) + ->add( 'owner' ); + } - public function configureOptions(OptionsResolver $resolver) - { - $resolver->setDefaults([ - 'data_class' => Poll::class, - ]); - } + public function configureOptions( OptionsResolver $resolver ) { + $resolver->setDefaults( [ + 'data_class' => Poll::class, + ] ); + } } diff --git a/src/Kernel.php b/src/Kernel.php index 655e796..4f202ae 100644 --- a/src/Kernel.php +++ b/src/Kernel.php @@ -6,33 +6,31 @@ use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait; use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; use Symfony\Component\HttpKernel\Kernel as BaseKernel; use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator; +use function dirname; -class Kernel extends BaseKernel -{ - use MicroKernelTrait; +class Kernel extends BaseKernel { + use MicroKernelTrait; - protected function configureContainer(ContainerConfigurator $container): void - { - $container->import('../config/{packages}/*.yaml'); - $container->import('../config/{packages}/'.$this->environment.'/*.yaml'); + protected function configureContainer( ContainerConfigurator $container ): void { + $container->import( '../config/{packages}/*.yaml' ); + $container->import( '../config/{packages}/' . $this->environment . '/*.yaml' ); - if (is_file(\dirname(__DIR__).'/config/services.yaml')) { - $container->import('../config/services.yaml'); - $container->import('../config/{services}_'.$this->environment.'.yaml'); - } elseif (is_file($path = \dirname(__DIR__).'/config/services.php')) { - (require $path)($container->withPath($path), $this); - } - } + if ( is_file( dirname( __DIR__ ) . '/config/services.yaml' ) ) { + $container->import( '../config/services.yaml' ); + $container->import( '../config/{services}_' . $this->environment . '.yaml' ); + } elseif ( is_file( $path = dirname( __DIR__ ) . '/config/services.php' ) ) { + ( require $path )( $container->withPath( $path ), $this ); + } + } - protected function configureRoutes(RoutingConfigurator $routes): void - { - $routes->import('../config/{routes}/'.$this->environment.'/*.yaml'); - $routes->import('../config/{routes}/*.yaml'); + protected function configureRoutes( RoutingConfigurator $routes ): void { + $routes->import( '../config/{routes}/' . $this->environment . '/*.yaml' ); + $routes->import( '../config/{routes}/*.yaml' ); - if (is_file(\dirname(__DIR__).'/config/routes.yaml')) { - $routes->import('../config/routes.yaml'); - } elseif (is_file($path = \dirname(__DIR__).'/config/routes.php')) { - (require $path)($routes->withPath($path), $this); - } - } + if ( is_file( dirname( __DIR__ ) . '/config/routes.yaml' ) ) { + $routes->import( '../config/routes.yaml' ); + } elseif ( is_file( $path = dirname( __DIR__ ) . '/config/routes.php' ) ) { + ( require $path )( $routes->withPath( $path ), $this ); + } + } } diff --git a/src/Repository/ChoiceRepository.php b/src/Repository/ChoiceRepository.php index 0172fe7..fcc6bac 100755 --- a/src/Repository/ChoiceRepository.php +++ b/src/Repository/ChoiceRepository.php @@ -7,44 +7,42 @@ use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Common\Persistence\ManagerRegistry; /** - * @method Choice|null find($id, $lockMode = null, $lockVersion = null) - * @method Choice|null findOneBy(array $criteria, array $orderBy = null) + * @method Choice|null find( $id, $lockMode = null, $lockVersion = null ) + * @method Choice|null findOneBy( array $criteria, array $orderBy = null ) * @method Choice[] findAll() - * @method Choice[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + * @method Choice[] findBy( array $criteria, array $orderBy = null, $limit = null, $offset = null ) */ -class ChoiceRepository extends ServiceEntityRepository -{ - public function __construct(ManagerRegistry $registry) - { - parent::__construct($registry, Choice::class); - } +class ChoiceRepository extends ServiceEntityRepository { + public function __construct( ManagerRegistry $registry ) { + parent::__construct( $registry, Choice::class ); + } - // /** - // * @return Choice[] Returns an array of Choice objects - // */ - /* - public function findByExampleField($value) - { - return $this->createQueryBuilder('c') - ->andWhere('c.exampleField = :val') - ->setParameter('val', $value) - ->orderBy('c.id', 'ASC') - ->setMaxResults(10) - ->getQuery() - ->getResult() - ; - } - */ + // /** + // * @return Choice[] Returns an array of Choice objects + // */ + /* + public function findByExampleField($value) + { + return $this->createQueryBuilder('c') + ->andWhere('c.exampleField = :val') + ->setParameter('val', $value) + ->orderBy('c.id', 'ASC') + ->setMaxResults(10) + ->getQuery() + ->getResult() + ; + } + */ - /* - public function findOneBySomeField($value): ?Choice - { - return $this->createQueryBuilder('c') - ->andWhere('c.exampleField = :val') - ->setParameter('val', $value) - ->getQuery() - ->getOneOrNullResult() - ; - } - */ + /* + public function findOneBySomeField($value): ?Choice + { + return $this->createQueryBuilder('c') + ->andWhere('c.exampleField = :val') + ->setParameter('val', $value) + ->getQuery() + ->getOneOrNullResult() + ; + } + */ } diff --git a/src/Repository/CommentRepository.php b/src/Repository/CommentRepository.php index cddf55d..d8a2f2d 100755 --- a/src/Repository/CommentRepository.php +++ b/src/Repository/CommentRepository.php @@ -7,44 +7,42 @@ use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Common\Persistence\ManagerRegistry; /** - * @method Comment|null find($id, $lockMode = null, $lockVersion = null) - * @method Comment|null findOneBy(array $criteria, array $orderBy = null) + * @method Comment|null find( $id, $lockMode = null, $lockVersion = null ) + * @method Comment|null findOneBy( array $criteria, array $orderBy = null ) * @method Comment[] findAll() - * @method Comment[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + * @method Comment[] findBy( array $criteria, array $orderBy = null, $limit = null, $offset = null ) */ -class CommentRepository extends ServiceEntityRepository -{ - public function __construct(ManagerRegistry $registry) - { - parent::__construct($registry, Comment::class); - } +class CommentRepository extends ServiceEntityRepository { + public function __construct( ManagerRegistry $registry ) { + parent::__construct( $registry, Comment::class ); + } - // /** - // * @return Comment[] Returns an array of Comment objects - // */ - /* - public function findByExampleField($value) - { - return $this->createQueryBuilder('c') - ->andWhere('c.exampleField = :val') - ->setParameter('val', $value) - ->orderBy('c.id', 'ASC') - ->setMaxResults(10) - ->getQuery() - ->getResult() - ; - } - */ + // /** + // * @return Comment[] Returns an array of Comment objects + // */ + /* + public function findByExampleField($value) + { + return $this->createQueryBuilder('c') + ->andWhere('c.exampleField = :val') + ->setParameter('val', $value) + ->orderBy('c.id', 'ASC') + ->setMaxResults(10) + ->getQuery() + ->getResult() + ; + } + */ - /* - public function findOneBySomeField($value): ?Comment - { - return $this->createQueryBuilder('c') - ->andWhere('c.exampleField = :val') - ->setParameter('val', $value) - ->getQuery() - ->getOneOrNullResult() - ; - } - */ + /* + public function findOneBySomeField($value): ?Comment + { + return $this->createQueryBuilder('c') + ->andWhere('c.exampleField = :val') + ->setParameter('val', $value) + ->getQuery() + ->getOneOrNullResult() + ; + } + */ } diff --git a/src/Repository/OwnerRepository.php b/src/Repository/OwnerRepository.php index 3bffacf..64ebfa7 100755 --- a/src/Repository/OwnerRepository.php +++ b/src/Repository/OwnerRepository.php @@ -7,44 +7,42 @@ use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Common\Persistence\ManagerRegistry; /** - * @method Owner|null find($id, $lockMode = null, $lockVersion = null) - * @method Owner|null findOneBy(array $criteria, array $orderBy = null) + * @method Owner|null find( $id, $lockMode = null, $lockVersion = null ) + * @method Owner|null findOneBy( array $criteria, array $orderBy = null ) * @method Owner[] findAll() - * @method Owner[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + * @method Owner[] findBy( array $criteria, array $orderBy = null, $limit = null, $offset = null ) */ -class OwnerRepository extends ServiceEntityRepository -{ - public function __construct(ManagerRegistry $registry) - { - parent::__construct($registry, Owner::class); - } +class OwnerRepository extends ServiceEntityRepository { + public function __construct( ManagerRegistry $registry ) { + parent::__construct( $registry, Owner::class ); + } - // /** - // * @return Owner[] Returns an array of Owner objects - // */ - /* - public function findByExampleField($value) - { - return $this->createQueryBuilder('o') - ->andWhere('o.exampleField = :val') - ->setParameter('val', $value) - ->orderBy('o.id', 'ASC') - ->setMaxResults(10) - ->getQuery() - ->getResult() - ; - } - */ + // /** + // * @return Owner[] Returns an array of Owner objects + // */ + /* + public function findByExampleField($value) + { + return $this->createQueryBuilder('o') + ->andWhere('o.exampleField = :val') + ->setParameter('val', $value) + ->orderBy('o.id', 'ASC') + ->setMaxResults(10) + ->getQuery() + ->getResult() + ; + } + */ - /* - public function findOneBySomeField($value): ?Owner - { - return $this->createQueryBuilder('o') - ->andWhere('o.exampleField = :val') - ->setParameter('val', $value) - ->getQuery() - ->getOneOrNullResult() - ; - } - */ + /* + public function findOneBySomeField($value): ?Owner + { + return $this->createQueryBuilder('o') + ->andWhere('o.exampleField = :val') + ->setParameter('val', $value) + ->getQuery() + ->getOneOrNullResult() + ; + } + */ } diff --git a/src/Repository/PollRepository.php b/src/Repository/PollRepository.php index d090fa5..6091e20 100755 --- a/src/Repository/PollRepository.php +++ b/src/Repository/PollRepository.php @@ -5,48 +5,46 @@ namespace App\Repository; use App\Entity\Poll; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; -use MongoDB\Driver\Manager; /** - * @method Poll|null find($id, $lockMode = null, $lockVersion = null) - * @method Poll|null findOneBy(array $criteria, array $orderBy = null) + * @method Poll|null find( $id, $lockMode = null, $lockVersion = null ) + * @method Poll|null findOneBy( array $criteria, array $orderBy = null ) * @method Poll[] findAll() - * @method Poll[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + * @method Poll[] findBy( array $criteria, array $orderBy = null, $limit = null, $offset = null ) */ -class PollRepository extends ServiceEntityRepository -{ - public function __construct(ManagerRegistry - $registry) - { - parent::__construct($registry, Poll::class); - } +class PollRepository extends ServiceEntityRepository { + public function __construct( + ManagerRegistry $registry + ) { + parent::__construct( $registry, Poll::class ); + } - // /** - // * @return Poll[] Returns an array of Poll objects - // */ - /* - public function findByExampleField($value) - { - return $this->createQueryBuilder('p') - ->andWhere('p.exampleField = :val') - ->setParameter('val', $value) - ->orderBy('p.id', 'ASC') - ->setMaxResults(10) - ->getQuery() - ->getResult() - ; - } - */ + // /** + // * @return Poll[] Returns an array of Poll objects + // */ + /* + public function findByExampleField($value) + { + return $this->createQueryBuilder('p') + ->andWhere('p.exampleField = :val') + ->setParameter('val', $value) + ->orderBy('p.id', 'ASC') + ->setMaxResults(10) + ->getQuery() + ->getResult() + ; + } + */ - /* - public function findOneBySomeField($value): ?Poll - { - return $this->createQueryBuilder('p') - ->andWhere('p.exampleField = :val') - ->setParameter('val', $value) - ->getQuery() - ->getOneOrNullResult() - ; - } - */ + /* + public function findOneBySomeField($value): ?Poll + { + return $this->createQueryBuilder('p') + ->andWhere('p.exampleField = :val') + ->setParameter('val', $value) + ->getQuery() + ->getOneOrNullResult() + ; + } + */ } diff --git a/src/Repository/StackOfVotesRepository.php b/src/Repository/StackOfVotesRepository.php index 476a5ff..1626eed 100755 --- a/src/Repository/StackOfVotesRepository.php +++ b/src/Repository/StackOfVotesRepository.php @@ -7,44 +7,42 @@ use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Common\Persistence\ManagerRegistry; /** - * @method StackOfVotes|null find($id, $lockMode = null, $lockVersion = null) - * @method StackOfVotes|null findOneBy(array $criteria, array $orderBy = null) + * @method StackOfVotes|null find( $id, $lockMode = null, $lockVersion = null ) + * @method StackOfVotes|null findOneBy( array $criteria, array $orderBy = null ) * @method StackOfVotes[] findAll() - * @method StackOfVotes[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + * @method StackOfVotes[] findBy( array $criteria, array $orderBy = null, $limit = null, $offset = null ) */ -class StackOfVotesRepository extends ServiceEntityRepository -{ - public function __construct(ManagerRegistry $registry) - { - parent::__construct($registry, StackOfVotes::class); - } +class StackOfVotesRepository extends ServiceEntityRepository { + public function __construct( ManagerRegistry $registry ) { + parent::__construct( $registry, StackOfVotes::class ); + } - // /** - // * @return StackOfVotes[] Returns an array of StackOfVotes objects - // */ - /* - public function findByExampleField($value) - { - return $this->createQueryBuilder('s') - ->andWhere('s.exampleField = :val') - ->setParameter('val', $value) - ->orderBy('s.id', 'ASC') - ->setMaxResults(10) - ->getQuery() - ->getResult() - ; - } - */ + // /** + // * @return StackOfVotes[] Returns an array of StackOfVotes objects + // */ + /* + public function findByExampleField($value) + { + return $this->createQueryBuilder('s') + ->andWhere('s.exampleField = :val') + ->setParameter('val', $value) + ->orderBy('s.id', 'ASC') + ->setMaxResults(10) + ->getQuery() + ->getResult() + ; + } + */ - /* - public function findOneBySomeField($value): ?StackOfVotes - { - return $this->createQueryBuilder('s') - ->andWhere('s.exampleField = :val') - ->setParameter('val', $value) - ->getQuery() - ->getOneOrNullResult() - ; - } - */ + /* + public function findOneBySomeField($value): ?StackOfVotes + { + return $this->createQueryBuilder('s') + ->andWhere('s.exampleField = :val') + ->setParameter('val', $value) + ->getQuery() + ->getOneOrNullResult() + ; + } + */ } diff --git a/src/Repository/VoteRepository.php b/src/Repository/VoteRepository.php index a95a2fd..358ef53 100755 --- a/src/Repository/VoteRepository.php +++ b/src/Repository/VoteRepository.php @@ -7,44 +7,42 @@ use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Common\Persistence\ManagerRegistry; /** - * @method Vote|null find($id, $lockMode = null, $lockVersion = null) - * @method Vote|null findOneBy(array $criteria, array $orderBy = null) + * @method Vote|null find( $id, $lockMode = null, $lockVersion = null ) + * @method Vote|null findOneBy( array $criteria, array $orderBy = null ) * @method Vote[] findAll() - * @method Vote[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + * @method Vote[] findBy( array $criteria, array $orderBy = null, $limit = null, $offset = null ) */ -class VoteRepository extends ServiceEntityRepository -{ - public function __construct(ManagerRegistry $registry) - { - parent::__construct($registry, Vote::class); - } +class VoteRepository extends ServiceEntityRepository { + public function __construct( ManagerRegistry $registry ) { + parent::__construct( $registry, Vote::class ); + } - // /** - // * @return Vote[] Returns an array of Vote objects - // */ - /* - public function findByExampleField($value) - { - return $this->createQueryBuilder('v') - ->andWhere('v.exampleField = :val') - ->setParameter('val', $value) - ->orderBy('v.id', 'ASC') - ->setMaxResults(10) - ->getQuery() - ->getResult() - ; - } - */ + // /** + // * @return Vote[] Returns an array of Vote objects + // */ + /* + public function findByExampleField($value) + { + return $this->createQueryBuilder('v') + ->andWhere('v.exampleField = :val') + ->setParameter('val', $value) + ->orderBy('v.id', 'ASC') + ->setMaxResults(10) + ->getQuery() + ->getResult() + ; + } + */ - /* - public function findOneBySomeField($value): ?Vote - { - return $this->createQueryBuilder('v') - ->andWhere('v.exampleField = :val') - ->setParameter('val', $value) - ->getQuery() - ->getOneOrNullResult() - ; - } - */ + /* + public function findOneBySomeField($value): ?Vote + { + return $this->createQueryBuilder('v') + ->andWhere('v.exampleField = :val') + ->setParameter('val', $value) + ->getQuery() + ->getOneOrNullResult() + ; + } + */ } diff --git a/src/Service/MailService.php b/src/Service/MailService.php index 5f6c72c..4356b84 100644 --- a/src/Service/MailService.php +++ b/src/Service/MailService.php @@ -12,6 +12,7 @@ use Exception; use Swift_Mailer; use Swift_Message; use Swift_SmtpTransport; +use Symfony\Component\Mailer\Exception\TransportExceptionInterface; class MailService { @@ -49,7 +50,7 @@ class MailService { * @param Owner $foundOwner * @param Poll|null $poll * - * @throws \Symfony\Component\Mailer\Exception\TransportExceptionInterface + * @throws TransportExceptionInterface */ public function sendCreationMailAction( Owner $foundOwner, Poll $poll = null ) { @@ -66,74 +67,12 @@ class MailService { return $this->sendMailWithVars( $config ); } - - /** - * anti spam , limit to every minute TODO - * - * @param Owner $owner - * - * @return bool - */ - public function antispamCheck( Owner $owner ) { - -// $lastSend = $admin_user->getRequestedPollsDate(); -// $now = new \DateTime(); - -// if ( date_diff( $lastSend, $now ) < 60 ) { -// // too soon! -// die( 'too soon!' ); -// } -// $admin_user->setRequestedPollsDate( $now ); -// $em->persist( $admin_user ); -// $em->flush(); - return true; - } - - /** - * send created polls to an owner - * - * @param Owner $owner - * - * @return int|void - * @throws Exception - * @throws \Symfony\Component\Mailer\Exception\TransportExceptionInterface - */ - public function sendOwnerPollsAction( Owner $owner ) { - - $config = [ - 'owner' => $owner, - 'title' => 'Framadate | Mes sondages', - 'email_template' => 'emails/owner-list.html.twig', - ]; - $this->sendMailWithVars( $config ); - - return 1; - } - - - /** - * @param Comment $comment - * - * @throws \Symfony\Component\Mailer\Exception\TransportExceptionInterface - */ - public function sendCommentNotification( Comment $comment ) { - - $config = [ - 'comment' => $comment, - 'owner' => $comment->getOwner(), - 'title' => 'Framadate | commentaire de ' . $comment->getOwner()->getPseudo() . ' _ sondage ' . $comment->getPoll()->getTitle(), - 'email_template' => 'emails/comment-notification.html.twig', - ]; - - $this->sendMailWithVars( $config ); - } - /** * generic way to send email with html template * * @param $config * - * @throws \Symfony\Component\Mailer\Exception\TransportExceptionInterface + * @throws TransportExceptionInterface */ public function sendMailWithVars( $config ) { @@ -209,4 +148,64 @@ class MailService { } + + /** + * anti spam , limit to every minute TODO + * + * @param Owner $owner + * + * @return bool + */ + public function antispamCheck( Owner $owner ) { + +// $lastSend = $admin_user->getRequestedPollsDate(); +// $now = new \DateTime(); + +// if ( date_diff( $lastSend, $now ) < 60 ) { +// // too soon! +// die( 'too soon!' ); +// } +// $admin_user->setRequestedPollsDate( $now ); +// $em->persist( $admin_user ); +// $em->flush(); + return true; + } + + /** + * send created polls to an owner + * + * @param Owner $owner + * + * @return int|void + * @throws Exception + * @throws TransportExceptionInterface + */ + public function sendOwnerPollsAction( Owner $owner ) { + + $config = [ + 'owner' => $owner, + 'title' => 'Framadate | Mes sondages', + 'email_template' => 'emails/owner-list.html.twig', + ]; + $this->sendMailWithVars( $config ); + + return 1; + } + + /** + * @param Comment $comment + * + * @throws TransportExceptionInterface + */ + public function sendCommentNotification( Comment $comment ) { + + $config = [ + 'comment' => $comment, + 'owner' => $comment->getOwner(), + 'title' => 'Framadate | commentaire de ' . $comment->getOwner()->getPseudo() . ' _ sondage ' . $comment->getPoll()->getTitle(), + 'email_template' => 'emails/comment-notification.html.twig', + ]; + + $this->sendMailWithVars( $config ); + } } diff --git a/src/Traits/TimeStampableTraitTrait.php b/src/Traits/TimeStampableTraitTrait.php index 6a8d285..52e1cf2 100755 --- a/src/Traits/TimeStampableTraitTrait.php +++ b/src/Traits/TimeStampableTraitTrait.php @@ -4,7 +4,6 @@ namespace App\Traits; use DateTimeInterface; use Doctrine\ORM\Mapping as ORM; -use PhpParser\Node\Scalar\String_; trait TimeStampableTrait { /** @@ -15,9 +14,6 @@ trait TimeStampableTrait { public function getCreatedAt(): ?DateTimeInterface { return $this->createdAt; } - public function getCreatedAtAsString(): string { - return $this->createdAt->format('c'); - } public function setCreatedAt( DateTimeInterface $createdAt ): self { $this->createdAt = $createdAt; @@ -25,4 +21,8 @@ trait TimeStampableTrait { return $this; } + public function getCreatedAtAsString(): string { + return $this->createdAt->format( 'c' ); + } + }