function getGoogleCalendarFeeds($startDate, $endDate, $projection = null) { GCalendarUtil::ensureSPIsLoaded(); $results = $this->getDBCalendars(); if (empty($results)) { return null; } $params = $this->getState('parameters.menu'); $useCache = false; $calendarids = array(); if ($params != null) { $useCache = $params->get('cache', 'no') == 'yes'; $tmp = $params->get('calendarids'); if (is_array($tmp)) { $calendarids = $tmp; } else { if (!empty($tmp)) { $calendarids[] = $tmp; } } } $calendars = array(); foreach ($results as $result) { if (empty($result->calendar_id)) { continue; } if (!empty($calendarids) && !in_array($result->id, $calendarids)) { continue; } $feed = new SimplePie_GCalendar(); $feed->set_show_past_events(FALSE); $feed->set_sort_ascending(TRUE); $feed->set_orderby_by_start_date(TRUE); $feed->set_expand_single_events(TRUE); $feed->enable_order_by_date(FALSE); $feed->enable_cache($useCache); if ($useCache) { // check if cache directory exists and is writeable $cacheDir = JPATH_BASE . DS . 'cache' . DS . 'com_gcalendar'; JFolder::create($cacheDir, 0755); if (!is_writable($cacheDir)) { JError::raiseWarning(500, "Created cache at " . $cacheDir . " is not writable, disabling cache."); $cache_exists = false; } else { $cache_exists = true; } //check and set caching $feed->enable_cache($cache_exists); if ($cache_exists) { $feed->set_cache_location($cacheDir); $cache_time = intval($params->get('cache_time', 3600)); $feed->set_cache_duration($cache_time); } } $feed->set_projection($projection); $feed->set_start_date($startDate); $feed->set_end_date($endDate); $feed->set_max_events(100); $feed->put('gcid', $result->id); $feed->put('gccolor', $result->color); $feed->put('gcname', $result->name); $feed->set_cal_language(GCalendarUtil::getFrLanguage()); $feed->set_timezone(GCalendarUtil::getComponentParameter('timezone')); $url = SimplePie_GCalendar::create_feed_url($result->calendar_id, $result->magic_cookie); $feed->set_feed_url($url); $feed->init(); $feed->handle_content_type(); $calendars[] = $feed; } return $calendars; }