From f0645f805ecdd19cf5ed9842f9e6b69a86dbcdeb Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Thu, 27 Aug 2026 15:28:09 +0000
Subject: [PATCH] =Notifications and routes minor cleanup. needs more work

---
 inc/managers/Notifications/Notifications.php |   60 ++++++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 48 insertions(+), 12 deletions(-)

diff --git a/inc/managers/Notifications/Notifications.php b/inc/managers/Notifications/Notifications.php
index 61ee88c..aa8f576 100644
--- a/inc/managers/Notifications/Notifications.php
+++ b/inc/managers/Notifications/Notifications.php
@@ -315,24 +315,60 @@
 		return true;
 	}
 
-	public function getUserNotifications(int $user_id, array $where = []):array
+	protected function buildArgs(array $args):array
 	{
-		$gotWhere = $where;
-		$allowedKeys = ['from_user','target_id', 'target_type','type','status','priority','action_taken','created_at','read_at','actioned_at','updated_at'];
-		$where = array_filter($gotWhere, function($key) use ($allowedKeys) {
-			return in_array($key, $allowedKeys);
+		$allowed = $this->notifications->getColumnKeys();
+		$where = array_filter($args, function($key) use ($allowed) {
+			return in_array($key, $allowed);
 		}, ARRAY_FILTER_USE_KEY);
-		$notAllowed = array_diff($gotWhere, $allowedKeys);
-		if (!empty($notAllowed)){
-			error_log('[Notifications]::getUserNotifications Invalid where arguments, removed from request: '.print_r($notAllowed, true));
+
+		if ($where['type'] === 'all') {
+			unset($where['type']);
 		}
 
-		return $this->notifications->getMany(array_merge([
-			'for_user'	=> $user_id,
-			'status'	=> 'unread',	//default to unread, but the merge will override if different
-		], $where));
+
+		$args['page'] = max(1, intval($args['page']??1));
+		$order = wp_parse_args($args, [
+			'orderby'	=> 'created_at',
+			'order'		=> 'DESC',
+			'per_page'	=> 20,
+			'page'		=> 1,
+		]);
+
+		$args = array_merge([
+			'where'	=> $where,
+		],$order);
+
+		return $args;
 	}
 
+	public function getUserNotifications(int $user_id, array $args = []):array
+	{
+		$args = $this->buildArgs($args);
+
+		$args['where']['for_user'] = $user_id;
+		if (!array_key_exists('status', $args['where'])) {
+			$args['where']['status'] = 'unread';
+		}
+
+
+		return $this->notifications->getMany($args, false);
+	}
+
+	public function countUserNotifications(int $user_id, array $args = []):int
+	{
+		$args = $this->buildArgs($args);
+
+		$args['where']['for_user'] = $user_id;
+		if (!array_key_exists('status', $args['where'])) {
+			$args['where']['status'] = 'unread';
+		}
+
+		return $this->notifications->count($args);
+	}
+
+
+
 	public function markRead(int $userID, int|array $notification_id):bool
 	{
 		if (is_int($notification_id)) {

--
Gitblit v1.10.0