public $location;
public $attention = array();
public $conversation;
+ public $forwardID; // deprecated, use ActivityVerb::SHARE instead
+ public $forwardUrl; // deprecated, use ActivityVerb::SHARE instead
const THR = 'http://purl.org/syndication/thread/1.0';
const GEORSS = 'http://www.georss.org/georss';
const MENTIONED = 'mentioned';
const CONVERSATION = 'ostatus:conversation';
- function __construct($element)
+ function __construct($element = null)
{
+ if (empty($element)) {
+ return;
+ }
+
$replyToEl = ActivityUtils::child($element, self::INREPLYTO, self::THR);
if (!empty($replyToEl)) {
$links = $element->getElementsByTagNameNS(ActivityUtils::ATOM, ActivityUtils::LINK);
+ $attention = array();
for ($i = 0; $i < $links->length; $i++) {
-
$link = $links->item($i);
$linkRel = $link->getAttribute(ActivityUtils::REL);
// XXX: Deprecate this in favour of "mentioned" from Salmon spec
// http://salmon-protocol.googlecode.com/svn/trunk/draft-panzer-salmon-00.html#SALR
if ($linkRel == self::ATTENTION) {
- $this->attention[] = $link->getAttribute(self::HREF);
- } else if ($linkRel == self:MENTIONED) {
- $this->attention[] = $link->getAttribute(self::HREF);
+ $attention[] = $link->getAttribute(self::HREF);
+ } elseif ($linkRel == self::MENTIONED) {
+ $attention[] = $link->getAttribute(self::HREF);
}
}
+ $this->attention = array_unique($attention);
}
/**
common_log(LOG_ERR, "Ignoring bogus georss:point value $point");
return null;
}
+
+ /**
+ * Returns context (StatusNet stuff) as an array suitable for serializing
+ * in JSON. Right now context stuff is an extension to Activity.
+ *
+ * @return array the context
+ */
+
+ function asArray()
+ {
+ $context = array();
+
+ $context['inReplyTo'] = $this->getInReplyToArray();
+ $context['conversation'] = $this->conversation;
+ $context['forwardId'] = $this->forwardID;
+ $context['forwardUrl'] = $this->forwardUrl;
+
+ return array_filter($context);
+ }
+
+ /**
+ * Returns an array of arrays representing Activity Objects (intended to be
+ * serialized in JSON) that represent WHO the Activity is supposed to
+ * be received by. This is not really specified but appears in an example
+ * of the current spec as an extension. We might want to figure out a JSON
+ * serialization for OStatus and use that to express mentions instead.
+ *
+ * XXX: People's ideas on how to do this are all over the place
+ *
+ * @return array the array of recipients
+ */
+
+ function getToArray()
+ {
+ $tos = array();
+
+ foreach ($this->attention as $attnUrl) {
+ $to = array(
+ 'objectType' => 'person',
+ 'id' => $attnUrl,
+ 'url' => $attnUrl
+ );
+ $tos[] = $to;
+ }
+
+ return $tos;
+ }
+
+ /**
+ * Return an array for the notices this notice is a reply to
+ * suitable for serializing as JSON note objects.
+ *
+ * @return array the array of notes
+ */
+
+ function getInReplyToArray()
+ {
+ if (empty($this->replyToID) && empty($this->replyToUrl)) {
+ return null;
+ }
+
+ $replyToObj = array('objectType' => 'note');
+
+ // XXX: Possibly shorten this to just the numeric ID?
+ // Currently, it's the full URI of the notice.
+ if (!empty($this->replyToID)) {
+ $replyToObj['id'] = $this->replyToID;
+ }
+ if (!empty($this->replyToUrl)) {
+ $replyToObj['url'] = $this->replyToUrl;
+ }
+
+ return $replyToObj;
+ }
+
}
+