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')); } }
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); }
/** * 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'); }
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); } }