Exemple #1
0
 /**
  * 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;
     }
 }