123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 |
- @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>{{ __('Servers') }}</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('servers.index') }}">{{ __('Servers') }}</a>
- </li>
- </ol>
- </div>
- </div>
- </div>
- </section>
- <!-- END CONTENT HEADER -->
- <!-- MAIN CONTENT -->
- <section class="content">
- <div class="container-fluid">
- <!-- CUSTOM CONTENT -->
- <div class="d-flex justify-content-md-start justify-content-center mb-3 ">
- <a @if (Auth::user()->Servers->count() >= Auth::user()->server_limit) disabled="disabled" title="Server limit reached!" @endif
- @cannot("user.server.create") disabled="disabled" title="No Permission!" @endcannot
- href="{{ route('servers.create') }}" class="btn
- @if (Auth::user()->Servers->count() >= Auth::user()->server_limit) disabled @endif
- @cannot("user.server.create") disabled @endcannot
- btn-primary">
- <i class="fa fa-plus mr-2"></i>
- {{ __('Create Server') }}
- </a>
- @if (Auth::user()->Servers->count() > 0 && !empty($phpmyadmin_url))
- <a
- href="{{ $phpmyadmin_url }}" target="_blank"
- class="btn btn-secondary ml-2"><i title="manage"
- class="fas fa-database mr-2"></i><span>{{ __('Database') }}</span>
- </a>
- @endif
- </div>
- <div class="row d-flex flex-row justify-content-center justify-content-md-start">
- @foreach ($servers as $server)
- @if($server->location && $server->node && $server->nest && $server->egg)
- <div class="col-xl-3 col-lg-5 col-md-6 col-sm-6 col-xs-12 card pr-0 pl-0 ml-sm-2 mr-sm-3"
- style="max-width: 350px">
- <div class="card-header">
- <div class="d-flex justify-content-between align-items-center">
- <h5 class="card-title mt-1">{{ $server->name }}</h5>
- </div>
- </div>
- <div class="card-body">
- <div class="container mt-1">
- <div class="row mb-3">
- <div class="col my-auto">{{ __('Status') }}:</div>
- <div class="col-7 my-auto">
- @if($server->suspended)
- <span class="badge badge-danger">{{ __('Suspended') }}</span>
- @elseif($server->canceled)
- <span class="badge badge-warning">{{ __('Canceled') }}</span>
- @else
- <span class="badge badge-success">{{ __('Active') }}</span>
- @endif
- </div>
- </div>
- <div class="row mb-2">
- <div class="col-5">
- {{ __('Location') }}:
- </div>
- <div class="col-7 d-flex justify-content-between align-items-center">
- <span class="">{{ $server->location }}</span>
- <i data-toggle="popover" data-trigger="hover"
- data-content="{{ __('Node') }}: {{ $server->node }}"
- class="fas fa-info-circle"></i>
- </div>
- </div>
- <div class="row mb-2">
- <div class="col-5 ">
- {{ __('Software') }}:
- </div>
- <div class="col-7 text-wrap">
- <span>{{ $server->nest }}</span>
- </div>
- </div>
- <div class="row mb-2">
- <div class="col-5 ">
- {{ __('Specification') }}:
- </div>
- <div class="col-7 text-wrap">
- <span>{{ $server->egg }}</span>
- </div>
- </div>
- <div class="row mb-2">
- <div class="col-5 ">
- {{ __('Resource plan') }}:
- </div>
- <div class="col-7 text-wrap d-flex justify-content-between align-items-center">
- <span>{{ $server->product->name }}
- </span>
- <i data-toggle="popover" data-trigger="hover" data-html="true"
- data-content="{{ __('CPU') }}: {{ $server->product->cpu / 100 }} {{ __('vCores') }} <br/>{{ __('RAM') }}: {{ $server->product->memory }} MB <br/>{{ __('Disk') }}: {{ $server->product->disk }} MB <br/>{{ __('Backups') }}: {{ $server->product->backups }} <br/> {{ __('MySQL Databases') }}: {{ $server->product->databases }} <br/> {{ __('Allocations') }}: {{ $server->product->allocations }} <br/>{{ __('OOM Killer') }}: {{ $server->product->oom_killer ? __("enabled") : __("disabled") }} <br/> {{ __('Billing Period') }}: {{$server->product->billing_period}}"
- class="fas fa-info-circle"></i>
- </div>
- </div>
- <div class="row mb-4 ">
- <div class="col-5 word-break" style="hyphens: auto">
- {{ __('Next Billing Cycle') }}:
- </div>
- <div class="col-7 d-flex text-wrap align-items-center">
- <span>
- @if ($server->suspended)
- -
- @else
- @switch($server->product->billing_period)
- @case('monthly')
- {{ \Carbon\Carbon::parse($server->last_billed)->addMonth()->toDayDateTimeString(); }}
- @break
- @case('weekly')
- {{ \Carbon\Carbon::parse($server->last_billed)->addWeek()->toDayDateTimeString(); }}
- @break
- @case('daily')
- {{ \Carbon\Carbon::parse($server->last_billed)->addDay()->toDayDateTimeString(); }}
- @break
- @case('hourly')
- {{ \Carbon\Carbon::parse($server->last_billed)->addHour()->toDayDateTimeString(); }}
- @break
- @case('quarterly')
- {{ \Carbon\Carbon::parse($server->last_billed)->addMonths(3)->toDayDateTimeString(); }}
- @break
- @case('half-annually')
- {{ \Carbon\Carbon::parse($server->last_billed)->addMonths(6)->toDayDateTimeString(); }}
- @break
- @case('annually')
- {{ \Carbon\Carbon::parse($server->last_billed)->addYear()->toDayDateTimeString(); }}
- @break
- @default
- {{ __('Unknown') }}
- @endswitch
- @endif
- </span>
- </div>
- </div>
- <div class="row mb-2">
- <div class="col-4">
- {{ __('Price') }}:
- <span class="text-muted">
- ({{ $credits_display_name }})
- </span>
- </div>
- <div class="col-8 text-center">
- <div class="text-muted">
- @if($server->product->billing_period == 'monthly')
- {{ __('per Month') }}
- @elseif($server->product->billing_period == 'half-annually')
- {{ __('per 6 Months') }}
- @elseif($server->product->billing_period == 'quarterly')
- {{ __('per 3 Months') }}
- @elseif($server->product->billing_period == 'annually')
- {{ __('per Year') }}
- @elseif($server->product->billing_period == 'weekly')
- {{ __('per Week') }}
- @elseif($server->product->billing_period == 'daily')
- {{ __('per Day') }}
- @elseif($server->product->billing_period == 'hourly')
- {{ __('per Hour') }}
- @endif
- <i data-toggle="popover" data-trigger="hover"
- data-content="{{ __('Your') ." " . $credits_display_name . " ". __('are reduced') ." ". $server->product->billing_period . ". " . __("This however calculates to ") . number_format($server->product->getMonthlyPrice(),2,",",".") . " ". $credits_display_name . " ". __('per Month')}}"
- class="fas fa-info-circle"></i>
- </div>
- <span>
- {{ $server->product->price == round($server->product->price) ? round($server->product->price) : $server->product->price }}
- </span>
- </div>
- </div>
- </div>
- </div>
- <div class="card-footer text-center">
- <a href="{{ $pterodactyl_url }}/server/{{ $server->identifier }}"
- target="__blank"
- class="btn btn-info text-center float-left ml-2"
- data-toggle="tooltip" data-placement="bottom" title="{{ __('Manage Server') }}">
- <i class="fas fa-tools mx-2"></i>
- </a>
- <a href="{{ route('servers.show', ['server' => $server->id])}}"
- class="btn btn-info text-center mr-3"
- data-toggle="tooltip" data-placement="bottom" title="{{ __('Server Settings') }}">
- <i class="fas fa-cog mx-2"></i>
- </a>
- <button onclick="handleServerCancel('{{ $server->id }}');" target="__blank"
- class="btn btn-warning text-center"
- {{ $server->suspended || $server->canceled ? "disabled" : "" }}
- data-toggle="tooltip" data-placement="bottom" title="{{ __('Cancel Server') }}">
- <i class="fas fa-ban mx-2"></i>
- </button>
- <button onclick="handleServerDelete('{{ $server->id }}');" target="__blank"
- class="btn btn-danger text-center float-right mr-2"
- data-toggle="tooltip" data-placement="bottom" title="{{ __('Delete Server') }}">
- <i class="fas fa-trash mx-2"></i>
- </button>
- </div>
- </div>
- @endif
- @endforeach
- </div>
- <!-- END CUSTOM CONTENT -->
- </div>
- </section>
- <!-- END CONTENT -->
- <script>
- const handleServerCancel = (serverId) => {
- // Handle server cancel with sweetalert
- Swal.fire({
- title: "{{ __('Cancel Server?') }}",
- text: "{{ __('This will cancel your current server to the next billing period. It will get suspended when the current period runs out.') }}",
- icon: 'warning',
- confirmButtonColor: '#d9534f',
- showCancelButton: true,
- confirmButtonText: "{{ __('Yes, cancel it!') }}",
- cancelButtonText: "{{ __('No, abort!') }}",
- reverseButtons: true
- }).then((result) => {
- if (result.value) {
- // Delete server
- fetch("{{ route('servers.cancel', '') }}" + '/' + serverId, {
- method: 'PATCH',
- headers: {
- 'X-CSRF-TOKEN': '{{ csrf_token() }}'
- }
- }).then(() => {
- window.location.reload();
- }).catch((error) => {
- Swal.fire({
- title: "{{ __('Error') }}",
- text: "{{ __('Something went wrong, please try again later.') }}",
- icon: 'error',
- confirmButtonColor: '#d9534f',
- })
- })
- return
- }
- })
- }
- const handleServerDelete = (serverId) => {
- Swal.fire({
- title: "{{ __('Delete Server?') }}",
- html: "{!! __('This is an irreversible action, all files of this server will be removed. <strong>No funds will get refunded</strong>. We recommend deleting the server when server is suspended.') !!}",
- icon: 'warning',
- confirmButtonColor: '#d9534f',
- showCancelButton: true,
- confirmButtonText: "{{ __('Yes, delete it!') }}",
- cancelButtonText: "{{ __('No, abort!') }}",
- reverseButtons: true
- }).then((result) => {
- if (result.value) {
- // Delete server
- fetch("{{ route('servers.destroy', '') }}" + '/' + serverId, {
- method: 'DELETE',
- headers: {
- 'X-CSRF-TOKEN': '{{ csrf_token() }}'
- }
- }).then(() => {
- window.location.reload();
- }).catch((error) => {
- Swal.fire({
- title: "{{ __('Error') }}",
- text: "{{ __('Something went wrong, please try again later.') }}",
- icon: 'error',
- confirmButtonColor: '#d9534f',
- })
- })
- return
- }
- });
- }
- document.addEventListener('DOMContentLoaded', () => {
- $('[data-toggle="popover"]').popover();
- });
- $(function () {
- $('[data-toggle="tooltip"]').tooltip()
- })
- </script>
- @endsection
|