예제 #1
0
파일: SmsHelper.php 프로젝트: Yame-/mautic
 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;
 }
예제 #2
0
파일: LeadModel.php 프로젝트: Yame-/mautic
 /**
  * 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;
 }
예제 #3
0
 /**
  * @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;
 }