diff --git a/lib/Alchemy/Phrasea/Controller/Admin/UserController.php b/lib/Alchemy/Phrasea/Controller/Admin/UserController.php index 5987215ac7..6c34c876a9 100644 --- a/lib/Alchemy/Phrasea/Controller/Admin/UserController.php +++ b/lib/Alchemy/Phrasea/Controller/Admin/UserController.php @@ -356,14 +356,19 @@ class UserController extends Controller $userRegistrations = []; /** @var RegistrationRepository $registrationRepository */ $registrationRepository = $this->app['repo.registrations']; - foreach ( - $registrationRepository->getUserRegistrations( - $authenticatedUser, - $this->getAclForConnectedUser()->get_granted_base(['canadmin']) - ) as $registration) { + $collections = $this->getAclForConnectedUser()->get_granted_base(['canadmin']); + $authenticatedUserId = $authenticatedUser->getId(); + foreach ($registrationRepository->getPendingRegistrations($collections) as $registration) { $user = $registration->getUser(); - $userRegistrations[$user->getId()]['user'] = $user; - $userRegistrations[$user->getId()]['registrations'][$registration->getBaseid()] = $registration; + $userId = $user->getId(); + // Can not handle self registration. + if ($authenticatedUserId == $userId) { + continue; + } + if (!isset($userRegistrations[$userId])) { + $userRegistrations[$userId] = ['user' => $user, 'registrations' => []]; + } + $userRegistrations[$userId]['registrations'][$registration->getBaseid()] = $registration; } return $this->render('admin/user/registrations.html.twig', [ diff --git a/lib/Alchemy/Phrasea/Core/Provider/ORMServiceProvider.php b/lib/Alchemy/Phrasea/Core/Provider/ORMServiceProvider.php index 14a93919c7..7db619bbeb 100644 --- a/lib/Alchemy/Phrasea/Core/Provider/ORMServiceProvider.php +++ b/lib/Alchemy/Phrasea/Core/Provider/ORMServiceProvider.php @@ -644,7 +644,7 @@ SQL; * Return an instance of native cache query for default ORM * @todo return an instance of NativeQueryProvider for given orm; */ - $app['orm.orm.em.native-query'] = $app->share(function ($app) { + $app['orm.em.native-query'] = $app->share(function ($app) { return new NativeQueryProvider($app['orm.em']); }); diff --git a/lib/Alchemy/Phrasea/Model/Repositories/RegistrationRepository.php b/lib/Alchemy/Phrasea/Model/Repositories/RegistrationRepository.php index 66b761da85..5e27bfd4de 100644 --- a/lib/Alchemy/Phrasea/Model/Repositories/RegistrationRepository.php +++ b/lib/Alchemy/Phrasea/Model/Repositories/RegistrationRepository.php @@ -49,6 +49,29 @@ class RegistrationRepository extends EntityRepository return $qb->getQuery()->getResult(); } + /** + * Get Current pending registrations. + * + * @param \collection[] $collections + * @return Registration[] + */ + public function getPendingRegistrations(array $collections) + { + $builder = $this->createQueryBuilder('r'); + $builder->where('r.pending = 1'); + + if (!empty($collections)) { + $builder->andWhere('r.baseId IN (:bases)'); + $builder->setParameter('bases', array_map(function (\collection $collection) { + return $collection->get_base_id(); + }, $collections)); + } + + $builder->orderBy('r.created', 'DESC'); + + return $builder->getQuery()->getResult(); + } + /** * Gets registration registrations for a user. *