public function processNotifications($notifications)
{
// Sort by date
usort($notifications, function ($a, $b) {
return strcmp($a->date, $b->date);
});
$notifications = array_reverse($notifications);
// Make adminNicetimeFilter available
require_once __DIR__ . '/../twig/AdminTwigExtension.php';
$adminTwigExtension = new AdminTwigExtension();
$filename = $this->grav['locator']->findResource('user://data/notifications/' . $this->grav['user']->username . YAML_EXT, true, true);
$read_notifications = CompiledYamlFile::instance($filename)->content();
$notifications_processed = [];
foreach ($notifications as $key => $notification) {
$is_valid = true;
if (in_array($notification->id, $read_notifications)) {
$notification->read = true;
}
if ($is_valid && isset($notification->permissions) && !$this->authorize($notification->permissions)) {
$is_valid = false;
}
if ($is_valid && isset($notification->dependencies)) {
foreach ($notification->dependencies as $dependency => $constraints) {
if ($dependency == 'grav') {
if (!Semver::satisfies(GRAV_VERSION, $constraints)) {
$is_valid = false;
}
} else {
$packages = array_merge($this->plugins()->toArray(), $this->themes()->toArray());
if (!isset($packages[$dependency])) {
$is_valid = false;
} else {
$version = $packages[$dependency]['version'];
if (!Semver::satisfies($version, $constraints)) {
$is_valid = false;
}
}
}
if (!$is_valid) {
break;
}
}
}
if ($is_valid) {
$notifications_processed[] = $notification;
}
}
// Process notifications
$notifications_processed = array_map(function ($notification) use($adminTwigExtension) {
$notification->date = $adminTwigExtension->adminNicetimeFilter($notification->date);
return $notification;
}, $notifications_processed);
return $notifications_processed;
}