read all working

This commit is contained in:
isUnknown 2025-01-15 16:24:34 +01:00
parent 495e1c024e
commit ef09a04b5e
7 changed files with 105 additions and 65 deletions

View file

@ -24,10 +24,4 @@ Kirby::plugin("adrienpayet/pdc-notifications", [
require(__DIR__ . "/routes/readAll.php"),
require(__DIR__ . "/routes/read.php")
],
"userMethods" => [
// "sendNotification" => require(__DIR__ . "/user-methods/send.php"),
"deleteNotification" => require(__DIR__ . "/user-methods/delete.php"),
"readNotification" => require(__DIR__ . "/user-methods/read.php"),
"readAllNotifications" => require(__DIR__ . "/user-methods/readAll.php")
]
]);

View file

@ -4,7 +4,20 @@ return [
'pattern' => '(:all)read-all-notifications.json',
'method' => 'GET',
'action' => function () {
$newNotifications = kirby()->user()->readAllNotifications();
return $newNotifications;
$projects = page("projects");
foreach ($projects->children() as $project) {
try {
$project->readAllNotifications();
return json_encode([
"status" => "success"
]);
} catch (\Throwable $th) {
return json_encode([
"status" => "error",
"message" => $th->getMessage() . ' line ' . $th->getLine() . " in file " . $th->getFile()
]);
}
}
}
];

View file

@ -5,62 +5,88 @@ use Kirby\Data\Yaml;
use adrienpayet\notifications\Notification;
class NotificationsPage extends Page {
public function createNotification($notificationData) {
$newNotification = new Notification($notificationData);
public function createNotification($notificationData) {
$newNotification = new Notification($notificationData);
$notifications = $this->notifications()->isNotEmpty()
? Yaml::decode($this->notifications()->value())
: [];
$notifications[] = $newNotification->toArray();
$notifications = $this->notifications()->isNotEmpty()
? Yaml::decode($this->notifications()->value())
: [];
$notifications[] = $newNotification->toArray();
$this->update([
'notifications' => $notifications
]);
}
$this->update([
'notifications' => $notifications
]);
}
public function deleteNotification($notificationId) {
$notifications = $this->notifications()->isNotEmpty()
? Yaml::decode($this->notifications()->value())
: [];
foreach ($notifications as $key => $notification) {
if ($notification['id'] === $notificationId) {
unset($notifications[$key]);
}
}
public function deleteNotification($notificationId) {
$notifications = $this->notifications()->isNotEmpty()
? Yaml::decode($this->notifications()->value())
: [];
foreach ($notifications as $key => $notification) {
if ($notification['id'] === $notificationId) {
unset($notifications[$key]);
}
}
$this->update([
'notifications' => $notifications
]);
}
$this->update([
'notifications' => $notifications
]);
}
public function readNotification($notificationId) {
$notifications = $this->notifications()->isNotEmpty()
? Yaml::decode($this->notifications()->value())
: [];
foreach ($notifications as $key => &$notification) {
if ($notification['id'] !== $notificationId) {
continue;
}
if (!isset($notification["readby"])) {
$notification["readby"] = [];
}
$userUuid = (string) kirby()->user()->uuid();
if (in_array($userUuid, $notification["readby"])) {
return;
}
$notification["readby"][] = $userUuid;
break;
}
public function readNotification($notificationId) {
$notifications = $this->notifications()->isNotEmpty()
? Yaml::decode($this->notifications()->value())
: [];
foreach ($notifications as $key => &$notification) {
if ($notification['id'] !== $notificationId) {
continue;
}
if (!isset($notification["readby"])) {
$notification["readby"] = [];
}
$userUuid = (string) kirby()->user()->uuid();
if (in_array($userUuid, $notification["readby"])) {
continue;
}
$notification["readby"][] = $userUuid;
break;
}
$this->update([
'notifications' => Yaml::encode($notifications)
]);
}
$this->update([
'notifications' => Yaml::encode($notifications)
]);
}
public function readAllNotifications() {
$notifications = $this->notifications()->isNotEmpty()
? Yaml::decode($this->notifications()->value())
: [];
foreach ($notifications as $key => &$notification) {
if (!isset($notification["readby"])) {
$notification["readby"] = [];
}
$userUuid = (string) kirby()->user()->uuid();
if (in_array($userUuid, $notification["readby"])) {
continue;
}
$notification["readby"][] = $userUuid;
break;
}
$this->update([
'notifications' => Yaml::encode($notifications)
]);
}
}

View file

@ -151,7 +151,6 @@ async function read() {
comment.id,
page.value.uri
);
userStore.readNotification(comment.id, route.params.id);
} catch (error) {
console.log("Erreur lors de la lecture de la notification : ", error);
}

View file

@ -1,8 +1,9 @@
import { defineStore, storeToRefs } from "pinia";
import { usePageStore } from "./page.js";
import uniqid from "uniqid";
import { useUserStore } from "./user";
export const useApiStore = defineStore("api", () => {
const userStore = useUserStore();
async function fetchData(path = window.location.pathname) {
const isHomePage = path === "/";
path = path === "/" ? "/home" : path;
@ -166,6 +167,10 @@ export const useApiStore = defineStore("api", () => {
if (data.error) {
throw new Error(data);
} else {
if (!projectId.startsWith("/")) {
projectId = "/" + projectId;
}
userStore.readNotification(notificationId, projectId);
return data;
}
} catch (error) {
@ -208,7 +213,10 @@ export const useApiStore = defineStore("api", () => {
if (data.error) {
throw new Error(data);
} else {
console.log(data);
userStore.readAllNotifications();
console.log("All notifications read.");
return data;
}
} catch (error) {
throw error;

View file

@ -21,11 +21,12 @@ export const useUserStore = defineStore("user", () => {
});
});
function readNotification(notificationId, projectSlug) {
function readNotification(notificationId, projectId) {
console.log("Read notification", notificationId, projectId);
projects.value = projects.value.map((project) => ({
...project,
notifications:
project.slug === projectSlug
project.uuid === projectId || project.uri === projectId
? project.notifications.map((notification) =>
notification.id === notificationId
? {

View file

@ -117,7 +117,6 @@ function changeTab(newValue) {
function readAll() {
try {
api.readAllNotifications();
userStore.readAllNotifications();
} catch (error) {
console.log("Could not read all notifications : ", error);
}