aboutsummaryrefslogtreecommitdiffhomepage
path: root/Digitigrade/Model/Instance.php
diff options
context:
space:
mode:
authorwinter2024-12-13 23:53:23 +0000
committerwinter2024-12-13 23:53:23 +0000
commit2713c1f73a39d4106936d4c52bf8f18d810d7f3c (patch)
treeca3ab4c78b7a45fe4ddc218ce4e45f181cd179e2 /Digitigrade/Model/Instance.php
parentae37b73d1f15ffe5c4c9a32c5de349cd746ebc48 (diff)
add instance information
Diffstat (limited to 'Digitigrade/Model/Instance.php')
-rw-r--r--Digitigrade/Model/Instance.php48
1 files changed, 48 insertions, 0 deletions
diff --git a/Digitigrade/Model/Instance.php b/Digitigrade/Model/Instance.php
new file mode 100644
index 0000000..2924f71
--- /dev/null
+++ b/Digitigrade/Model/Instance.php
@@ -0,0 +1,48 @@
+<?php
+namespace Digitigrade\Model;
+
+use Digitigrade\Model;
+
+class Instance extends FetchableModel {
+ public ?int $id;
+ public string $domain;
+ public string $name;
+ public ?string $description;
+ public ?string $icon; // uri
+ public string $softwareName;
+ public ?string $softwareDescription;
+ public ?string $softwareVersion;
+ public ?string $softwareHomepage;
+
+ public InstanceEndpoints $endpoints;
+
+ protected function getUpdateWhereClause(\PDO $db): ?string {
+ if (self::findWhere('domain = ?', [$this->domain]) != null)
+ return 'domain = ' . $db->quote($this->domain);
+ if (self::findWhere('id = ?', [$this->id]) != null)
+ return "id = $this->id";
+ return null;
+ }
+
+ public static function findByDomain(string $domain): ?self {
+ return self::findByUri("https://$domain/.well-known/pawpub-instance");
+ }
+
+ public function hydrate() {
+ $this->endpoints = InstanceEndpoints::findWhere('instance_id = ?', [$this->id]);
+ }
+
+ protected function beforeSave(string $uri) {
+ $this->domain = explode('/', $uri)[2];
+ }
+
+ public static function findByUri(string $uri, bool $autoSave = true, bool $forceRefetch = false): ?static {
+ if (!$forceRefetch) {
+ $domain = explode('/', $uri)[2];
+ $obj = self::findWhere('domain = ?', [$domain]);
+ if ($obj != null)
+ return $obj;
+ }
+ return self::fetchFromRemote($uri, $autoSave);
+ }
+} \ No newline at end of file