. * * @category Plugin * @package GNUsocial * @author Daniel Supernault * @author Diogo Cordeiro * @copyright 2018 Free Software Foundation http://fsf.org * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link https://www.gnu.org/software/social/ */ if (!defined('GNUSOCIAL')) { exit(1); } /** * ActivityPub notice representation * * @category Plugin * @package GNUsocial * @author Diogo Cordeiro * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://www.gnu.org/software/social/ */ class Activitypub_notice extends Managed_DataObject { /** * Generates a pretty notice from a Notice object * * @author Diogo Cordeiro * @param Notice $notice * @return pretty array to be used in a response */ public static function notice_to_array($notice) { $profile = $notice->getProfile(); $attachments = []; foreach ($notice->attachments() as $attachment) { $attachments[] = Activitypub_attachment::attachment_to_array($attachment); } $tags = []; foreach ($notice->getTags() as $tag) { if ($tag != "") { // Hacky workaround to avoid stupid outputs $tags[] = Activitypub_tag::tag_to_array($tag); } } $to = []; foreach ($notice->getAttentionProfiles() as $to_profile) { $to[] = $href = $to_profile->getUri(); $tags[] = Activitypub_mention_tag::mention_tag_to_array_from_values($href, $to_profile->getNickname().'@'.parse_url($href, PHP_URL_HOST)); } // In a world without walls and fences, we should make everything Public! $to[]= 'https://www.w3.org/ns/activitystreams#Public'; $item = [ '@context' => 'https://www.w3.org/ns/activitystreams', 'id' => $notice->getUrl(), 'type' => 'Note', 'published' => str_replace(' ', 'T', $notice->getCreated()).'Z', 'url' => $notice->getUrl(), 'atributedTo' => ActivityPubPlugin::actor_uri($profile), 'to' => $to, 'cc' => common_local_url('apActorFollowers', ['id' => $profile->getID()]), 'atomUri' => $notice->getUrl(), 'conversation' => $notice->getConversationUrl(), 'content' => $notice->getContent(), 'isLocal' => $notice->isLocal(), 'attachment' => $attachments, 'tag' => $tags ]; // Is this a reply? if (!empty($notice->reply_to)) { $item['inReplyTo'] = Notice::getById($notice->reply_to)->getUrl(); $item['inReplyToAtomUri'] = Notice::getById($notice->reply_to)->getUrl(); } // Do we have a location for this notice? try { $location = Notice_location::locFromStored($notice); $item['latitude'] = $location->lat; $item['longitude'] = $location->lon; } catch (Exception $ex) { // Apparently no. } return $item; } }