From 0c83fd5994861efa728097dd151c994796c39ae1 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Sat, 28 Mar 2015 14:27:45 +0100 Subject: Add rss for entries will fix #1000 --- .../ParamConverter/UsernameRssTokenConverter.php | 92 ++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 src/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverter.php (limited to 'src/Wallabag/CoreBundle/ParamConverter') diff --git a/src/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverter.php b/src/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverter.php new file mode 100644 index 00000000..ea2bda17 --- /dev/null +++ b/src/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverter.php @@ -0,0 +1,92 @@ +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 ('Wallabag\CoreBundle\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'); + $rssToken = $request->attributes->get('token'); + + // Check, if route attributes exists + if (null === $username || null === $rssToken) { + throw new \InvalidArgumentException('Route attribute is missing'); + } + + // 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 rss_token + $user = $userRepository->findOneByUsernameAndRsstoken($username, $rssToken); + + 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