private function iCalParseTmpFile($path) { $user = $container = $this->content->container; $public = false; if ($container instanceof Space) { $public = $container->getDefaultContentVisibility(); $user = User::findOne(['id' => $this->content->user_id]); } Yii::$app->user->setIdentity($user); $config = array("unique_id" => "ical{$this->id}", "filename" => basename($path), "directory" => dirname($path)); $vcalendar = new vcalendar($config); $vcalendar->parse(); while ($event = $vcalendar->getComponent('vevent')) { $dtstart = $event->getProperty("dtstart"); $dtend = $event->getProperty("dtend"); $all_day = !isset($dtstart["hour"]); if ($all_day) { $st = mktime(0, 0, 0, $dtstart['month'], $dtstart['day'], $dtstart['year']); $start_date = date("Y-m-d H:i:s", $st); $end_date = date("Y-m-d H:i:s", mktime(23, 59, 59, $dtend['month'], $dtend['day'] - 1, $dtend['year'])); } else { $st = gmmktime($dtstart['hour'], $dtstart['min'], $dtstart['sec'], $dtstart['month'], $dtstart['day'], $dtstart['year']); $start_date = date('Y-m-d H:i:s', $st); $end_date = date('Y-m-d H:i:s', gmmktime($dtend['hour'], $dtend['min'], $dtend['sec'], $dtend['month'], $dtend['day'], $dtend['year'])); } if (time() - $st > 60 * 60 * 24 * 30 * 2) { continue; } // ignore events older than 2 months $uid = $event->getProperty("uid"); $entry = CalendarEntry::findOne(["external_source_id" => $this->id, "external_uid" => $uid]); if (!$entry) { $entry = new CalendarEntry(['participation_mode' => CalendarEntry::PARTICIPATION_MODE_NONE, 'color' => $this->color, 'external_source_id' => $this->id, 'external_uid' => $uid]); } $entry->content->container = $container; $entry->title = $event->getProperty("summary"); $entry->description = $event->getProperty("description"); $entry->start_datetime = $start_date; $entry->end_datetime = $end_date; $entry->all_day = $all_day; $entry->is_public = $public; $entry->validate(); $entry->save(); } }