Ejemplo n.º 1
0
 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);
     }
 }
Ejemplo n.º 2
0
 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);
     }
 }