- * Create an entry.
- *
- * @ApiDoc(
- * parameters={
- * {"name"="url", "dataType"="string", "required"=true, "format"="http://www.test.com/article.html", "description"="Url for the entry."},
- * {"name"="title", "dataType"="string", "required"=false, "description"="Optional, we'll get the title from the page."},
- * {"name"="tags", "dataType"="string", "required"=false, "format"="tag1,tag2,tag3", "description"="a comma-separated list of tags."},
- * {"name"="starred", "dataType"="integer", "required"=false, "format"="1 or 0", "description"="entry already starred"},
- * {"name"="archive", "dataType"="integer", "required"=false, "format"="1 or 0", "description"="entry already archived"},
- * }
- * )
- *
- * @return JsonResponse
- */
- public function postEntriesAction(Request $request)
- {
- $this->validateAuthentication();
-
- $url = $request->request->get('url');
- $title = $request->request->get('title');
- $isArchived = $request->request->get('archive');
- $isStarred = $request->request->get('starred');
-
- $entry = $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($url, $this->getUser()->getId());
-
- if (false === $entry) {
- $entry = $this->get('wallabag_core.content_proxy')->updateEntry(
- new Entry($this->getUser()),
- $url
- );
- }
-
- if (!is_null($title)) {
- $entry->setTitle($title);
- }
-
- $tags = $request->request->get('tags', '');
- if (!empty($tags)) {
- $this->get('wallabag_core.content_proxy')->assignTagsToEntry($entry, $tags);
- }
-
- if (!is_null($isStarred)) {
- $entry->setStarred((bool) $isStarred);
- }
-
- if (!is_null($isArchived)) {
- $entry->setArchived((bool) $isArchived);
- }
-
- $em = $this->getDoctrine()->getManager();
- $em->persist($entry);
-
- $em->flush();
-
- $json = $this->get('serializer')->serialize($entry, 'json');
-
- return (new JsonResponse())->setJson($json);
- }
-
- /**
- * Change several properties of an entry.
- *
- * @ApiDoc(
- * requirements={
- * {"name"="entry", "dataType"="integer", "requirement"="\w+", "description"="The entry ID"}
- * },
- * parameters={
- * {"name"="title", "dataType"="string", "required"=false},
- * {"name"="tags", "dataType"="string", "required"=false, "format"="tag1,tag2,tag3", "description"="a comma-separated list of tags."},
- * {"name"="archive", "dataType"="integer", "required"=false, "format"="1 or 0", "description"="archived the entry."},
- * {"name"="starred", "dataType"="integer", "required"=false, "format"="1 or 0", "description"="starred the entry."},
- * }
- * )
- *
- * @return JsonResponse
- */
- public function patchEntriesAction(Entry $entry, Request $request)
- {
- $this->validateAuthentication();
- $this->validateUserAccess($entry->getUser()->getId());
-
- $title = $request->request->get('title');
- $isArchived = $request->request->get('archive');
- $isStarred = $request->request->get('starred');
-
- if (!is_null($title)) {
- $entry->setTitle($title);
- }
-
- if (!is_null($isArchived)) {
- $entry->setArchived((bool) $isArchived);
- }
-
- if (!is_null($isStarred)) {
- $entry->setStarred((bool) $isStarred);
- }
-
- $tags = $request->request->get('tags', '');
- if (!empty($tags)) {
- $this->get('wallabag_core.content_proxy')->assignTagsToEntry($entry, $tags);
- }
-
- $em = $this->getDoctrine()->getManager();
- $em->flush();
-
- $json = $this->get('serializer')->serialize($entry, 'json');
-
- return (new JsonResponse())->setJson($json);
- }
-
- /**
- * Delete **permanently** an entry.
- *
- * @ApiDoc(
- * requirements={
- * {"name"="entry", "dataType"="integer", "requirement"="\w+", "description"="The entry ID"}
- * }
- * )
- *
- * @return JsonResponse
- */
- public function deleteEntriesAction(Entry $entry)
- {
- $this->validateAuthentication();
- $this->validateUserAccess($entry->getUser()->getId());
-
- $em = $this->getDoctrine()->getManager();
- $em->remove($entry);
- $em->flush();
-
- $json = $this->get('serializer')->serialize($entry, 'json');
-
- return (new JsonResponse())->setJson($json);
- }
-
- /**
- * Retrieve all tags for an entry.
- *
- * @ApiDoc(
- * requirements={
- * {"name"="entry", "dataType"="integer", "requirement"="\w+", "description"="The entry ID"}
- * }
- * )
- *
- * @return JsonResponse
- */
- public function getEntriesTagsAction(Entry $entry)
- {
- $this->validateAuthentication();
- $this->validateUserAccess($entry->getUser()->getId());
-
- $json = $this->get('serializer')->serialize($entry->getTags(), 'json');
-
- return (new JsonResponse())->setJson($json);
- }
-
- /**
- * Add one or more tags to an entry.
- *
- * @ApiDoc(
- * requirements={
- * {"name"="entry", "dataType"="integer", "requirement"="\w+", "description"="The entry ID"}
- * },
- * parameters={
- * {"name"="tags", "dataType"="string", "required"=false, "format"="tag1,tag2,tag3", "description"="a comma-separated list of tags."},
- * }
- * )
- *
- * @return JsonResponse
- */
- public function postEntriesTagsAction(Request $request, Entry $entry)
- {
- $this->validateAuthentication();
- $this->validateUserAccess($entry->getUser()->getId());
-
- $tags = $request->request->get('tags', '');
- if (!empty($tags)) {
- $this->get('wallabag_core.content_proxy')->assignTagsToEntry($entry, $tags);
- }
-
- $em = $this->getDoctrine()->getManager();
- $em->persist($entry);
- $em->flush();
-
- $json = $this->get('serializer')->serialize($entry, 'json');
-
- return (new JsonResponse())->setJson($json);
- }
-
- /**
- * Permanently remove one tag for an entry.
- *
- * @ApiDoc(
- * requirements={
- * {"name"="tag", "dataType"="integer", "requirement"="\w+", "description"="The tag ID"},
- * {"name"="entry", "dataType"="integer", "requirement"="\w+", "description"="The entry ID"}
- * }
- * )
- *
- * @return JsonResponse
- */
- public function deleteEntriesTagsAction(Entry $entry, Tag $tag)
- {
- $this->validateAuthentication();
- $this->validateUserAccess($entry->getUser()->getId());
-
- $entry->removeTag($tag);
- $em = $this->getDoctrine()->getManager();
- $em->persist($entry);
- $em->flush();
-
- $json = $this->get('serializer')->serialize($entry, 'json');
-
- return (new JsonResponse())->setJson($json);
- }
-
- /**
- * Retrieve all tags.