/** * Get a list of group pages * * @param string $rtrn What data to return * @param array $filters Filters to apply to data retrieval * @param boolean $boolean Clear cached data? * @return mixed */ public function events($rtrn = 'list', $filters = array(), $clear = false) { switch (strtolower($rtrn)) { case 'count': if (!$this->_events_count || $clear) { $tbl = new Tables\Event($this->_db); $this->_events_count = $tbl->count($filters); } return $this->_events_count; break; case 'repeating': if (!$this->_events_repeating instanceof ItemList || $clear) { // var to hold repeating data $repeats = array(); // add repeating filters $filters['repeating'] = true; // capture publish up/down // remove for now as we want all events that have a repeating rule $start = Date::of($filters['publish_up']); $end = Date::of($filters['publish_down']); unset($filters['publish_up']); unset($filters['publish_down']); // find any events that match our filters $tbl = new Tables\Event($this->_db); if ($results = $tbl->find($filters)) { foreach ($results as $key => $result) { $start = Date::of($result->publish_up); // get the repeating & pass start date $rule = new \Recurr\Rule($result->repeating_rule, $start); // define constraint that date must be between event publish_up & end $constraint = new \Recurr\Transformer\Constraint\BetweenConstraint($start, $end); // create transformmer & generate occurances $transformer = new \Recurr\Transformer\ArrayTransformer(); $occurrences = $transformer->transform($rule, null, $constraint); // calculate diff so we can create down $diff = new DateInterval('P0Y0DT0H0M'); if ($result->publish_down != '0000-00-00 00:00:00') { $diff = date_diff(Date::of($result->publish_up), Date::of($result->publish_down)); } // create new event for each reoccurrence foreach ($occurrences as $occurrence) { $event = clone $result; $event->publish_up = $occurrence->getStart()->format('Y-m-d H:i:s'); $event->publish_down = $occurrence->getStart()->add($diff)->format('Y-m-d H:i:s'); $repeats[] = new Event($event); } } } $this->_events_repeating = new ItemList($repeats); } return $this->_events_repeating; break; case 'list': default: if (!$this->_events instanceof ItemList || $clear) { $tbl = new Tables\Event($this->_db); if ($results = $tbl->find($filters)) { foreach ($results as $key => $result) { $results[$key] = new Event($result); } } $this->_events = new ItemList($results); } return $this->_events; break; } }