public static function create(array $args = array()) { $v = new Word(); if ($v->validate($args)) { $w = new Word(); $word = preg_replace("[^a-zA-Z]", "", $args['word']); $w->word = $word; $w->length = strlen($args['word']); $w->user_id = $args['user_id']; $w->timestamp_utc = time(); $w->save(); for ($i = 0; $i < strlen($word); $i++) { $l = new Letter(); $l->letter = substr($word, $i, 1); $l->word_id = $w->id; $l->ordinal = $i + 1; $l->save(); } return $w; } else { return array('errors' => $v->errors); } }
public function activate($user, $sure = false) { $missing_clues = array(); $missing_clues_for_one_letter_words = array(); $missing_letters = array(); $words = array(); $pt = $this->puzzle_template; $pt->blackSquares = $pt->blackSquares(); $squares = $this->puzzle_squares(true); $clues = $this->clues; $ordinal = 1; for ($row = 1; $row <= $pt->height; $row++) { for ($col = 1; $col <= $pt->width; $col++) { if (!in_array($row . '-' . $col, $pt->blackSquares) && $squares[$row . '-' . $col]['square_type'] != 'black' && (!@$squares[$row . '-' . $col]['letter'] || $squares[$row . '-' . $col]['letter'] == "")) { $missing_letters[] = $row . '-' . $col; } $square_should_have_across_clue = false; $square_should_have_down_clue = false; if ($col != $pt->width && $squares[$row . '-' . $col]['square_type'] != 'black' && ($col == 1 || $squares[$row . '-' . ($col - 1)]['square_type'] == 'black')) { $square_should_have_across_clue = true; } if ($row != $pt->height && $squares[$row . '-' . $col]['square_type'] != 'black' && ($row == 1 || $squares[$row - 1 . '-' . $col]['square_type'] == 'black')) { $square_should_have_down_clue = true; } if ($square_should_have_down_clue) { $found_clue = false; foreach ($clues as $clue) { if ($clue->ordinal == $ordinal && $clue->direction == 'down') { $found_clue = $clue; } } if (!$found_clue) { if ($row == $pt->height || $squares[$row + 1 . '-' . $col]['square_type'] == 'black') { $missing_clues_for_one_letter_words[] = $ordinal . ' down'; } else { $missing_clues[] = $ordinal . ' down'; } } //find word $word = ""; for ($word_row = $row; $word_row <= $pt->height && $squares[$word_row . '-' . $col]['square_type'] != 'black'; $word_row++) { $word .= $squares[$word_row . '-' . $col]['letter']; } $word_db = Word::where('word', $word)->first(); if (!$word_db) { $word_db = new Word(); $word_db->word = $word; $word_db->length = strlen($word); $word_db->user_id = $user->id; $word_db->timestamp_utc = time(); $word_db->save(); for ($i = 0; $i < strlen($word); $i++) { $letter = new Letter(); $letter->letter = substr($word, $i, 1); $letter->word_id = $word_db->id; $letter->ordinal = $i + 1; $letter->save(); } } if ($found_clue) { $clue_available = ClueAvailable::where('word_id', $word_db->id)->where('clue', $found_clue->clue)->first(); if (!$clue_available) { $clue_available = new ClueAvailable(); $clue_available->word_id = $word_db->id; $clue_available->clue = $found_clue->clue; $clue_available->timestamp_utc = time(); $clue_available->save(); } } } if ($square_should_have_across_clue) { $found_clue = false; foreach ($clues as $clue) { if ($clue->ordinal == $ordinal && $clue->direction == 'across') { $found_clue = $clue; } } if (!$found_clue) { if ($col == $pt->width || $squares[$row . '-' . ($col + 1)]['square_type'] == 'black') { $missing_clues_for_one_letter_words[] = $ordinal . ' across'; } else { $missing_clues[] = $ordinal . ' across'; } } } if ($square_should_have_across_clue || $square_should_have_down_clue) { $ordinal++; } } } if (count($missing_clues) > 0 || count($missing_letters) > 0 || count($missing_clues_for_one_letter_words) > 0 && !$sure) { return array('errors' => compact('missing_clues', 'missing_letters', 'missing_clues_for_one_letter_words')); } else { $this->active = 1; $this->timestamp_utc = time(); $this->save(); return array('success' => 1); } }