From 531c8d0a5c55fa93438e227a7d349235fbd31d28 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Tue, 13 Jun 2017 18:48:10 +0200 Subject: Changed RSS to Atom feed and improve paging --- .../ParamConverter/UsernameFeedTokenConverter.php | 91 ++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 src/Wallabag/CoreBundle/ParamConverter/UsernameFeedTokenConverter.php (limited to 'src/Wallabag/CoreBundle/ParamConverter/UsernameFeedTokenConverter.php') diff --git a/src/Wallabag/CoreBundle/ParamConverter/UsernameFeedTokenConverter.php b/src/Wallabag/CoreBundle/ParamConverter/UsernameFeedTokenConverter.php new file mode 100644 index 00000000..e220abfc --- /dev/null +++ b/src/Wallabag/CoreBundle/ParamConverter/UsernameFeedTokenConverter.php @@ -0,0 +1,91 @@ +registry = $registry; + } + + /** + * {@inheritdoc} + * + * Check, if object supported by our converter + */ + public function supports(ParamConverter $configuration) + { + // If there is no manager, this means that only Doctrine DBAL is configured + // In this case we can do nothing and just return + if (null === $this->registry || !\count($this->registry->getManagers())) { + return false; + } + + // Check, if option class was set in configuration + if (null === $configuration->getClass()) { + return false; + } + + // Get actual entity manager for class + $em = $this->registry->getManagerForClass($configuration->getClass()); + + // Check, if class name is what we need + if (null !== $em && 'Wallabag\UserBundle\Entity\User' !== $em->getClassMetadata($configuration->getClass())->getName()) { + return false; + } + + return true; + } + + /** + * {@inheritdoc} + * + * Applies converting + * + * @throws \InvalidArgumentException When route attributes are missing + * @throws NotFoundHttpException When object not found + */ + public function apply(Request $request, ParamConverter $configuration) + { + $username = $request->attributes->get('username'); + $feedToken = $request->attributes->get('token'); + + if (!$request->attributes->has('username') || !$request->attributes->has('token')) { + return false; + } + + // Get actual entity manager for class + $em = $this->registry->getManagerForClass($configuration->getClass()); + + $userRepository = $em->getRepository($configuration->getClass()); + + // Try to find user by its username and config feed_token + $user = $userRepository->findOneByUsernameAndFeedtoken($username, $feedToken); + + if (null === $user || !($user instanceof User)) { + throw new NotFoundHttpException(sprintf('%s not found.', $configuration->getClass())); + } + + // Map found user to the route's parameter + $request->attributes->set($configuration->getName(), $user); + } +} -- cgit v1.2.3