/** * @Route("/subject", requirements={}, defaults={}, name="api_v1_add_subject") * @Method({"POST"}) * @param Request $request * @return Response */ public function addSubjectAction(Request $request) { $r = array('error' => 'Unknown', 'data' => array()); $response = new JsonResponse(); $translator = $this->get('translator'); do { if (!$this->isGranted('IS_AUTHENTICATED_REMEMBERED')) { $r['error'] = $translator->trans('improv.error.not_logged_in'); break; } if (mb_strlen($title = trim($request->request->get('title')), 'UTF-8') > 140) { $r['error'] = $translator->trans('improv.error.title_too_long'); break; } elseif (mb_strlen($title, 'UTF-8') < 3) { $r['error'] = $translator->trans('improv.error.title_too_short'); break; } if (mb_strlen($image = trim($request->request->get('image')), 'UTF-8') > 140) { $r['error'] = $translator->trans('improv.error.image_url_too_long'); break; } elseif ($image) { if ($this->get('validator')->validate($image, new Assert\Url())->count()) { $r['error'] = $translator->trans('improv.error.image_url_invalid'); break; } elseif (!preg_match('/\\.(jpg|jpeg|png|gif)$/', $image)) { $r['error'] = $translator->trans('improv.error.image_url_invalid'); break; } } $subject = new Subject(); $subject->setLocale($request->getLocale()); $subject->setTitle($title); $subject->setImage($image); $repository = $this->getDoctrine()->getRepository('MmdImprovBundle:Subject'); if (!$repository->findOneBy(array('hash' => $subject->getHash()))) { $this->getDoctrine()->getManager()->persist($subject); $this->getDoctrine()->getManager()->flush(); } $r['error'] = null; $r['data']['message'] = $translator->trans('improv.success.subject_added'); } while (false); $response->setData($r); return $response; }
private function getSubjectArray(Subject $subject) { return array('id' => $subject->getId(), 'title' => $subject->getTitle(), 'image' => $subject->getImage(), 'vote_avg' => $subject->getVoteAvg(), 'vote_minus' => $subject->getVoteMinus(), 'vote_plus' => $subject->getVotePlus()); }