aboutsummaryrefslogtreecommitdiffhomepage
path: root/Digitigrade/Model
diff options
context:
space:
mode:
authorwinter2025-03-31 18:48:41 +0100
committerwinter2025-03-31 18:48:41 +0100
commit7e69dc8fa711da59a003dc7f50a16a0e59f0f88c (patch)
treec1b69d93019c6731f2014681c58c36ef8b92f0d7 /Digitigrade/Model
parent6f094ad28ea6fe44b1c5bb446a98f15bc22246b0 (diff)
hopefully fix note mentions in fetch/import push
Diffstat (limited to 'Digitigrade/Model')
-rw-r--r--Digitigrade/Model/FetchableModel.php4
-rw-r--r--Digitigrade/Model/Instance.php2
-rw-r--r--Digitigrade/Model/Note.php11
-rw-r--r--Digitigrade/Model/PushableModel.php2
4 files changed, 16 insertions, 3 deletions
diff --git a/Digitigrade/Model/FetchableModel.php b/Digitigrade/Model/FetchableModel.php
index f6e0218..c6bc291 100644
--- a/Digitigrade/Model/FetchableModel.php
+++ b/Digitigrade/Model/FetchableModel.php
@@ -81,7 +81,7 @@ abstract class FetchableModel extends Model implements RemoteFetchable {
$obj = static::createFromJson($data, $autoSave, $uri);
- $obj->finaliseAfterFetch($uri);
+ $obj->finaliseAfterFetch($uri, $data);
if (!$obj->validate() || !PolicyManager::getInstance()->check($obj)) {
return null; // and don't save
}
@@ -93,7 +93,7 @@ abstract class FetchableModel extends Model implements RemoteFetchable {
return $obj;
}
- protected function finaliseAfterFetch(string $uri) {
+ protected function finaliseAfterFetch(string $uri, ?\stdClass $data = null) {
}
protected function finaliseAfterSave() {
diff --git a/Digitigrade/Model/Instance.php b/Digitigrade/Model/Instance.php
index a10c7b9..2bcc258 100644
--- a/Digitigrade/Model/Instance.php
+++ b/Digitigrade/Model/Instance.php
@@ -48,7 +48,7 @@ class Instance extends FetchableModel {
$this->auth = $auth;
}
- protected function finaliseAfterFetch(string $uri) {
+ protected function finaliseAfterFetch(string $uri, ?\stdClass $data = null) {
$this->domain = hostname_from_uri($uri);
}
diff --git a/Digitigrade/Model/Note.php b/Digitigrade/Model/Note.php
index 4675546..6246795 100644
--- a/Digitigrade/Model/Note.php
+++ b/Digitigrade/Model/Note.php
@@ -101,6 +101,17 @@ class Note extends PushableModel implements TimelineIncludeable, Notifyable {
$this->saveFormattedContents();
}
+ protected function finaliseAfterFetch(string $uri, ?\stdClass $data = null) {
+ // have to set up mentions here because it's not able to automatically map Actor[] ?
+ $this->mentions = [];
+ foreach (($data->mentions ?? []) as $actorUri) {
+ $actor = Actor::findByUri($actorUri);
+ if ($actor != null) {
+ $this->mentions[] = $actor;
+ }
+ }
+ }
+
protected function validate(): bool {
// author has to be from the same instance as the note itself
return hostname_from_uri($this->author->uri) == hostname_from_uri($this->uri);
diff --git a/Digitigrade/Model/PushableModel.php b/Digitigrade/Model/PushableModel.php
index e773779..b30d9a7 100644
--- a/Digitigrade/Model/PushableModel.php
+++ b/Digitigrade/Model/PushableModel.php
@@ -21,6 +21,8 @@ abstract class PushableModel extends FetchableModel implements \JsonSerializable
}
$obj = static::createFromJson($data, $autoSave);
+
+ $obj->finaliseAfterFetch($data->self ?? '', $data);
if (!$obj->validate() || !PolicyManager::getInstance()->check($obj)) {
return null; // and don't save
}