mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
* Update dependencies - Upgrading asm89/stack-cors (v2.0.3 => v2.1.1) - Upgrading barryvdh/laravel-debugbar (v3.6.3 => v3.6.5) - Upgrading barryvdh/laravel-ide-helper (v2.10.0 => v2.11.0) - Upgrading composer/ca-bundle (1.2.11 => 1.3.1) - Upgrading composer/composer (2.1.9 => 2.2.4) - Locking composer/pcre (1.0.0) - Upgrading composer/semver (3.2.5 => 3.2.7) - Upgrading composer/spdx-licenses (1.5.5 => 1.5.6) - Upgrading composer/xdebug-handler (2.0.2 => 2.0.4) - Upgrading doctrine/dbal (2.13.4 => 2.13.7) - Upgrading doctrine/inflector (2.0.3 => 2.0.4) - Upgrading doctrine/lexer (1.2.1 => 1.2.2) - Upgrading dragonmantank/cron-expression (v3.1.0 => v3.3.1) - Upgrading facade/ignition (2.15.0 => 2.17.4) - Upgrading fakerphp/faker (v1.16.0 => v1.17.0) - Upgrading fgrosse/phpasn1 (v2.3.0 => v2.4.0) - Upgrading filp/whoops (2.14.4 => 2.14.5) - Upgrading friendsofphp/php-cs-fixer (v2.19.2 => v2.19.3) - Upgrading fruitcake/laravel-cors (v2.0.4 => v2.0.5) - Upgrading graham-campbell/result-type (v1.0.3 => v1.0.4) - Upgrading guzzlehttp/guzzle (7.4.0 => 7.4.1) - Upgrading guzzlehttp/promises (1.5.0 => 1.5.1) - Upgrading laravel/dusk (v6.19.2 => v6.21.0) - Upgrading laravel/framework (v8.65.0 => v8.80.0) - Upgrading laravel/serializable-closure (v1.0.3 => v1.0.5) - Upgrading laravel/tinker (v2.6.2 => v2.7.0) - Upgrading laravel/ui (v3.3.0 => v3.4.1) - Upgrading league/commonmark (1.6.6 => 1.6.7) - Upgrading league/flysystem (1.1.5 => 1.1.9) - Upgrading league/mime-type-detection (1.8.0 => 1.9.0) - Upgrading maximebf/debugbar (v1.17.2 => v1.17.3) - Upgrading minishlink/web-push (v6.0.5 => v6.0.7) - Upgrading nesbot/carbon (2.53.1 => 2.55.2) - Upgrading nikic/php-parser (v4.13.0 => v4.13.2) - Upgrading nunomaduro/collision (v5.10.0 => v5.11.0) - Upgrading nunomaduro/larastan (1.0.0 => 1.0.2) - Upgrading nunomaduro/laravel-console-summary (v1.7.1 => v1.8.0) - Upgrading paragonie/constant_time_encoding (v2.4.0 => v2.5.0) - Upgrading php-amqplib/php-amqplib (v3.0.0 => v3.1.2) - Upgrading php-flasher/flasher (v0.9.4 => v0.9.6) - Upgrading php-flasher/flasher-laravel (v0.9.4 => v0.9.6) - Upgrading phpdocumentor/type-resolver (1.5.1 => 1.6.0) - Upgrading phpmailer/phpmailer (v6.5.1 => v6.5.3) - Upgrading phpoption/phpoption (1.8.0 => 1.8.1) - Upgrading phpseclib/phpseclib (3.0.10 => 3.0.12) - Upgrading phpspec/prophecy (1.14.0 => v1.15.0) - Upgrading phpstan/phpstan (1.0.1 => 1.4.2) - Upgrading phpunit/php-code-coverage (9.2.7 => 9.2.10) - Upgrading phpunit/php-file-iterator (3.0.5 => 3.0.6) - Upgrading phpunit/phpunit (9.5.10 => 9.5.11) - Upgrading predis/predis (v1.1.9 => v1.1.10) - Upgrading psy/psysh (v0.10.9 => v0.11.1) - Upgrading sebastian/exporter (4.0.3 => 4.0.4) - Upgrading seld/phar-utils (1.1.2 => 1.2.0) - Upgrading symfony/console (v5.3.7 => v5.4.2) - Upgrading symfony/css-selector (v5.3.4 => v5.4.2) - Upgrading symfony/debug (v4.4.31 => v4.4.36) - Upgrading symfony/error-handler (v5.4.0 => v5.4.2) - Upgrading symfony/filesystem (v5.3.4 => v5.4.0) - Upgrading symfony/finder (v5.3.7 => v5.4.2) - Upgrading symfony/http-foundation (v5.4.0 => v5.4.2) - Upgrading symfony/http-kernel (v5.4.0 => v5.4.2) - Upgrading symfony/mime (v5.4.0 => v5.4.2) - Upgrading symfony/options-resolver (v5.3.7 => v5.4.0) - Upgrading symfony/polyfill-ctype (v1.23.0 => v1.24.0) - Upgrading symfony/polyfill-iconv (v1.23.0 => v1.24.0) - Upgrading symfony/polyfill-intl-grapheme (v1.23.1 => v1.24.0) - Upgrading symfony/polyfill-intl-idn (v1.23.0 => v1.24.0) - Upgrading symfony/polyfill-intl-normalizer (v1.23.0 => v1.24.0) - Upgrading symfony/polyfill-mbstring (v1.23.1 => v1.24.0) - Upgrading symfony/polyfill-php72 (v1.23.0 => v1.24.0) - Upgrading symfony/polyfill-php73 (v1.23.0 => v1.24.0) - Upgrading symfony/polyfill-php80 (v1.23.1 => v1.24.0) - Upgrading symfony/polyfill-php81 (v1.23.0 => v1.24.0) - Upgrading symfony/process (v5.3.7 => v5.4.2) - Upgrading symfony/routing (v5.3.7 => v5.4.0) - Upgrading symfony/stopwatch (v5.3.4 => v5.4.0) - Upgrading symfony/string (v5.3.7 => v5.4.2) - Upgrading symfony/translation (v5.3.9 => v5.4.2) - Upgrading symfony/var-dumper (v5.4.0 => v5.4.2) - Upgrading symfony/yaml (v4.4.29 => v4.4.36) - Upgrading tecnickcom/tcpdf (6.4.2 => 6.4.4) - Upgrading tijsverkoyen/css-to-inline-styles (2.2.3 => 2.2.4) - Upgrading vlucas/phpdotenv (v5.3.1 => v5.4.1) * Update debugbar facade path * Update baseline
126 lines
3.2 KiB
PHP
126 lines
3.2 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class Notification extends Model
|
|
{
|
|
/**
|
|
* Indicates if the model should be timestamped.
|
|
*
|
|
* @var bool
|
|
*/
|
|
public $timestamps = false;
|
|
/**
|
|
* The table associated with the model.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $table = 'notifications';
|
|
/**
|
|
* The primary key column name.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $primaryKey = 'notifications_id';
|
|
|
|
// ---- Helper Functions ----
|
|
|
|
/**
|
|
* Mark this notification as read or unread
|
|
*
|
|
* @param bool $enabled
|
|
* @return bool
|
|
*/
|
|
public function markRead(bool $enabled = true): bool
|
|
{
|
|
return $this->setAttrib('read', $enabled);
|
|
}
|
|
|
|
/**
|
|
* Mark this notification as sticky or unsticky
|
|
*/
|
|
public function markSticky(bool $enabled = true): bool
|
|
{
|
|
return $this->setAttrib('sticky', $enabled);
|
|
}
|
|
|
|
/**
|
|
* @param string $name
|
|
* @param bool $enabled
|
|
* @return bool
|
|
*/
|
|
private function setAttrib($name, bool $enabled): bool
|
|
{
|
|
if ($enabled === true) {
|
|
$read = new NotificationAttrib;
|
|
$read->user_id = Auth::user()->user_id;
|
|
$read->key = $name;
|
|
$read->value = '1';
|
|
$this->attribs()->save($read);
|
|
|
|
return true;
|
|
} else {
|
|
return $this->attribs()->where('key', $name)->delete();
|
|
}
|
|
}
|
|
|
|
// ---- Query Scopes ----
|
|
|
|
/**
|
|
* @param Builder<Notification> $query
|
|
* @param User $user
|
|
* @return mixed
|
|
*/
|
|
public function scopeIsUnread(Builder $query, User $user)
|
|
{
|
|
return $query->whereNotExists(function ($query) use ($user) {
|
|
$query->select(DB::raw(1))
|
|
->from('notifications_attribs')
|
|
->whereRaw('notifications.notifications_id = notifications_attribs.notifications_id')
|
|
->where('notifications_attribs.user_id', $user->user_id);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Get all sticky notifications
|
|
*
|
|
* @param Builder<Notification> $query
|
|
*/
|
|
public function scopeIsSticky(Builder $query)
|
|
{
|
|
$query->leftJoin('notifications_attribs', 'notifications_attribs.notifications_id', 'notifications.notifications_id')
|
|
->where(['notifications_attribs.key' => 'sticky', 'notifications_attribs.value' => 1]);
|
|
}
|
|
|
|
/**
|
|
* @param Builder<Notification> $query
|
|
* @return Builder<Notification>
|
|
*/
|
|
public function scopeLimit(Builder $query)
|
|
{
|
|
return $query->select('notifications.*', 'key', 'users.username');
|
|
}
|
|
|
|
/**
|
|
* @param Builder<Notification> $query
|
|
* @return Builder|static
|
|
*/
|
|
public function scopeSource(Builder $query)
|
|
{
|
|
return $query->leftJoin('users', 'notifications.source', '=', 'users.user_id');
|
|
}
|
|
|
|
// ---- Define Relationships ----
|
|
|
|
public function attribs(): HasMany
|
|
{
|
|
return $this->hasMany(\App\Models\NotificationAttrib::class, 'notifications_id', 'notifications_id');
|
|
}
|
|
}
|