chill-bundles/Repository/ParticipationRepository.php

84 lines
2.4 KiB
PHP

<?php
/*
* Chill is a software for social workers
*
* Copyright (C) 2014-2019, 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\EventBundle\Repository;
use Doctrine\ORM\EntityRepository;
/**
* Class ParticipationRepository
*
* @package Chill\EventBundle\Repository
* @author Mathieu Jaumotte jaum_mathieu@collectifs.net
*/
class ParticipationRepository extends EntityRepository
{
/**
* Count number of participations per person
*
* @param $person_id
* @return mixed
* @throws \Doctrine\ORM\NonUniqueResultException
*/
public function countByPerson($person_id)
{
return $this->createQueryBuilder('p')
->select('COUNT (p.id)')
->where('p.id = :person_id')
->setParameter(':person_id', $person_id)
->getQuery()
->getSingleScalarResult()
;
}
/**
* Return paginated participations for a person and in reachables circles
*
* @param $person_id
* @param $reachablesCircles
* @param $first
* @param $max
* @return mixed
*/
public function findByPersonInCircle($person_id, $reachablesCircles, $first, $max)
{
return $this->createQueryBuilder('p')
->join('p.event', 'e')
->where('p.person = :person_id')
->andWhere('e.circle IN (:reachable_circles)')
->orderBy('e.date', 'ASC')
->setParameters(array(
':person_id' => $person_id,
':reachable_circles' => $reachablesCircles
))
->setFirstResult($first)
->setMaxResults($max)
->getQuery()
->getResult()
;
}
}