Source of file EventRegistrationPurgeTask.php
Size: 2,457 Bytes - Last Modified: 2021-12-23T10:25:27+00:00
/var/www/docs.ssmods.com/process/src/code/tasks/EventRegistrationPurgeTask.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | <?php /** * A task to remove unconfirmed event registrations that are older than the * cutoff date to free up the places. * * @package silverstripe-eventmanagement */ class EventRegistrationPurgeTask extends BuildTask { public function getTitle() { return 'Event Registration Purge Task'; } public function getDescription() { return 'Cancels unconfirmed and unsubmitted registrations older than ' . 'the cut-off date to free up the places.'; } public function run($request) { $this->purgeUnsubmittedRegistrations(); $this->purgeUnconfirmedRegistrations(); } protected function purgeUnsubmittedRegistrations() { $conn = DB::getConn(); $created = $conn->formattedDatetimeClause('"EventRegistration"."Created"', '%U'); $items = DataObject::get( 'EventRegistration', '"Status" = \'Unsubmitted\'' . " AND $created + \"Registrable\".\"RegistrationTimeLimit\" < " . time(), null, 'INNER JOIN "CalendarDateTime" AS "DateTime" ON "TimeID" = "DateTime"."ID"' . ' INNER JOIN "CalendarEvent" AS "Event" ON "DateTime"."EventID" = "Event"."ID"' . ' INNER JOIN "RegistrableEvent" AS "Registrable" ON "Event"."ID" = "Registrable"."ID"' ); if ($items) { $count = count($items); foreach ($items as $registration) { $registration->delete(); } } else { $count = 0; } echo "$count unsubmitted registrations were permantently deleted.\n"; } protected function purgeUnconfirmedRegistrations() { $query = new SQLQuery(); $conn = DB::getConn(); $query->select('"EventRegistration"."ID"'); $query->from('"EventRegistration"'); $query->innerJoin('CalendarDateTime', '"TimeID" = "DateTime"."ID"', 'DateTime'); $query->innerJoin('CalendarEvent', '"DateTime"."EventID" = "Event"."ID"', 'Event'); $query->innerJoin('RegistrableEvent', '"Event"."ID" = "Registrable"."ID"', 'Registrable'); $query->where('"Registrable"."ConfirmTimeLimit" > 0'); $query->where('"Status"', 'Unconfirmed'); $created = $conn->formattedDatetimeClause('"EventRegistration"."Created"', '%U'); $query->where(sprintf( '%s < %s', $created . ' + "Registrable"."ConfirmTimeLimit"', time() )); if ($ids = $query->execute()->column()) { $count = count($ids); DB::query(sprintf( 'UPDATE "EventRegistration" SET "Status" = \'Canceled\' WHERE "ID" IN (%s)', implode(', ', $ids) )); } else { $count = 0; } echo "$count unconfirmed registrations were canceled.\n"; } } |