forked from GNUsocial/gnu-social
		
	Store direct messages as an activity
This commit is contained in:
		@@ -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,32 @@ 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));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        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));
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user