mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-29 05:26:13 +00:00
126 lines
4.0 KiB
PHP
126 lines
4.0 KiB
PHP
<?php
|
|
|
|
/*
|
|
* Chill is a software for social workers
|
|
*
|
|
* Copyright (C) 2021, Champs Libres Cooperative SCRLFS,
|
|
* <http://www.champs-libres.coop>, <info@champs-libres.coop>
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as
|
|
* published by the Free Software Foundation, either version 3 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
namespace Chill\ActivityBundle\Repository;
|
|
|
|
use Chill\ActivityBundle\Entity\Activity;
|
|
use Chill\PersonBundle\Entity\AccompanyingPeriod;
|
|
use Chill\PersonBundle\Entity\Person;
|
|
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
|
use Doctrine\Persistence\ManagerRegistry;
|
|
|
|
/**
|
|
* @method AccompanyingPeriodParticipation|null find($id, $lockMode = null, $lockVersion = null)
|
|
* @method AccompanyingPeriodParticipation|null findOneBy(array $criteria, array $orderBy = null)
|
|
* @method AccompanyingPeriodParticipation[] findAll()
|
|
* @method AccompanyingPeriodParticipation[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
|
|
*/
|
|
class ActivityRepository extends ServiceEntityRepository
|
|
{
|
|
public function __construct(ManagerRegistry $registry)
|
|
{
|
|
parent::__construct($registry, Activity::class);
|
|
}
|
|
|
|
/**
|
|
* @param $person
|
|
* @param array $scopes
|
|
* @param string[] $orderBy
|
|
* @param int $limit
|
|
* @param int $offset
|
|
* @return array|Activity[]
|
|
*/
|
|
public function findByPersonImplied(Person $person, array $scopes, ?array $orderBy = [ 'date' => 'DESC'], ?int $limit = 100, ?int $offset = 0): array
|
|
{
|
|
$qb = $this->createQueryBuilder('a');
|
|
$qb->select('a');
|
|
|
|
$qb
|
|
->where($qb->expr()->in('a.scope', ':scopes'))
|
|
->setParameter('scopes', $scopes)
|
|
->andWhere(
|
|
$qb->expr()->orX(
|
|
$qb->expr()->eq('a.person', ':person'),
|
|
':person MEMBER OF a.persons'
|
|
)
|
|
)
|
|
->setParameter('person', $person)
|
|
;
|
|
|
|
foreach ($orderBy as $k => $dir) {
|
|
$qb->addOrderBy('a.'.$k, $dir);
|
|
}
|
|
|
|
$qb->setMaxResults($limit)->setFirstResult($offset);
|
|
|
|
return $qb->getQuery()
|
|
->getResult();
|
|
}
|
|
|
|
/**
|
|
* @param AccompanyingPeriod $period
|
|
* @param array $scopes
|
|
* @param int|null $limit
|
|
* @param int|null $offset
|
|
* @param array|string[] $orderBy
|
|
* @return array|Activity[]
|
|
*/
|
|
public function findByAccompanyingPeriod(AccompanyingPeriod $period, array $scopes, ?bool $allowNullScope = false, ?int $limit = 100, ?int $offset = 0, array $orderBy = ['date' => 'desc']): array
|
|
{
|
|
$qb = $this->createQueryBuilder('a');
|
|
$qb->select('a');
|
|
|
|
if (!$allowNullScope) {
|
|
$qb
|
|
->where($qb->expr()->in('a.scope', ':scopes'))
|
|
->setParameter('scopes', $scopes)
|
|
;
|
|
} else {
|
|
$qb
|
|
->where(
|
|
$qb->expr()->orX(
|
|
$qb->expr()->in('a.scope', ':scopes'),
|
|
$qb->expr()->isNull('a.scope')
|
|
)
|
|
)
|
|
->setParameter('scopes', $scopes)
|
|
;
|
|
}
|
|
|
|
$qb
|
|
->andWhere(
|
|
$qb->expr()->eq('a.accompanyingPeriod', ':period')
|
|
)
|
|
->setParameter('period', $period)
|
|
;
|
|
|
|
foreach ($orderBy as $k => $dir) {
|
|
$qb->addOrderBy('a.'.$k, $dir);
|
|
}
|
|
|
|
$qb->setMaxResults($limit)->setFirstResult($offset);
|
|
|
|
return $qb->getQuery()
|
|
->getResult();
|
|
}
|
|
}
|