forked from GNUsocial/gnu-social
Merge branch 'rationalize-activity' into testing
* rationalize-activity: Move ActivityObject and related stuff to core Add PoCo bits, avatar link, geo point, etc. to person activity obj output
This commit is contained in:
commit
cbf6ebae01
@ -1218,25 +1218,8 @@ class Notice extends Memcached_DataObject
|
|||||||
*/
|
*/
|
||||||
function asActivityNoun($element)
|
function asActivityNoun($element)
|
||||||
{
|
{
|
||||||
$xs = new XMLStringer(true);
|
$noun = ActivityObject::fromNotice($this);
|
||||||
|
return $noun->asString('activity:' . $element);
|
||||||
$xs->elementStart('activity:' . $element);
|
|
||||||
$xs->element('activity:object-type',
|
|
||||||
null,
|
|
||||||
'http://activitystrea.ms/schema/1.0/note');
|
|
||||||
$xs->element('id',
|
|
||||||
null,
|
|
||||||
$this->uri);
|
|
||||||
$xs->element('content',
|
|
||||||
array('type' => 'text/html'),
|
|
||||||
$this->rendered);
|
|
||||||
$xs->element('link',
|
|
||||||
array('type' => 'text/html',
|
|
||||||
'rel' => 'alternate',
|
|
||||||
'href' => $this->bestUrl()));
|
|
||||||
$xs->elementEnd('activity:' . $element);
|
|
||||||
|
|
||||||
return $xs->getString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function bestUrl()
|
function bestUrl()
|
||||||
|
@ -801,82 +801,8 @@ class Profile extends Memcached_DataObject
|
|||||||
*/
|
*/
|
||||||
function asActivityNoun($element)
|
function asActivityNoun($element)
|
||||||
{
|
{
|
||||||
$xs = new XMLStringer(true);
|
$noun = ActivityObject::fromProfile($this);
|
||||||
|
return $noun->asString('activity:' . $element);
|
||||||
$xs->elementStart('activity:' . $element);
|
|
||||||
$xs->element(
|
|
||||||
'activity:object-type',
|
|
||||||
null,
|
|
||||||
'http://activitystrea.ms/schema/1.0/person'
|
|
||||||
);
|
|
||||||
$xs->element(
|
|
||||||
'id',
|
|
||||||
null,
|
|
||||||
$this->getUri()
|
|
||||||
);
|
|
||||||
|
|
||||||
// title should contain fullname
|
|
||||||
$xs->element('title', null, $this->getBestName());
|
|
||||||
|
|
||||||
$xs->element('link', array('rel' => 'alternate',
|
|
||||||
'type' => 'text/html'),
|
|
||||||
$this->profileurl);
|
|
||||||
|
|
||||||
$xs->element('poco:preferredUsername', null, $this->nickname);
|
|
||||||
|
|
||||||
// Portable Contacts stuff
|
|
||||||
|
|
||||||
if (isset($this->bio)) {
|
|
||||||
|
|
||||||
// XXX: Possible to use OpenSocial's aboutMe?
|
|
||||||
|
|
||||||
$xs->element('poco:note', null, $this->bio);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($this->homepage)) {
|
|
||||||
|
|
||||||
$xs->elementStart('poco:urls');
|
|
||||||
$xs->element('poco:value', null, $this->homepage);
|
|
||||||
$xs->element('poco:type', null, 'homepage');
|
|
||||||
$xs->element('poco:primary', null, 'true');
|
|
||||||
$xs->elementEnd('poco:urls');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($this->location)) {
|
|
||||||
$xs->elementStart('poco:address');
|
|
||||||
$xs->element('poco:formatted', null, $this->location);
|
|
||||||
$xs->elementEnd('poco:address');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($this->lat) && isset($this->lon)) {
|
|
||||||
$this->element(
|
|
||||||
'georss:point',
|
|
||||||
null,
|
|
||||||
(float)$this->lat . ' ' . (float)$this->lon
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// XXX: Should we send all avatar sizes we have? I think
|
|
||||||
// cliqset does -Z
|
|
||||||
|
|
||||||
$avatar = $this->getAvatar(AVATAR_PROFILE_SIZE);
|
|
||||||
|
|
||||||
$xs->element(
|
|
||||||
'link', array(
|
|
||||||
'type' => empty($avatar) ? 'image/png' : $avatar->mediatype,
|
|
||||||
'rel' => 'avatar',
|
|
||||||
'href' => empty($avatar)
|
|
||||||
? Avatar::defaultImage(AVATAR_PROFILE_SIZE)
|
|
||||||
: $avatar->displayUrl()
|
|
||||||
),
|
|
||||||
''
|
|
||||||
);
|
|
||||||
|
|
||||||
$xs->elementEnd('activity:' . $element);
|
|
||||||
|
|
||||||
// XXX: Add people tags with <poco:tags> plural?
|
|
||||||
|
|
||||||
return $xs->getString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -19,9 +19,10 @@
|
|||||||
* You should have received a copy of the GNU Affero General Public License
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
* @category OStatus
|
* @category Feed
|
||||||
* @package StatusNet
|
* @package StatusNet
|
||||||
* @author Evan Prodromou <evan@status.net>
|
* @author Evan Prodromou <evan@status.net>
|
||||||
|
* @author Zach Copley <zach@status.net>
|
||||||
* @copyright 2010 StatusNet, Inc.
|
* @copyright 2010 StatusNet, Inc.
|
||||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
|
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
|
||||||
* @link http://status.net/
|
* @link http://status.net/
|
||||||
@ -31,10 +32,117 @@ if (!defined('STATUSNET')) {
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class PoCoURL
|
||||||
|
{
|
||||||
|
const TYPE = 'type';
|
||||||
|
const VALUE = 'value';
|
||||||
|
const PRIMARY = 'primary';
|
||||||
|
|
||||||
|
public $type;
|
||||||
|
public $value;
|
||||||
|
public $primary;
|
||||||
|
|
||||||
|
function __construct($type, $value, $primary = false)
|
||||||
|
{
|
||||||
|
$this->type = $type;
|
||||||
|
$this->value = $value;
|
||||||
|
$this->primary = $primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
function asString()
|
||||||
|
{
|
||||||
|
$xs = new XMLStringer(true);
|
||||||
|
$xs->elementStart('poco:urls');
|
||||||
|
$xs->element('poco:type', null, $this->type);
|
||||||
|
$xs->element('poco:value', null, $this->value);
|
||||||
|
if ($this->primary) {
|
||||||
|
$xs->element('poco:primary', null, 'true');
|
||||||
|
}
|
||||||
|
$xs->elementEnd('poco:urls');
|
||||||
|
return $xs->getString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class PoCoAddress
|
||||||
|
{
|
||||||
|
const ADDRESS = 'address';
|
||||||
|
const FORMATTED = 'formatted';
|
||||||
|
|
||||||
|
public $formatted;
|
||||||
|
|
||||||
|
function __construct($formatted)
|
||||||
|
{
|
||||||
|
if (empty($formatted)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
$this->formatted = $formatted;
|
||||||
|
}
|
||||||
|
|
||||||
|
function asString()
|
||||||
|
{
|
||||||
|
$xs = new XMLStringer(true);
|
||||||
|
$xs->elementStart('poco:address');
|
||||||
|
$xs->element('poco:formatted', null, $this->formatted);
|
||||||
|
$xs->elementEnd('poco:address');
|
||||||
|
return $xs->getString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class PoCo
|
class PoCo
|
||||||
{
|
{
|
||||||
const NS = 'http://portablecontacts.net/spec/1.0';
|
const NS = 'http://portablecontacts.net/spec/1.0';
|
||||||
const USERNAME = 'preferredUsername';
|
|
||||||
|
const USERNAME = 'preferredUsername';
|
||||||
|
const NOTE = 'note';
|
||||||
|
const URLS = 'urls';
|
||||||
|
|
||||||
|
public $preferredUsername;
|
||||||
|
public $note;
|
||||||
|
public $address;
|
||||||
|
public $urls = array();
|
||||||
|
|
||||||
|
function __construct($profile)
|
||||||
|
{
|
||||||
|
$this->preferredUsername = $profile->nickname;
|
||||||
|
|
||||||
|
$this->note = $profile->bio;
|
||||||
|
$this->address = new PoCoAddress($profile->location);
|
||||||
|
|
||||||
|
if (!empty($profile->homepage)) {
|
||||||
|
array_push(
|
||||||
|
$this->urls,
|
||||||
|
new PoCoURL(
|
||||||
|
'homepage',
|
||||||
|
$profile->homepage,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function asString()
|
||||||
|
{
|
||||||
|
$xs = new XMLStringer(true);
|
||||||
|
$xs->element(
|
||||||
|
'poco:preferredUsername',
|
||||||
|
null,
|
||||||
|
$this->preferredUsername
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!empty($this->note)) {
|
||||||
|
$xs->element('poco:note', null, $this->note);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($this->address)) {
|
||||||
|
$xs->raw($this->address->asString());
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($this->urls as $url) {
|
||||||
|
$xs->raw($url->asString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return $xs->getString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -265,6 +373,7 @@ class ActivityObject
|
|||||||
public $link;
|
public $link;
|
||||||
public $source;
|
public $source;
|
||||||
public $avatar;
|
public $avatar;
|
||||||
|
public $geopoint;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
@ -374,10 +483,17 @@ class ActivityObject
|
|||||||
{
|
{
|
||||||
$object = new ActivityObject();
|
$object = new ActivityObject();
|
||||||
|
|
||||||
$object->type = ActivityObject::PERSON;
|
$object->type = ActivityObject::PERSON;
|
||||||
$object->id = $profile->getUri();
|
$object->id = $profile->getUri();
|
||||||
$object->title = $profile->getBestName();
|
$object->title = $profile->getBestName();
|
||||||
$object->link = $profile->profileurl;
|
$object->link = $profile->profileurl;
|
||||||
|
$object->avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
|
||||||
|
|
||||||
|
if (isset($profile->lat) && isset($profile->lon)) {
|
||||||
|
$object->geopoint = (float)$profile->lat . ' ' . (float)$profile->lon;
|
||||||
|
}
|
||||||
|
|
||||||
|
$object->poco = new PoCo($profile);
|
||||||
|
|
||||||
return $object;
|
return $object;
|
||||||
}
|
}
|
||||||
@ -410,7 +526,32 @@ class ActivityObject
|
|||||||
|
|
||||||
if (!empty($this->link)) {
|
if (!empty($this->link)) {
|
||||||
$xs->element('link', array('rel' => 'alternate', 'type' => 'text/html'),
|
$xs->element('link', array('rel' => 'alternate', 'type' => 'text/html'),
|
||||||
$this->content);
|
$this->link);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->type == ActivityObject::PERSON) {
|
||||||
|
$xs->element(
|
||||||
|
'link', array(
|
||||||
|
'type' => empty($this->avatar) ? 'image/png' : $this->avatar->mediatype,
|
||||||
|
'rel' => 'avatar',
|
||||||
|
'href' => empty($this->avatar)
|
||||||
|
? Avatar::defaultImage(AVATAR_PROFILE_SIZE)
|
||||||
|
: $this->avatar->displayUrl()
|
||||||
|
),
|
||||||
|
''
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($this->geopoint)) {
|
||||||
|
$xs->element(
|
||||||
|
'georss:point',
|
||||||
|
null,
|
||||||
|
$this->geopoint
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($this->poco)) {
|
||||||
|
$xs->raw($this->poco->asString());
|
||||||
}
|
}
|
||||||
|
|
||||||
$xs->elementEnd($tag);
|
$xs->elementEnd($tag);
|
Loading…
Reference in New Issue
Block a user