aboutsummaryrefslogtreecommitdiffhomepage
path: root/WpfTest/Model/Actor.php
diff options
context:
space:
mode:
Diffstat (limited to 'WpfTest/Model/Actor.php')
-rw-r--r--WpfTest/Model/Actor.php90
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