<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use App\Http\Controllers\DomainController; use App\Traits\ScopeActive; class System extends Model { use HasFactory,ScopeActive; protected $dates = ['last_session']; /* RELATIONS */ public function addresses() { return $this->hasMany(Address::class) ->orderBy('region_id') ->orderBy('host_id') ->orderBy('node_id') ->orderBy('point_id'); } /** * Session Passwords for system * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ public function sessions() { return $this->belongsToMany(Zone::class) ->withPivot(['sespass','pktpass','ticpass','fixpass','zt_ipv4','zt_ipv6']); } /** * If this system is configured as this host * * @return \Illuminate\Database\Eloquent\Relations\HasOne */ public function setup() { return $this->hasOne(Setup::class); } /** * Zones a system has addresses for * * @return \Illuminate\Database\Eloquent\Relations\HasManyThrough */ public function zones() { return $this->hasManyThrough(Zone::class,Address::class,'system_id','id','id','zone_id'); } /* GENERAL METHODS */ /** * Return the system name, or role name for the zone * * @param Address $o * @return string */ public function full_name(Address $o): string { switch ($o->attributes['role']) { case DomainController::NODE_ZC; return sprintf('ZC-%s-%05d',$o->zone->domain->name,$o->zone->zone_id); case DomainController::NODE_RC; return sprintf('RC-%s-%05d',$o->zone->domain->name,$o->region_id); case DomainController::NODE_NC; case DomainController::NODE_HC; case NULL: default: return $this->name; } } }