- * @ApiDoc(
- * requirements={
- * {"name"="entry", "dataType"="integer", "requirement"="\w+", "description"="The entry ID"}
- * }
- * )
- *
- * @return Entry
- */
- public function getEntryAction(Entry $entry)
- {
- $this->validateUserAccess($entry->getUser()->getId(), $this->getUser()->getId());
-
- $json = $this->get('serializer')->serialize($entry, 'json');
-
- return $this->renderJsonResponse($json);
- }
-
- /**
- * 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."},
- * }
- * )
- *
- * @return Entry
- */
- public function postEntriesAction(Request $request)
- {
- $url = $request->request->get('url');
-
- $content = $this->get('wallabag_core.graby')->fetchContent($url);
-
- $entry = new Entry($this->getUser());
- $entry->setUrl($url);
- $entry->setTitle($request->request->get('title') ?: $content['title']);
- $entry->setContent($content['html']);
- $entry->setMimetype($content['content_type']);
- if (isset($content['open_graph']['og_image'])) {
- $entry->setPreviewPicture($content['open_graph']['og_image']);
- }
-
- $tags = $request->request->get('tags', '');
- if (!empty($tags)) {
- $this->assignTagsToEntry($entry, $tags);
- }
-
- $em = $this->getDoctrine()->getManager();
- $em->persist($entry);
- $em->flush();
-
- $json = $this->get('serializer')->serialize($entry, 'json');
-
- return $this->renderJsonResponse($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"="boolean", "required"=false, "format"="true or false", "description"="archived the entry."},
- * {"name"="star", "dataType"="boolean", "required"=false, "format"="true or false", "description"="starred the entry."},
- * }
- * )
- *
- * @return Entry
- */
- public function patchEntriesAction(Entry $entry, Request $request)
- {
- $this->validateUserAccess($entry->getUser()->getId(), $this->getUser()->getId());
-
- $title = $request->request->get('title');
- $isArchived = $request->request->get('is_archived');
- $isStarred = $request->request->get('is_starred');
-
- if (!is_null($title)) {
- $entry->setTitle($title);
- }
-
- if (!is_null($isArchived)) {
- $entry->setArchived($isArchived);
- }
-
- if (!is_null($isStarred)) {
- $entry->setStarred($isStarred);
- }
-
- $tags = $request->request->get('tags', '');
- if (!empty($tags)) {
- $this->assignTagsToEntry($entry, $tags);
- }
-
- $em = $this->getDoctrine()->getManager();
- $em->flush();
-
- $json = $this->get('serializer')->serialize($entry, 'json');
-
- return $this->renderJsonResponse($json);
- }
-
- /**
- * Delete **permanently** an entry.
- *
- * @ApiDoc(
- * requirements={
- * {"name"="entry", "dataType"="integer", "requirement"="\w+", "description"="The entry ID"}
- * }
- * )
- *
- * @return Entry
- */
- public function deleteEntriesAction(Entry $entry)
- {
- $this->validateUserAccess($entry->getUser()->getId(), $this->getUser()->getId());
-
- $em = $this->getDoctrine()->getManager();
- $em->remove($entry);
- $em->flush();
-
- $json = $this->get('serializer')->serialize($entry, 'json');
-
- return $this->renderJsonResponse($json);
- }
-
- /**
- * Retrieve all tags for an entry.