From 9fd2c3e1c91c3b903512caa903a481fa438c1d0b Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Sat, 8 Jun 2013 17:45:49 -0400 Subject: [PATCH] Store direct messages as an activity --- classes/Message.php | 78 ++++++++++++++++++++++++++++++++++++++++++ lib/activityobject.php | 29 +++++++++++++++- 2 files changed, 106 insertions(+), 1 deletion(-) diff --git a/classes/Message.php b/classes/Message.php index e04b4f47e3..b904de0ab8 100644 --- a/classes/Message.php +++ b/classes/Message.php @@ -139,4 +139,82 @@ class Message extends Managed_DataObject mail_notify_message($this, $from, $to); } + + function getSource() + { + $ns = new Notice_source(); + if (!empty($this->source)) { + switch ($this->source) { + case 'web': + case 'xmpp': + case 'mail': + case 'omb': + case 'system': + case 'api': + $ns->code = $this->source; + break; + default: + $ns = Notice_source::staticGet($this->source); + if (!$ns) { + $ns = new Notice_source(); + $ns->code = $this->source; + $app = Oauth_application::staticGet('name', $this->source); + if ($app) { + $ns->name = $app->name; + $ns->url = $app->source_url; + } + } + break; + } + } + return $ns; + } + + function asActivity() + { + $act = new Activity(); + + if (Event::handle('StartMessageAsActivity', array($this, &$act))) { + + $act->id = TagURI::mint(sprintf('activity:message:%d', $this->id)); + $act->time = strtotime($this->created); + $act->link = $this->url; + + $profile = Profile::staticGet('id', $this->from_profile); + + if (empty($profile)) { + throw new Exception(sprintf("Sender profile not found: %d", $this->from_profile)); + } + + $act->actor = ActivityObject::fromProfile($profile); + $act->actor->extra[] = $profile->profileInfo($cur); + + $act->verb = ActivityVerb::POST; + + $act->objects[] = ActivityObject::fromMessage($this); + + $ctx = new ActivityContext(); + + $rprofile = Profile::staticGet('id', $this->to_profile); + + if (empty($rprofile)) { + throw new Exception(sprintf("Receiver profile not found: %d", $this->to_profile)); + } + + $ctx->attention[] = $rprofile->getUri(); + $ctx->attentionType[$rprofile->getUri()] = ActivityObject::PERSON; + + $act->context = $ctx; + + $source = $this->getSource(); + + if ($source) { + $act->generator = ActivityObject::fromNoticeSource($source); + } + + Event::handle('EndMessageAsActivity', array($this, &$act)); + } + + return $act; + } } diff --git a/lib/activityobject.php b/lib/activityobject.php index f4ddde318a..fe0d1ef669 100644 --- a/lib/activityobject.php +++ b/lib/activityobject.php @@ -441,6 +441,8 @@ class ActivityObject $object->content = $notice->rendered; $object->link = $notice->bestUrl(); + $object->extra[] = array('status_net', array('notice_id' => $notice->id)); + Event::handle('EndActivityObjectFromNotice', array($notice, &$object)); } @@ -632,7 +634,7 @@ class ActivityObject $object->date = $source->created; } - $object->extras[] = array('status_net', array('source_code' => $source->code)); + $object->extra[] = array('status_net', array('source_code' => $source->code)); Event::handle('EndActivityObjectFromNoticeSource', array($source, &$object)); } @@ -640,6 +642,31 @@ class ActivityObject return $object; } + static function fromMessage(Message $message) + { + $object = new ActivityObject(); + + if (Event::handle('StartActivityObjectFromMessage', array($message, &$object))) { + + $object->type = ActivityObject::NOTE; + $object->id = ($message->uri) ? $message->uri : (($message->url) ? $message->url : TagURI::mint(sprintf("message:%d", $message->id))); + $object->content = $message->rendered; + $object->date = $message->created; + + if ($message->url) { + $object->link = $message->url; + } else { + $object->link = common_local_url('showmessage', array('message' => $message->id)); + } + + $object->extra[] = array('status_net', array('message_id' => $message->id)); + + Event::handle('EndActivityObjectFromNoticeSource', array($source, &$object)); + } + + return $object; + } + function outputTo($xo, $tag='activity:object') { if (!empty($tag)) {