/**
  * Stores this cycle.
  * @return int number of changed rows
  */
 public function store()
 {
     $cycle = parent::findByMetadate_id($this->metadate_id);
     //create new entry in seminare_cycle_date
     if (!$cycle) {
         $result = parent::store();
         if ($result) {
             $new_dates = $this->createTerminSlots();
             foreach ($new_dates as $semester_dates) {
                 foreach ($semester_dates['dates'] as $date) {
                     $result += $date->store();
                 }
             }
             StudipLog::log('SEM_ADD_CYCLE', $this->seminar_id, NULL, $this->toString());
             return $result;
         }
         return 0;
     }
     //change existing cycledate, changes also corresponding single dates
     $old_cycle = SeminarCycleDate::find($this->metadate_id);
     if (!parent::store()) {
         return false;
     }
     if (mktime($this->start_time) >= mktime($old_cycle->start_time) && mktime($this->end_time) <= mktime($old_cycle->end_time) && $this->weekday == $old_cycle->weekday && $this->end_offset == $old_cycle->end_offset) {
         $update_count = 0;
         foreach ($this->getAllDates() as $date) {
             $tos = $date->date;
             $toe = $date->end_time;
             //Update future dates
             if ($toe > time()) {
                 $date->date = mktime(date('G', strtotime($this->start_time)), date('i', strtotime($this->start_time)), 0, date('m', $tos), date('d', $tos), date('Y', $tos));
                 $date->end_time = mktime(date('G', strtotime($this->end_time)), date('i', strtotime($this->end_time)), 0, date('m', $toe), date('d', $toe), date('Y', $toe));
             }
             if ($date->isDirty()) {
                 $date->store();
                 $update_count++;
             }
         }
         StudipLog::log('SEM_CHANGE_CYCLE', $this->seminar_id, NULL, $old_cycle->toString() . ' -> ' . $this->toString());
         return $update_count;
     }
     //collect topics for existing future dates (CourseDate)
     $topics = array();
     foreach ($this->getAllDates() as $date) {
         if ($date->end_time >= time()) {
             $topics_tmp = CourseTopic::findByTermin_id($date->termin_id);
             if (!empty($topics_tmp)) {
                 $topics[] = $topics_tmp;
             }
             //uncomment below
             $date->delete();
         }
     }
     $new_dates = $this->createTerminSlots(time());
     $topic_count = 0;
     $update_count = 0;
     foreach ($new_dates as $semester_dates) {
         foreach ($semester_dates['dates'] as $date) {
             if ($date instanceof CourseDate) {
                 if (isset($topics[$topic_count])) {
                     $date->topics = $topics[$topic_count];
                     $topic_count++;
                 }
             }
             $date->store();
             $update_count++;
         }
     }
     StudipLog::log('SEM_CHANGE_CYCLE', $this->seminar_id, NULL, $old_cycle->toString() . ' -> ' . $this->toString());
     return $update_count;
 }