designtopack/public/site/plugins/notifications/src/NotificationsPage.php
2025-01-15 16:27:09 +01:00

92 lines
No EOL
2.6 KiB
PHP

<?php
namespace adrienpayet\notifications;
use Kirby\Cms\Page;
use Kirby\Data\Yaml;
use adrienpayet\notifications\Notification;
class NotificationsPage extends Page {
public function createNotification($notificationData) {
$newNotification = new Notification($notificationData);
$notifications = $this->notifications()->isNotEmpty()
? Yaml::decode($this->notifications()->value())
: [];
$notifications[] = $newNotification->toArray();
$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]);
}
}
$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"])) {
continue;
}
$notification["readby"][] = $userUuid;
break;
}
$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)
]);
}
}