summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--classes/Notice.php10
-rw-r--r--lib/rssaction.php62
-rw-r--r--lib/twitterapi.php12
3 files changed, 71 insertions, 13 deletions
diff --git a/classes/Notice.php b/classes/Notice.php
index 75044cf63..fc28f3558 100644
--- a/classes/Notice.php
+++ b/classes/Notice.php
@@ -1170,11 +1170,13 @@ class Notice extends Memcached_DataObject
$attachments = $this->attachments();
if($attachments){
foreach($attachments as $attachment){
- $attributes = array('rel'=>'enclosure','href'=>$attachment->url,'type'=>$attachment->mimetype,'length'=>$attachment->size);
- if($attachment->title){
- $attributes['title']=$attachment->title;
+ if (isset($attachment->filename)) {
+ $attributes = array('rel'=>'enclosure','href'=>$attachment->url,'type'=>$attachment->mimetype,'length'=>$attachment->size);
+ if($attachment->title){
+ $attributes['title']=$attachment->title;
+ }
+ $xs->element('link', $attributes, null);
}
- $xs->element('link', $attributes, null);
}
}
diff --git a/lib/rssaction.php b/lib/rssaction.php
index fe3fd6f4a..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);
@@ -219,10 +237,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 (isset($attachment->filename)) {
+ // 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;
}
@@ -258,8 +312,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' =>
diff --git a/lib/twitterapi.php b/lib/twitterapi.php
index 4f3a5c0b6..ce188e00d 100644
--- a/lib/twitterapi.php
+++ b/lib/twitterapi.php
@@ -218,11 +218,13 @@ class TwitterapiAction extends Action
if($attachments){
$entry['enclosures']=array();
foreach($attachments as $attachment){
- $enclosure=array();
- $enclosure['url']=$attachment->url;
- $enclosure['mimetype']=$attachment->mimetype;
- $enclosure['size']=$attachment->size;
- $entry['enclosures'][]=$enclosure;
+ if (isset($attachment->filename)) {
+ $enclosure=array();
+ $enclosure['url']=$attachment->url;
+ $enclosure['mimetype']=$attachment->mimetype;
+ $enclosure['size']=$attachment->size;
+ $entry['enclosures'][]=$enclosure;
+ }
}
}