public static function replace(array $args = array()) { $v = new PuzzleGuessSquare(); if ($v->validate($args)) { $puzzle_guess = PuzzleGuess::whereRaw('puzzle_id in (select id from puzzles where slug = ?)', array($args['puzzle_slug']))->where('user_id', $args['user_id'])->first(); $p = Puzzle::where('slug', $args['puzzle_slug'])->first(); if (!$puzzle_guess) { $puzzle_guess = new PuzzleGuess(); $puzzle_guess->user_id = $args['user_id']; $puzzle_guess->puzzle_id = $p->id; $puzzle_guess->created_timestamp_utc = time(); } if ($puzzle_guess->solved()) { return array('errors' => array('This puzzle is already solved')); } $puzzle_guess->updated_timestamp_utc = time(); $puzzle_guess->save(); $pgs = PuzzleGuessSquare::where('puzzle_guess_id', $puzzle_guess->id)->where('row', $args['row'])->where('col', $args['col'])->first(); if (!$pgs) { $pgs = new PuzzleGuessSquare(); $pgs->puzzle_guess_id = $puzzle_guess->id; $pgs->row = $args['row']; $pgs->col = $args['col']; } $pgs->timestamp_utc = time(); if (isset($args['letter'])) { $pgs->letter = $args['letter']; } $pgs->save(); $pgs['solved'] = $puzzle_guess->solved(); return $pgs; } else { return array('errors' => $v->errors); } }
public function guess_squares($user_id = 0) { $ps = PuzzleGuess::where('puzzle_id', $this->id)->where('user_id', $user_id)->first(); if (!$ps) { return array(); } else { $pgs = PuzzleGuessSquare::where('puzzle_guess_id', $ps->id)->orderBy('col')->orderBy('row')->get(); $ret = array(); foreach ($pgs as $pg) { $ret[$pg->row . '-' . $pg->col] = array('letter' => $pg->letter); } return $ret; } }
public function solved() { $p = $this->puzzle; $guess_squares_db = PuzzleGuessSquare::where('puzzle_guess_id', $this->id)->orderBy('row')->orderBy('col')->get(); $guess_squares = array(); foreach ($guess_squares_db as $gs) { $guess_squares[$gs->row . '-' . $gs->col] = array('letter' => $gs->letter); } $pss = $p->puzzle_squares(true); foreach ($pss as $k => $ps) { if ($ps['square_type'] != "black" && (!isset($guess_squares[$k]) || $guess_squares[$k]['letter'] != $ps['letter'])) { return 0; } } return 1; }
public function postGuessSquare() { $user = Auth::user(); if (!$user) { $user = new User(); $user->name = "temporary user"; $user->username = User::findUsername($user->name); $user->active = 0; $user->temporary = 1; $user->created_timestamp_utc = time(); $user->updated_timestamp_utc = time(); $user->most_recent_ip = request()->ip(); $user->save(); Auth::login($user); } $args = Input::all(); $args['user_id'] = $user->id; $pgs = PuzzleGuessSquare::replace($args); return $pgs; }
public function testGuessingASquare() { $faker = Faker\Factory::create(); $user_creator = factory(User::class)->create(['username' => 'jaimegarcia']); $user_guesser = factory(User::class)->create(['username' => 'wilmyers']); $name = "puzzle template"; $width = 10; $height = 10; $blackSquares = array(); $args = array('name' => $name, 'width' => $width, 'height' => $height, 'blackSquares' => $blackSquares, 'user_id' => $user_creator->id); $puzzleTemplate = PuzzleTemplate::create($args); $user_creator->puzzleTemplates()->save($puzzleTemplate); $name = "my puzzle"; $firstword = "st"; $puzzleSquares = array(); for ($row = 1; $row <= 10; $row++) { for ($col = 1; $col <= 10; $col++) { $puzzleSquares[] = array('row' => $row, 'col' => $col, 'letter' => 'a', 'square_type' => 'white'); } } $clues = array(); $args = array('name' => $name, 'puzzle_template_id' => $puzzleTemplate->id, 'puzzle_squares' => $puzzleSquares, 'clues' => $clues, 'user_id' => $user_creator->id); $puzzle = Puzzle::create($args); $puzzle->activate(); $guess = "x"; $args = array('puzzle_slug' => $puzzle->slug, 'row' => 1, 'col' => 1, 'letter' => $guess, 'user_id' => $user_guesser->id); $pgs = PuzzleGuessSquare::replace($args); $this->actingAs($user_guesser)->visit('/puzzles/' . $puzzle->slug)->see($guess); }