PageRenderTime 30ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/src/Undf/Controller/Controller.php

https://bitbucket.org/hermescarretero/simon-iniesta
PHP | 287 lines | 247 code | 33 blank | 7 comment | 31 complexity | 39292f8089715317d5202a3801936c7e MD5 | raw file
Possible License(s): LGPL-3.0, BSD-3-Clause
  1. <?php
  2. namespace Undf\Controller;
  3. use Undf\Repository\RepositoryFactory;
  4. use Symfony\Component\Form\FormFactory;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\JsonResponse;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\HttpKernel\HttpKernelInterface;
  9. use Undf\Form\CodeType;
  10. use Undf\Form\UserType;
  11. use Undf\Entity\Code;
  12. use Undf\Entity\User;
  13. use Undf\Entity\Pack;
  14. class Controller
  15. {
  16. protected $repoFactory;
  17. protected $formFactory;
  18. protected $twig;
  19. protected $mailer;
  20. /**
  21. * @var Silex\Application
  22. */
  23. protected $app;
  24. public function __construct(\Silex\Application $app)
  25. {
  26. $this->repoFactory = $app['repository.factory'];
  27. $this->formFactory = $app['form.factory'];
  28. $this->twig = $app['twig'];
  29. $this->mailer = $app['mailer'];
  30. $this->app = $app;
  31. }
  32. public function postCodeAction(Request $request)
  33. {
  34. $params = $request->request->all();
  35. $code = $this->repoFactory
  36. ->get('Code')
  37. ->findByCode($params['codetype']['code']);
  38. if ($code) {
  39. $form = $this->formFactory->create(new CodeType());
  40. $form->bind($request);
  41. if ($form->isValid()) {
  42. if ($code->isAvailableCode()) {
  43. return new JsonResponse(array(
  44. 'success' => true,
  45. 'data' => $code->getAsArray()
  46. ));
  47. }
  48. return new JsonResponse('Codigo ya canjeado', 400);
  49. }
  50. }
  51. return new JsonResponse('Codigo incorrecto', 400);
  52. }
  53. public function postSecondCodeAction(Request $request)
  54. {
  55. $params = $request->request->all();
  56. $firstCode = trim($params['first_code']);
  57. $secondCode = trim($params['codetype']['code']);
  58. $errorMessage = 'Codigo incorrecto';
  59. $code = $this->repoFactory
  60. ->get('Code')
  61. ->findByCode($secondCode);
  62. if (!$firstCode) {
  63. $errorMessage = 'No se ha introducido el primer código. Vuelva a la página inicial e intentelo otra vez.';
  64. } elseif ($firstCode == $secondCode) {
  65. $errorMessage = 'Este código ya ha sido introducido.';
  66. } elseif ($code && !$code->getIsBig()) {
  67. $form = $this->formFactory->create(new CodeType(), $code);
  68. $form->bind($request);
  69. if ($form->isValid()) {
  70. if ($firstCode != $secondCode && $code->isAvailableCode()) {
  71. return new JsonResponse(array(
  72. 'success' => true,
  73. 'data' => array(
  74. 'first' => $firstCode,
  75. 'second' => $secondCode
  76. )
  77. ));
  78. }
  79. $errorMessage = 'Codigo ya canjeado';
  80. }
  81. }
  82. $code = new Code();
  83. $code->setCode($secondCode);
  84. $form = $this->formFactory->create(new CodeType(), $code);
  85. return new Response($this->twig->render('modal-content.twig', array(
  86. 'codeForm' => $form->createView(),
  87. 'firstCode' => $firstCode,
  88. 'error' => $errorMessage
  89. )), 400);
  90. }
  91. public function postUserAction(Request $request)
  92. {
  93. $template = $request->request->get('template');
  94. $userInfo = $request->request->get('usertype');
  95. $firstCode = isset($userInfo['codes'][0]['code']) ? $userInfo['codes'][0]['code'] : false;
  96. $secondCode = isset($userInfo['codes'][1]['code']) ? $userInfo['codes'][1]['code'] : false;
  97. $errorMessage = false;
  98. $user = $this
  99. ->repoFactory
  100. ->get('User')
  101. ->findByCif($userInfo['cif']);
  102. $form = $this->formFactory->create(new UserType(), $user, array('csrf_protection' => false));
  103. $form->bind($request);
  104. if ($form->isValid()) {
  105. $user = $form->getData();
  106. try {
  107. $user->validate();
  108. $validCodes = array();
  109. foreach ($user->getCodes() as $key => $code) {
  110. $found = $this->repoFactory->get('Code')->findByCode($code->getCode(), true);
  111. if ($found) {
  112. ($key == 0) && $firstCode = $code->getCode();
  113. ($key == 1) && $secondCode = $code->getCode();
  114. $found->setPack($code->getPack());
  115. $validCodes[] = $found;
  116. }
  117. }
  118. if (count($user->getCodes()) == count($validCodes)) {
  119. $user->setCodes($validCodes);
  120. $this->repoFactory->get('User')->save($user);
  121. $this->sendEmail($user, $firstCode, $secondCode);
  122. return $this->twig->render('forms/form_success.twig', array(
  123. 'user' => $user,
  124. 'firstCode' => $firstCode,
  125. 'secondCode' => $secondCode,
  126. ));
  127. }
  128. $errorMessage = 'Codigo invalido. Por favor, vaya al inicio y vuelva a introducirlo.';
  129. } catch (\Exception $e) {
  130. $errorMessage = $e->getMessage();
  131. }
  132. } else {
  133. $errorMessage = $form->getErrorsAsString();
  134. }
  135. return $this->twig->render($template, array(
  136. 'userForm' => $form->createView(),
  137. 'firstCode' => $firstCode,
  138. 'secondCode' => $secondCode,
  139. 'error' => $errorMessage,
  140. 'template' => $template
  141. ));
  142. }
  143. public function postTabletUserAction(Request $request)
  144. {
  145. $template = $request->request->get('template');
  146. $userInfo = $request->request->get('usertype');
  147. $errorMessage = false;
  148. $user = $this
  149. ->repoFactory
  150. ->get('User')
  151. ->findByCif($userInfo['cif']);
  152. $form = $this->formFactory->create(new UserType(), $user, array('csrf_protection' => false));
  153. $form->bind($request);
  154. if ($form->isValid()) {
  155. $user = $form->getData();
  156. try {
  157. $user->validate(false);
  158. $this->repoFactory->get('User')->save($user);
  159. return $this->twig->render('forms/form_tablet_success.twig', array(
  160. 'user' => $user,
  161. ));
  162. } catch (\Exception $e) {
  163. $errorMessage = $e->getMessage();
  164. }
  165. } else {
  166. $errorMessage = $form->getErrorsAsString();
  167. }
  168. return $this->twig->render('form_tablet.twig', array(
  169. 'userForm' => $form->createView(),
  170. 'error' => $errorMessage,
  171. ));
  172. }
  173. /**
  174. * @param User $user
  175. * @return int The number of recipients who were accepted for delivery.
  176. */
  177. protected function sendEmail(User $user, $firstCode, $secondCode)
  178. {
  179. $message = $this->twig->render('mail.twig', array(
  180. 'user' => $user,
  181. 'firstCode' => $firstCode,
  182. 'secondCode' => $secondCode,
  183. ));
  184. $headers = array();
  185. $headers[] = "Content-type: text/html; charset=utf-8";
  186. $headers[] = "From: no-reply@simon.es";
  187. return mail($user->getEmail(), 'Simon e Iniesta', $message, implode("\r\n", $headers));
  188. }
  189. public function getFormAction(Request $request)
  190. {
  191. $codes = $request->query->get('codes');
  192. $found = $this->repoFactory
  193. ->get('Code')
  194. ->findByCode($codes, true);
  195. $num_codes = count($codes);
  196. if ($num_codes && $found) {
  197. $params = array();
  198. $user = new User();
  199. if ($num_codes == 1) {
  200. if ($found->getIsBig()) {
  201. $template = 'form_big.twig';
  202. $pack = $this->createPack('tshirt');
  203. } else {
  204. $template = 'form_small.twig';
  205. $pack = $this->createPack('ball');
  206. }
  207. $code = new Code();
  208. $code->setCode($codes[0]);
  209. $code->setPack($pack);
  210. $user->addCode($code);
  211. } else {
  212. $template = 'form_double.twig';
  213. $params['secondCode'] = $codes[1];
  214. $pack = $this->createPack('tshirt');
  215. $code = new Code();
  216. $code->setCode($codes[0]);
  217. $code->setPack($pack);
  218. $user->addCode($code);
  219. $code = new Code();
  220. $code->setCode($codes[1]);
  221. $code->setPack($pack);
  222. $user->addCode($code);
  223. }
  224. $params['userForm'] = $this->formFactory->create(new UserType(), $user)->createView();
  225. $params['firstCode'] = $codes[0];
  226. $params['error'] = false;
  227. $params['template'] = $template;
  228. return $this->twig->render($template, $params);
  229. }
  230. return $this->app->redirect('/');
  231. }
  232. protected function createPack($type)
  233. {
  234. $pack = new Pack();
  235. if ($type == 'tshirt') {
  236. $pack->setType('tshirt');
  237. $pack->setSize('L');
  238. $pack->setTeam('barcelona');
  239. } else {
  240. $pack->setType('ball');
  241. }
  242. return $pack;
  243. }
  244. public function postRankingAction(Request $request)
  245. {
  246. $cif = $request->request->get('cif');
  247. list($position, $target, $diff) = $this->repoFactory->get('User')->findPositionByUserCif($cif);
  248. return new Response($this->twig->render('ranking.twig', array(
  249. 'position' => $position,
  250. 'target' => $target,
  251. 'diff' => $diff
  252. )));
  253. }
  254. }