예제 #1
0
 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);
     }
 }
예제 #2
0
 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;
     }
 }
예제 #3
0
 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;
 }
예제 #4
0
 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;
 }
예제 #5
0
 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);
 }