protected function icons_in_post($full_post) { $post = $full_post['.postmsg'][0]; if (strpos($post->html(), '<img') === false) { return array(); } $post_text = self::clean_up_post($post); $artist_name = $full_post['.postleft dt'][0]->text(); $post_imgs = $post['img.postimg']; if (empty($post_imgs)) { return array(); } $icons = self::find_icon_names_in_post($post_imgs, $post_text); $post_icons = array(); foreach ($icons as $img_src => $name) { $icon = Make::an('Icon')->like('src', $img_src)->first(); $changed = false; if (!$icon) { $icon = new Icon(); $icon->src = $img_src; $icon->theme_id = $this->theme->id; // TODO: make this DRYer too if ($artist_name) { $artist = Make::an('Artist')->like('name', $artist_name)->first(); if (!$artist) { $artist = new Artist(); $artist->name = $artist_name; $artist->save(); } $icon->setArtist($artist); } $changed = true; } if ($name && !$icon->app()) { $app = Make::an('App')->like('name', $name)->first(); if (!$app) { $app = new App(); $app->name = $name; $app->save(); } $icon->setApp($app); $changed = true; } if ($changed) { $icon->save(); } $post_icons[] = $icon; } /* $matches = array(); $maybe_names = array(); if (preg_match('/(([a-z0-9\-]{2,}), )+([a-z0-9\- ]{2,})/i', $post_text, $matches)) { $maybe_names = explode(',', $matches[0]); # [0] == entire match $maybe_names = array_map('trim', $maybe_names); } else { $w = self::WORD_REGEXP; $and_match = array(); if (preg_match('/'.$w.' and '.$w.'/iu', $post_text, $and_match)) { $maybe_names = explode(' and ', $and_match[0]); $maybe_names = array_map('trim', $maybe_names); } } if ($maybe_names) { foreach ($post_icons as &$post_icon) { $post_icon->maybe_names = array_merge($post_icon->maybe_names, $maybe_names); } } */ return $post_icons; }