/** * Load events from Google Calendar via API or from cache * @return \EventCalendar\Goog\GoogData * @throws GoogApiException */ public function loadEvents() { // return from cache if (isset($this->cache)) { $alreadySaved = $this->cache->load($this->year . '-' . $this->month); if ($alreadySaved) { return $alreadySaved; } } // load via api $json = json_decode($this->loadByApi()); if (isset($json->error)) { throw new GoogApiException($json->error->message, $json->error->code); } $googData = new GoogData(); $googData->setName($json->summary); $googData->setDescription($json->description); if (isset($json->items)) { foreach ($json->items as $item) { $event = new GoogleEvent($item->id); $event->setStatus($item->status)->setSummary($item->summary)->setCreated($item->created)->setUpdated($item->updated)->setHtmlLink($item->htmlLink)->setStart($item->start->dateTime)->setEnd($item->end->dateTime); if (isset($item->location)) { $event->setLocation($item->location); } if (isset($item->description)) { $event->setDescription($item->description); } $googData->addEvent($event); } } // save loaded data to cache if (isset($this->cache)) { if (isset($this->cacheExpiration)) { $dependencies = array(Cache::EXPIRATION => $this->cacheExpiration->getTimestamp()); } else { $dependencies = null; } $this->cache->save($this->year . '-' . $this->month, $googData, $dependencies); } return $googData; }