/** * @Route("/ajax/bookmark/create", name="ajax_create_bookmark") */ public function ajaxCreateAction(Request $request) { $em = $this->getDoctrine()->getManager(); $repository = $em->getRepository('AppBundle:Bookmark'); $tagRepository = $em->getRepository('AppBundle:Tag'); $openGraph = $this->container->get('open_graph'); $url = $request->request->get('url'); $tags = $request->request->get('tags'); $user = $this->get('security.context')->getToken()->getUser(); if (!$url) { $data = array('error' => 'invalid_url', 'errorMsg' => 'URL is required'); $json = \json_encode($data); $response = new Response($json, 404); $response->headers->set('Content-Type', 'application/json'); return $response; } $tags = explode(',', $tags); try { $data = $openGraph->read($url); } catch (RequestException $e) { $context = $e->getHandlerContext(); $data = array('error' => 'invalid_url'); if (isset($context['error'])) { $data['errorMsg'] = $context['error']; } $json = \json_encode($data); $response = new Response($json, 404); $response->headers->set('Content-Type', 'application/json'); return $response; } catch (ConnectException $e) { $data = array('error' => 'invalid_page', 'exception' => $e->getMessage()); $json = \json_encode($data); $response = new Response($json, 404); $response->headers->set('Content-Type', 'application/json'); return $response; } catch (\Exception $e) { $data = array('error' => 'exception', 'exception' => $e->getMessage()); $json = \json_encode($data); $response = new Response($json, 500); $response->headers->set('Content-Type', 'application/json'); return $response; } $title = $data['title']; $description = $data['description']; if (isset($data['og:title']) && $data['og:title']) { $title = $data['og:title']; } if (isset($data['og:description']) && $data['og:description']) { $description = $data['og:description']; } $bookmark = new Bookmark(); $bookmark->setUrl($url); $bookmark->setTitle($title); $bookmark->setUser($user); $bookmark->setDescription($description); if (isset($data['og:image'])) { $bookmark->setImage($data['og:image']); } $bookmarkTags = array(); foreach ($tags as $tagName) { $tag = new Tag(); $tag->setName($tagName); $tag->setUser($user); $em->persist($tag); $bookmarkTags[] = $tag; } $bookmark->setTags($bookmarkTags); $em->persist($bookmark); $em->flush(); $normalizer = new ObjectNormalizer(); $normalizer->setCircularReferenceHandler(function ($object) { return $object->getId(); }); $json = \json_encode($bookmark); $response = new Response($json); $response->headers->set('Content-Type', 'application/json'); return $response; }