예제 #1
0
 public function uploadAction(request $request, $id, $type)
 {
     //we get the user entity
     $user = $this->container->get('security.context')->getToken()->getUser();
     // On crée un objet Video
     $video = new Video();
     $video->setType($type);
     //getting the code for the video
     $service = $this->container->get('bf_site.randomcode');
     $code = $service->generate('video');
     $video->setCode($code);
     //the upload is for a challenge video
     if ($type == 'challenge') {
         $challenge = $this->getDoctrine()->getManager()->getRepository('BFSiteBundle:Challenge')->findOneBy(array('id' => $id));
         //we verify if the user already uploaded a video.
         $repository = $this->getDoctrine()->getManager()->getRepository('BFSiteBundle:Video');
         $oldVideo = $repository->checkChallenge($user, $challenge);
         if (null !== $oldVideo) {
             //The user alreday has a video in the directory.
             $oldScore = $oldVideo->getScore();
             $points = $user->getPoints() - $oldScore;
             $user->setPoints($points);
         }
         $video->setDate(new \Datetime())->setUser($user)->setChallenge($challenge);
         $form = $this->get('form.factory')->create(new VideoType(), $video);
         if ($form->handleRequest($request)->isValid()) {
             $em = $this->getDoctrine()->getManager();
             $service = $this->container->get('bf_admin.videopoints');
             $service->videoPoints($video);
             //we convert the video to the right size and with the watermark
             $exploded = explode('/', $video->getSource());
             $curl = curl_init();
             curl_setopt($curl, CURLOPT_URL, 'http://v.bestfootball.fr/test/convert.php?file=' . $exploded[3]);
             $retour = curl_exec($curl);
             curl_close($curl);
             //sending a mail to all lower repetitions
             //$challengeMailer = $this->container->get('bf_site.challengeMailer');
             //$result = $challengeMailer->ChallengeMail($video, $video->getChallenge());
             $this->addFlash('success', 'Your video was uploaded to our servers and you received ' . $video->getScore() . ' points for this video.');
             return $this->redirect($this->generateUrl('bf_site_videos'));
         }
         return $this->render('BFSiteBundle:Video:upload.html.twig', array('form' => $form->createView()));
     }
     //the upload is for a duel video
     if ($type == 'duel') {
         //we check if the user has the right to upload his video for this duel. (if it is his duel)
         $repository = $this->getDoctrine()->getManager()->getRepository('BFSiteBundle:Duel');
         $duel = $repository->findOneBy(array('id' => $id));
         if ($duel->getHost() == $user || $duel->getGuest() == $user) {
             //We verify if the user and duel correspond
             $video->setDate(new \Datetime())->setDuel($duel)->setUser($user)->setScore('0');
             //the user is the guest for the duel
             if ($duel->getGuest() == $user) {
                 //check if he already uploaded a file. In that case we redirect him to the challenges page.
                 if ($duel->getGuestCompleted() == '1') {
                     $this->addFlash('warning', 'You already uploaded a video for this duel. You can only upload one video/duel.');
                     return $this->redirectToRoute('bf_site_profile_duels');
                 } else {
                     $duel->setGuestCompleted('1');
                     $userRole = 'guest';
                 }
             }
             //the user is the Host for the duel
             if ($duel->getHost() == $user) {
                 //check if he already uploaded a file. In that case we redirect him to the challenges page.
                 if ($duel->getHostCompleted() == '1') {
                     $this->addFlash('warning', 'You already uploaded a video for this duel. You can only upload one video/duel.');
                     return $this->redirectToRoute('bf_site_profile_duels');
                 } else {
                     $duel->setHostCompleted('1');
                     $userRole = 'host';
                 }
             }
             //we check if the user has a video for this challenge.
             $highVideo = $this->getDoctrine()->getManager()->getRepository('BFSiteBundle:Video')->highestVideo($user, $duel->getChallenge());
             $form = $this->get('form.factory')->create(new VideoDuelType(), $video);
             if ($form->handleRequest($request)->isValid()) {
                 $em = $this->getDoctrine()->getManager();
                 $host = $duel->getHost();
                 $guest = $duel->getGuest();
                 if ($duel->getHostCompleted() == 1 && $duel->getGuestCompleted() == 1) {
                     //both the players uploaded their video. We can now set the complete off the duel to 1
                     $duel->setCompleted('1');
                     //now we look at the video with the highest repitions and we give 50 points to the winner.
                     //get the video of the other player
                     if ($userRole == 'host') {
                         $otherVideo = $this->getDoctrine()->getManager()->getRepository('BFSiteBundle:Video')->duelGuestVideo($guest, $duel);
                         $hostscore = $video->getRepetitions();
                         $guestscore = $otherVideo->getRepetitions();
                     } elseif ($userRole == 'guest') {
                         $otherVideo = $this->getDoctrine()->getManager()->getRepository('BFSiteBundle:Video')->duelHostVideo($host, $duel);
                         $guestscore = $video->getRepetitions();
                         $hostscore = $otherVideo->getRepetitions();
                     }
                     //we get compare the host to the guest score
                     if ($hostscore > $guestscore) {
                         //host wins
                         $points = $host->getDuelPoints() + 100;
                         $host->setDuelPoints($points);
                         $wins = $host->getDuelWins() + 1;
                         $host->setDuelWins($wins);
                         $duel->setWinner($host);
                         $em->persist($duel);
                         $em->persist($host);
                         //notifications
                         $link = $this->generateUrl('bf_site_duel_view', array('id' => $duel->getId()));
                         //host
                         $message = 'Congratulations you won the duel against ' . $guest->getUsername() . ' adn you received 100 points !';
                         $service = $this->container->get('bf_site.notification');
                         $notificationhost = $service->create($host, $message, $duel, $link);
                         //guest
                         $message = 'unfortunately you lost the duel against ' . $host->getUsername();
                         $service = $this->container->get('bf_site.notification');
                         $notificationguest = $service->create($guest, $message, $duel, $link);
                         $em->persist($notificationhost);
                         $em->persist($notificationguest);
                     } elseif ($hostscore < $guestscore) {
                         //guest wins
                         $points = $guest->getDuelPoints() + 100;
                         $guest->setDuelPoints($points);
                         $wins = $guest->getDuelWins() + 1;
                         $guest->setDuelWins($wins);
                         $duel->setWinner($guest);
                         $em->persist($duel);
                         $em->persist($guest);
                         //notifications
                         $link = $this->generateUrl('bf_site_duel_view', array('id' => $duel->getId()));
                         //guest
                         $message = 'Congratulations you won the duel against ' . $host->getUsername() . ' adn you received 100 points !';
                         $service = $this->container->get('bf_site.notification');
                         $notificationguest = $service->create($guest, $message, $duel, $link);
                         //host
                         $message = 'unfortunately you lost the duel against ' . $guest->getUsername();
                         $service = $this->container->get('bf_site.notification');
                         $notificationhost = $service->create($host, $message, $duel, $link);
                         $em->persist($notificationhost);
                         $em->persist($notificationguest);
                     } elseif ($hostscore == $guestscore) {
                         //same score,each 50 points
                         //host points
                         $points = $host->getDuelPoints() + 50;
                         $host->setDuelPoints($points);
                         $em->persist($host);
                         //guest points
                         $points = $guest->getDuelPoints() + 50;
                         $guest->setDuelPoints($points);
                         $em->persist($guest);
                         //notifications
                         $link = $this->generateUrl('bf_site_duel_view', array('id' => $duel->getId()));
                         //host
                         $message = 'Congratulations, the duel against ' . $guest->getUsername() . ' was a tie and you received 50 points !';
                         $service = $this->container->get('bf_site.notification');
                         $notificationhost = $service->create($host, $message, $duel, $link);
                         //guest
                         $message = 'Congratulations, the duel against ' . $host->getUsername() . ' was a tie and you received 50 points !';
                         $service = $this->container->get('bf_site.notification');
                         $notificationguest = $service->create($guest, $message, $duel, $link);
                         $em->persist($notificationhost);
                         $em->persist($notificationguest);
                     }
                 }
                 //now we update the points of the user
                 $em->persist($video);
                 $em->persist($duel);
                 $em->flush();
                 //we convert the video to the right size and with the watermark
                 $exploded = explode('/', $video->getSource());
                 $curl = curl_init();
                 curl_setopt($curl, CURLOPT_URL, 'http://v.bestfootball.fr/test/convert.php?file=' . $exploded[3]);
                 $retour = curl_exec($curl);
                 curl_close($curl);
                 $this->addFlash('success', 'Your video was uploaded to our servers.');
                 return $this->redirect($this->generateUrl('bf_site_videos'));
             }
             return $this->render('BFSiteBundle:Video:uploadDuel.html.twig', array('form' => $form->createView(), 'highVideo' => $highVideo, 'duel' => $duel));
         } else {
             $this->addFlash('warning', 'You are not allowed to post a video to this Duel because it is not your duel');
             return $this->redirectToRoute('bf_site_challenges');
         }
     }
     if ($type == 'freestyle') {
         $video->setDate(new \Datetime())->setUser($user)->setScore('0')->setRepetitions(0);
         //frestyle section upload
         $form = $this->get('form.factory')->create(new VideoFreestyleType(), $video);
         if ($form->handleRequest($request)->isValid()) {
             $em = $this->getDoctrine()->getManager();
             $em->persist($video);
             $em->flush();
             //we convert the video to the right size and with the watermark
             $exploded = explode('/', $video->getSource());
             $curl = curl_init();
             curl_setopt($curl, CURLOPT_URL, 'http://v.bestfootball.fr/test/convert.php?file=' . $exploded[3]);
             $retour = curl_exec($curl);
             curl_close($curl);
             $this->addFlash('success', 'Your video was uploaded to our servers.');
             return $this->redirect($this->generateUrl('bf_site_videos'));
         }
         return $this->render('BFSiteBundle:Video:uploadFreestyle.html.twig', array('form' => $form->createView()));
     }
 }