diff options
| author | winter | 2025-01-23 18:55:52 +0000 |
|---|---|---|
| committer | winter | 2025-01-23 18:55:58 +0000 |
| commit | bc9c83b6c33d460a574fbeb764c23bfbe941b4c0 (patch) | |
| tree | 5d9e816b56feea462d15e391544b0b13eeb47c8d /Digitigrade/Timeline | |
| parent | ddccaf16f39a4bf710266edc389fcde124e7ef56 (diff) | |
implement blocking users
it doesn't work yet for notifications! but i think i got it in most other places
Diffstat (limited to 'Digitigrade/Timeline')
| -rw-r--r-- | Digitigrade/Timeline/HomeTimeline.php | 11 | ||||
| -rw-r--r-- | Digitigrade/Timeline/Timeline.php | 23 |
2 files changed, 30 insertions, 4 deletions
diff --git a/Digitigrade/Timeline/HomeTimeline.php b/Digitigrade/Timeline/HomeTimeline.php index 0867541..9f420e5 100644 --- a/Digitigrade/Timeline/HomeTimeline.php +++ b/Digitigrade/Timeline/HomeTimeline.php @@ -1,6 +1,7 @@ <?php namespace Digitigrade\Timeline; +use Digitigrade\Model\Note; use Digitigrade\Model\UserAccount; use Digitigrade\Model\HomeTimelineItem; @@ -19,9 +20,13 @@ class HomeTimeline extends Timeline { } public function getItemsSince(\DateTimeInterface $when, ?int $limit = null, int $offset = 0): array { - return array_map( - fn(HomeTimelineItem $hti) => $hti->toTimelineItem(), - HomeTimelineItem::findAllForUser($this->user, $limit, $offset, $when) + return array_filter( + array_map( + fn(HomeTimelineItem $hti) => $hti->toTimelineItem(), + HomeTimelineItem::findAllForUser($this->user, $limit, $offset, $when) + ), + // filter out notes from blocked users + fn(TimelineItem $item) => !($item instanceof Note && $this->user->actor->block($item->author)) ); } }
\ No newline at end of file diff --git a/Digitigrade/Timeline/Timeline.php b/Digitigrade/Timeline/Timeline.php index b3def28..f53eaa4 100644 --- a/Digitigrade/Timeline/Timeline.php +++ b/Digitigrade/Timeline/Timeline.php @@ -1,6 +1,9 @@ <?php namespace Digitigrade\Timeline; +use Digitigrade\Model\Note; +use Digitigrade\Model\UserAccount; + abstract class Timeline { // TODO: currently making this number up. probably should be modifiable somewhere private const RESULTS_PER_PAGE = 50; @@ -11,7 +14,25 @@ abstract class Timeline { * @return TimelineItem[] */ public function getPage(int $page = 0): array { - return $this->getItems(self::RESULTS_PER_PAGE, self::RESULTS_PER_PAGE * $page); + return $this->getItemsFiltered(self::RESULTS_PER_PAGE, self::RESULTS_PER_PAGE * $page); + } + + /** + * @return TimelineItem[] + */ + private function getItemsFiltered(int $limit, int $offset): array { + $user = UserAccount::findByCurrentSession(); + $items = $this->getItems($limit, $offset); + if ($user == null) + return $items; + // filter out notes from blocked users + return array_filter($items, function (TimelineItem $item) use ($user) { + $obj = $item->getObject(); + if ($obj instanceof Note && $user->actor->blocks($obj->author)) { + return false; + } + return true; + }); } /** |
