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); } }