/** * @param mixed $data * @param int $format * @return \OCA\Calendar\Db\Calendar * @throws CorruptDataException * @throws TemporarilyNotAvailableException * @throws \InvalidArgumentException */ public function createEntity($data, $format = self::FORMAT_PARAM) { if (!is_array($data) || empty($data)) { throw new CorruptDataException('CalendarFactory::createEntity() - Calendardata is empty'); } if (isset($data['backend'])) { if ($data['backend'] instanceof IBackend) { if (!$this->backends->inCollection($data['backend'])) { unset($data['backend']); } } else { $backend = $this->backends->find($data['backend']); if (!$backend instanceof IBackend) { throw new TemporarilyNotAvailableException('CalendarFactory::createEntity() - Calendardata references unknown backend'); } //replace backend-identifier with IBackend instance $data['backend'] = $backend; } } //replace timezone-identifier with ITimezone instance if (isset($data['timezone']) && isset($data['user_id'])) { try { $timezone = $this->timezones->find($data['timezone'], $data['user_id']); $row['timezone'] = $timezone; } catch (DoesNotExistException $ex) { unset($data['timezone']); } } //TODO - fix me unset($data['last_properties_update']); unset($data['last_object_update']); switch ($format) { case self::FORMAT_PARAM: return Calendar::fromParams($data); break; case self::FORMAT_ROW: return Calendar::fromRow($data); break; default: throw new \InvalidArgumentException('CalendarFactory::createEntity() - Unknown format given'); break; } }
/** * delete a timezone * * @ignore * * @param \OCA\Calendar\ITimezone $timezone * @throws \OCA\Calendar\BusinessLayer\Exception */ public function delete(ITimezone $timezone) { $this->mapper->delete($timezone); throw new Exception('Deleting timezones not yet supported', Http::STATUS_NOT_IMPLEMENTED); }
/** * add missing timezones from VCalendar * @param Component\VCalendar &$vcalendar * @param TimezoneMapper $tzMapper */ public static function addMissingVTimezones(Component\VCalendar &$vcalendar, TimezoneMapper $tzMapper) { $tzIds = self::parseComponentForTzIds($vcalendar); $tzIdsInVCalendar = []; foreach ($vcalendar->select('VTIMEZONE') as $vtimezone) { $tzIdsInVCalendar[] = $vtimezone->{'TZID'}->getValue(); } $missingTzIds = array_diff($tzIds, $tzIdsInVCalendar); foreach ($missingTzIds as $tzId) { try { $timezonesVCalendar = $tzMapper->find($tzId, null)->getVObject(); $vcalendar->add($timezonesVCalendar->{'VTIMEZONE'}); } catch (DoesNotExistException $ex) { continue; } } }