2022-06-18 21:41:40 +00:00
@ 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 href = " { { route('servers.create') }} "
class = " btn
@ if ( Auth :: user () -> Servers -> count () >= Auth :: user () -> server_limit ) disabled
@ endif btn - primary " ><i
class = " fa fa-plus mr-2 " ></ i >
{{ __ ( 'Create Server' ) }}
</ a >
</ div >
< div class = " row d-flex flex-row justify-content-center justify-content-md-start " >
@ foreach ( $servers as $server )
< 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 class = " card-tools mt-1 " >
< div class = " dropdown no-arrow " >
< a href = " # " role = " button " id = " dropdownMenuLink " data - toggle = " dropdown "
aria - haspopup = " true " aria - expanded = " false " >
< i class = " fas fa-ellipsis-v fa-sm fa-fw text-white-50 " ></ i >
</ a >
< div class = " dropdown-menu dropdown-menu-right shadow animated--fade-in "
aria - labelledby = " dropdownMenuLink " >
@ if ( ! empty ( config ( 'SETTINGS::MISC:PHPMYADMIN:URL' )))
< a href = " { { config('SETTINGS::MISC:PHPMYADMIN:URL') }} "
class = " dropdown-item text-info " target = " __blank " >< i title = " manage "
class = " fas fa-database mr-2 " ></ i >< span > {{ __ ( 'Database' ) }} </ span ></ a >
@ endif
< div class = " dropdown-divider " ></ div >
< span class = " dropdown-item " >< i title = " Created at "
class = " fas fa-sync-alt mr-2 " ></ i >< span > {{ $server -> created_at -> isoFormat ( 'LL' ) }} </ span ></ span >
</ div >
</ div >
</ div >
</ 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 " >
2022-07-22 02:40:03 +00:00
@ if ( $server -> suspended )
2022-07-22 02:09:34 +00:00
< span class = " badge badge-danger " > {{ __ ( 'Suspended' ) }} </ span >
@ elseif ( $server -> cancelled )
< span class = " badge badge-warning " > {{ __ ( 'Cancelled' ) }} </ span >
@ else
< span class = " badge badge-success " > {{ __ ( 'Active' ) }} </ span >
@ endif
2022-06-18 21:41:40 +00:00
</ 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 >
2022-07-22 00:58:08 +00:00
< div class = " row mb-2 " >
2022-06-18 21:41:40 +00:00
< 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 "
2022-07-22 00:58:08 +00:00
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/> { { __('Billing Period') }}: { { $server -> product -> billing_period } } "
2022-06-18 21:41:40 +00:00
class = " fas fa-info-circle " ></ i >
</ div >
2022-07-22 00:58:08 +00:00
</ div >
2022-06-18 21:41:40 +00:00
2022-07-22 00:58:08 +00:00
< div class = " row mb-4 " >
2022-07-22 02:31:00 +00:00
< div class = " col-5 word-break " style = " hyphens: auto " >
2022-07-22 00:58:08 +00:00
{{ __ ( 'Next Billing Cycle' ) }} :
</ div >
< div class = " col-7 d-flex text-wrap align-items-center " >
< span >
2022-07-22 02:33:54 +00:00
@ if ( $server -> suspended )
2022-07-22 02:09:34 +00:00
-
@ 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 ( '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
2022-07-22 00:58:08 +00:00
</ span >
</ div >
2022-06-18 21:41:40 +00:00
</ div >
2022-07-22 00:58:08 +00:00
2022-06-18 21:41:40 +00:00
< 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' ) }}
2022-07-22 02:09:34 +00:00
@ elseif ( $server -> product -> billing_period == 'half-annually' )
2022-07-22 02:00:23 +00:00
{{ __ ( 'per 6 Months' ) }}
2022-07-22 02:09:34 +00:00
@ elseif ( $server -> product -> billing_period == 'annually' )
2022-07-22 02:00:23 +00:00
{{ __ ( 'per Year' ) }}
2022-06-18 21:41:40 +00:00
@ 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
</ div >
< span >
{{ $server -> product -> price }}
</ span >
</ div >
</ div >
</ div >
</ div >
2022-07-22 00:58:08 +00:00
< div class = " card-footer text-center " >
2022-06-18 21:41:40 +00:00
< a href = " { { config('SETTINGS::SYSTEM:PTERODACTYL:URL') }}/server/ { { $server->identifier }} "
target = " __blank "
2022-07-22 00:58:08 +00:00
class = " btn btn-info text-center float-left ml-2 "
2022-07-22 02:25:23 +00:00
data - toggle = " tooltip " data - placement = " bottom " title = " { { __('Manage Server') }} " >
2022-07-22 00:58:08 +00:00
< i class = " fas fa-tools mx-4 " ></ i >
2022-06-18 21:41:40 +00:00
</ a >
2022-07-22 00:58:08 +00:00
< button onclick = " handleServerCancel(' { { $server->id }}'); " target = " __blank "
class = " btn btn-warning text-center "
2022-07-22 03:12:06 +00:00
{{ $server -> suspended || $server -> cancelled ? " disabled " : " " }}
2022-07-22 02:25:23 +00:00
data - toggle = " tooltip " data - placement = " bottom " title = " { { __('Cancel Server') }} " >
2022-07-22 00:58:08 +00:00
< i class = " fas fa-ban mx-4 " ></ i >
</ button >
< button onclick = " handleServerDelete(' { { $server->id }}'); " target = " __blank "
class = " btn btn-danger text-center float-right mr-2 "
2022-07-22 02:25:23 +00:00
data - toggle = " tooltip " data - placement = " bottom " title = " { { __('Delete Server') }} " >
2022-07-22 00:58:08 +00:00
< i class = " fas fa-trash mx-4 " ></ i >
2022-06-18 21:41:40 +00:00
</ button >
</ div >
</ div >
@ endforeach
</ div >
<!-- END CUSTOM CONTENT -->
</ div >
</ section >
<!-- END CONTENT -->
< script >
2022-07-22 00:58:08 +00:00
const handleServerCancel = ( serverId ) => {
// Handle server cancel with sweetalert
2022-06-18 21:41:40 +00:00
Swal . fire ({
2022-07-22 00:58:08 +00:00
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.') }} " ,
2022-06-18 21:41:40 +00:00
icon : 'warning' ,
confirmButtonColor : '#d9534f' ,
showCancelButton : true ,
2022-07-22 00:58:08 +00:00
confirmButtonText : " { { __('Yes, cancel it!') }} " ,
cancelButtonText : " { { __('No, abort!') }} " ,
2022-06-18 21:41:40 +00:00
reverseButtons : true
}) . then (( result ) => {
if ( result . value ) {
2022-07-22 00:58:08 +00:00
// Delete server
2022-07-22 01:52:49 +00:00
fetch ( " { { route('servers.cancel', '') }} " + '/' + serverId , {
method : 'PATCH' ,
2022-07-22 00:58:08 +00:00
headers : {
'X-CSRF-TOKEN' : '{{ csrf_token() }}'
}
}) . then (() => {
window . location . reload ();
});
2022-06-18 21:41:40 +00:00
return
}
2022-07-22 00:58:08 +00:00
})
2022-06-18 21:41:40 +00:00
}
const handleServerDelete = ( serverId ) => {
2022-07-22 00:58:08 +00:00
Swal . fire ({
title : " { { __('Delete Server?') }} " ,
text : " { { __('This is an irreversible action, all files of this server will be removed. No funds will get refunded. 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 ();
});
return
2022-06-18 21:41:40 +00:00
}
});
2022-07-22 00:58:08 +00:00
2022-06-18 21:41:40 +00:00
}
document . addEventListener ( 'DOMContentLoaded' , () => {
$ ( '[data-toggle="popover"]' ) . popover ();
});
2022-07-22 00:58:08 +00:00
$ ( function () {
$ ( '[data-toggle="tooltip"]' ) . tooltip ()
})
2022-06-18 21:41:40 +00:00
</ script >
@ endsection