140 lines
4.7 KiB
PHP
140 lines
4.7 KiB
PHP
<?php
|
|
|
|
namespace App\Repository;
|
|
|
|
use App\Entity\Organizations;
|
|
use App\Entity\User;
|
|
use App\Entity\UsersOrganizations;
|
|
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
|
use Doctrine\Persistence\ManagerRegistry;
|
|
|
|
/**
|
|
* @extends ServiceEntityRepository<UsersOrganizations>
|
|
*/
|
|
class UsersOrganizationsRepository extends ServiceEntityRepository
|
|
{
|
|
public function __construct(ManagerRegistry $registry)
|
|
{
|
|
parent::__construct($registry, UsersOrganizations::class);
|
|
}
|
|
|
|
/**
|
|
* Returns active user-organization mappings with joined User and Organization.
|
|
* Only active and non-deleted users and organizations are included.
|
|
*
|
|
* @return UsersOrganizations[]
|
|
*/
|
|
public function findUsersWithOrganization(array $organizationIds = null): array
|
|
{
|
|
$qb = $this->createQueryBuilder('uo')
|
|
->addSelect('u', 'o')
|
|
->leftJoin('uo.users', 'u')
|
|
->leftJoin('uo.organization', 'o')
|
|
->andWhere('u.isActive = :uActive')
|
|
->andWhere('u.isDeleted = :uDeleted')
|
|
->andWhere('o.isActive = :oActive')
|
|
->andWhere('o.isDeleted = :oDeleted')
|
|
->orderBy('o.name', 'ASC')
|
|
->addOrderBy('u.surname', 'ASC')
|
|
->setParameter('uActive', true)
|
|
->setParameter('uDeleted', false)
|
|
->setParameter('oActive', true)
|
|
->setParameter('oDeleted', false);
|
|
if (!empty($organizationIds)) {
|
|
$qb->andWhere('o.id IN (:orgIds)')
|
|
->setParameter('orgIds', $organizationIds);
|
|
}
|
|
|
|
return $qb->getQuery()->getResult();
|
|
}
|
|
|
|
/**
|
|
* Same as above, filtered by a list of organization IDs.
|
|
*
|
|
* @param int[] $organizationIds
|
|
* @return UsersOrganizations[]
|
|
*/
|
|
public function findActiveWithUserAndOrganizationByOrganizationIds(array $organizationIds): array
|
|
{
|
|
if (empty($organizationIds)) {
|
|
return [];
|
|
}
|
|
|
|
$qb = $this->createQueryBuilder('uo')
|
|
->addSelect('u', 'o')
|
|
->leftJoin('uo.users', 'u')
|
|
->leftJoin('uo.organization', 'o')
|
|
->where('uo.isActive = :uoActive')
|
|
->andWhere('u.isActive = :uActive')
|
|
->andWhere('u.isDeleted = :uDeleted')
|
|
->andWhere('o.isActive = :oActive')
|
|
->andWhere('o.isDeleted = :oDeleted')
|
|
->andWhere('o.id IN (:orgIds)')
|
|
->orderBy('o.name', 'ASC')
|
|
->addOrderBy('u.surname', 'ASC')
|
|
->setParameter('uoActive', true)
|
|
->setParameter('uActive', true)
|
|
->setParameter('uDeleted', false)
|
|
->setParameter('oActive', true)
|
|
->setParameter('oDeleted', false)
|
|
->setParameter('orgIds', $organizationIds);
|
|
|
|
return $qb->getQuery()->getResult();
|
|
}
|
|
|
|
/**
|
|
* Find 10 newest Users in an Organization.
|
|
*
|
|
* @param Organizations $organization
|
|
* @return User[]
|
|
*/
|
|
public function findNewestUO(Organizations $organization): array
|
|
{
|
|
$qb = $this->createQueryBuilder('uo')
|
|
->select('uo', 'u')
|
|
->leftJoin('uo.users', 'u')
|
|
->where('uo.organization = :org')
|
|
->andWhere('uo.isActive = :uoActive')
|
|
->andWhere('u.isActive = :uActive')
|
|
->andWhere('u.isDeleted = :uDeleted')
|
|
->orderBy('u.createdAt', 'DESC')
|
|
->setMaxResults(10)
|
|
->setParameter('org', $organization)
|
|
->setParameter('uoActive', true)
|
|
->setParameter('uActive', true)
|
|
->setParameter('uDeleted', false);
|
|
|
|
return $qb->getQuery()->getResult();
|
|
}
|
|
|
|
/**
|
|
* Find all the admins of an Organization.
|
|
* limited to 10 results.
|
|
*
|
|
* @param Organizations $organization
|
|
* @return User[]
|
|
*/
|
|
public function findAdminsInOrganization(Organizations $organization): array
|
|
{
|
|
$qb = $this->createQueryBuilder('uo')
|
|
->select('uo', 'u')
|
|
->leftJoin('uo.users', 'u')
|
|
->leftJoin('uo.userOrganizatonApps', 'uoa')
|
|
->leftJoin('uoa.role', 'r')
|
|
->where('uo.organization = :org')
|
|
->andWhere('uo.isActive = :uoActive')
|
|
->andWhere('u.isActive = :uActive')
|
|
->andWhere('u.isDeleted = :uDeleted')
|
|
->andWhere('r.name = :roleAdmin')
|
|
->orderBy('u.surname', 'ASC')
|
|
->setMaxResults(10)
|
|
->setParameter('org', $organization)
|
|
->setParameter('uoActive', true)
|
|
->setParameter('uActive', true)
|
|
->setParameter('uDeleted', false)
|
|
->setParameter('roleAdmin', 'ADMIN');
|
|
|
|
return $qb->getQuery()->getResult();
|
|
}
|
|
}
|