Example #1
0
 public static function replace($args)
 {
     //require puzzle_id, row, col
     if (isset($args['puzzle_id']) && isset($args['row']) && isset($args['col'])) {
         $ps = PuzzleSquare::where('puzzle_id', $args['puzzle_id'])->where('row', $args['row'])->where('col', $args['col'])->first();
         if (!$ps) {
             $ps = new PuzzleSquare();
             $ps->puzzle_id = $args['puzzle_id'];
             $ps->row = $args['row'];
             $ps->col = $args['col'];
         }
         $ps->letter = isset($args['letter']) ? $args['letter'] : "";
         $ps->save();
         return $ps;
     } else {
         return array('errors' => array('incomplete input for puzzle square'));
     }
 }
Example #2
0
 public function getSuggestion($slug, $row, $col)
 {
     $user = Auth::user();
     if (!$user) {
         $msg = 'Please log in';
         $returnData = array('errors' => array($msg));
         return response()->json($returnData, 401);
     }
     $p = Puzzle::findBySlug($slug);
     if ($p->user_id != $user->id) {
         $msg = 'This isn\'t your puzzle';
         $returnData = array('errors' => array($msg));
         return response()->json($returnData, 401);
     }
     return PuzzleSquare::findSuggestion($p, $row, $col);
 }
Example #3
0
 /**
  * A basic functional test example.
  *
  * @return void
  */
 public function testGuessingTheLastCorrectSquare()
 {
     $faker = Faker\Factory::create();
     $user_creator = factory(User::class)->create(['username' => 'trevorrosenthal']);
     $user_guesser = factory(User::class)->create(['username' => 'nickhundley']);
     $name = $faker->sentence;
     $width = 5;
     $height = 5;
     $blackSquares = array('1-1', '5-5');
     $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 = $faker->sentence;
     $puzzleSquares = array();
     $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);
     $firstword = "shop";
     $secondword = "shove";
     $thirdword = "wanes";
     $fourthword = "arent";
     $fifthword = "beds";
     for ($k = 0; $k < strlen($firstword); $k++) {
         $args = array('row' => 1, 'col' => $k + 2, 'letter' => substr($firstword, $k, 1), 'puzzle_id' => $puzzle->id);
         PuzzleSquare::replace($args);
     }
     for ($k = 0; $k < strlen($secondword); $k++) {
         $args = array('row' => 2, 'col' => $k + 1, 'letter' => substr($secondword, $k, 1), 'puzzle_id' => $puzzle->id);
         PuzzleSquare::replace($args);
     }
     for ($k = 0; $k < strlen($thirdword); $k++) {
         $args = array('row' => 3, 'col' => $k + 1, 'letter' => substr($thirdword, $k, 1), 'puzzle_id' => $puzzle->id);
         PuzzleSquare::replace($args);
     }
     for ($k = 0; $k < strlen($fourthword); $k++) {
         $args = array('row' => 4, 'col' => $k + 1, 'letter' => substr($fourthword, $k, 1), 'puzzle_id' => $puzzle->id);
         PuzzleSquare::replace($args);
     }
     for ($k = 0; $k < strlen($fifthword); $k++) {
         $args = array('row' => 5, 'col' => $k + 1, 'letter' => substr($fifthword, $k, 1), 'puzzle_id' => $puzzle->id);
         PuzzleSquare::replace($args);
     }
     $clue_str = $faker->sentence;
     $across_clues = array(array('ordinal' => 1, 'clue' => 'Woodworking locale'), array('ordinal' => 5, 'clue' => 'Forcefully move'), array('ordinal' => 6, 'clue' => 'Lessens'), array('ordinal' => 7, 'clue' => '"I\'m right, _____ I?'), array('ordinal' => 8, 'clue' => 'Places for flowers'));
     $down_clues = array(array('ordinal' => 1, 'clue' => 'Unit of stock'), array('ordinal' => 2, 'clue' => 'Sharpened (as skills)'), array('ordinal' => 3, 'clue' => 'Baking appliances'), array('ordinal' => 4, 'clue' => 'Insect'), array('ordinal' => 5, 'clue' => 'Gently Brush'));
     foreach ($across_clues as $clue) {
         $args = array('puzzle_slug' => $puzzle->slug, 'clue' => $clue['clue'], 'ordinal' => $clue['ordinal'], 'direction' => 'across');
         $clue = Clue::replace($args);
     }
     foreach ($down_clues as $clue) {
         $args = array('puzzle_slug' => $puzzle->slug, 'clue' => $clue['clue'], 'ordinal' => $clue['ordinal'], 'direction' => 'down');
         $clue = Clue::replace($args);
     }
     $ret = $puzzle->activate();
     for ($k = 0; $k < strlen($firstword); $k++) {
         $args = array('row' => 1, 'col' => $k + 2, 'letter' => substr($firstword, $k, 1), 'puzzle_slug' => $puzzle->slug, 'user_id' => $user_guesser->id);
         $pgs = PuzzleGuessSquare::replace($args);
     }
     $this->assertEquals($pgs['solved'], '0');
     for ($k = 0; $k < strlen($secondword); $k++) {
         $args = array('row' => 2, 'col' => $k + 1, 'letter' => substr($secondword, $k, 1), 'puzzle_slug' => $puzzle->slug, 'user_id' => $user_guesser->id);
         $pgs = PuzzleGuessSquare::replace($args);
     }
     $this->assertEquals($pgs['solved'], '0');
     for ($k = 0; $k < strlen($thirdword); $k++) {
         $args = array('row' => 3, 'col' => $k + 1, 'letter' => substr($thirdword, $k, 1), 'puzzle_slug' => $puzzle->slug, 'user_id' => $user_guesser->id);
         $pgs = PuzzleGuessSquare::replace($args);
     }
     $this->assertEquals($pgs['solved'], '0');
     for ($k = 0; $k < strlen($fourthword); $k++) {
         $args = array('row' => 4, 'col' => $k + 1, 'letter' => substr($fourthword, $k, 1), 'puzzle_slug' => $puzzle->slug, 'user_id' => $user_guesser->id);
         $pgs = PuzzleGuessSquare::replace($args);
     }
     $this->assertEquals($pgs['solved'], '0');
     for ($k = 0; $k < strlen($fifthword); $k++) {
         $args = array('row' => 5, 'col' => $k + 1, 'letter' => substr($fifthword, $k, 1), 'puzzle_slug' => $puzzle->slug, 'user_id' => $user_guesser->id);
         $pgs = PuzzleGuessSquare::replace($args);
     }
     $this->assertEquals($pgs['solved'], '1');
 }
Example #4
0
 public static function create(array $args = array())
 {
     $v = new Puzzle();
     if ($v->validate($args)) {
         $p = new Puzzle();
         $p->name = $args['name'];
         $p->slug = self::findSlug($args['name']);
         $p->user_id = $args['user_id'];
         $p->puzzle_template_id = $args['puzzle_template_id'];
         $p->timestamp_utc = time();
         $p->save();
         $ptss = PuzzleTemplateSquare::where('puzzle_template_id', $args['puzzle_template_id'])->get();
         foreach ($ptss as $pts) {
             $ps = new PuzzleSquare();
             $ps->puzzle_id = $p->id;
             $ps->row = $pts->row;
             $ps->col = $pts->col;
             $letter = "";
             if (isset($args['puzzle_squares'])) {
                 foreach ($args['puzzle_squares'] as $puzzle_square) {
                     if ($puzzle_square['row'] == $pts->row && $puzzle_square['col'] == $pts->col) {
                         $letter = $puzzle_square['letter'];
                     }
                 }
             }
             $ps->letter = $letter;
             $ps->square_type = $pts->square_type;
             $ps->save();
         }
         if (isset($args['clues'])) {
             foreach ($args['clues'] as $c) {
                 $p->clues()->save($c);
             }
         }
         return $p;
     } else {
         return array('errors' => $v->errors);
     }
 }