X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;ds=sidebyside;f=src%2FWallabag%2FApiBundle%2FController%2FEntryRestController.php;h=06520af917bc0745f58efe753fb34e3639b359dd;hb=76bc05ebc02408b213b536fec44e94b092889118;hp=a79e852cb0d833a3d00f522a0c037592ebb356c5;hpb=019e1acc4962229a538421b6f2b0643d03c1d72c;p=github%2Fwallabag%2Fwallabag.git diff --git a/src/Wallabag/ApiBundle/Controller/EntryRestController.php b/src/Wallabag/ApiBundle/Controller/EntryRestController.php index a79e852c..06520af9 100644 --- a/src/Wallabag/ApiBundle/Controller/EntryRestController.php +++ b/src/Wallabag/ApiBundle/Controller/EntryRestController.php @@ -10,7 +10,6 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; 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\EntryDeletedEvent; @@ -28,8 +27,10 @@ class EntryRestController extends WallabagRestController * @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"} + * {"name"="url", "dataType"="string", "required"=true, "format"="An url", "description"="DEPRECATED, use hashed_url instead"}, + * {"name"="urls", "dataType"="string", "required"=false, "format"="An array of urls (?urls[]=http...&urls[]=http...)", "description"="DEPRECATED, use hashed_urls instead"}, + * {"name"="hashed_url", "dataType"="string", "required"=false, "format"="A hashed url", "description"="Hashed url using SHA1 to check if it exists"}, + * {"name"="hashed_urls", "dataType"="string", "required"=false, "format"="An array of hashed urls (?hashed_urls[]=xxx...&hashed_urls[]=xxx...)", "description"="An array of hashed urls using SHA1 to check if they exist"} * } * ) * @@ -38,17 +39,30 @@ class EntryRestController extends WallabagRestController public function getEntriesExistsAction(Request $request) { $this->validateAuthentication(); + $repo = $this->getDoctrine()->getRepository('WallabagCoreBundle:Entry'); $returnId = (null === $request->query->get('return_id')) ? false : (bool) $request->query->get('return_id'); + $urls = $request->query->get('urls', []); + $hashedUrls = $request->query->get('hashed_urls', []); // handle multiple urls first + if (!empty($hashedUrls)) { + $results = []; + foreach ($hashedUrls as $hashedUrl) { + $res = $repo->findByHashedUrlAndUserId($hashedUrl, $this->getUser()->getId()); + + $results[$hashedUrl] = $this->returnExistInformation($res, $returnId); + } + + return $this->sendResponse($results); + } + + // @deprecated, to be remove in 3.0 if (!empty($urls)) { $results = []; foreach ($urls as $url) { - $res = $this->getDoctrine() - ->getRepository('WallabagCoreBundle:Entry') - ->findByUrlAndUserId($url, $this->getUser()->getId()); + $res = $repo->findByUrlAndUserId($url, $this->getUser()->getId()); $results[$url] = $this->returnExistInformation($res, $returnId); } @@ -58,18 +72,21 @@ class EntryRestController extends WallabagRestController // let's see if it is a simple url? $url = $request->query->get('url', ''); + $hashedUrl = $request->query->get('hashed_url', ''); - if (empty($url)) { + if (empty($url) && empty($hashedUrl)) { throw $this->createAccessDeniedException('URL is empty?, logged user id: ' . $this->getUser()->getId()); } - $res = $this->getDoctrine() - ->getRepository('WallabagCoreBundle:Entry') - ->findByUrlAndUserId($url, $this->getUser()->getId()); + $method = 'findByUrlAndUserId'; + if (!empty($hashedUrl)) { + $method = 'findByHashedUrlAndUserId'; + $url = $hashedUrl; + } - $exists = $this->returnExistInformation($res, $returnId); + $res = $repo->$method($url, $this->getUser()->getId()); - return $this->sendResponse(['exists' => $exists]); + return $this->sendResponse(['exists' => $this->returnExistInformation($res, $returnId)]); } /** @@ -140,7 +157,7 @@ class EntryRestController extends WallabagRestController 'tags' => $tags, 'since' => $since, ], - UrlGeneratorInterface::ABSOLUTE_URL + true ) ); @@ -569,18 +586,31 @@ class EntryRestController extends WallabagRestController * @ApiDoc( * requirements={ * {"name"="entry", "dataType"="integer", "requirement"="\w+", "description"="The entry ID"} + * }, + * parameters={ + * {"name"="expect", "dataType"="string", "required"=false, "format"="id or entry", "description"="Only returns the id instead of the deleted entry's full entity if 'id' is specified. Default to entry"}, * } * ) * * @return JsonResponse */ - public function deleteEntriesAction(Entry $entry) + public function deleteEntriesAction(Entry $entry, Request $request) { + $expect = $request->query->get('expect', 'entry'); + if (!\in_array($expect, ['id', 'entry'], true)) { + throw new BadRequestHttpException(sprintf("expect: 'id' or 'entry' expected, %s given", $expect)); + } $this->validateAuthentication(); $this->validateUserAccess($entry->getUser()->getId()); - // We copy $entry to keep id in returned object - $e = $entry; + $response = $this->sendResponse([ + 'id' => $entry->getId(), + ]); + // We clone $entry to keep id in returned object + if ('entry' === $expect) { + $e = clone $entry; + $response = $this->sendResponse($e); + } $em = $this->getDoctrine()->getManager(); $em->remove($entry); @@ -589,7 +619,7 @@ class EntryRestController extends WallabagRestController // entry deleted, dispatch event about it! $this->get('event_dispatcher')->dispatch(EntryDeletedEvent::NAME, new EntryDeletedEvent($entry)); - return $this->sendResponse($e); + return $response; } /**