X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2FWallabag%2FApiBundle%2FController%2FEntryRestController.php;h=ca460c842462d1e6f3f95bf9e60fbe9c421e2409;hb=f808b01692a835673f328d7221ba8c212caa9b61;hp=ae9a93aa3cbea81a4d1a1dbf6b16de7ea8f859b6;hpb=1112e54772c9308ee3d7417869b5b8ef9b2b9812;p=github%2Fwallabag%2Fwallabag.git diff --git a/src/Wallabag/ApiBundle/Controller/EntryRestController.php b/src/Wallabag/ApiBundle/Controller/EntryRestController.php index ae9a93aa..ca460c84 100644 --- a/src/Wallabag/ApiBundle/Controller/EntryRestController.php +++ b/src/Wallabag/ApiBundle/Controller/EntryRestController.php @@ -4,23 +4,29 @@ namespace Wallabag\ApiBundle\Controller; use Hateoas\Configuration\Route; use Hateoas\Representation\Factory\PagerfantaFactory; +use JMS\Serializer\SerializationContext; use Nelmio\ApiDocBundle\Annotation\ApiDoc; -use Symfony\Component\HttpKernel\Exception\HttpException; -use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\JsonResponse; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpKernel\Exception\HttpException; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Wallabag\CoreBundle\Entity\Entry; use Wallabag\CoreBundle\Entity\Tag; -use Wallabag\CoreBundle\Event\EntrySavedEvent; use Wallabag\CoreBundle\Event\EntryDeletedEvent; +use Wallabag\CoreBundle\Event\EntrySavedEvent; class EntryRestController extends WallabagRestController { /** * Check if an entry exist by url. + * Return ID if entry(ies) exist (and if you give the return_id parameter). + * Otherwise it returns false. + * + * @todo Remove that `return_id` in the next major release * * @ApiDoc( * parameters={ + * {"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"}, * {"name"="url", "dataType"="string", "required"=true, "format"="An url", "description"="Url to check if it exists"}, * {"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"} * } @@ -32,6 +38,7 @@ class EntryRestController extends WallabagRestController { $this->validateAuthentication(); + $returnId = (null === $request->query->get('return_id')) ? false : (bool) $request->query->get('return_id'); $urls = $request->query->get('urls', []); // handle multiple urls first @@ -42,7 +49,7 @@ class EntryRestController extends WallabagRestController ->getRepository('WallabagCoreBundle:Entry') ->findByUrlAndUserId($url, $this->getUser()->getId()); - $results[$url] = $res instanceof Entry ? $res->getId() : false; + $results[$url] = $this->returnExistInformation($res, $returnId); } return $this->sendResponse($results); @@ -52,14 +59,14 @@ class EntryRestController extends WallabagRestController $url = $request->query->get('url', ''); if (empty($url)) { - throw $this->createAccessDeniedException('URL is empty?, logged user id: '.$this->getUser()->getId()); + throw $this->createAccessDeniedException('URL is empty?, logged user id: ' . $this->getUser()->getId()); } $res = $this->getDoctrine() ->getRepository('WallabagCoreBundle:Entry') ->findByUrlAndUserId($url, $this->getUser()->getId()); - $exists = $res instanceof Entry ? $res->getId() : false; + $exists = $this->returnExistInformation($res, $returnId); return $this->sendResponse(['exists' => $exists]); } @@ -232,9 +239,9 @@ class EntryRestController extends WallabagRestController * } * ) * - * @return JsonResponse - * * @throws HttpException When limit is reached + * + * @return JsonResponse */ public function postEntriesListAction(Request $request) { @@ -617,7 +624,11 @@ class EntryRestController extends WallabagRestController */ private function sendResponse($data) { - $json = $this->get('serializer')->serialize($data, 'json'); + // https://github.com/schmittjoh/JMSSerializerBundle/issues/293 + $context = new SerializationContext(); + $context->setSerializeNull(true); + + $json = $this->get('serializer')->serialize($data, 'json', $context); return (new JsonResponse())->setJson($json); } @@ -667,11 +678,11 @@ class EntryRestController extends WallabagRestController ]); } - if (!is_null($isArchived)) { + if (null !== $isArchived) { $entry->setArchived((bool) $isArchived); } - if (!is_null($isStarred)) { + if (null !== $isStarred) { $entry->setStarred((bool) $isStarred); } @@ -679,11 +690,11 @@ class EntryRestController extends WallabagRestController $this->get('wallabag_core.tags_assigner')->assignTagsToEntry($entry, $tags); } - if (!is_null($isPublic)) { - $entry->cleanUid(); - + if (null !== $isPublic) { if (true === (bool) $isPublic && null === $entry->getUid()) { $entry->generateUid(); + } elseif (false === (bool) $isPublic) { + $entry->cleanUid(); } } @@ -694,4 +705,21 @@ class EntryRestController extends WallabagRestController // entry saved, dispatch event about it! $this->get('event_dispatcher')->dispatch(EntrySavedEvent::NAME, new EntrySavedEvent($entry)); } + + /** + * Return information about the entry if it exist and depending on the id or not. + * + * @param Entry|null $entry + * @param bool $returnId + * + * @return bool|int + */ + private function returnExistInformation($entry, $returnId) + { + if ($returnId) { + return $entry instanceof Entry ? $entry->getId() : null; + } + + return $entry instanceof Entry; + } }