clrghouz/app/Http/Controllers/DomainController.php

126 lines
2.9 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Gate;
use App\Http\Requests\DomainRequest;
use App\Models\{Address,Domain,Zone};
class DomainController extends Controller
{
/**
* Daily stats as shown on the about page
*
* @param Domain $o
* @return Collection
*/
public function api_daily_stats(Request $request): Collection
{
$o = Domain::where('name',$request->name)->firstOrFail();
return $o->echoarea_total_daily()
->sortBy('date')
->groupBy('date')
->transform(function($item,$key) { return [
'x'=>\Carbon\Carbon::createFromFormat('Y-m-d',$key)->timestamp,
'y'=>$item->sum('count')]; } )
->values();
}
/**
* Add or edit a domain
*/
public function add_edit(DomainRequest $request,Domain $o)
{
if ($request->post()) {
foreach (['name','dnsdomain','active','public','homepage','notes','flatten'] as $key)
$o->{$key} = $request->post($key);
$o->save();
return redirect()->to('domain');
}
return view('domain.addedit')
->with('o',$o);
}
/**
* Get all the hosts for a zone of a particular region (or not)
*
* @param Zone $o
* @param int $region
* @return Collection
*/
public function api_hosts(Zone $o,int $region): Collection
{
$oo = Address::where('role',Address::NODE_NC)
->where('zone_id',$o->id)
->when($region,function($query,$region) { return $query->where('region_id',$region); })
->when((! $region),function($query) use ($region) { return $query->where('region_id',0); })
->where('point_id',0)
->FTNorder()
->with(['system'])
->get();
return $oo->map(function($item) {
return ['id'=>$item->host_id,'value'=>sprintf('%s %s',$item->ftn_3d,$item->system->name)];
});
}
/**
* Find all the hubs for a host
*
* @param Zone $o
* @param int $host
* @return Collection
*/
public function api_hubs(Zone $o,int $host): Collection
{
$oo = Address::where('role',Address::NODE_HC)
->where('zone_id',$o->id)
->when($host,function($query,$host) { return $query->where('host_id',$host)->where('node_id','<>',0); })
->with(['system'])
->get();
return $oo->map(function($item) {
return ['id'=>$item->id,'value'=>sprintf('%s %s',$item->ftn_3d,$item->system->name)];
});
}
/**
* Get all the regions for a zone
*
* @param Zone $o
* @return Collection
*/
public function api_regions(Zone $o): Collection
{
$oo = Address::where('role',Address::NODE_RC)
->where('zone_id',$o->id)
->where('node_id',0)
->where('point_id',0)
->orderBy('region_id')
->active()
->with(['system'])
->get();
return $oo->map(function($item) {
return ['id'=>$item->region_id,'value'=>sprintf('%s %s',$item->ftn_3d,$item->system->location)];
});
}
public function view(Domain $o)
{
if (! $o->public && ! Gate::check('admin',$o))
abort(404);
$o->load(['zones.system','zones.domain']);
return view('domain.view')
->with('o',$o);
}
}