Example #1
0
 /**
  * @return Event[]
  */
 public function generateEvents()
 {
     $start = new DateTime($this->start);
     $end = new DateTime($this->end);
     $end = $end->add($start->diff($end));
     switch ($this->repeat_type) {
         case self::TYPE_WEEKS:
             $interval = DateInterval::createFromDateString("1 week");
             break;
         case self::TYPE_MONTHS:
             $interval = DateInterval::createFromDateString("1 month");
             break;
         case self::TYPE_YEARS:
             $interval = DateInterval::createFromDateString("1 year");
             break;
         default:
             $interval = DateInterval::createFromDateString("1 day");
             break;
     }
     $_existing_events = Event::findAllForGroup($this->_pdo, $this);
     $_existing_events_keyed = [];
     foreach ($_existing_events as $_existing_event) {
         $key = Utility::getDateTimeForMySQLDate($_existing_event->getStart());
         $_existing_events_keyed[$key] = $_existing_event;
     }
     $_events = [];
     while (count($_events) < $this->n_times) {
         if (array_key_exists(Utility::getDateTimeForMySQLDate($start), $_existing_events_keyed)) {
             continue;
         }
         $_event = new Event($this->_pdo);
         $_event->create($this->name, $this->notes, $this->all_day_event, $this->is_chapter, $this->getCreator(), $end, $start, $this->id);
         $_events[] = $_event;
         $start->add($interval);
         $end->add($interval);
     }
     return array_merge($_existing_events, $_events);
 }