/**
  * @covers EventRegistrationPurgeTask::purgeUnconfirmedRegistrations
  */
 public function testPurgeTaskCancelsUnconfirmedRegistrations()
 {
     $task = new EventRegistrationPurgeTask();
     $unconfirmed1 = $this->objFromFixture('EventRegistration', 'unconfirmed_1');
     $unconfirmed2 = $this->objFromFixture('EventRegistration', 'unconfirmed_2');
     $canceled = 'SELECT COUNT(*) FROM "EventRegistration" WHERE "Status" = \'Canceled\'';
     $update = 'UPDATE "EventRegistration" SET "Created" = \'%s\' WHERE "ID" = %d';
     ob_start();
     $task->run(null);
     $this->assertEquals(0, DB::query($canceled)->value());
     // Update the first task to be just shy of six hours less than the
     // created date.
     $created = strtotime($unconfirmed1->Created);
     $created = sfTime::subtract($created, 5, sfTime::HOUR);
     DB::query(sprintf($update, date('Y-m-d H:i:s', $created), $unconfirmed1->ID));
     $task->run(null);
     $this->assertEquals(0, DB::query($canceled)->value());
     // Now push it beyond six hours
     DB::query(sprintf($update, date('Y-m-d H:i:s', sfTime::subtract($created, 1, sfTime::HOUR)), $unconfirmed1->ID));
     $task->run(null);
     $this->assertEquals(1, DB::query($canceled)->value());
     // Now push the second one way back, and check it's also canceled
     $created = sfTime::subtract(time(), 1000, sfTime::DAY);
     DB::query(sprintf($update, date('Y-m-d H:i:s', $created), $unconfirmed2->ID));
     $task->run(null);
     $this->assertEquals(2, DB::query($canceled)->value());
     // Ensure the confirmed event is still there.
     $confirmed = DB::query('SELECT COUNT(*) FROM "EventRegistration" WHERE "Status" = \'Confirmed\'');
     $this->assertEquals(1, $confirmed->value());
     ob_end_clean();
 }
 /**
  * If an email reminder is set, then this registers it in the queue.
  */
 protected function onBeforeWrite()
 {
     parent::onBeforeWrite();
     // If an email reminder has been set then register it with the queued
     // jobs module.
     if (class_exists('AbstractQueuedJob') && $this->EmailReminder) {
         $hasJob = $this->ReminderJobID;
         $changedStart = $this->isChanged('RemindDays');
         if ($hasJob) {
             if (!$changedStart) {
                 return;
             } else {
                 $this->ReminderJob()->delete();
             }
         }
         $start = $this->getStartDateTime()->getTimestamp();
         $start = sfTime::subtract($start, $this->RemindDays, sfTime::DAY);
         $job = new EventReminderEmailJob($this);
         $srv = singleton('QueuedJobService');
         $this->ReminderJobID = $srv->queueJob($job, date('Y-m-d H:i:s', $start));
     }
 }
Exemple #3
0
 /**
  * Subtracts the specified number of millenia from the timestamp.
  *
  * @param	timestamp
  * @param	int
  * @return	timestamp
  */
 public static function subtractMillenium($ts = null, $num = 1)
 {
     return sfTime::subtract($ts, $num, sfTime::MILLENIUM);
 }
 /**
  * Calculates the timestamp for when this ticket stops going on sale for an
  * event date time.
  *
  * @param  RegistrableDateTime $datetime
  * @return int
  */
 public function getSaleEndForDateTime(RegistrableDateTime $datetime)
 {
     if ($this->EndType == 'Date') {
         return strtotime($this->EndDate);
     }
     $time = $datetime->getStartDateTime()->getTimestamp();
     $time = sfTime::subtract($time, $this->EndDays, sfTime::DAY);
     $time = sfTime::subtract($time, $this->EndHours, sfTime::HOUR);
     $time = sfTime::subtract($time, $this->EndMins, sfTime::MINUTE);
     return $time;
 }