Add image to JSON ActivityObject and title + links to the JSON document
This commit is contained in:
		@@ -266,6 +266,8 @@ class ApiTimelineFriendsAction extends ApiBareAuthAction
 | 
			
		||||
        case 'as':
 | 
			
		||||
            header('Content-Type: application/json; charset=utf-8');
 | 
			
		||||
            $doc = new ActivityStreamJSONDocument($this->auth_user);
 | 
			
		||||
            $doc->setTitle($title);
 | 
			
		||||
            $doc->addLink($link,'alternate', 'text/html');
 | 
			
		||||
            $doc->addItemsFromNotices($this->notices);
 | 
			
		||||
            $this->raw($doc->asString());
 | 
			
		||||
            break;
 | 
			
		||||
 
 | 
			
		||||
@@ -387,7 +387,7 @@ class Activity
 | 
			
		||||
 | 
			
		||||
        // TODO: extensions (ActivityContext, OStatus stuff, etc.)
 | 
			
		||||
 | 
			
		||||
        return $activity;
 | 
			
		||||
        return array_filter($activity);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function asString($namespace=false, $author=true, $source=false)
 | 
			
		||||
 
 | 
			
		||||
@@ -652,13 +652,35 @@ class ActivityObject
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        // TODO: downstreamDuplicates
 | 
			
		||||
        // TODO: embedCode
 | 
			
		||||
        // TODO: embedCode (video)
 | 
			
		||||
 | 
			
		||||
        // id
 | 
			
		||||
        $object['id'] = $this->id;
 | 
			
		||||
 | 
			
		||||
        // TODO: image
 | 
			
		||||
        // Need to make MediaLink serialization
 | 
			
		||||
        if ($this->type == ActivityObject::PERSON
 | 
			
		||||
            || $this->type == ActivityObject::GROUP) {
 | 
			
		||||
 | 
			
		||||
            // XXX: Not sure what the best avatar is to use for the
 | 
			
		||||
            // author's "image". For now, I'm using the stream size
 | 
			
		||||
            // one, but possibly it should be large
 | 
			
		||||
            $avatarLink = null;
 | 
			
		||||
 | 
			
		||||
            foreach ($this->avatarLinks as $a) {
 | 
			
		||||
                if ($a->height == AVATAR_STREAM_SIZE) {
 | 
			
		||||
                    $avatarLink = $a;
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $imgLink = new ActivityStreamsMediaLink(
 | 
			
		||||
                $avatarLink->url,
 | 
			
		||||
                $avatarLink->width,
 | 
			
		||||
                $avatarLink->height,
 | 
			
		||||
                $avatarLink->type
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
            $object['image']  = $imgLink->asArray();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // objectType
 | 
			
		||||
        $object['type'] = $this->type;
 | 
			
		||||
@@ -673,6 +695,6 @@ class ActivityObject
 | 
			
		||||
 | 
			
		||||
        // TODO: extensions (OStatus stuff, etc.)
 | 
			
		||||
 | 
			
		||||
        return $object;
 | 
			
		||||
        return array_filter($object);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -43,6 +43,7 @@ if (!defined('STATUSNET'))
 | 
			
		||||
 */
 | 
			
		||||
class ActivityStreamJSONDocument
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    /* Top level array representing the document */
 | 
			
		||||
    protected $doc = array();
 | 
			
		||||
 | 
			
		||||
@@ -57,9 +58,28 @@ class ActivityStreamJSONDocument
 | 
			
		||||
 | 
			
		||||
    function __construct($cur = null)
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        $this->cur = $cur;
 | 
			
		||||
 | 
			
		||||
        /* Title of the JSON document */
 | 
			
		||||
        $this->doc['title'] = null;
 | 
			
		||||
 | 
			
		||||
        /* Array of activity items */
 | 
			
		||||
        $this->doc['items'] = array();
 | 
			
		||||
 | 
			
		||||
        /* Array of links associated with the document */
 | 
			
		||||
        $this->doc['links'] = array();
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the title of the document
 | 
			
		||||
     *
 | 
			
		||||
     * @param String $title the title
 | 
			
		||||
     */
 | 
			
		||||
    function setTitle($title)
 | 
			
		||||
    {
 | 
			
		||||
        $this->doc['title'] = $title;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -99,6 +119,18 @@ class ActivityStreamJSONDocument
 | 
			
		||||
        array_push($this->doc['items'], $act->asArray());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Add a link to the JSON document
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $url the URL for the link
 | 
			
		||||
     * @param string $rel the link relationship
 | 
			
		||||
     */
 | 
			
		||||
    function addLink($url = null, $rel = null, $mediaType = null)
 | 
			
		||||
    {
 | 
			
		||||
        $link = new ActivityStreamsLink($url, $rel, $mediaType);
 | 
			
		||||
        $this->doc['link'][] = $link->asArray();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * Return the entire document as a big string of JSON
 | 
			
		||||
     *
 | 
			
		||||
@@ -106,7 +138,81 @@ class ActivityStreamJSONDocument
 | 
			
		||||
     */
 | 
			
		||||
    function asString()
 | 
			
		||||
    {
 | 
			
		||||
        return json_encode($this->doc);
 | 
			
		||||
        return json_encode(array_filter($this->doc));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A class for representing MediaLinks in JSON Activities
 | 
			
		||||
 *
 | 
			
		||||
 * @category Feed
 | 
			
		||||
 * @package  StatusNet
 | 
			
		||||
 * @author   Zach Copley <zach@status.net>
 | 
			
		||||
 * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 | 
			
		||||
 * @link     http://status.net/
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
class ActivityStreamsMediaLink extends ActivityStreamsLink
 | 
			
		||||
{
 | 
			
		||||
    private $linkDict;
 | 
			
		||||
 | 
			
		||||
    function __construct(
 | 
			
		||||
        $url       = null,
 | 
			
		||||
        $width     = null,
 | 
			
		||||
        $height    = null,
 | 
			
		||||
        $mediaType = null,
 | 
			
		||||
        $rel       = null,
 | 
			
		||||
        $duration  = null
 | 
			
		||||
    )
 | 
			
		||||
    {
 | 
			
		||||
        parent::__construct($url, $rel, $mediaType);
 | 
			
		||||
        $this->linkDict = array(
 | 
			
		||||
            'width'      => $width,
 | 
			
		||||
            'height'     => $height,
 | 
			
		||||
            'duration'   => $duration
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function asArray()
 | 
			
		||||
    {
 | 
			
		||||
        return array_merge(
 | 
			
		||||
            parent::asArray(),
 | 
			
		||||
            array_filter($this->linkDict)
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A class for representing links in JSON Activities
 | 
			
		||||
 *
 | 
			
		||||
 * @category Feed
 | 
			
		||||
 * @package  StatusNet
 | 
			
		||||
 * @author   Zach Copley <zach@status.net>
 | 
			
		||||
 * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 | 
			
		||||
 * @link     http://status.net/
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
class ActivityStreamsLink
 | 
			
		||||
{
 | 
			
		||||
    private $linkDict;
 | 
			
		||||
 | 
			
		||||
    function __construct($url = null, $rel = null, $mediaType = null)
 | 
			
		||||
    {
 | 
			
		||||
        // links MUST have a URL
 | 
			
		||||
        if (empty($url)) {
 | 
			
		||||
            throw new Exception('Links must have a URL.');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $this->linkDict = array(
 | 
			
		||||
            'url'        => $url,
 | 
			
		||||
            'rel'        => $rel,      // extension
 | 
			
		||||
            'media_type' => $mediaType // extension
 | 
			
		||||
       );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function asArray()
 | 
			
		||||
    {
 | 
			
		||||
        return array_filter($this->linkDict);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user