/** * Find participants based on the given criteria. * * @param Meeting $meeting * @param Parameters $search * * @return Registration[] */ public function findOrganisationByMeetingAndDescriptionSearch(Meeting $meeting, Parameters $search) { $queryBuilder = $this->_em->createQueryBuilder(); $queryBuilder->select('o', 'partial l.{id}', 'partial ct.{id,extension}'); $queryBuilder->distinct('o.id'); $queryBuilder->from('Organisation\\Entity\\Organisation', 'o'); $queryBuilder->join('o.contactOrganisation', 'co'); $queryBuilder->leftJoin('o.description', 'd'); $queryBuilder->leftJoin('o.logo', 'l'); $queryBuilder->join('l.contentType', 'ct'); /* * The search can be refined on country and type, include the results here */ if ($search->get('country') && $search->get('country') !== '0') { $queryBuilder->join('o.country', 'country'); $queryBuilder->andWhere('country.id = ?7'); $queryBuilder->setParameter(7, $search->get('country')); } /* * The search can be refined on country and type, include the results here */ if ($search->get('organisationType')) { $queryBuilder->join('o.type', 'type'); $queryBuilder->andWhere($queryBuilder->expr()->in('type.id', $search->get('organisationType'))); } $queryBuilder->andWhere($queryBuilder->expr()->orX($queryBuilder->expr()->like('d.description', '?4'), $queryBuilder->expr()->like('o.organisation', '?4'))); /* * Limit the results to the registered users */ $subSelect = $this->_em->createQueryBuilder(); $subSelect->select('c'); $subSelect->from('Event\\Entity\\Registration', 'r'); $subSelect->join('r.contact', 'c'); $subSelect->where('r.meeting = ?1'); $subSelect->andWhere($subSelect->expr()->isNull('r.dateEnd')); $subSelect->andWhere('r.hideInList = ?2'); $subSelect->andWhere('r.overbooked = ?3'); $queryBuilder->andWhere($queryBuilder->expr()->in('co.contact', $subSelect->getDQL())); $queryBuilder->setParameter(1, $meeting->getId()); $queryBuilder->setParameter(2, Registration::NOT_HIDE_IN_LIST); $queryBuilder->setParameter(3, Registration::NOT_OVERBOOKED); $queryBuilder->setParameter(4, '%' . $search->get('search') . '%'); $queryBuilder->addOrderBy('o.organisation', 'ASC'); return $queryBuilder->getQuery()->useQueryCache(true)->getResult(AbstractQuery::HYDRATE_ARRAY); }
/** * {@inheritDoc} */ public function getId() { if ($this->__isInitialized__ === false) { return (int) parent::getId(); } $this->__initializer__ && $this->__initializer__->__invoke($this, 'getId', array()); return parent::getId(); }
/** * @param Meeting $meeting * * @return array */ public function findCountriesByMeeting(Meeting $meeting) { $query = $this->_em->createQueryBuilder(); $query->distinct('country.id'); $query->select('country.id'); $query->addSelect('country.country'); $query->from('Event\\Entity\\Registration', 'r'); $query->where('r.meeting = ?1'); $query->setParameter(1, $meeting->getId()); $query->andWhere($query->expr()->isNull('r.dateEnd')); $query->andWhere('r.hideInList = ?2'); $query->andWhere('r.overbooked = ?3'); $query->setParameter(2, Registration::NOT_HIDE_IN_LIST); $query->setParameter(3, Registration::NOT_OVERBOOKED); $query->join('r.contact', 'c'); $query->join('c.contactOrganisation', 'co'); $query->join('co.organisation', 'o'); $query->join('o.country', 'country'); return $query->getQuery()->useQueryCache(true)->getResult(); }