public function setFromJSON($json) { if (isset($json->event)) { if (isset($json->event->summary)) { $this->summary = $json->event->summary; } if (isset($json->event->description)) { $this->description = $json->event->description; } if (isset($json->event->url)) { $this->url = $json->event->url; } $timezone = new \DateTimeZone($this->timezone); if (isset($json->event->start->str)) { $this->start_at = new \DateTime($json->event->start->str, $timezone); } if (isset($json->event->end->str)) { $this->end_at = new \DateTime($json->event->end->str, $timezone); } if (isset($json->event->country) && isset($json->event->country->code) && $json->event->country->code) { $countryRepo = new CountryRepository(); // Delibrately setting NULL on failure so user gets an error message. $this->country = $countryRepo->loadByTwoCharCode($json->event->country->code); // TODO check allowed in this site } if (isset($json->event->timezone)) { // Delibrately setting NULL on failure so user gets an error message. $this->timezone = $this->country && in_array($json->event->timezone, $this->country->getTimezonesAsList()) ? $json->event->timezone : null; } } if (isset($json->site)) { $siteRepo = new SiteRepository(); if (isset($json->site->id)) { $this->site = $siteRepo->loadById($json->site->id); } if (isset($json->site->slug)) { $this->site = $siteRepo->loadBySlug($json->site->slug); } } if (isset($json->user)) { $userRepo = new UserAccountRepository(); if (isset($json->user->email)) { $this->user = $userRepo->loadByEmail($json->user->email); } else { if (isset($json->user->username)) { $this->user = $userRepo->loadByUserName($json->user->username); } } } if (isset($json->group)) { $groupRepo = new GroupRepository(); if (isset($json->group->slug) && $this->site) { $this->group = $groupRepo->loadBySlug($this->site, $json->group->slug); } else { if (isset($json->group->id)) { $this->group = $groupRepo->loadById($json->group->id); } } } }
protected function newEventFromImportedEventModel(ImportedEventModel $importedEvent) { $event = new EventModel(); $event->setFromImportedEventModel($importedEvent); if ($this->site->getIsFeaturePhysicalEvents() && !$this->site->getIsFeatureVirtualEvents()) { $event->setIsPhysical(true); $event->setIsVirtual(false); } else { if (!$this->site->getIsFeaturePhysicalEvents() && $this->site->getIsFeatureVirtualEvents()) { $event->setIsPhysical(false); $event->setIsVirtual(true); } } if ($this->country) { // country is set on importer. $event->setCountryId($this->country->getId()); $timezones = $this->country->getTimezonesAsList(); if ($importedEvent->getTimezone() && in_array($importedEvent->getTimezone(), $timezones)) { $event->setTimezone($importedEvent->getTimezone()); } else { if ($timezones) { // take first timezone in that country at random :-/ $event->setTimezone($timezones[0]); } } if ($this->area) { $event->setAreaId($this->area->getId()); } } else { // if no country set on importer, we just pick first one at random :-/ $crb = new \repositories\builders\CountryRepositoryBuilder(); $crb->setSiteIn($this->site); $crb->setLimit(1); $countries = $crb->fetchAll(); if (count($countries) > 0) { $country = $countries[0]; $event->setCountryId($country->getId()); $timezones = $country->getTimezonesAsList(); if ($importedEvent->getTimezone() && in_array($importedEvent->getTimezone(), $timezones)) { $event->setTimezone($importedEvent->getTimezone()); } else { if ($timezones) { // take first timezone in that country at random :-/ $event->setTimezone($timezones[0]); } } } } return $event; }