mirror of
				https://github.com/librenms/librenms.git
				synced 2024-10-07 16:52:45 +00:00 
			
		
		
		
	
		
			
	
	
		
			143 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			143 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|  | <?php | ||
|  | 
 | ||
|  | namespace App\Models; | ||
|  | 
 | ||
|  | use Illuminate\Database\Eloquent\Builder; | ||
|  | use Illuminate\Database\Eloquent\Model; | ||
|  | 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($enabled = true) | ||
|  |     { | ||
|  |         return $this->setAttrib('read', $enabled); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Mark this notification as sticky or unsticky | ||
|  |      * | ||
|  |      * @var bool $enabled | ||
|  |      * @return bool | ||
|  |      */ | ||
|  |     public function markSticky($enabled = true) | ||
|  |     { | ||
|  |         return $this->setAttrib('sticky', $enabled); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @param $name | ||
|  |      * @param $enabled | ||
|  |      * @return bool | ||
|  |      */ | ||
|  |     private function setAttrib($name, $enabled) | ||
|  |     { | ||
|  |         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 $query | ||
|  |      * @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 $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 $query | ||
|  |      * @param User $user | ||
|  |      * @return mixed | ||
|  |      */ | ||
|  |     public function scopeIsArchived(Builder $query, User $user) | ||
|  |     { | ||
|  |         return $query->leftJoin('notifications_attribs', 'notifications.notifications_id', '=', 'notifications_attribs.notifications_id') | ||
|  |             ->source() | ||
|  |             ->where('notifications_attribs.user_id', $user->user_id) | ||
|  |             ->where(['key' => 'read', 'value' => 1]) | ||
|  |             ->limit(); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @param Builder $query | ||
|  |      * @return $this | ||
|  |      */ | ||
|  |     public function scopeLimit(Builder $query) | ||
|  |     { | ||
|  |         return $query->select('notifications.*', 'key', 'users.username'); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @param Builder $query | ||
|  |      * @return Builder|static | ||
|  |      */ | ||
|  |     public function scopeSource(Builder $query) | ||
|  |     { | ||
|  |         return $query->leftJoin('users', 'notifications.source', '=', 'users.user_id'); | ||
|  |     } | ||
|  | 
 | ||
|  |     // ---- Define Relationships ----
 | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @return \Illuminate\Database\Eloquent\Relations\HasMany | ||
|  |      */ | ||
|  |     public function attribs() | ||
|  |     { | ||
|  |         return $this->hasMany('App\Models\NotificationAttrib', 'notifications_id', 'notifications_id'); | ||
|  |     } | ||
|  | } |