public function run()
 {
     Series::truncate();
     $users = User::all();
     foreach ($users as $user) {
         DB::table('exercise_series')->insert(['name' => 'pushup', 'user_id' => $user->id, 'priority' => 1]);
         DB::table('exercise_series')->insert(['name' => 'pullup', 'user_id' => $user->id, 'priority' => 1]);
         DB::table('exercise_series')->insert(['name' => 'squat', 'user_id' => $user->id, 'priority' => 2]);
         DB::table('exercise_series')->insert(['name' => 'gymnastic rings', 'user_id' => $user->id, 'priority' => 1]);
         DB::table('exercise_series')->insert(['name' => 'flexibility', 'user_id' => $user->id, 'priority' => 1]);
     }
 }
 public function run()
 {
     Workout::truncate();
     DB::table('series_workout')->truncate();
     $users = User::all();
     foreach ($users as $user) {
         $this->user = $user;
         $seriesIds = ExerciseSeries::where('user_id', $this->user->id)->lists('id')->all();
         $this->createWorkout('day one', [$seriesIds[0], $seriesIds[1]]);
         $this->createWorkout('day two', $seriesIds[2]);
     }
 }
 public function run()
 {
     Exercise::truncate();
     $this->faker = Faker::create();
     $pushups = [['name' => 'kneeling pushups', 'defaultQuantity' => 20, 'description' => '', 'priority' => 2, 'frequency' => 7], ['name' => 'pushups', 'defaultQuantity' => 10, 'description' => 'hands shoulder width', 'priority' => 1], ['name' => 'one-arm pushups', 'defaultQuantity' => 2, 'description' => 'free hand behind back', 'priority' => 1]];
     $squats = [['name' => 'assisted squats', 'defaultQuantity' => 50, 'description' => 'hold onto something', 'priority' => 3, 'frequency' => 3], ['name' => 'squats', 'defaultQuantity' => 30, 'description' => 'feet shoulder width', 'priority' => 2], ['name' => 'one-legged-squats', 'defaultQuantity' => 5, 'description' => '', 'priority' => 1]];
     $gymnasticRings = [['name' => 'back lever', 'defaultQuantity' => 30, 'description' => '', 'priority' => 1, 'frequency' => 4]];
     $flexibility = [['name' => 'hamstrings', 'defaultQuantity' => 20, 'description' => '', 'priority' => 2, 'stretch' => 1, 'frequency' => 7], ['name' => 'calves', 'defaultQuantity' => 10, 'description' => 'great stretch', 'priority' => 1, 'stretch' => 1]];
     $users = User::all();
     foreach ($users as $user) {
         $this->user = $user;
         $exercise_unit_ids = Unit::where('user_id', $this->user->id)->where('for', 'exercise')->lists('id')->all();
         $this->insertExercisesInSeries($pushups, Unit::find($exercise_unit_ids[0]), Series::where('user_id', $this->user->id)->where('name', 'pushup')->first());
         $this->insertExercisesInSeries($squats, Unit::find($exercise_unit_ids[1]), Series::where('user_id', $this->user->id)->where('name', 'squat')->first());
         $this->insertExercisesInSeries($gymnasticRings, Unit::find($exercise_unit_ids[1]), Series::where('user_id', $this->user->id)->where('name', 'gymnastic rings')->first());
         $this->insertExercisesInSeries($flexibility, Unit::find($exercise_unit_ids[1]), Series::where('user_id', $this->user->id)->where('name', 'flexibility')->first());
     }
 }
 /**
  * Get all the exercise series that belong to the user
  * @return mixed
  */
 public function getExerciseSeries()
 {
     $series = Series::forCurrentUser('exercise_series')->orderBy('name', 'asc')->get();
     return $series;
 }
 /**
  * @return array
  */
 public function transform(Series $series)
 {
     $array = ['id' => $series->id, 'name' => $series->name, 'priority' => $series->priority, 'workout_ids' => $series->workouts()->lists('id'), 'lastDone' => $series->lastDone];
     return $array;
 }
 /**
  * Get all the user's entries for an exercise series.
  * This could be expressed two ways:
  * 1: $series->entries
  * 2: $entry->where('series_id', $series->id)
  * @param Request $request
  * @return array
  */
 public function show($series_id)
 {
     //Fetch the series (singular-the series that was clicked on)
     $series = Series::find($series_id);
     return transform(createCollection($this->exerciseSeriesRepository->getExerciseSeriesHistory($series), new ExerciseEntryTransformer()))['data'];
 }
 /**
  *
  * @param Series $series
  * @return \Illuminate\Http\Response
  * @throws \Exception
  */
 public function destroy(Series $series)
 {
     try {
         $series->delete();
         return $this->responseNoContent();
     } catch (\Exception $e) {
         //Integrity constraint violation
         if ($e->getCode() === '23000') {
             $message = 'Series could not be deleted. It is in use.';
         } else {
             $message = 'There was an error';
         }
         return response(['error' => $message, 'status' => Response::HTTP_BAD_REQUEST], Response::HTTP_BAD_REQUEST);
     }
 }
 /**
  * @test
  * @return void
  */
 public function it_can_delete_a_series()
 {
     $this->logInUser();
     $series = new Series(['name' => 'echidna']);
     $series->user()->associate($this->user);
     $series->save();
     //        $series->workouts()->sync([1,2]);
     $this->seeInDatabase('exercise_series', ['name' => 'echidna']);
     //        $this->seeInDatabase('series_workout', ['series_id' => $series->id, 'workout_id' => 1]);
     //        $this->seeInDatabase('series_workout', ['series_id' => $series->id, 'workout_id' => 2]);
     $response = $this->call('DELETE', '/api/exerciseSeries/' . $series->id);
     $this->assertEquals(204, $response->getStatusCode());
     $this->missingFromDatabase('exercise_series', ['name' => 'echidna']);
     //Check the rows were deleted in the series_workout pivot table
     //        $this->missingFromDatabase('series_workout', ['series_id' => $series->id, 'workout_id' => 1]);
     //        $this->missingFromDatabase('series_workout', ['series_id' => $series->id, 'workout_id' => 2]);
     $response = $this->call('DELETE', '/api/exerciseSeries/' . $series->id);
     $this->assertEquals(404, $response->getStatusCode());
 }
 /**
  *
  * @param Request $request
  * @param Exercise $exercise
  * @return mixed
  */
 public function update(Request $request, Exercise $exercise)
 {
     // Create an array with the new fields merged
     $data = array_compare($exercise->toArray(), $request->only(['name', 'step_number', 'default_quantity', 'description', 'target', 'priority', 'frequency']));
     $exercise->update($data);
     if ($request->has('stretch')) {
         $exercise->stretch = $request->get('stretch');
         $exercise->save();
     }
     if ($request->has('series_id')) {
         $series = Series::findOrFail($request->get('series_id'));
         $exercise->series()->associate($series);
         $exercise->save();
     }
     if ($request->has('program_id')) {
         $program = ExerciseProgram::findOrFail($request->get('program_id'));
         $exercise->program()->associate($program);
         $exercise->save();
     }
     if ($request->has('default_unit_id')) {
         $unit = Unit::where('for', 'exercise')->findOrFail($request->get('default_unit_id'));
         $exercise->defaultUnit()->associate($unit);
         $exercise->save();
     }
     return $this->responseOkWithTransformer($exercise, new ExerciseTransformer());
 }
 /**
  * Define your route model bindings, pattern filters, etc.
  *
  * @param  \Illuminate\Routing\Router  $router
  * @return void
  */
 public function boot(Router $router)
 {
     parent::boot($router);
     Route::bind('exercises', function ($id) {
         return Exercise::forCurrentUser()->findOrFail($id);
     });
     Route::bind('exerciseEntries', function ($id) {
         return ExerciseEntry::forCurrentUser()->findOrFail($id);
     });
     Route::bind('menuEntries', function ($id) {
         return MenuEntry::forCurrentUser()->findOrFail($id);
     });
     Route::bind('exerciseSeries', function ($id) {
         return ExerciseSeries::forCurrentUser()->findOrFail($id);
     });
     Route::bind('foods', function ($id) {
         return Food::forCurrentUser()->findOrFail($id);
     });
     Route::bind('recipes', function ($id) {
         return Recipe::forCurrentUser()->findOrFail($id);
     });
     Route::bind('exerciseTags', function ($id) {
         return Tag::forCurrentUser()->where('for', 'exercise')->findOrFail($id);
     });
     Route::bind('recipeTags', function ($id) {
         return Tag::forCurrentUser()->where('for', 'recipe')->findOrFail($id);
     });
     Route::bind('foodUnits', function ($id) {
         return Unit::forCurrentUser()->where('for', 'food')->findOrFail($id);
     });
     Route::bind('exerciseUnits', function ($id) {
         return Unit::forCurrentUser()->where('for', 'exercise')->findOrFail($id);
     });
     Route::bind('timers', function ($id) {
         return Timer::forCurrentUser()->findOrFail($id);
     });
     Route::bind('activities', function ($id) {
         return Activity::forCurrentUser()->findOrFail($id);
     });
     Route::bind('weights', function ($idOrDate) {
         if (strrpos($idOrDate, '-')) {
             //parameter is the date of the entry
             $weight = Weight::forCurrentUser()->where('date', $idOrDate)->first();
         } else {
             //parameter is the id of the entry
             $weight = Weight::forCurrentUser()->findOrFail($idOrDate);
         }
         return $weight;
     });
     /**
      * $parameter is either the id or the date
      */
     Route::bind('journal', function ($parameter) {
         /**
          * @VP:
          * Is there a better way to check if the $parameter is an
          * id or a date? When I tried using Carbon to create an object from
          * the parameter, it threw an exception when the $parameter was the id,
          * whereas I just wanted a boolean.
          */
         if (strrpos($parameter, '-')) {
             //$parameter is the date of the entry
             $journal = Journal::forCurrentUser()->where('date', $parameter)->first();
         } else {
             //$parameter is the id of the entry
             $journal = Journal::forCurrentUser()->findOrFail($parameter);
         }
         return $journal;
     });
 }