diff options
-rw-r--r-- | lib/rssaction.php | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/lib/rssaction.php b/lib/rssaction.php index abc83fe3a..183c09f47 100644 --- a/lib/rssaction.php +++ b/lib/rssaction.php @@ -192,6 +192,24 @@ class Rss10Action extends Action } } + // XXX: Surely there should be a common function to do this? + function extract_tags ($string) + { + $count = preg_match_all('/(?:^|\s)#([A-Za-z0-9_\-\.]{1,64})/', strtolower($string), $match); + if (!count) + { + return array(); + } + + $rv = array(); + foreach ($match[1] as $tag) + { + $rv[] = common_canonical_tag($tag); + } + + return array_unique($rv); + } + function showItem($notice) { $profile = Profile::staticGet($notice->profile_id); @@ -245,7 +263,20 @@ class Rss10Action extends Action $this->element('sioc:links_to', array('rdf:resource'=>$attachment->url)); } } - + $tags = $this->extract_tags($notice->content); + if (!empty($tags)) { + foreach ($tags as $tag) + { + $tagpage = common_local_url('tag', array('tag' => $tag)); + $tagrss = common_local_url('tagrss', array('tag' => $tag)); + $this->elementStart('ctag:tagged'); + $this->elementStart('ctag:Tag', array('rdf:about'=>$tagpage.'#concept', 'ctag:label'=>$tag)); + $this->element('foaf:page', array('rdf:resource'=>$tagpage)); + $this->element('rdfs:seeAlso', array('rdf:resource'=>$tagrss)); + $this->elementEnd('ctag:Tag'); + $this->elementEnd('ctag:tagged'); + } + } $this->elementEnd('item'); $this->creators[$creator_uri] = $profile; } @@ -281,6 +312,8 @@ class Rss10Action extends Action 'http://creativecommons.org/ns#', 'xmlns:content' => 'http://purl.org/rss/1.0/modules/content/', + 'xmlns:ctag' => + 'http://commontag.org/ns#', 'xmlns:foaf' => 'http://xmlns.com/foaf/0.1/', 'xmlns:sioc' => |