diff options
Diffstat (limited to 'src/Wallabag/ApiBundle')
-rw-r--r-- | src/Wallabag/ApiBundle/Controller/EntryRestController.php | 52 |
1 files changed, 37 insertions, 15 deletions
diff --git a/src/Wallabag/ApiBundle/Controller/EntryRestController.php b/src/Wallabag/ApiBundle/Controller/EntryRestController.php index 31bb67fd..c3ba1858 100644 --- a/src/Wallabag/ApiBundle/Controller/EntryRestController.php +++ b/src/Wallabag/ApiBundle/Controller/EntryRestController.php | |||
@@ -273,6 +273,9 @@ class EntryRestController extends WallabagRestController | |||
273 | /** | 273 | /** |
274 | * Create an entry. | 274 | * Create an entry. |
275 | * | 275 | * |
276 | * If you want to provide the HTML content (which means wallabag won't fetch it from the url), you must provide `content`, `title` & `url` fields **non-empty**. | ||
277 | * Otherwise, content will be fetched as normal from the url and values will be overwritten. | ||
278 | * | ||
276 | * @ApiDoc( | 279 | * @ApiDoc( |
277 | * parameters={ | 280 | * parameters={ |
278 | * {"name"="url", "dataType"="string", "required"=true, "format"="http://www.test.com/article.html", "description"="Url for the entry."}, | 281 | * {"name"="url", "dataType"="string", "required"=true, "format"="http://www.test.com/article.html", "description"="Url for the entry."}, |
@@ -280,6 +283,11 @@ class EntryRestController extends WallabagRestController | |||
280 | * {"name"="tags", "dataType"="string", "required"=false, "format"="tag1,tag2,tag3", "description"="a comma-separated list of tags."}, | 283 | * {"name"="tags", "dataType"="string", "required"=false, "format"="tag1,tag2,tag3", "description"="a comma-separated list of tags."}, |
281 | * {"name"="starred", "dataType"="integer", "required"=false, "format"="1 or 0", "description"="entry already starred"}, | 284 | * {"name"="starred", "dataType"="integer", "required"=false, "format"="1 or 0", "description"="entry already starred"}, |
282 | * {"name"="archive", "dataType"="integer", "required"=false, "format"="1 or 0", "description"="entry already archived"}, | 285 | * {"name"="archive", "dataType"="integer", "required"=false, "format"="1 or 0", "description"="entry already archived"}, |
286 | * {"name"="content", "dataType"="string", "required"=false, "description"="Content of the entry"}, | ||
287 | * {"name"="language", "dataType"="string", "required"=false, "description"="Language of the entry"}, | ||
288 | * {"name"="preview_picture", "dataType"="string", "required"=false, "description"="Preview picture of the entry"}, | ||
289 | * {"name"="published_at", "dataType"="datetime|integer", "format"="YYYY-MM-DDTHH:II:SS+TZ or a timestamp", "required"=false, "description"="Published date of the entry"}, | ||
290 | * {"name"="authors", "dataType"="string", "format"="Name Firstname,author2,author3", "required"=false, "description"="Authors of the entry"}, | ||
283 | * } | 291 | * } |
284 | * ) | 292 | * ) |
285 | * | 293 | * |
@@ -291,32 +299,46 @@ class EntryRestController extends WallabagRestController | |||
291 | 299 | ||
292 | $url = $request->request->get('url'); | 300 | $url = $request->request->get('url'); |
293 | $title = $request->request->get('title'); | 301 | $title = $request->request->get('title'); |
302 | $tags = $request->request->get('tags', []); | ||
294 | $isArchived = $request->request->get('archive'); | 303 | $isArchived = $request->request->get('archive'); |
295 | $isStarred = $request->request->get('starred'); | 304 | $isStarred = $request->request->get('starred'); |
305 | $content = $request->request->get('content'); | ||
306 | $language = $request->request->get('language'); | ||
307 | $picture = $request->request->get('preview_picture'); | ||
308 | $publishedAt = $request->request->get('published_at'); | ||
309 | $authors = $request->request->get('authors', ''); | ||
296 | 310 | ||
297 | $entry = $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($url, $this->getUser()->getId()); | 311 | $entry = $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($url, $this->getUser()->getId()); |
298 | 312 | ||
299 | if (false === $entry) { | 313 | if (false === $entry) { |
300 | $entry = new Entry($this->getUser()); | 314 | $entry = new Entry($this->getUser()); |
301 | try { | ||
302 | $entry = $this->get('wallabag_core.content_proxy')->updateEntry( | ||
303 | $entry, | ||
304 | $url | ||
305 | ); | ||
306 | } catch (\Exception $e) { | ||
307 | $this->get('logger')->error('Error while saving an entry', [ | ||
308 | 'exception' => $e, | ||
309 | 'entry' => $entry, | ||
310 | ]); | ||
311 | $entry->setUrl($url); | ||
312 | } | ||
313 | } | 315 | } |
314 | 316 | ||
315 | if (!is_null($title)) { | 317 | try { |
316 | $entry->setTitle($title); | 318 | $entry = $this->get('wallabag_core.content_proxy')->updateEntry( |
319 | $entry, | ||
320 | $url, | ||
321 | [ | ||
322 | 'title' => $title, | ||
323 | 'html' => $content, | ||
324 | 'url' => $url, | ||
325 | 'language' => $language, | ||
326 | 'date' => $publishedAt, | ||
327 | // faking the preview picture | ||
328 | 'open_graph' => [ | ||
329 | 'og_image' => $picture, | ||
330 | ], | ||
331 | 'authors' => explode(',', $authors), | ||
332 | ] | ||
333 | ); | ||
334 | } catch (\Exception $e) { | ||
335 | $this->get('logger')->error('Error while saving an entry', [ | ||
336 | 'exception' => $e, | ||
337 | 'entry' => $entry, | ||
338 | ]); | ||
339 | $entry->setUrl($url); | ||
317 | } | 340 | } |
318 | 341 | ||
319 | $tags = $request->request->get('tags', ''); | ||
320 | if (!empty($tags)) { | 342 | if (!empty($tags)) { |
321 | $this->get('wallabag_core.tags_assigner')->assignTagsToEntry($entry, $tags); | 343 | $this->get('wallabag_core.tags_assigner')->assignTagsToEntry($entry, $tags); |
322 | } | 344 | } |