aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Wallabag
diff options
context:
space:
mode:
Diffstat (limited to 'src/Wallabag')
-rw-r--r--src/Wallabag/ApiBundle/Controller/EntryRestController.php46
-rw-r--r--src/Wallabag/CoreBundle/Controller/EntryController.php48
-rw-r--r--src/Wallabag/CoreBundle/Entity/Entry.php33
3 files changed, 120 insertions, 7 deletions
diff --git a/src/Wallabag/ApiBundle/Controller/EntryRestController.php b/src/Wallabag/ApiBundle/Controller/EntryRestController.php
index 768c4fdc..c276d5eb 100644
--- a/src/Wallabag/ApiBundle/Controller/EntryRestController.php
+++ b/src/Wallabag/ApiBundle/Controller/EntryRestController.php
@@ -344,6 +344,7 @@ class EntryRestController extends WallabagRestController
344 * {"name"="published_at", "dataType"="datetime|integer", "format"="YYYY-MM-DDTHH:II:SS+TZ or a timestamp", "required"=false, "description"="Published date of the entry"}, 344 * {"name"="published_at", "dataType"="datetime|integer", "format"="YYYY-MM-DDTHH:II:SS+TZ or a timestamp", "required"=false, "description"="Published date of the entry"},
345 * {"name"="authors", "dataType"="string", "format"="Name Firstname,author2,author3", "required"=false, "description"="Authors of the entry"}, 345 * {"name"="authors", "dataType"="string", "format"="Name Firstname,author2,author3", "required"=false, "description"="Authors of the entry"},
346 * {"name"="public", "dataType"="integer", "required"=false, "format"="1 or 0", "description"="will generate a public link for the entry"}, 346 * {"name"="public", "dataType"="integer", "required"=false, "format"="1 or 0", "description"="will generate a public link for the entry"},
347 * {"name"="progress", "dataType"="integer", "required"=false, "format"="A percentage between 0 and 100", "description"="changed progress."},
347 * } 348 * }
348 * ) 349 * )
349 * 350 *
@@ -641,6 +642,7 @@ class EntryRestController extends WallabagRestController
641 $picture = $request->request->get('preview_picture'); 642 $picture = $request->request->get('preview_picture');
642 $publishedAt = $request->request->get('published_at'); 643 $publishedAt = $request->request->get('published_at');
643 $authors = $request->request->get('authors', ''); 644 $authors = $request->request->get('authors', '');
645 $progress = $request->request->get('progress');
644 646
645 try { 647 try {
646 $this->get('wallabag_core.content_proxy')->updateEntry( 648 $this->get('wallabag_core.content_proxy')->updateEntry(
@@ -667,26 +669,33 @@ class EntryRestController extends WallabagRestController
667 ]); 669 ]);
668 } 670 }
669 671
670 if (!is_null($isArchived)) { 672 if (null !== $isArchived) {
671 $entry->setArchived((bool) $isArchived); 673 $entry->setArchived((bool)$isArchived);
672 } 674 }
673 675
674 if (!is_null($isStarred)) { 676 if (null !== $isStarred) {
675 $entry->setStarred((bool) $isStarred); 677 $entry->setStarred((bool)$isStarred);
676 } 678 }
677 679
678 if (!empty($tags)) { 680 if (!empty($tags)) {
679 $this->get('wallabag_core.tags_assigner')->assignTagsToEntry($entry, $tags); 681 $this->get('wallabag_core.tags_assigner')->assignTagsToEntry($entry, $tags);
680 } 682 }
681 683
682 if (!is_null($isPublic)) { 684 if (null !== $isPublic) {
683 if (true === (bool) $isPublic && null === $entry->getUid()) { 685 if (true === (bool)$isPublic && null === $entry->getUid()) {
684 $entry->generateUid(); 686 $entry->generateUid();
685 } elseif (false === (bool) $isPublic) { 687 } elseif (false === (bool)$isPublic) {
686 $entry->cleanUid(); 688 $entry->cleanUid();
687 } 689 }
688 } 690 }
689 691
692 if (null !== $progress) {
693 $progress = (int) $progress;
694 if ($progress >= 0 && $progress <= 100) {
695 $entry->setProgress($progress);
696 }
697 }
698
690 $em = $this->getDoctrine()->getManager(); 699 $em = $this->getDoctrine()->getManager();
691 $em->persist($entry); 700 $em->persist($entry);
692 $em->flush(); 701 $em->flush();
@@ -694,4 +703,27 @@ class EntryRestController extends WallabagRestController
694 // entry saved, dispatch event about it! 703 // entry saved, dispatch event about it!
695 $this->get('event_dispatcher')->dispatch(EntrySavedEvent::NAME, new EntrySavedEvent($entry)); 704 $this->get('event_dispatcher')->dispatch(EntrySavedEvent::NAME, new EntrySavedEvent($entry));
696 } 705 }
706
707 /**
708 * Get the progress of an entry.
709 *
710 * @ApiDoc(
711 * requirements={
712 * {"name"="entry", "dataType"="integer", "requirement"="\w+", "description"="The entry ID"}
713 * }
714 * )
715 *
716 * @param Entry $entry
717 *
718 * @return JsonResponse
719 */
720 public function getEntriesProgressAction(Entry $entry)
721 {
722 $this->validateAuthentication();
723 $this->validateUserAccess($entry->getUser()->getId());
724
725 $json = $this->get('serializer')->serialize($entry->getProgress(), 'json');
726
727 return (new JsonResponse())->setJson($json);
728 }
697} 729}
diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php
index fafa49f1..ba3db806 100644
--- a/src/Wallabag/CoreBundle/Controller/EntryController.php
+++ b/src/Wallabag/CoreBundle/Controller/EntryController.php
@@ -6,7 +6,9 @@ use Pagerfanta\Adapter\DoctrineORMAdapter;
6use Pagerfanta\Exception\OutOfRangeCurrentPageException; 6use Pagerfanta\Exception\OutOfRangeCurrentPageException;
7use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 7use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
8use Symfony\Bundle\FrameworkBundle\Controller\Controller; 8use Symfony\Bundle\FrameworkBundle\Controller\Controller;
9use Symfony\Component\HttpFoundation\JsonResponse;
9use Symfony\Component\HttpFoundation\Request; 10use Symfony\Component\HttpFoundation\Request;
11use Symfony\Component\HttpFoundation\Response;
10use Symfony\Component\Routing\Generator\UrlGeneratorInterface; 12use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
11use Wallabag\CoreBundle\Entity\Entry; 13use Wallabag\CoreBundle\Entity\Entry;
12use Wallabag\CoreBundle\Form\Type\EntryFilterType; 14use Wallabag\CoreBundle\Form\Type\EntryFilterType;
@@ -604,4 +606,50 @@ class EntryController extends Controller
604 { 606 {
605 return $this->showEntries('untagged', $request, $page); 607 return $this->showEntries('untagged', $request, $page);
606 } 608 }
609
610 /**
611 * Get the progress of an entry.
612 *
613 * @param Entry $entry
614 *
615 * @Route("/progress/{entry}", name="get_progress")
616 *
617 * @return JsonResponse
618 */
619 public function getEntriesProgressAction(Entry $entry)
620 {
621 $this->checkUserAction($entry);
622
623 $json = $this->get('serializer')->serialize($entry->getProgress(), 'json');
624
625 return (new JsonResponse())->setJson($json);
626 }
627
628 /**
629 * Set the progress of an entry.
630 *
631 * @param Entry $entry
632 * @param int $progress
633 *
634 * @Route("/set-progress/{entry}", name="set_progress")
635 *
636 * @return JsonResponse
637 */
638 public function setEntriesProgressAction(Entry $entry, $progress)
639 {
640 $this->checkUserAction($entry);
641 $response = new JsonResponse();
642
643 if (is_null($progress)) {
644 $response->setStatusCode(Response::HTTP_BAD_REQUEST);
645 } else {
646 $progress = (int) $progress;
647 if ($progress >= 0 && $progress <= 100) {
648 $entry->setProgress($progress);
649 $response->setStatusCode(Response::HTTP_OK);
650 }
651 }
652
653 return $response;
654 }
607} 655}
diff --git a/src/Wallabag/CoreBundle/Entity/Entry.php b/src/Wallabag/CoreBundle/Entity/Entry.php
index a0503c39..639af6aa 100644
--- a/src/Wallabag/CoreBundle/Entity/Entry.php
+++ b/src/Wallabag/CoreBundle/Entity/Entry.php
@@ -211,6 +211,15 @@ class Entry
211 private $headers; 211 private $headers;
212 212
213 /** 213 /**
214 * @var int
215 *
216 * @ORM\Column(name="progress", type="integer", nullable=true)
217 *
218 * @Groups({"entries_for_user", "export_all"})
219 */
220 private $progress = 0;
221
222 /**
214 * @Exclude 223 * @Exclude
215 * 224 *
216 * @ORM\ManyToOne(targetEntity="Wallabag\UserBundle\Entity\User", inversedBy="entries") 225 * @ORM\ManyToOne(targetEntity="Wallabag\UserBundle\Entity\User", inversedBy="entries")
@@ -760,6 +769,20 @@ class Entry
760 } 769 }
761 770
762 /** 771 /**
772 * Set progress.
773 *
774 * @param int $progress
775 *
776 * @return Entry
777 */
778 public function setProgress($progress)
779 {
780 $this->progress = $progress;
781
782 return $this;
783 }
784
785 /**
763 * @return array 786 * @return array
764 */ 787 */
765 public function getHeaders() 788 public function getHeaders()
@@ -778,4 +801,14 @@ class Entry
778 801
779 return $this; 802 return $this;
780 } 803 }
804
805 /**
806 * Get progress.
807 *
808 * @return int
809 */
810 public function getProgress()
811 {
812 return $this->progress;
813 }
781} 814}