From d9fddff5395e77287c4de0796fd072b3073f1eb9 Mon Sep 17 00:00:00 2001
From: Zach Copley <zach@status.net>
Date: Wed, 5 May 2010 22:35:16 -0700
Subject: [PATCH] Add xmlns:statusnet and statusnet:notice_info element to Atom
 entries for notices

---
 classes/Notice.php     | 17 +++++++++++++++--
 lib/atomnoticefeed.php |  9 ++++++++-
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/classes/Notice.php b/classes/Notice.php
index 0b1b2e402d..9a9172cbab 100644
--- a/classes/Notice.php
+++ b/classes/Notice.php
@@ -1171,7 +1171,7 @@ class Notice extends Memcached_DataObject
         return $groups;
     }
 
-    function asAtomEntry($namespace=false, $source=false, $author=true)
+    function asAtomEntry($namespace=false, $source=false, $author=true, $cur=null)
     {
         $profile = $this->getProfile();
 
@@ -1184,7 +1184,8 @@ class Notice extends Memcached_DataObject
                            'xmlns:activity' => 'http://activitystrea.ms/spec/1.0/',
                            'xmlns:media' => 'http://purl.org/syndication/atommedia',
                            'xmlns:poco' => 'http://portablecontacts.net/spec/1.0',
-                           'xmlns:ostatus' => 'http://ostatus.org/schema/1.0');
+                           'xmlns:ostatus' => 'http://ostatus.org/schema/1.0',
+                           'xmlns:statusnet' => 'http://status.net/ont/');
         } else {
             $attrs = array();
         }
@@ -1210,6 +1211,18 @@ class Notice extends Memcached_DataObject
 
             $xs->element('icon', null, $profile->avatarUrl(AVATAR_PROFILE_SIZE));
             $xs->element('updated', null, common_date_w3dtf($this->created));
+
+            $noticeInfoAttr = array(
+                'local_id'   => $this->id,    // local notice ID (useful to clients for ordering)
+                'source'     => $this->source // the client name (source attribution)
+                // @todo source source_link
+                );
+
+            if (!empty($cur)) {
+                $noticeInfoAttr['favorited'] = ($cur->hasFave($this)) ? 'true' : 'false';
+            }
+
+            $xs->element('statusnet:notice_info', $noticeInfoAttr, null);
         }
 
         if ($source) {
diff --git a/lib/atomnoticefeed.php b/lib/atomnoticefeed.php
index e4df731fe0..35a45118ce 100644
--- a/lib/atomnoticefeed.php
+++ b/lib/atomnoticefeed.php
@@ -79,6 +79,11 @@ class AtomNoticeFeed extends Atom10Feed
             'ostatus',
             'http://ostatus.org/schema/1.0'
         );
+
+        $this->addNamespace(
+            'statusnet',
+            'http://status.net/ont/'
+        );
     }
 
     /**
@@ -110,7 +115,9 @@ class AtomNoticeFeed extends Atom10Feed
         $source = $this->showSource();
         $author = $this->showAuthor();
 
-        $this->addEntryRaw($notice->asAtomEntry(false, $source, $author));
+        $cur = common_current_user();
+
+        $this->addEntryRaw($notice->asAtomEntry(false, $source, $author, $cur));
     }
 
     function showSource()