public function getFeedEvents($start_date, $end_date) { $start = sfDate::getInstance($start_date); // single day views don't pass end dates if ($end_date) { $end = sfDate::getInstance($end_date); } else { $end = $start; } $feeds = $this->Feeds(); $feedevents = new ArrayList(); foreach ($feeds as $feed) { $feedreader = new ICSReader($feed->URL); $events = $feedreader->getEvents(); foreach ($events as $event) { // translate iCal schema into CalendarAnnouncement schema (datetime + title/content) $feedevent = new CalendarAnnouncement(); $feedevent->Title = $event['SUMMARY']; if (isset($event['DESCRIPTION'])) { $feedevent->Content = $event['DESCRIPTION']; } $startdatetime = $this->iCalDateToDateTime($event['DTSTART']); if (array_key_exists('DTEND', $event) && $event['DTEND'] != NULL) { $enddatetime = $this->iCalDateToDateTime($event['DTEND']); } elseif (array_key_exists('DURATION', $event) && $event['DURATION'] != NULL) { $enddatetime = $this->iCalDurationToEndTime($event['DTSTART'], $event['DURATION']); } if ($startdatetime->get() < $start->get() && $enddatetime->get() < $start->get() || $startdatetime->get() > $end->get() && $enddatetime->get() > $end->get()) { // do nothing; dates outside range } else { $feedevent->StartDate = $startdatetime->format('Y-m-d'); $feedevent->StartTime = $startdatetime->format('H:i:s'); $feedevent->EndDate = $enddatetime->format('Y-m-d'); $feedevent->EndTime = $enddatetime->format('H:i:s'); $feedevents->push($feedevent); } } } return $feedevents; }
public function doSyncFromFeed($data, $form) { $feeds = $this->Feeds(); foreach ($feeds as $feed) { $feedreader = new ICSReader($feed->URL); $events = $feedreader->getEvents(); foreach ($events as $event) { // translate iCal schema into Match schema $uid = strtok($event['UID'], '@'); if ($match = Match::get()->filter(array("UID" => $uid))->First()) { $feedevent = $match; } else { $feedevent = Match::create(); $feedevent->UID = $uid; } $feedevent->Title = $event['SUMMARY']; //Get opposition with some string fun $feedevent->Opposition = trim(str_replace(array("-", "Black Doris Rovers", "vs"), "", $event['SUMMARY'])); if (preg_match('/Round/', $feedevent->Opposition)) { $opp = explode(" ", $feedevent->Opposition); $opp = array_slice($opp, 2); $feedevent->Opposition = trim(implode(" ", $opp)); } if (isset($event['DESCRIPTION']) && !empty($event['DESCRIPTION']) && $event['DESCRIPTION'] != " ") { $scores = str_replace("Result\n", "", $event['DESCRIPTION']); $scores = explode("-", $scores); foreach ($scores as $score) { $score = trim($score); $bits = explode(" ", $score); if (preg_match('/Black Doris Rovers/', $score)) { $feedevent->BDRScore = end($bits); } else { $feedevent->OppositionScore = end($bits); } } if (intval($feedevent->BDRScore) > intval($feedevent->OppositionScore)) { $feedevent->Result = 'Win'; } elseif (intval($feedevent->BDRScore) < intval($feedevent->OppositionScore)) { $feedevent->Result = 'Loss'; } else { $feedevent->Result = 'Draw'; } } else { $feedevent->BDRScore = NULL; $feedevent->OppositionScore = NULL; $feedevent->Result = NULL; } $startdatetime = $this->iCalDateToDateTime($event['DTSTART']); if (array_key_exists('DTEND', $event) && $event['DTEND'] != NULL) { $enddatetime = $this->iCalDateToDateTime($event['DTEND']); } elseif (array_key_exists('DURATION', $event) && $event['DURATION'] != NULL) { $enddatetime = $this->iCalDurationToEndTime($event['DTSTART'], $event['DURATION']); } $new = false; if ($feedevent->DateTimes()->Count() == 0) { $cdt = CalendarDateTime::create(); $new = true; } else { $cdt = $feedevent->DateTimes()->First(); } $cdt->StartDate = $startdatetime->format('Y-m-d'); $cdt->StartTime = $startdatetime->format('H:i:s'); $cdt->EndDate = $enddatetime->format('Y-m-d'); $cdt->EndTime = $enddatetime->format('H:i:s'); if ($new == true) { $feedevent->DateTimes()->add($cdt); } else { $cdt->write(); } $feedevent->ParentID = $this->ID; $feedevent->write(); $feedevent->publish('Stage', 'Live'); } } $form->sessionMessage('Sync Succeeded', 'good'); $data = $this->data(); $data->LastSyncDate = date("Y-m-d H:i:s"); $data->write(); $data->publish('Stage', 'Live'); return $this->redirectBack(); }