Spaces:
No application file
No application file
| namespace Mautic\PointBundle\Entity; | |
| use Doctrine\Common\Collections\ArrayCollection; | |
| use Doctrine\Common\Collections\Collection; | |
| use Mautic\CoreBundle\Entity\CommonRepository; | |
| /** | |
| * @extends CommonRepository<TriggerEvent> | |
| */ | |
| class TriggerEventRepository extends CommonRepository | |
| { | |
| /** | |
| * Get array of published triggers based on point total. | |
| * | |
| * @param int $points | |
| * | |
| * @return array | |
| */ | |
| public function getPublishedByPointTotal($points) | |
| { | |
| $q = $this->createQueryBuilder('a') | |
| ->select('partial a.{id, type, name, properties}, partial r.{id, name, points, color}') | |
| ->leftJoin('a.trigger', 'r') | |
| ->orderBy('a.order,r.points'); | |
| // make sure the published up and down dates are good | |
| $expr = $this->getPublishedByDateExpression($q, 'r'); | |
| $expr->add( | |
| $q->expr()->lte('r.points', (int) $points) | |
| ); | |
| $q->where($expr); | |
| $q->andWhere('r.group IS NULL'); | |
| return $q->getQuery()->getArrayResult(); | |
| } | |
| /** | |
| * @param ArrayCollection<int,GroupContactScore> $groupScores | |
| * | |
| * @return mixed[] | |
| */ | |
| public function getPublishedByGroupScore(Collection $groupScores) | |
| { | |
| if ($groupScores->isEmpty()) { | |
| return []; | |
| } | |
| $q = $this->createQueryBuilder('a') | |
| ->select('partial a.{id, type, name, properties}, partial r.{id, name, points, color}, partial pl.{id, name}') | |
| ->leftJoin('a.trigger', 'r') | |
| ->leftJoin('r.group', 'pl') | |
| ->orderBy('a.order'); | |
| // make sure the published up and down dates are good | |
| $expr = $this->getPublishedByDateExpression($q, 'r'); | |
| $groupsExpr = $q->expr()->orX(); | |
| /** @var GroupContactScore $score */ | |
| foreach ($groupScores as $score) { | |
| $groupsExpr->add( | |
| $q->expr()->andX( | |
| $q->expr()->eq('pl.id', $score->getGroup()->getId()), | |
| $q->expr()->lte('r.points', $score->getScore()) | |
| ) | |
| ); | |
| } | |
| $q->where($expr); | |
| $q->andWhere($groupsExpr); | |
| $q->andWhere('r.group IS NOT NULL'); | |
| return $q->getQuery()->getArrayResult(); | |
| } | |
| /** | |
| * Get array of published actions based on type. | |
| * | |
| * @param string $type | |
| * | |
| * @return array | |
| */ | |
| public function getPublishedByType($type) | |
| { | |
| $q = $this->createQueryBuilder('e') | |
| ->select('partial e.{id, type, name, properties}, partial t.{id, name, points, color}') | |
| ->join('e.trigger', 't') | |
| ->orderBy('e.order'); | |
| // make sure the published up and down dates are good | |
| $expr = $this->getPublishedByDateExpression($q); | |
| $expr->add( | |
| $q->expr()->eq('e.type', ':type') | |
| ); | |
| $q->where($expr) | |
| ->setParameter('type', $type); | |
| return $q->getQuery()->getResult(); | |
| } | |
| /** | |
| * @param int $leadId | |
| */ | |
| public function getLeadTriggeredEvents($leadId): array | |
| { | |
| $q = $this->_em->getConnection()->createQueryBuilder() | |
| ->select('e.*') | |
| ->from(MAUTIC_TABLE_PREFIX.'point_lead_event_log', 'x') | |
| ->innerJoin('x', MAUTIC_TABLE_PREFIX.'point_trigger_events', 'e', 'x.event_id = e.id') | |
| ->innerJoin('e', MAUTIC_TABLE_PREFIX.'point_triggers', 't', 'e.trigger_id = t.id'); | |
| // make sure the published up and down dates are good | |
| $q->where($q->expr()->eq('x.lead_id', (int) $leadId)); | |
| $results = $q->executeQuery()->fetchAllAssociative(); | |
| $return = []; | |
| foreach ($results as $r) { | |
| $return[$r['id']] = $r; | |
| } | |
| return $return; | |
| } | |
| /** | |
| * @param int $eventId | |
| */ | |
| public function getLeadsForEvent($eventId): array | |
| { | |
| $results = $this->_em->getConnection()->createQueryBuilder() | |
| ->select('e.lead_id') | |
| ->from(MAUTIC_TABLE_PREFIX.'point_lead_event_log', 'e') | |
| ->where('e.event_id = '.(int) $eventId) | |
| ->executeQuery() | |
| ->fetchAllAssociative(); | |
| $return = []; | |
| foreach ($results as $r) { | |
| $return[] = $r['lead_id']; | |
| } | |
| return $return; | |
| } | |
| } | |