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();
     }
 }