diff options
Diffstat (limited to 'WpfTest/Model/Actor.php')
| -rw-r--r-- | WpfTest/Model/Actor.php | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/WpfTest/Model/Actor.php b/WpfTest/Model/Actor.php deleted file mode 100644 index a745a96..0000000 --- a/WpfTest/Model/Actor.php +++ /dev/null @@ -1,90 +0,0 @@ -<?php -namespace WpfTest\Model; - -use WpfTest\RemoteFetchable; - -class Actor extends FetchableModel implements \JsonSerializable { - public const REL_URI = "https://pawpub.entities.org.uk/rel/actor.html"; - - public ?int $id; - public string $uri; - public bool $isLocal = false; - public \DateTimeImmutable $created; - public ?\DateTimeImmutable $modified; - public ?string $homepage; - public string $handle; - public string $displayName; - public ?string $avatar; - public ?string $bio; - public ?string $pronouns; - public bool $automated = false; - public bool $requestToFollow = false; - public ActorEndpoints $endpoints; - public array $extensions = []; - - protected function getUpdateWhereClause(\PDO $db): ?string { - if (self::findWhere('uri = ?', [$this->uri]) != null) - return 'uri = ' . $db->quote($this->uri); - if (self::findWhere('id = ?', [$this->id]) != null) - return "id = $this->id"; - return null; - } - - public static function findLocalByHandle(string $handle): ?self { - return self::findWhere('is_local = true AND handle = ?', [$handle]); - } - - public static function findByWebfinger(string $acct, bool $autoSave = true, bool $forceRefetch = false): ?self { - // normalise uri - if (!str_starts_with($acct, 'acct:')) { - if (str_starts_with($acct, '@')) { - $acct = substr($acct, 1); - } - $acct = "acct:$acct"; - } - // fetch it - $domain = explode('@', $acct, 2)[1]; - $data = @file_get_contents("https://$domain/.well-known/webfinger?resource=$acct", - context: stream_context_create([ - 'http' => ['header' => 'Accept: application/jrd+json, application/json'] - ]) - ); - if ($data === false) - return null; - $data = json_decode($data); - if ($data === null) - return null; - // find the right link - if (!isset($data->links)) - return null; - $matching = array_filter($data->links, function (\stdClass $linkObj) { - return $linkObj->rel == self::REL_URI; - }); - if (count($matching) == 0) - return null; - return self::findByUri($matching[0]->href, $autoSave, $forceRefetch); - } - - public function jsonSerialize(): array { - return [ - 'type' => 'actor', - 'self' => path_to_uri("/user/$this->handle"), - 'created' => $this->created?->format('c'), - 'modified' => $this->modified?->format('c'), - 'homepage' => path_to_uri("/$this->handle"), - 'handle' => $this->handle, - 'displayName' => $this->displayName, - 'bio' => $this->bio, - 'pronouns' => $this->pronouns, - 'automated' => $this->automated, - 'endpoints' => [ - 'basicFeed' => path_to_uri("/user/$this->handle/basicFeed"), - 'fullFeed' => path_to_uri("/user/$this->handle/fullFeed") - ] - ]; - } - - public function hydrate() { - $this->endpoints = ActorEndpoints::findWhere('actor_id = ?', [$this->id]); - } -}
\ No newline at end of file |
