Files
librenms-librenms/app/Models/Notification.php
Jellyfrog 475a82bab6 Update dependencies (#13684)
* 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
2022-01-23 19:43:48 +01:00

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');
}
}