diff options
| author | winter | 2025-02-16 22:18:57 +0000 |
|---|---|---|
| committer | winter | 2025-02-16 22:18:57 +0000 |
| commit | 13999840c56e12e708432ee560ee83fe7c9ff361 (patch) | |
| tree | 30f0c159697a9b30ec0a60bd240a49c3fbc43ca0 | |
| parent | 00fc10a04f90e761edf2b1ddca04f0ec6bb030b5 (diff) | |
fix a freaky bug with note deletion and home timeline
| -rw-r--r-- | Digitigrade/Model/HomeTimelineItem.php | 6 | ||||
| -rw-r--r-- | Digitigrade/Model/Interaction.php | 2 | ||||
| -rw-r--r-- | Digitigrade/Model/Note.php | 2 | ||||
| -rw-r--r-- | Digitigrade/Timeline/HomeTimeline.php | 4 | ||||
| -rw-r--r-- | Digitigrade/Timeline/TimelineIncludeable.php | 2 | ||||
| -rw-r--r-- | templates/note.php | 4 |
6 files changed, 13 insertions, 7 deletions
diff --git a/Digitigrade/Model/HomeTimelineItem.php b/Digitigrade/Model/HomeTimelineItem.php index 7e2c062..249ba91 100644 --- a/Digitigrade/Model/HomeTimelineItem.php +++ b/Digitigrade/Model/HomeTimelineItem.php @@ -32,12 +32,16 @@ class HomeTimelineItem extends Model { return $hti; } - public function toTimelineItem(): TimelineItem { + public function toTimelineItem(): ?TimelineItem { $reason = null; if (isset($this->reasonKind)) { $reason = $this->reasonKind::fromJsonReference(json_decode($this->reasonData)); } $object = $this->itemKind::fromJsonReference(json_decode($this->itemData)); + if (!isset($object)) { + $this->remove(); // it's invalid anyway it shouldn't be here + return null; + } return new TimelineItem($object, $reason); } diff --git a/Digitigrade/Model/Interaction.php b/Digitigrade/Model/Interaction.php index e651f45..43d02a2 100644 --- a/Digitigrade/Model/Interaction.php +++ b/Digitigrade/Model/Interaction.php @@ -113,7 +113,7 @@ class Interaction extends PushableModel implements Notifyable { return $this->id; } - public static function fromJsonReference(mixed $reference): self { + public static function fromJsonReference(mixed $reference): ?self { return self::find($reference); } diff --git a/Digitigrade/Model/Note.php b/Digitigrade/Model/Note.php index ac9cc3c..94b8b60 100644 --- a/Digitigrade/Model/Note.php +++ b/Digitigrade/Model/Note.php @@ -316,7 +316,7 @@ class Note extends PushableModel implements TimelineIncludeable, Notifyable { return $this->id; } - public static function fromJsonReference(mixed $reference): self { + public static function fromJsonReference(mixed $reference): ?self { return self::find($reference); } diff --git a/Digitigrade/Timeline/HomeTimeline.php b/Digitigrade/Timeline/HomeTimeline.php index a89c29a..c710992 100644 --- a/Digitigrade/Timeline/HomeTimeline.php +++ b/Digitigrade/Timeline/HomeTimeline.php @@ -20,7 +20,9 @@ class HomeTimeline extends Timeline { } private function filterItems(array $items): array { - return array_filter($items, function (TimelineItem $item) { + return array_filter($items, function (?TimelineItem $item) { + if ($item == null) + return false; $obj = $item->getObject(); if (!($obj instanceof Note)) return true; diff --git a/Digitigrade/Timeline/TimelineIncludeable.php b/Digitigrade/Timeline/TimelineIncludeable.php index 5406543..af288b2 100644 --- a/Digitigrade/Timeline/TimelineIncludeable.php +++ b/Digitigrade/Timeline/TimelineIncludeable.php @@ -4,5 +4,5 @@ namespace Digitigrade\Timeline; interface TimelineIncludeable { public function renderAsHtml(); public function toJsonReference(): mixed; - public static function fromJsonReference(mixed $reference): self; + public static function fromJsonReference(mixed $reference): ?self; }
\ No newline at end of file diff --git a/templates/note.php b/templates/note.php index 19a1895..6835a0f 100644 --- a/templates/note.php +++ b/templates/note.php @@ -5,7 +5,7 @@ use Digitigrade\Model\NotePrivacyScope; use Digitigrade\Model\UserAccount; use Digitigrade\UserSettings; -const MAX_PREVIEW_CARDS = 1; +$MAX_PREVIEW_CARDS = 1; $user = UserAccount::findByCurrentSession(); $prefs = $user ? new UserSettings($user) : null; @@ -95,7 +95,7 @@ $pathToSelf = '/@/' . $note->author->getFullHandle() . '/note/' . $note->id; $i = 0; foreach ($note->getLinkPreviews() as $preview) { call_template("note_link_preview", ['preview' => $preview]); - if (++$i > MAX_PREVIEW_CARDS) + if (++$i > $MAX_PREVIEW_CARDS) break; } ?> |
