aboutsummaryrefslogtreecommitdiffhomepage
path: root/Digitigrade/Model
diff options
context:
space:
mode:
authorwinter2024-12-17 20:43:44 +0000
committerwinter2024-12-17 20:43:44 +0000
commit10793d22df72f12f2f14c730c09b5018b5b6e63a (patch)
treeea3cf7cf1461b5b02d989d0077a154b6408948e8 /Digitigrade/Model
parent12d3fe4509dda610e6b7adb120dc0530081c6768 (diff)
bugfixing
Diffstat (limited to 'Digitigrade/Model')
-rw-r--r--Digitigrade/Model/Actor.php3
-rw-r--r--Digitigrade/Model/FetchableModel.php20
-rw-r--r--Digitigrade/Model/Instance.php2
-rw-r--r--Digitigrade/Model/InstanceEndpoints.php1
-rw-r--r--Digitigrade/Model/PushableModel.php6
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