public static function prepareMessage(License $license, DrillSchemaEvent $event, $recipients, $bcc = null)
 {
     $html = $event->getEmailTemplate();
     $subject = $event->getEmailSubject();
     self::replaceTemplateVariables($html, $license);
     self::replaceTemplateVariables($subject, $license);
     $message = ['subject' => $subject, 'from_email' => $event->getEmailFromEmail(), 'from_name' => $event->getEmailFromName(), 'to' => $recipients, 'html' => $html];
     if ($bcc) {
         $message['bcc_address'] = $bcc;
     }
     return $message;
 }
 /**
  * @param DrillSchemaEvent $drillSchemaEvent
  * @param License $license
  *
  * @return \DateTime
  */
 private function calculateSendDate(DrillSchemaEvent $drillSchemaEvent, License $license)
 {
     $shift = $drillSchemaEvent->getDateShift();
     if ('startDate' == $drillSchemaEvent->getDateField()) {
         $direction = '+';
         $licenseDate = $license->getStartDate();
     } else {
         // endDate, negative shift
         $direction = '-';
         $licenseDate = $license->getEndDate();
     }
     $sendDate = new \DateTime();
     $sendDate->setTimestamp($licenseDate->getTimestamp());
     $sendDate->modify($direction . $shift . ' days');
     return $sendDate;
 }
 public function testScheduler()
 {
     $drillSchemaEvent = new DrillSchemaEvent();
     $drillSchemaEvent->setName('some')->setDateShift('+2')->setDateField('startDate')->setLicenseTypeCondition('EVALUATION')->setAddonKey('some.addon')->setEmailTemplate('some')->setEmailSubject('some')->setEmailFromEmail('some')->setEmailFromName('some');
     $license = LicenseFactory::createLicense('SEN-111111', 'EVALUATION', 'Agile Values', 'Planning Poker', 'some.addon', 'Vitaliy Zurian', '*****@*****.**', '+49178 174 147 4', null, '+1 months');
     $this->em->persist($drillSchemaEvent);
     $this->em->persist($license);
     $this->em->flush();
     $scheduler = new Scheduler($this->em);
     // Asserting that events and schemas were created
     $scheduler->schedule();
     $drillRegisteredSchemas = $this->em->getRepository('AppBundle:DrillRegisteredSchema')->findAll();
     $drillRegisteredEvents = $this->em->getRepository('AppBundle:DrillSchemaEvent')->findAll();
     $this->assertCount(1, $drillRegisteredSchemas);
     $this->assertCount(1, $drillRegisteredEvents);
     // Asserting that no consequent events and schemas were created for the same add-on
     $scheduler->schedule();
     $drillRegisteredSchemas = $this->em->getRepository('AppBundle:DrillRegisteredSchema')->findAll();
     $drillRegisteredEvents = $this->em->getRepository('AppBundle:DrillSchemaEvent')->findAll();
     $this->assertCount(1, $drillRegisteredSchemas);
     $this->assertCount(1, $drillRegisteredEvents);
 }