public function applyFrequencyRules(Lead $lead) { $frequencyRule = $lead->getFrequencyRules(); $statRepo = $this->smsModel->getStatRepository(); $now = new \DateTime(); $channels = $frequencyRule['channels']; $frequencyTime = $frequencyNumber = null; if (!empty($frequencyRule) && in_array('sms', $channels, true)) { $frequencyTime = new \DateInterval('P' . $frequencyRule['frequency_time']); $frequencyNumber = $frequencyRule['frequency_number']; } elseif ($this->smsFrequencyNumber > 0) { $frequencyTime = new \DateInterval('P' . $frequencyRule['sms_frequency_time']); $frequencyNumber = $this->smsFrequencyNumber; } $now->sub($frequencyTime); $sentQuery = $statRepo->getLeadStats($lead->getId(), array('fromDate' => $now)); if (!empty($sentQuery) && count($sentQuery) < $frequencyNumber) { return true; } elseif (empty($sentQuery)) { return true; } return false; }
/** * Set frequency rules for lead per channel * * @param Lead $lead * @param string|array $channel If an array with an ID, use the structure ['email' => 123] * @param bool $persist * * @return boolean Returns true. */ public function setFrequencyRules(Lead $lead, $channel, $frequencyTime = null, $frequencyNumber = null) { // One query to get all the lead's current frequency rules and go ahead and create entities for them $frequencyRules = $lead->getFrequencyRules()->toArray(); $entities = []; foreach ($channel as $ch) { $frequencyRule = isset($frequencyRules[$ch]) ? $frequencyRules[$ch] : new FrequencyRule(); $frequencyRule->setChannel($ch); $frequencyRule->setLead($lead); $frequencyRule->setDateAdded(new \DateTime()); $frequencyRule->setFrequencyNumber($frequencyNumber); $frequencyRule->setFrequencyTime($frequencyTime); $frequencyRule->setLead($lead); $entities[$ch] = $frequencyRule; } if (!empty($entities)) { $this->em->getRepository('MauticLeadBundle:FrequencyRule')->saveEntities($entities); } // Delete channels that were removed $deleted = array_diff_key($frequencyRules, $entities); if (!empty($deleted)) { $this->em->getRepository('MauticLeadBundle:FrequencyRule')->deleteEntities($deleted); } return true; }
/** * @param Lead $lead */ public function applyFrequencyRules(Lead $lead) { $frequencyRule = $lead->getFrequencyRules(); /** @var \Mautic\EmailBundle\Model\EmailModel $emailModel */ $emailModel = $this->factory->getModel('email'); $statRepo = $emailModel->getStatRepository(); $now = new \DateTime(); $channels = $frequencyRule['channels']; if (!empty($frequencyRule) and in_array('email', $channels, true)) { $frequencyTime = new \DateInterval('P' . $frequencyRule['frequency_time']); $frequencyNumber = $frequencyRule['frequency_number']; } elseif ($this->factory->getParameter('frequency_number') > 0) { $frequencyTime = new \DateInterval('P' . $frequencyRule['frequency_time']); $frequencyNumber = $this->factory->getParameter('frequency_number'); } $now->sub($frequencyTime); $sentQuery = $statRepo->getLeadStats($lead->getId(), ['fromDate' => $now]); if (!empty($sentQuery) and count($sentQuery) < $frequencyNumber) { return true; } elseif (empty($sentQuery)) { return true; } return false; }