ctrlpanel/themes/default/views/admin/overview/index.blade.php
2024-05-07 04:58:15 +03:00

416 lines
24 KiB
PHP

@extends('layouts.main')
@section('content')
<!-- CONTENT HEADER -->
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1>{{__('Admin Overview')}}</h1>
</div>
<div class="col-sm-6">
<ol class="breadcrumb float-sm-right">
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
<li class="breadcrumb-item"><a class="text-muted"
href="{{route('admin.overview.index')}}">{{__('Admin Overview')}}</a></li>
</ol>
</div>
</div>
</div>
@if(Storage::get('latestVersion') && config("app.version") < Storage::get('latestVersion'))
<div class="alert alert-danger" role="alert">
<b><i class="fas fa-shield-alt"></i> {{__("Version Outdated:")}}</b></br>
{{__("You are running on")}} v{{config("app.version")}}-{{config("BRANCHNAME")}}.
{{__("The latest Version is")}} v{{Storage::get('latestVersion')}}</br>
<a href="https://ctrlpanel.gg/docs/Installation/updating">{{__("Consider updating now")}}</a>
</div>
@endif
</section>
<!-- END CONTENT HEADER -->
<!-- MAIN CONTENT -->
<section class="content">
<div class="container-fluid">
<div class="row mb-3">
<div class="col-md-3">
<a href="https://discord.gg/4Y6HjD2uyU" class="btn btn-dark btn-block px-3"><i
class="fab fa-discord mr-2"></i> {{__('Support server')}}</a>
</div>
<div class="col-md-3">
<a href="https://ctrlpanel.gg/docs/intro" class="btn btn-dark btn-block px-3"><i
class="fas fa-link mr-2"></i> {{__('Documentation')}}</a>
</div>
<div class="col-md-3">
<a href="https://github.com/CtrlPanel-gg/panel" class="btn btn-dark btn-block px-3"><i
class="fab fa-github mr-2"></i> {{__('Github')}}</a>
</div>
<div class="col-md-3">
<a href="https://ctrlpanel.gg/docs/Contributing/donating" class="btn btn-dark btn-block px-3"><i
class="fas fa-money-bill mr-2"></i> {{__('Support CtrlPanel')}}</a>
</div>
</div>
<div class="row">
<div class="col-12 col-sm-6 col-md-3">
<div class="info-box">
<span class="info-box-icon bg-info elevation-1"><i class="fas fa-server"></i></span>
<div class="info-box-content">
<span class="info-box-text">{{__('Servers')}}</span>
<span class="info-box-number">{{$counters['servers']->active}}/{{$counters['servers']->total}}</span>
</div>
<!-- /.info-box-content -->
</div>
<!-- /.info-box -->
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="info-box">
<span class="info-box-icon bg-primary elevation-1"><i class="fas fa-users"></i></span>
<div class="info-box-content">
<span class="info-box-text">{{__('Users')}}</span>
<span class="info-box-number">{{$counters['users']}}</span>
</div>
<!-- /.info-box-content -->
</div>
<!-- /.info-box -->
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="info-box">
<span class="info-box-icon bg-warning elevation-1"><i
class="fas fa-coins text-white"></i></span>
<div class="info-box-content">
<span class="info-box-text">{{__('Total')}} {{CREDITS_DISPLAY_NAME}}</span>
<span class="info-box-number">{{$counters['credits']}}</span>
</div>
<!-- /.info-box-content -->
</div>
<!-- /.info-box -->
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="info-box">
<span class="info-box-icon bg-success elevation-1"><i class="fas fa-money-bill"></i></span>
<div class="info-box-content">
<span class="info-box-text">{{__('Payments')}}</span>
<span class="info-box-number">{{$counters['payments']->total}}</span>
</div>
<!-- /.info-box-content -->
</div>
<!-- /.info-box -->
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="card">
<div class="card-header">
<div class="d-flex justify-content-between">
<div class="card-title ">
<span><i class="fas fa-kiwi-bird mr-2"></i>{{__('Pterodactyl')}}</span>
</div>
<a href="{{route('admin.overview.sync')}}" class="btn btn-primary btn-sm"><i
class="fas fa-sync mr-2"></i>{{__('Sync')}}</a>
</div>
</div>
<div class="card-body py-1">
@if ($deletedNodesPresent)
<div class="alert alert-danger m-2">
<h5><i class="icon fas fa-exclamation-circle"></i>{{ __('Warning!') }}</h5>
<p class="mb-2">
{{ __('Some nodes got deleted on pterodactyl only. Please click the sync button above.') }}
</p>
</div>
@endif
<table class="table">
<thead>
<tr>
<th>{{__('Resources')}}</th>
<th>{{__('Count')}}</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{__('Locations')}}</td>
<td>{{$counters['locations']}}</td>
</tr>
<tr>
<td>{{__('Nodes')}}</td>
<td>{{$nodes->count()}}</td>
</tr>
<tr>
<td>{{__('Nests')}}</td>
<td>{{$counters['nests']}}</td>
</tr>
<tr>
<td>{{__('Eggs')}}</td>
<td>{{$counters['eggs']}}</td>
</tr>
</tbody>
</table>
</div>
<div class="card-footer">
<span><i class="fas fa-sync mr-2"></i>{{__('Last updated :date', ['date' => $syncLastUpdate])}}</span>
</div>
</div>
<div class="card">
<div class="card-header">
<div class="d-flex justify-content-between">
<div class="card-title ">
<span><i class="fas fa-ticket-alt mr-2"></i>{{__('Latest tickets')}}</span>
</div>
</div>
</div>
<div class="card-body py-1">
@if(!$tickets->count())<span style="font-size: 16px; font-weight:700">{{__('There are no tickets')}}.</span>
@else
<table class="table">
<thead>
<tr>
<th>{{__('Title')}}</th>
<th>{{__('User')}}</th>
<th>{{__('Status')}}</th>
<th>{{__('Last updated')}}</th>
</tr>
</thead>
<tbody>
@foreach($tickets as $ticket_id => $ticket)
<tr>
<td><a class="text-info" href="{{route('moderator.ticket.show', ['ticket_id' => $ticket_id])}}">#{{$ticket_id}} - {{$ticket->title}}</td>
<td><a href="{{route('admin.users.show', $ticket->user_id)}}">{{$ticket->user}}</a></td>
<td><span class="badge {{$ticket->statusBadgeColor}}">{{$ticket->status}}</span></td>
<td>{{$ticket->last_updated}}</td>
</tr>
@endforeach
</tbody>
</table>
@endif
</div>
</div>
<div class="card">
<div class="card-header">
<div class="d-flex justify-content-between">
<div class="card-title ">
<span><i class="fas fa-server mr-2"></i>{{__('Ctrlpanel.gg')}}</span>
</div>
</div>
<div class="card-body py-1">
</div>
<div class="card-footer">
<span><i class="fas fa-info mr-2"></i>{{__("Version")}} {{config("app.version")}} - {{config("BRANCHNAME")}}</span>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<div class="card-header">
<div class="d-flex justify-content-between">
<div class="card-title ">
<span><i class="fas fa-server mr-2"></i>{{__('Individual nodes')}}</span>
</div>
</div>
</div>
<div class="card-body py-1">
@if ($perPageLimit)
<div class="alert alert-danger m-2">
<h5><i class="icon fas fa-exclamation-circle"></i>{{ __('Error!') }}</h5>
<p class="mb-2">
{{ __('You reached the Pterodactyl perPage limit. Please make sure to set it higher than your server count.') }}<br>
{{ __('You can do that in settings.') }}<br><br>
{{ __('Note') }}: {{ __('If this error persists even after changing the limit, it might mean a server was deleted on Pterodactyl, but not on CtrlPanel. Try clicking the button below.') }}
</p>
<a href="{{route('admin.servers.sync')}}" class="btn btn-primary btn-md"><i
class="fas fa-sync mr-2"></i>{{__('Sync servers')}}</a>
</div>
@endif
<table class="table">
<thead>
<tr>
<th>{{__('ID')}}</th>
<th>{{__('Node')}}</th>
<th>{{__('Server count')}}</th>
<th>{{__('Resource usage')}}</th>
<th>{{CREDITS_DISPLAY_NAME . ' ' . __('Usage')}}</th>
</tr>
</thead>
<tbody>
@foreach($nodes as $nodeID => $node)
<tr>
<td>{{$nodeID}}</td>
<td>{{$node->name}}</td>
<td>{{$node->activeServers}}/{{$node->totalServers}}</td>
<td>{{$node->usagePercent}}%</td>
<td>{{$node->activeEarnings}}/{{$node->totalEarnings}}</td>
</tr>
@endforeach
</tbody>
<tfoot>
<tr>
<td colspan="2"><span style="float: right; font-weight: 700">{{__('Total')}} ({{__('active')}}/{{__('total')}}):</span></td>
<td>{{$counters['servers']->active}}/{{$counters['servers']->total}}</td>
<td>{{$counters['totalUsagePercent']}}%</td>
<td>{{$counters['earnings']->active}}/{{$counters['earnings']->total}}</td>
</tr>
</tfoot>
</table>
<hr style="width: 100%; height:2px; border-width:0; background-color:#6c757d; margin-top: 0px;">
</div>
</div>
<div class="card">
<div class="card-header">
<div class="d-flex justify-content-between">
<div class="card-title ">
<span><i class="fas fa-file-invoice-dollar mr-2"></i>{{__('Latest payments')}}</span>
</div>
</div>
</div>
<div class="card-body py-1">
<div class="row">
@if($counters['payments']['lastMonth']->count())
<div class="col-md-6" style="border-right:1px solid #6c757d">
<span style="margin:auto; display:table; font-size: 18px; font-weight:700">{{__('Last month')}}:
<i data-toggle="popover" data-trigger="hover" data-html="true"
data-content="{{ __('Payments in this time window') }}:<br>{{$counters['payments']['lastMonth']->timeStart}} - {{$counters['payments']['lastMonth']->timeEnd}}"
class="fas fa-info-circle"></i>
</span>
<table class="table">
<thead>
<tr>
<th><b>{{__('Currency')}}</b></th>
<th>{{__('Number of payments')}}</th>
<th>{{__('Total amount')}}</th>
</tr>
</thead>
<tbody>
@foreach($counters['payments']['lastMonth'] as $currency => $income)
<tr>
<td>{{$currency}}</td>
<td>{{$income->count}}</td>
<td>{{$income->total}}</td>
</tr>
@endforeach
</tbody>
</table>
<hr style="width: 100%; height:1px; border-width:0; background-color:#6c757d; margin-top: -16px">
</div>
@endif
@if($counters['payments']['lastMonth']->count()) <div class="col-md-6">
@else <div class="col-md-12"> @endif
<span style="margin:auto; display:table; font-size: 18px; font-weight:700">{{__('This month')}}:
<i data-toggle="popover" data-trigger="hover" data-html="true"
data-content="{{ __('Payments in this time window') }}:<br>{{$counters['payments']['thisMonth']->timeStart}} - {{$counters['payments']['thisMonth']->timeEnd}}"
class="fas fa-info-circle"></i>
</span>
<table class="table">
<thead>
<tr>
<th><b>{{__('Currency')}}</b></th>
<th>{{__('Number of payments')}}</th>
<th>{{__('Total amount')}}</th>
</tr>
</thead>
<tbody>
@foreach($counters['payments']['thisMonth'] as $currency => $income)
<tr>
<td>{{$currency}}</td>
<td>{{$income->count}}</td>
<td>{{$income->total}}</td>
</tr>
@endforeach
</tbody>
</table>
<hr style="width: 100%; height:1px; border-width:0; background-color:#6c757d; margin-top: -16px">
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<div class="d-flex justify-content-between">
<div class="card-title ">
<span><i class="fas fa-hand-holding-usd mr-2"></i>{{__('Tax overview')}}</span>
</div>
</div>
</div>
<div class="card-body py-1">
@if($counters['taxPayments']['lastYear']->count())
<span style="margin:auto; display:table; font-size: 18px; font-weight:700">{{__('Last year')}}:
<i data-toggle="popover" data-trigger="hover" data-html="true"
data-content="{{ __('Payments in this time window') }}:<br>{{$counters['taxPayments']['lastYear']->timeStart}} - {{$counters['taxPayments']['lastYear']->timeEnd}}"
class="fas fa-info-circle"></i>
</span>
<table class="table">
<thead>
<tr>
<th><b>{{__('Currency')}}</b></th>
<th>{{__('Number of payments')}}</th>
<th><b>{{__('Base amount')}}</b></th>
<th><b>{{__('Total taxes')}}</b></th>
<th>{{__('Total amount')}}</th>
</tr>
</thead>
<tbody>
@foreach($counters['taxPayments']['lastYear'] as $currency => $income)
<tr>
<td>{{$currency}}</td>
<td>{{$income->count}}</td>
<td>{{$income->price}}</td>
<td>{{$income->taxes}}</td>
<td>{{$income->total}}</td>
</tr>
@endforeach
</tbody>
</table>
<hr style="width: 100%; height:2px; border-width:0; background-color:#6c757d; margin-top: 0px; margin-bottom: 8px">
@endif
<span style="margin:auto; display:table; font-size: 18px; font-weight:700">{{__('This year')}}:
<i data-toggle="popover" data-trigger="hover" data-html="true"
data-content="{{ __('Payments in this time window') }}:<br>{{$counters['taxPayments']['thisYear']->timeStart}} - {{$counters['taxPayments']['thisYear']->timeEnd}}"
class="fas fa-info-circle"></i>
</span>
<table class="table">
<thead>
<tr>
<th><b>{{__('Currency')}}</b></th>
<th>{{__('Number of payments')}}</th>
<th><b>{{__('Base amount')}}</b></th>
<th><b>{{__('Total taxes')}}</b></th>
<th>{{__('Total amount')}}</th>
</tr>
</thead>
<tbody>
@foreach($counters['taxPayments']['thisYear'] as $currency => $income)
<tr>
<td>{{$currency}}</td>
<td>{{$income->count}}</td>
<td>{{$income->price}}</td>
<td>{{$income->taxes}}</td>
<td>{{$income->total}}</td>
</tr>
@endforeach
</tbody>
</table>
<hr style="width: 100%; height:2px; border-width:0; background-color:#6c757d; margin-top: 0px;">
</div>
</div>
</div>
</div>
</div>
<!-- END CUSTOM CONTENT -->
</section>
<!-- END CONTENT -->
@endsection