aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Wallabag/ApiBundle/Controller/EntryRestController.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/Wallabag/ApiBundle/Controller/EntryRestController.php')
-rw-r--r--src/Wallabag/ApiBundle/Controller/EntryRestController.php34
1 files changed, 31 insertions, 3 deletions
diff --git a/src/Wallabag/ApiBundle/Controller/EntryRestController.php b/src/Wallabag/ApiBundle/Controller/EntryRestController.php
index 768c4fdc..c7938633 100644
--- a/src/Wallabag/ApiBundle/Controller/EntryRestController.php
+++ b/src/Wallabag/ApiBundle/Controller/EntryRestController.php
@@ -4,6 +4,7 @@ namespace Wallabag\ApiBundle\Controller;
4 4
5use Hateoas\Configuration\Route; 5use Hateoas\Configuration\Route;
6use Hateoas\Representation\Factory\PagerfantaFactory; 6use Hateoas\Representation\Factory\PagerfantaFactory;
7use JMS\Serializer\SerializationContext;
7use Nelmio\ApiDocBundle\Annotation\ApiDoc; 8use Nelmio\ApiDocBundle\Annotation\ApiDoc;
8use Symfony\Component\HttpKernel\Exception\HttpException; 9use Symfony\Component\HttpKernel\Exception\HttpException;
9use Symfony\Component\HttpFoundation\Request; 10use Symfony\Component\HttpFoundation\Request;
@@ -18,9 +19,14 @@ class EntryRestController extends WallabagRestController
18{ 19{
19 /** 20 /**
20 * Check if an entry exist by url. 21 * Check if an entry exist by url.
22 * Return ID if entry(ies) exist (and if you give the return_id parameter).
23 * Otherwise it returns false.
24 *
25 * @todo Remove that `return_id` in the next major release
21 * 26 *
22 * @ApiDoc( 27 * @ApiDoc(
23 * parameters={ 28 * parameters={
29 * {"name"="return_id", "dataType"="string", "required"=false, "format"="1 or 0", "description"="Set 1 if you want to retrieve ID in case entry(ies) exists, 0 by default"},
24 * {"name"="url", "dataType"="string", "required"=true, "format"="An url", "description"="Url to check if it exists"}, 30 * {"name"="url", "dataType"="string", "required"=true, "format"="An url", "description"="Url to check if it exists"},
25 * {"name"="urls", "dataType"="string", "required"=false, "format"="An array of urls (?urls[]=http...&urls[]=http...)", "description"="Urls (as an array) to check if it exists"} 31 * {"name"="urls", "dataType"="string", "required"=false, "format"="An array of urls (?urls[]=http...&urls[]=http...)", "description"="Urls (as an array) to check if it exists"}
26 * } 32 * }
@@ -32,6 +38,7 @@ class EntryRestController extends WallabagRestController
32 { 38 {
33 $this->validateAuthentication(); 39 $this->validateAuthentication();
34 40
41 $returnId = (null === $request->query->get('return_id')) ? false : (bool) $request->query->get('return_id');
35 $urls = $request->query->get('urls', []); 42 $urls = $request->query->get('urls', []);
36 43
37 // handle multiple urls first 44 // handle multiple urls first
@@ -42,7 +49,7 @@ class EntryRestController extends WallabagRestController
42 ->getRepository('WallabagCoreBundle:Entry') 49 ->getRepository('WallabagCoreBundle:Entry')
43 ->findByUrlAndUserId($url, $this->getUser()->getId()); 50 ->findByUrlAndUserId($url, $this->getUser()->getId());
44 51
45 $results[$url] = $res instanceof Entry ? $res->getId() : false; 52 $results[$url] = $this->returnExistInformation($res, $returnId);
46 } 53 }
47 54
48 return $this->sendResponse($results); 55 return $this->sendResponse($results);
@@ -59,7 +66,7 @@ class EntryRestController extends WallabagRestController
59 ->getRepository('WallabagCoreBundle:Entry') 66 ->getRepository('WallabagCoreBundle:Entry')
60 ->findByUrlAndUserId($url, $this->getUser()->getId()); 67 ->findByUrlAndUserId($url, $this->getUser()->getId());
61 68
62 $exists = $res instanceof Entry ? $res->getId() : false; 69 $exists = $this->returnExistInformation($res, $returnId);
63 70
64 return $this->sendResponse(['exists' => $exists]); 71 return $this->sendResponse(['exists' => $exists]);
65 } 72 }
@@ -617,7 +624,11 @@ class EntryRestController extends WallabagRestController
617 */ 624 */
618 private function sendResponse($data) 625 private function sendResponse($data)
619 { 626 {
620 $json = $this->get('serializer')->serialize($data, 'json'); 627 // https://github.com/schmittjoh/JMSSerializerBundle/issues/293
628 $context = new SerializationContext();
629 $context->setSerializeNull(true);
630
631 $json = $this->get('serializer')->serialize($data, 'json', $context);
621 632
622 return (new JsonResponse())->setJson($json); 633 return (new JsonResponse())->setJson($json);
623 } 634 }
@@ -694,4 +705,21 @@ class EntryRestController extends WallabagRestController
694 // entry saved, dispatch event about it! 705 // entry saved, dispatch event about it!
695 $this->get('event_dispatcher')->dispatch(EntrySavedEvent::NAME, new EntrySavedEvent($entry)); 706 $this->get('event_dispatcher')->dispatch(EntrySavedEvent::NAME, new EntrySavedEvent($entry));
696 } 707 }
708
709 /**
710 * Return information about the entry if it exist and depending on the id or not.
711 *
712 * @param Entry|null $entry
713 * @param bool $returnId
714 *
715 * @return bool|int
716 */
717 private function returnExistInformation($entry, $returnId)
718 {
719 if ($returnId) {
720 return $entry instanceof Entry ? $entry->getId() : null;
721 }
722
723 return $entry instanceof Entry;
724 }
697} 725}