/** * Adds a new workout to the history. Once added every workout receives an auto incremental id * and the program number. * * @param Workout $workout Workout to add * @return History */ public function addWorkout(Workout $workout) { $program = $workout->getProgram(); $day = $workout->getDay(); $counter = 1; if (isset($this->programCounters[$program])) { $counter =& $this->programCounters[$program]; if (isset($this->workoutMap[$program . $counter . $day])) { $counter++; } $previousId = $program . ($counter - 1) . $day; if ($counter > 1 && isset($this->workoutMap[$previousId])) { $workout->setPreviousWorkout($this->workouts[$this->workoutMap[$previousId]]); } } $workout->setProgramNr($counter); $workout->setId(++$this->workoutAmount); $this->addExercises($workout->getExercises()); $index = array_push($this->workouts, $workout) - 1; $this->workoutMap[$program . $counter . $day] = $index; return $this; }