Пример #1
0
    public function getBySources(array $urls)
    {
        // get articles
        $sql = '
			SELECT a.*, ia.place_id, p.lat, p.lng, s.url AS source
			FROM article AS a
			JOIN source AS s
			ON a.source_id = s.id
			JOIN is_about AS ia
			ON ia.article_id = a.id
			JOIN place AS p
			ON ia.place_id = p.id
			WHERE s.url IN (?)
		';
        $pm = array();
        $articles = $this->db->query($sql, $urls)->fetchAll();
        // get tags
        $places = array();
        foreach ($articles as $article) {
            $places[] = $article->place_id;
        }
        $sql = '
			SELECT t.*, ht.place_id
			FROM tag AS t
			JOIN has_tag AS ht
			ON ht.tag_id = t.id
			WHERE ht.place_id IN (?)
		';
        $tags = array();
        foreach ($this->db->query($sql, $places) as $tag) {
            if (isset($tags[$tag->place_id])) {
                $tags[$tag->place_id][] = $tag;
            } else {
                $tags[$tag->place_id] = array($tag);
            }
        }
        // prepare placemarks
        foreach ($articles as $article) {
            $pm[] = (object) array('name' => $article->title, 'url' => $article->url, 'photo' => $article->photo_url, 'tags' => isset($tags[$article->place_id]) ? $tags[$article->place_id] : array(), 'lat' => $article->lat, 'lng' => $article->lng, 'icon' => Nette\Utils\Strings::webalize(self::$icons[$article->source]), 'source' => $article->source);
        }
        return $pm;
    }