/** * @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)); } }
/** * 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; }