@extends('layouts.app') @section('htmlheader_title') Dashboard @endsection @php use App\Classes\Protocol\Binkp; $user->load(['systems.akas.zone.domain.echoareas','systems.akas.echoareas']); @endphp @section('content') <h1>{{ $user->name }}</h1> @if($user->systems->count()) <div class="row"> <div class="col-7"> <div class="row"> <div class="col-12"> <div id="network_messages"></div> </div> </div> <div class="row pt-2"> <div class="col-12"> <h2>Hub Details for your nets</h2> <div class="accordion" id="accordion_details"> @foreach($user ->addresses() ->diff(our_address()) ->filter(fn($item)=>($item->point_id === 0)) ->filter(function($item) { return $item->zone->domain->active && $item->zone->domain->public && $item->zone->domain->isManaged(); }) ->sortBy('zone.domain.name') ->groupBy('zone.domain.name') as $list) <!-- {{ $x=$list->first()->domain->name }} --> <div class="accordion-item"> <h3 class="accordion-header"> <span class="accordion-button" id="hd_{{ $x }}" data-bs-toggle="collapse" data-bs-target="#collapse_{{ $x }}" aria-expanded="true" aria-controls="collapse_{{ $x }}">{{ $x }}</span> </h3> <div id="collapse_{{ $x }}" class="accordion-collapse {{ ($loop->index) ? 'collapse' : 'show' }}" aria-labelledby="{{ $x }}" data-bs-parent="#accordion_details"> <div class="accordion-body"> <p>For your addresses in this domain: <strong class="highlight">{!! $list->pluck('ftn')->join('</strong>, <strong class="highlight">') !!}</strong>, you'll need to use the following details:</p> <br> <table class="table monotable"> <tbody> <tr> <td> Hub FTN Address </td> <th> <span style="color: cyan;">{{ our_address($list->first())->ftn4d }}</span> </th> </tr> <tr> <td> Hub FTN Domain </td> <th> <span style="color: cyan;">{{ $x }}</span> </th> </tr> <tr> <td> Hub Internet Address </td> <th> <span style="color: cyan;">{{ our_hostname($list->first()) }}</span> </th> </tr> <tr> <td> Hub Internet Ports </td> <td> BINKP: <span style="color: cyan;">{{ $setup->binkp_port }}</span> MD5 Mode: <span style="color: cyan;">{{$setup->optionGet(Binkp::F_MD,'binkp_options') ? 'YES' : 'NO' }}</span><br> EMSI: <span style="color: cyan;">{{ $setup->emsi_port }}</span> Protocol: <span style="color: cyan;">Zmodem</span><br> </td> </tr> </tbody> </table> </div> </div> </div> @endforeach </div> </div> </div> </div> <!-- System Addresses --> <div class="col-5"> <table class="table monotable"> <thead> <tr><th colspan="2">System Addresses</th></tr> </thead> <tbody> @foreach ($user->systems->sortBy('name') as $o) <tr> <th><a href="{{ url('system/addedit',[$o->id]) }}">{{ $o->name }}</a></th> <th class="text-end"> <small><small><strong>{{ $o->akas->count() }}</strong> AKAs configured</small></small><br><br> @if ($o->akas->count()) @foreach ($o->akas as $ao) {{ $ao->ftn }} <small>({{ $ao->security ?: '-' }})</small><br> @endforeach @else - @endif </th> </tr> @endforeach </tbody> </table> </div> </div> <div class="row"> <div class="col-12"> <h3>Active and Available Echos</h3> <table class="table monotable"> <tbody> @foreach (($dl=$user ->systems ->pluck('akas')->flatten() ->pluck('zone.domain') ->unique() ->filter(function($item) { return $item->active && $item->public && $item->isManaged(); }) ->sortBy('name')) as $o) <tr> <th class="nowrap"> <a href="{{ url('domain/view',[$o->id]) }}">{{ $o->name }}</a> <small>({{ ($sec=$user->systems->pluck('akas')->flatten()->filter(function($item) use ($o) { return $item->zone->domain_id === $o->id; })->max('security') ?: 0) ?? '-' }})</small><br><br> {{ ($sub=$user->systems->pluck('akas')->flatten()->pluck('echoareas')->flatten()->filter(function($item) use ($o) { return $item->domain_id === $o->id; }))->count() }} <small>Subscribed</small> </th> <td> @foreach ($o->echoareas->sortBy('name') as $eo) <span style="@if(! $eo->active) color: gray; @elseif(! $eo->can_access($sec)) color: red; @elseif($sub->where('name',$eo->name)->count()) color: green; @endif">{{ $eo->name }}</span> @endforeach </td> </tr> @endforeach </tbody> </table> </div> </div> @else <p>You are not linked to any BBS systems. Start <a href="{{ url('user/system/register') }}">here</a> to link to your first.</p> @endif @endsection @section('page-css') <style> .highcharts-data-table table { min-width: 310px; max-width: 800px; margin: 1em auto; } .highcharts-data-table table { border-collapse: collapse; border: 1px solid #EBEBEB; margin: 10px auto; text-align: center; width: 100%; max-width: 500px; } .highcharts-data-table caption { padding: 1em 0; font-size: 1.2em; color: #555; } .highcharts-data-table th { font-weight: 600; padding: 0.5em; } .highcharts-data-table td, .highcharts-data-table th, .highcharts-data-table caption { padding: 0.5em; } {{-- .highcharts-data-table thead tr, .highcharts-data-table tr:nth-child(even) { background: #f8f8f8; } .highcharts-data-table tr:hover { background: #f1f7ff; } --}} </style> @append @section('page-scripts') @js('highcharts') <script> @if($user->systems->count()) // Create the chart Highcharts.chart('network_messages',{ chart: { type: 'column', backgroundColor: '#000000', }, credits: { enabled: false }, exporting: { buttons: false }, title: { text: 'Echomail Statistics' }, subtitle: { text: '{{ sprintf('%s - %s',\Carbon\Carbon::now()->subMonths(6)->startOfMonth()->format('Y-m-d'),\Carbon\Carbon::now()->format('Y-m-d')) }}' }, xAxis: { type: 'category' }, yAxis: { title: { text: '# Msgs' }, stackLabels: { enabled: true, style: { fontWeight: 'bold', color: (Highcharts.defaultOptions.title.style && Highcharts.defaultOptions.title.style.color) || 'gray' } } }, legend: { align: 'right', //x: -30, verticalAlign: 'top', y: 40, floating: true, backgroundColor: Highcharts.defaultOptions.legend.backgroundColor || 'white', borderColor: '#e0e0e0', borderWidth: 1, shadow: false }, plotOptions: { column: { dataLabels: { enabled: true } }, series: { borderWidth: 0, grouping: false, } }, tooltip: { headerFormat: '<span style="font-size:11px">{series.name}</span><br>', pointFormat: '<span style="color:{point.color}">{point.name}</span>: <b>{point.y:.0f}</b>' }, series: [ { name: 'Networks', colorByPoint: true, data: [ @foreach($dl as $do) { name: '{{ $do->name }}', y: {{ $do->echoarea_total_daily()->sum('count') }}, drilldown: 'n-{{ $do->name }}', }, @endforeach ] }, { name: 'Yours', colorByPoint: true, pointPlacement: 0.1, data: [ @foreach($dl as $do) { name: '{{ $do->name }}', y: {{ $do->echoarea_total_daily($user->systems)->sum('count') }}, drilldown: 'ny-{{ $do->name }}', color: Highcharts.color(Highcharts.getOptions().colors[{{$loop->index}}]).brighten(-0.2).get() }, @endforeach ] }, ], drilldown: { drillUpButton: { position: { x: 0, y: -50, } }, series: [ @foreach($dl as $do) { name: '{{ $do->name }}', id: 'n-{{ $do->name }}', data: {!! $do->echoarea_total_daily() ->groupBy('name') ->map(function($item,$key) { return ['name'=>$key,'y'=>$item->sum('count'),'drilldown'=>'e-'.$key]; }) ->values() !!} }, @endforeach @foreach($dl as $do) { name: '{{ $do->name }}', id: 'ny-{{ $do->name }}', data: {!! $do->echoarea_total_daily($user->systems) ->groupBy('name') ->map(function($item,$key) { return ['name'=>$key,'y'=>$item->sum('count'),'drilldown'=>'e-'.$key]; }) ->values() !!} }, @endforeach ] }, }); @endif </script> @append