Store direct messages as an activity
This commit is contained in:
parent
e6e1ad66b0
commit
96d7b68c50
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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)) {
|
||||
|
Loading…
Reference in New Issue
Block a user