summaryrefslogtreecommitdiff
path: root/lib/rssaction.php
diff options
context:
space:
mode:
authorJeffery To <jeffery.to@gmail.com>2009-07-17 16:54:46 +0800
committerJeffery To <jeffery.to@gmail.com>2009-07-17 16:54:46 +0800
commit1aea5989776e75f3b7af236049d511a28c3f1ff7 (patch)
treefbf355767238df2dbdebf086fa2c9e5f51f7dbed /lib/rssaction.php
parent5015505f16c9ce412e6f5535f80188f33d24c4ea (diff)
parentc32e494c0c480e30317b0f0a8dcae7103c4ff89e (diff)
Merge branch '0.9.x' into private-rss
Diffstat (limited to 'lib/rssaction.php')
-rw-r--r--lib/rssaction.php62
1 files changed, 58 insertions, 4 deletions
diff --git a/lib/rssaction.php b/lib/rssaction.php
index 15c238bf9..40fe11c66 100644
--- a/lib/rssaction.php
+++ b/lib/rssaction.php
@@ -229,6 +229,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);
@@ -256,10 +274,46 @@ class Rss10Action extends Action
$attachments = $notice->attachments();
if($attachments){
foreach($attachments as $attachment){
- $this->element('enc:enclosure', array('rdf:resource'=>$attachment->url,'enc:type'=>$attachment->mimetype,'enc:length'=>$attachment->size), null);
+ if ($attachment->isEnclosure()) {
+ // DO NOT move xmlns declaration to root element. Making it
+ // the default namespace here improves compatibility with
+ // real-world feed readers.
+ $attribs = array(
+ 'rdf:resource' => $attachment->url,
+ 'url' => $attachment->url,
+ 'xmlns' => 'http://purl.oclc.org/net/rss_2.0/enc#'
+ );
+ if ($attachment->title) {
+ $attribs['dc:title'] = $attachment->title;
+ }
+ if ($attachment->modified) {
+ $attribs['dc:date'] = common_date_w3dtf($attachment->modified);
+ }
+ if ($attachment->size) {
+ $attribs['length'] = $attachment->size;
+ }
+ if ($attachment->mimetype) {
+ $attribs['type'] = $attachment->mimetype;
+ }
+ $this->element('enclosure', $attribs);
+ }
+ $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;
}
@@ -295,8 +349,8 @@ class Rss10Action extends Action
'http://creativecommons.org/ns#',
'xmlns:content' =>
'http://purl.org/rss/1.0/modules/content/',
- 'xmlns:enc' =>
- 'http://purl.oclc.org/net/rss_2.0/enc#',
+ 'xmlns:ctag' =>
+ 'http://commontag.org/ns#',
'xmlns:foaf' =>
'http://xmlns.com/foaf/0.1/',
'xmlns:sioc' =>