2023-07-03 11:20:44 +02:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Inspired by the PHP ActivityPub Library by @Landrok
|
|
|
|
*
|
|
|
|
* @link https://github.com/landrok/activitypub
|
|
|
|
*/
|
|
|
|
|
|
|
|
namespace Activitypub\Activity;
|
|
|
|
|
2023-07-03 17:59:42 +02:00
|
|
|
use Activitypub\Activity\Base_Object;
|
|
|
|
|
2023-07-03 11:20:44 +02:00
|
|
|
/**
|
|
|
|
* \Activitypub\Activity\Activity implements the common
|
|
|
|
* attributes of an Activity.
|
|
|
|
*
|
|
|
|
* @see https://www.w3.org/TR/activitystreams-core/#activities
|
|
|
|
* @see https://www.w3.org/TR/activitystreams-core/#intransitiveactivities
|
|
|
|
*/
|
|
|
|
class Activity extends Base_Object {
|
|
|
|
const CONTEXT = array(
|
|
|
|
'https://www.w3.org/ns/activitystreams',
|
|
|
|
'https://w3id.org/security/v1',
|
|
|
|
array(
|
|
|
|
'manuallyApprovesFollowers' => 'as:manuallyApprovesFollowers',
|
|
|
|
'PropertyValue' => 'schema:PropertyValue',
|
|
|
|
'schema' => 'http://schema.org#',
|
|
|
|
'pt' => 'https://joinpeertube.org/ns#',
|
|
|
|
'toot' => 'http://joinmastodon.org/ns#',
|
2023-09-01 18:32:56 +02:00
|
|
|
'webfinger' => 'https://webfinger.net/#',
|
2023-07-31 20:15:11 +02:00
|
|
|
'litepub' => 'http://litepub.social/ns#',
|
2023-09-22 09:38:59 +02:00
|
|
|
'lemmy' => 'https://join-lemmy.org/ns#',
|
2023-07-03 11:20:44 +02:00
|
|
|
'value' => 'schema:value',
|
|
|
|
'Hashtag' => 'as:Hashtag',
|
|
|
|
'featured' => array(
|
|
|
|
'@id' => 'toot:featured',
|
|
|
|
'@type' => '@id',
|
|
|
|
),
|
|
|
|
'featuredTags' => array(
|
|
|
|
'@id' => 'toot:featuredTags',
|
|
|
|
'@type' => '@id',
|
|
|
|
),
|
2023-09-01 18:32:56 +02:00
|
|
|
'alsoKnownAs' => array(
|
|
|
|
'@id' => 'as:alsoKnownAs',
|
|
|
|
'@type' => '@id',
|
|
|
|
),
|
2023-09-22 09:38:59 +02:00
|
|
|
'moderators' => array(
|
|
|
|
'@id' => 'lemmy:moderators',
|
|
|
|
'@type' => '@id',
|
|
|
|
),
|
|
|
|
'postingRestrictedToMods' => 'lemmy:postingRestrictedToMods',
|
2023-07-31 20:15:11 +02:00
|
|
|
'discoverable' => 'toot:discoverable',
|
2023-09-22 09:38:59 +02:00
|
|
|
'indexable' => 'toot:indexable',
|
2023-07-31 20:15:11 +02:00
|
|
|
'sensitive' => 'as:sensitive',
|
2023-09-01 18:32:56 +02:00
|
|
|
'resource' => 'webfinger:resource',
|
2023-07-03 11:20:44 +02:00
|
|
|
),
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The object's unique global identifier
|
|
|
|
*
|
|
|
|
* @see https://www.w3.org/TR/activitypub/#obj-id
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
protected $id;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
protected $type = 'Activity';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The context within which the object exists or an activity was
|
|
|
|
* performed.
|
|
|
|
* The notion of "context" used is intentionally vague.
|
|
|
|
* The intended function is to serve as a means of grouping objects
|
|
|
|
* and activities that share a common originating context or
|
|
|
|
* purpose. An example could be all activities relating to a common
|
|
|
|
* project or event.
|
|
|
|
*
|
|
|
|
* @see https://www.w3.org/TR/activitystreams-vocabulary/#dfn-context
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
* | ObjectType
|
|
|
|
* | Link
|
|
|
|
* | null
|
|
|
|
*/
|
|
|
|
protected $context = self::CONTEXT;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Describes the direct object of the activity.
|
|
|
|
* For instance, in the activity "John added a movie to his
|
|
|
|
* wishlist", the object of the activity is the movie added.
|
|
|
|
*
|
|
|
|
* @see https://www.w3.org/TR/activitystreams-vocabulary/#dfn-object-term
|
|
|
|
*
|
|
|
|
* @var string
|
2023-07-05 15:31:06 +02:00
|
|
|
* | Base_Objectr
|
2023-07-03 11:20:44 +02:00
|
|
|
* | Link
|
|
|
|
* | null
|
|
|
|
*/
|
|
|
|
protected $object;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Describes one or more entities that either performed or are
|
|
|
|
* expected to perform the activity.
|
|
|
|
* Any single activity can have multiple actors.
|
|
|
|
* The actor MAY be specified using an indirect Link.
|
|
|
|
*
|
|
|
|
* @see https://www.w3.org/TR/activitystreams-vocabulary/#dfn-actor
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
* | \ActivityPhp\Type\Extended\AbstractActor
|
|
|
|
* | array<Actor>
|
|
|
|
* | array<Link>
|
|
|
|
* | Link
|
|
|
|
*/
|
|
|
|
protected $actor;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The indirect object, or target, of the activity.
|
|
|
|
* The precise meaning of the target is largely dependent on the
|
|
|
|
* type of action being described but will often be the object of
|
|
|
|
* the English preposition "to".
|
|
|
|
* For instance, in the activity "John added a movie to his
|
|
|
|
* wishlist", the target of the activity is John's wishlist.
|
|
|
|
* An activity can have more than one target.
|
|
|
|
*
|
|
|
|
* @see https://www.w3.org/TR/activitystreams-vocabulary/#dfn-target
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
* | ObjectType
|
|
|
|
* | array<ObjectType>
|
|
|
|
* | Link
|
|
|
|
* | array<Link>
|
|
|
|
*/
|
|
|
|
protected $target;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Describes the result of the activity.
|
|
|
|
* For instance, if a particular action results in the creation of
|
|
|
|
* a new resource, the result property can be used to describe
|
|
|
|
* that new resource.
|
|
|
|
*
|
|
|
|
* @see https://www.w3.org/TR/activitystreams-vocabulary/#dfn-result
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
* | ObjectType
|
|
|
|
* | Link
|
|
|
|
* | null
|
|
|
|
*/
|
|
|
|
protected $result;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* An indirect object of the activity from which the
|
|
|
|
* activity is directed.
|
|
|
|
* The precise meaning of the origin is the object of the English
|
|
|
|
* preposition "from".
|
|
|
|
* For instance, in the activity "John moved an item to List B
|
|
|
|
* from List A", the origin of the activity is "List A".
|
|
|
|
*
|
|
|
|
* @see https://www.w3.org/TR/activitystreams-vocabulary/#dfn-origin
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
* | ObjectType
|
|
|
|
* | Link
|
|
|
|
* | null
|
|
|
|
*/
|
|
|
|
protected $origin;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* One or more objects used (or to be used) in the completion of an
|
|
|
|
* Activity.
|
|
|
|
*
|
|
|
|
* @see https://www.w3.org/TR/activitystreams-vocabulary/#dfn-instrument
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
* | ObjectType
|
|
|
|
* | Link
|
|
|
|
* | null
|
|
|
|
*/
|
|
|
|
protected $instrument;
|
2023-07-03 17:59:42 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Set the object and copy Object properties to the Activity.
|
|
|
|
*
|
|
|
|
* Any to, bto, cc, bcc, and audience properties specified on the object
|
|
|
|
* MUST be copied over to the new Create activity by the server.
|
|
|
|
*
|
|
|
|
* @see https://www.w3.org/TR/activitypub/#object-without-create
|
|
|
|
*
|
2023-07-05 15:31:06 +02:00
|
|
|
* @param string|Base_Objectr|Link|null $object
|
2023-07-03 17:59:42 +02:00
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
2023-07-05 15:31:06 +02:00
|
|
|
public function set_object( $object ) {
|
2023-11-30 11:43:48 +01:00
|
|
|
// convert array to object
|
|
|
|
if ( is_array( $object ) ) {
|
|
|
|
$object = Base_Object::init_from_array( $object );
|
|
|
|
}
|
|
|
|
|
|
|
|
// set object
|
2023-07-05 15:31:06 +02:00
|
|
|
$this->set( 'object', $object );
|
|
|
|
|
|
|
|
if ( ! is_object( $object ) ) {
|
|
|
|
return;
|
|
|
|
}
|
2023-07-03 17:59:42 +02:00
|
|
|
|
|
|
|
foreach ( array( 'to', 'bto', 'cc', 'bcc', 'audience' ) as $i ) {
|
|
|
|
$this->set( $i, $object->get( $i ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( $object->get_published() && ! $this->get_published() ) {
|
|
|
|
$this->set( 'published', $object->get_published() );
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( $object->get_updated() && ! $this->get_updated() ) {
|
|
|
|
$this->set( 'updated', $object->get_updated() );
|
|
|
|
}
|
|
|
|
|
2023-07-10 14:59:12 +02:00
|
|
|
if ( $object->get_attributed_to() && ! $this->get_actor() ) {
|
|
|
|
$this->set( 'actor', $object->get_attributed_to() );
|
2023-07-03 17:59:42 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if ( $object->get_id() && ! $this->get_id() ) {
|
|
|
|
$this->set( 'id', $object->get_id() . '#activity' );
|
|
|
|
}
|
|
|
|
}
|
2023-07-03 11:20:44 +02:00
|
|
|
}
|