id = (string)$item['uri-id']; $this->created_at = DateTimeFormat::utc($item['created'], DateTimeFormat::JSON); $this->edited_at = DateTimeFormat::utc($item['edited'], DateTimeFormat::JSON); if ($item['gravity'] == Item::GRAVITY_COMMENT) { $this->in_reply_to_id = (string)$item['thr-parent-id']; $this->in_reply_to_status = $in_reply; $this->in_reply_to_account_id = (string)$item['parent-author-id']; } $this->sensitive = $sensitive; $this->spoiler_text = $item['title'] ?: $item['content-warning'] ?: ''; $visibility = ['public', 'private', 'unlisted']; $this->visibility = $visibility[$item['private']]; $languages = json_decode($item['language'] ?? '', true); if (is_array($languages)) { reset($languages); $this->language = key($languages); } else { $this->language = null; } $this->uri = $item['uri']; $this->url = $item['plink'] ?? null; $this->replies_count = $reblogged ? 0 : $counts->replies; $this->reblogs_count = $reblogged ? 0 : $counts->reblogs; $this->favourites_count = $reblogged ? 0 : $counts->favourites; $this->favourited = $userAttributes->favourited; $this->reblogged = $userAttributes->reblogged; $this->muted = $userAttributes->muted; $this->bookmarked = $userAttributes->bookmarked; $this->pinned = $userAttributes->pinned; $this->content = $reblogged ? '' : BBCode::convertForUriId($item['uri-id'], BBCode::setMentionsToNicknames($item['raw-body'] ?? $item['body']), BBCode::MASTODON_API); $this->reblog = $reblog; $this->quote = $quote; $this->application = $application->toArray(); $this->account = $account->toArray(); $this->media_attachments = $reblogged ? [] : $attachments; $this->mentions = $reblogged ? [] : $mentions; $this->tags = $reblogged ? [] : $tags; $this->emojis = $reblogged ? [] : ($emojis ?: []); $this->card = $reblogged ? null : ($card->toArray() ?: null); $this->poll = $reblogged ? null : $poll; $this->friendica = $reblogged ? null : $friendica; } /** * Returns the current created_at string or null if not set * @return ?string */ public function createdAt(): ?string { return $this->created_at; } /** * Returns the current edited_at string or null if not set * @return ?string */ public function editedAt(): ?string { return $this->edited_at; } /** * Returns the Friendica Extension properties * @return FriendicaExtension */ public function friendicaExtension(): FriendicaExtension { return $this->friendica; } /** * Returns the current entity as an array * * @return array */ public function toArray(): array { $status = parent::toArray(); if (!$status['pinned']) { unset($status['pinned']); } if (empty($status['application']['name'])) { unset($status['application']); } if (empty($status['reblog'])) { $status['reblog'] = null; } if (empty($status['quote'])) { $status['quote'] = null; } if (empty($status['in_reply_to_status'])) { $status['in_reply_to_status'] = null; } if ($status['created_at'] == $status['edited_at']) { $status['edited_at'] = null; } return $status; } }