]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/foaf.php
Merge branch 'master' of gitorious.org:statusnet/mainline into testing
[quix0rs-gnu-social.git] / actions / foaf.php
index 356393304ed5abbc0a243bcd68e8974d395aa05b..2f054de0c9f73885fafbb49e00e7808ca2cd9e29 100644 (file)
@@ -95,7 +95,9 @@ class FoafAction extends Action
         // Would be nice to tell if they were a Person or not (e.g. a #person usertag?)
         $this->elementStart('Agent', array('rdf:about' =>
                                              $this->user->uri));
-        $this->element('mbox_sha1sum', null, sha1('mailto:' . $this->user->email));
+        if ($this->user->email) {
+            $this->element('mbox_sha1sum', null, sha1('mailto:' . $this->user->email));
+        }
         if ($this->profile->fullname) {
             $this->element('name', null, $this->profile->fullname);
         }
@@ -108,11 +110,29 @@ class FoafAction extends Action
         if ($this->profile->bio) {
             $this->element('bio:olb', null, $this->profile->bio);
         }
-        // XXX: more structured location data
-        if ($this->profile->location) {
+        
+        $location = $this->profile->getLocation();
+        if ($location) {
+            $attr = array();
+            if ($location->getRdfURL()) {
+                $attr['rdf:about'] = $location->getRdfURL();
+            }
+            $location_name = $location->getName();
+            
             $this->elementStart('based_near');
-            $this->elementStart('geo:SpatialThing');
-            $this->element('name', null, $this->profile->location);
+            $this->elementStart('geo:SpatialThing', $attr);
+            if ($location_name) {
+                $this->element('name', null, $location_name);
+            }
+            if ($location->lat) {
+                $this->element('geo:lat', null, $location->lat);
+            }
+            if ($location->lon) {
+                $this->element('geo:long', null, $location->lon);
+            }
+            if ($location->getURL()) {
+                $this->element('page', array('rdf:resource'=>$location->getURL()));
+            }
             $this->elementEnd('geo:SpatialThing');
             $this->elementEnd('based_near');
         }
@@ -144,40 +164,29 @@ class FoafAction extends Action
 
         if ($sub->find()) {
             while ($sub->fetch()) {
-                if ($sub->token) {
-                    $other = Remote_profile::staticGet('id', $sub->subscriber);
-                    $profile = Profile::staticGet('id', $sub->subscriber);
-                } else {
-                    $other = User::staticGet('id', $sub->subscriber);
-                    $profile = Profile::staticGet('id', $sub->subscriber);
-                }
-                if (!$other) {
+                $profile = Profile::staticGet('id', $sub->subscriber);
+                if (empty($profile)) {
                     common_debug('Got a bad subscription: '.print_r($sub,true));
                     continue;
                 }
-                if (array_key_exists($other->uri, $person)) {
-                    $person[$other->uri][0] = BOTH;
+                $user = $profile->getUser();
+                $other_uri = $profile->getUri();
+                if (array_key_exists($other_uri, $person)) {
+                    $person[$other_uri][0] = BOTH;
                 } else {
-                    $person[$other->uri] = array(LISTENER,
-                                                 $other->id,
-                                                 $profile->nickname,
-                                                 (empty($sub->token)) ? 'User' : 'Remote_profile');
+                    $person[$other_uri] = array(LISTENER,
+                                                $profile->id,
+                                                $profile->nickname,
+                                                $user ? 'local' : 'remote');
                 }
-                $other->free();
-                $other = null;
-                unset($other);
-                $profile->free();
-                $profile = null;
                 unset($profile);
             }
         }
 
-        $sub->free();
-        $sub = null;
         unset($sub);
 
         foreach ($person as $uri => $p) {
-            list($type, $id, $nickname, $cls) = $p;
+            list($type, $id, $nickname, $local) = $p;
             if ($type == BOTH) {
                 $this->element('knows', array('rdf:resource' => $uri));
             }
@@ -188,8 +197,8 @@ class FoafAction extends Action
 
         foreach ($person as $uri => $p) {
             $foaf_url = null;
-            list($type, $id, $nickname, $cls) = $p;
-            if ($cls == 'User') {
+            list($type, $id, $nickname, $local) = $p;
+            if ($local == 'local') {
                 $foaf_url = common_local_url('foaf', array('nickname' => $nickname));
             }
             $profile = Profile::staticGet($id);
@@ -198,7 +207,7 @@ class FoafAction extends Action
                 $this->element('knows', array('rdf:resource' => $this->user->uri));
             }
             $this->showMicrobloggingAccount($profile,
-                                   ($cls == 'User') ? common_root_url() : null,
+                                   ($local == 'local') ? common_root_url() : null,
                                    $uri,
                                    true);
             if ($foaf_url) {
@@ -233,7 +242,7 @@ class FoafAction extends Action
         }
 
         // Their account
-        $this->elementStart('holdsAccount');
+        $this->elementStart('account');
         $this->elementStart('OnlineAccount', $attr);
         if ($service) {
             $this->element('accountServiceHomepage', array('rdf:resource' =>
@@ -257,38 +266,27 @@ class FoafAction extends Action
 
             if ($sub->find()) {
                 while ($sub->fetch()) {
-                    if (!empty($sub->token)) {
-                        $other = Remote_profile::staticGet('id', $sub->subscribed);
-                        $profile = Profile::staticGet('id', $sub->subscribed);
-                    } else {
-                        $other = User::staticGet('id', $sub->subscribed);
-                        $profile = Profile::staticGet('id', $sub->subscribed);
-                    }
-                    if (empty($other)) {
+                    $profile = Profile::staticGet('id', $sub->subscribed);
+                    if (empty($profile)) {
                         common_debug('Got a bad subscription: '.print_r($sub,true));
                         continue;
                     }
-                    $this->element('sioc:follows', array('rdf:resource' => $other->uri.'#acct'));
-                    $person[$other->uri] = array(LISTENEE,
-                                                 $other->id,
-                                                 $profile->nickname,
-                                                 (empty($sub->token)) ? 'User' : 'Remote_profile');
-                    $other->free();
-                    $other = null;
-                    unset($other);
-                    $profile->free();
-                    $profile = null;
+                    $user = $profile->getUser();
+                    $other_uri = $profile->getUri();
+                    $this->element('sioc:follows', array('rdf:resource' => $other_uri.'#acct'));
+                    $person[$other_uri] = array(LISTENEE,
+                                                $profile->id,
+                                                $profile->nickname,
+                                                $user ? 'local' : 'remote');
                     unset($profile);
                 }
             }
 
-            $sub->free();
-            $sub = null;
             unset($sub);
         }
 
         $this->elementEnd('OnlineAccount');
-        $this->elementEnd('holdsAccount');
+        $this->elementEnd('account');
 
         return $person;
     }