diff options
author | Nicolas LÅ“uillet <nicolas@loeuillet.org> | 2017-04-24 12:24:17 +0200 |
---|---|---|
committer | Nicolas LÅ“uillet <nicolas@loeuillet.org> | 2017-04-24 12:24:17 +0200 |
commit | 80299ed282d4f18ef92a79f29f9346b96acde468 (patch) | |
tree | aeac62044b1d21f649ffd2a8f6a469d0491629ee /src/Wallabag/ApiBundle/Controller/EntryRestController.php | |
parent | d1fc590211b8dc7360bf5b7ee01c67ccff0577ea (diff) | |
download | wallabag-80299ed282d4f18ef92a79f29f9346b96acde468.tar.gz wallabag-80299ed282d4f18ef92a79f29f9346b96acde468.tar.zst wallabag-80299ed282d4f18ef92a79f29f9346b96acde468.zip |
Added endpoint to handle URL list to add/delete tags
Diffstat (limited to 'src/Wallabag/ApiBundle/Controller/EntryRestController.php')
-rw-r--r-- | src/Wallabag/ApiBundle/Controller/EntryRestController.php | 85 |
1 files changed, 61 insertions, 24 deletions
diff --git a/src/Wallabag/ApiBundle/Controller/EntryRestController.php b/src/Wallabag/ApiBundle/Controller/EntryRestController.php index fc46e782..5ccaa4ef 100644 --- a/src/Wallabag/ApiBundle/Controller/EntryRestController.php +++ b/src/Wallabag/ApiBundle/Controller/EntryRestController.php | |||
@@ -440,17 +440,17 @@ class EntryRestController extends WallabagRestController | |||
440 | } | 440 | } |
441 | 441 | ||
442 | /** | 442 | /** |
443 | * Handles an entries list and add / delete to them some tags. | 443 | * Handles an entries list delete tags from them. |
444 | * | 444 | * |
445 | * @ApiDoc( | 445 | * @ApiDoc( |
446 | * parameters={ | 446 | * parameters={ |
447 | * {"name"="list", "dataType"="string", "required"=true, "format"="A JSON array of urls [{'url': 'http://...','tags': 'tag1, tag2','action': 'delete'}, {'url': 'http://...','tags': 'tag1, tag2','action': 'add'}]", "description"="Urls (as an array) to handle."} | 447 | * {"name"="list", "dataType"="string", "required"=true, "format"="A JSON array of urls [{'url': 'http://...','tags': 'tag1, tag2'}, {'url': 'http://...','tags': 'tag1, tag2'}]", "description"="Urls (as an array) to handle."} |
448 | * } | 448 | * } |
449 | * ) | 449 | * ) |
450 | * | 450 | * |
451 | * @return JsonResponse | 451 | * @return JsonResponse |
452 | */ | 452 | */ |
453 | public function postEntriesTagsListAction(Request $request) | 453 | public function deleteEntriesTagsListAction(Request $request) |
454 | { | 454 | { |
455 | $this->validateAuthentication(); | 455 | $this->validateAuthentication(); |
456 | 456 | ||
@@ -467,32 +467,22 @@ class EntryRestController extends WallabagRestController | |||
467 | ); | 467 | ); |
468 | 468 | ||
469 | $results[$key]['url'] = $element->url; | 469 | $results[$key]['url'] = $element->url; |
470 | $results[$key]['action'] = $element->action; | ||
471 | $results[$key]['entry'] = $entry instanceof Entry ? $entry->getId() : false; | 470 | $results[$key]['entry'] = $entry instanceof Entry ? $entry->getId() : false; |
472 | 471 | ||
473 | $tags = $element->tags; | 472 | $tags = $element->tags; |
474 | 473 | ||
475 | if (false !== $entry && !(empty($tags))) { | 474 | if (false !== $entry && !(empty($tags))) { |
476 | switch ($element->action) { | 475 | $tags = explode(',', $tags); |
477 | case 'delete': | 476 | foreach ($tags as $label) { |
478 | $tags = explode(',', $tags); | 477 | $label = trim($label); |
479 | foreach ($tags as $label) { | 478 | |
480 | $label = trim($label); | 479 | $tag = $this->getDoctrine() |
481 | 480 | ->getRepository('WallabagCoreBundle:Tag') | |
482 | $tag = $this->getDoctrine() | 481 | ->findOneByLabel($label); |
483 | ->getRepository('WallabagCoreBundle:Tag') | 482 | |
484 | ->findOneByLabel($label); | 483 | if (false !== $tag) { |
485 | 484 | $entry->removeTag($tag); | |
486 | if (false !== $tag) { | 485 | } |
487 | $entry->removeTag($tag); | ||
488 | } | ||
489 | } | ||
490 | |||
491 | break; | ||
492 | case 'add': | ||
493 | $this->get('wallabag_core.content_proxy')->assignTagsToEntry($entry, $tags); | ||
494 | |||
495 | break; | ||
496 | } | 486 | } |
497 | 487 | ||
498 | $em = $this->getDoctrine()->getManager(); | 488 | $em = $this->getDoctrine()->getManager(); |
@@ -506,4 +496,51 @@ class EntryRestController extends WallabagRestController | |||
506 | 496 | ||
507 | return (new JsonResponse())->setJson($json); | 497 | return (new JsonResponse())->setJson($json); |
508 | } | 498 | } |
499 | |||
500 | /** | ||
501 | * Handles an entries list and add tags to them. | ||
502 | * | ||
503 | * @ApiDoc( | ||
504 | * parameters={ | ||
505 | * {"name"="list", "dataType"="string", "required"=true, "format"="A JSON array of urls [{'url': 'http://...','tags': 'tag1, tag2'}, {'url': 'http://...','tags': 'tag1, tag2'}]", "description"="Urls (as an array) to handle."} | ||
506 | * } | ||
507 | * ) | ||
508 | * | ||
509 | * @return JsonResponse | ||
510 | */ | ||
511 | public function postEntriesTagsListAction(Request $request) | ||
512 | { | ||
513 | $this->validateAuthentication(); | ||
514 | |||
515 | $list = json_decode($request->query->get('list', [])); | ||
516 | $results = []; | ||
517 | |||
518 | // handle multiple urls | ||
519 | if (!empty($list)) { | ||
520 | $results = []; | ||
521 | foreach ($list as $key => $element) { | ||
522 | $entry = $this->get('wallabag_core.entry_repository')->findByUrlAndUserId( | ||
523 | $element->url, | ||
524 | $this->getUser()->getId() | ||
525 | ); | ||
526 | |||
527 | $results[$key]['url'] = $element->url; | ||
528 | $results[$key]['entry'] = $entry instanceof Entry ? $entry->getId() : false; | ||
529 | |||
530 | $tags = $element->tags; | ||
531 | |||
532 | if (false !== $entry && !(empty($tags))) { | ||
533 | $this->get('wallabag_core.content_proxy')->assignTagsToEntry($entry, $tags); | ||
534 | |||
535 | $em = $this->getDoctrine()->getManager(); | ||
536 | $em->persist($entry); | ||
537 | $em->flush(); | ||
538 | } | ||
539 | } | ||
540 | } | ||
541 | |||
542 | $json = $this->get('serializer')->serialize($results, 'json'); | ||
543 | |||
544 | return (new JsonResponse())->setJson($json); | ||
545 | } | ||
509 | } | 546 | } |