diff options
| author | winter | 2024-12-17 20:43:44 +0000 |
|---|---|---|
| committer | winter | 2024-12-17 20:43:44 +0000 |
| commit | 10793d22df72f12f2f14c730c09b5018b5b6e63a (patch) | |
| tree | ea3cf7cf1461b5b02d989d0077a154b6408948e8 /Digitigrade/Model | |
| parent | 12d3fe4509dda610e6b7adb120dc0530081c6768 (diff) | |
bugfixing
Diffstat (limited to 'Digitigrade/Model')
| -rw-r--r-- | Digitigrade/Model/Actor.php | 3 | ||||
| -rw-r--r-- | Digitigrade/Model/FetchableModel.php | 20 | ||||
| -rw-r--r-- | Digitigrade/Model/Instance.php | 2 | ||||
| -rw-r--r-- | Digitigrade/Model/InstanceEndpoints.php | 1 | ||||
| -rw-r--r-- | Digitigrade/Model/PushableModel.php | 6 |
5 files changed, 21 insertions, 11 deletions
diff --git a/Digitigrade/Model/Actor.php b/Digitigrade/Model/Actor.php index 5974f40..2d5eba7 100644 --- a/Digitigrade/Model/Actor.php +++ b/Digitigrade/Model/Actor.php @@ -34,6 +34,9 @@ class Actor extends PushableModel { bool $automated = false, bool $requestToFollow = true // setting this true by default as i think it's better for privacy ): self { + if (self::findLocalByHandle($handle) != null) { + throw new \RuntimeException('an actor with that local handle already exists!'); + } $actor = new self(); $actor->uri = path_to_uri("/user/$handle"); $actor->isLocal = true; diff --git a/Digitigrade/Model/FetchableModel.php b/Digitigrade/Model/FetchableModel.php index 964ea15..07d7e32 100644 --- a/Digitigrade/Model/FetchableModel.php +++ b/Digitigrade/Model/FetchableModel.php @@ -13,7 +13,7 @@ abstract class FetchableModel extends Model implements RemoteFetchable { self::$mapper->bStrictObjectTypeChecking = false; } - protected static function createFromJson(\stdClass $data, bool $autoSave): static { + protected static function createFromJson(\stdClass $data): static { // default everything nullable to null $obj = new static(); $reflProps = (new \ReflectionClass(static::class))->getProperties(); @@ -49,13 +49,6 @@ abstract class FetchableModel extends Model implements RemoteFetchable { } } - $obj->finaliseAfterFetch($uri); - - if ($autoSave) { - $obj->save(); - $obj->finaliseAfterSave(); - } - return $obj; } @@ -68,7 +61,16 @@ abstract class FetchableModel extends Model implements RemoteFetchable { $data = json_decode($data); if ($data === null) return null; - return static::createFromJson($data, $autoSave); + + $obj = static::createFromJson($data); + + $obj->finaliseAfterFetch($uri); + if ($autoSave) { + $obj->save(); + $obj->finaliseAfterSave(); + } + + return $obj; } protected function finaliseAfterFetch(string $uri) { diff --git a/Digitigrade/Model/Instance.php b/Digitigrade/Model/Instance.php index 9e54a5f..2fc2f17 100644 --- a/Digitigrade/Model/Instance.php +++ b/Digitigrade/Model/Instance.php @@ -175,7 +175,7 @@ class Instance extends FetchableModel { return false; } - public function pushObject(\JsonSerializable $obj) { + public function pushObject(PushableModel $obj) { if (!isset($this->endpoints->push)) { throw new \RuntimeException("can't push to $this->domain because it doesn't have a push endpoint"); } diff --git a/Digitigrade/Model/InstanceEndpoints.php b/Digitigrade/Model/InstanceEndpoints.php index d2b0b24..c7393ab 100644 --- a/Digitigrade/Model/InstanceEndpoints.php +++ b/Digitigrade/Model/InstanceEndpoints.php @@ -9,6 +9,7 @@ class InstanceEndpoints extends Model { public ?string $report; public ?string $subscribe; public ?string $unsubscribe; + public ?string $push; protected function setOwnerId(int $id) { $this->instanceId = $id; diff --git a/Digitigrade/Model/PushableModel.php b/Digitigrade/Model/PushableModel.php index cfa68d3..9a31453 100644 --- a/Digitigrade/Model/PushableModel.php +++ b/Digitigrade/Model/PushableModel.php @@ -3,6 +3,10 @@ namespace Digitigrade\Model; abstract class PushableModel extends FetchableModel implements \JsonSerializable { public static function importFromReceivedObject(\stdClass $obj, bool $autoSave = true): static { - return static::createFromJson($obj, $autoSave); + return static::createFromJson($obj); + if ($autoSave) { + $obj->save(); + $obj->finaliseAfterSave(); + } } }
\ No newline at end of file |
