. * * @package LibreNMS * @link http://librenms.org * @copyright 2016 Neil Lathwood * @author Neil Lathwood */ namespace App\Models; use Illuminate\Database\Eloquent\Builder; class AlertRule extends BaseModel { public $timestamps = false; // ---- Query scopes ---- /** * @param Builder $query * @return Builder */ public function scopeEnabled($query) { return $query->where('disabled', 0); } /** * Scope for only alert rules that are currently in alarm * * @param Builder $query * @return Builder */ public function scopeIsActive($query) { return $query->enabled() ->join('alerts', 'alerts.rule_id', 'alert_rules.id') ->where('alerts.state', 1); } /** * Scope to filter rules for devices permitted to user * (do not use for admin and global read-only users) * * @param $query * @param User $user * @return mixed */ public function scopeHasAccess($query, User $user) { if ($user->hasGlobalRead()) { return $query; } if (!$this->isJoined($query, 'alerts')) { $query->join('alerts', 'alerts.rule_id', 'alert_rules.id'); } return $this->hasDeviceAccess($query, $user, 'alerts'); } // ---- Define Relationships ---- public function alerts() { return $this->hasMany('App\Models\Alert', 'rule_id'); } public function devices() { return $this->belongsToMany('App\Models\Device', 'alert_device_map', 'device_id', 'device_id', 'devices'); } }