2021-06-05 09:26:32 +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 " >
2021-12-21 13:56:12 +00:00
< h1 > {{ __ ( 'Servers' ) }} </ h1 >
2021-06-05 09:26:32 +00:00
</ div >
< div class = " col-sm-6 " >
< ol class = " breadcrumb float-sm-right " >
2021-12-21 13:56:12 +00:00
< li class = " breadcrumb-item " >< a href = " { { route('home') }} " > {{ __ ( 'Dashboard' ) }} </ a ></ li >
2021-11-20 02:48:26 +00:00
< li class = " breadcrumb-item " >< a class = " text-muted "
2021-12-21 13:56:12 +00:00
href = " { { route('servers.index') }} " > {{ __ ( 'Servers' ) }} </ a >
2021-06-05 09:26:32 +00:00
</ li >
</ ol >
</ div >
</ div >
</ div >
</ section >
<!-- END CONTENT HEADER -->
<!-- MAIN CONTENT -->
< section class = " content " >
< div class = " container-fluid " >
<!-- CUSTOM CONTENT -->
2021-12-22 23:27:43 +00:00
< div class = " d-flex justify-content-md-start justify-content-center mb-3 " >
2023-05-03 07:53:41 +00:00
< 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 >
2021-12-21 18:44:31 +00:00
{{ __ ( 'Create Server' ) }}
</ a >
2023-02-06 20:16:54 +00:00
@ if ( Auth :: user () -> Servers -> count () > 0 && ! empty ( $phpmyadmin_url ))
2023-05-03 07:53:41 +00:00
< a
2023-02-06 20:16:54 +00:00
href = " { { $phpmyadmin_url }} " target = " _blank "
2023-01-05 23:01:23 +00:00
class = " btn btn-secondary ml-2 " >< i title = " manage "
class = " fas fa-database mr-2 " ></ i >< span > {{ __ ( 'Database' ) }} </ span >
</ a >
@ endif
2021-06-05 09:26:32 +00:00
</ div >
2021-12-23 23:03:32 +00:00
< div class = " row d-flex flex-row justify-content-center justify-content-md-start " >
2021-11-20 02:48:26 +00:00
@ foreach ( $servers as $server )
2023-05-08 09:03:10 +00:00
@ if ( $server -> location && $server -> node && $server -> nest && $server -> egg )
2023-02-06 13:45:44 +00:00
< 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 " >
2023-05-17 07:44:19 +00:00
@ if ( ! empty ( $phpmyadmin_url )))
< a href = " { { $phpmyadmin_url }} "
2023-02-06 13:45:44 +00:00
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 >
2021-06-05 09:26:32 +00:00
</ div >
</ div >
2023-02-06 13:45:44 +00:00
</ 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 -> cancelled )
< span class = " badge badge-warning " > {{ __ ( 'Cancelled' ) }} </ 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 >
2021-11-20 02:48:26 +00:00
</ div >
2021-12-21 14:15:18 +00:00
2023-02-06 13:45:44 +00:00
</ div >
< div class = " row mb-2 " >
< div class = " col-5 " >
{{ __ ( 'Software' ) }} :
</ div >
< div class = " col-7 text-wrap " >
< span > {{ $server -> nest }} </ span >
2021-11-20 02:48:26 +00:00
</ div >
2021-12-21 14:15:18 +00:00
2023-02-06 13:45:44 +00:00
</ div >
< div class = " row mb-2 " >
< div class = " col-5 " >
{{ __ ( 'Specification' ) }} :
2023-01-21 14:04:12 +00:00
</ div >
2023-02-06 13:45:44 +00:00
< div class = " col-7 text-wrap " >
< span > {{ $server -> egg }} </ span >
2023-01-21 14:04:12 +00:00
</ div >
2023-02-06 13:45:44 +00:00
</ 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 "
2023-05-08 10:07:23 +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/> { { __('OOM Killer') }}: { { $server->product ->oom_killer ? __( " enabled " ) : __( " disabled " ) }} <br/> { { __('Billing Period') }}: { { $server -> product -> billing_period } } "
2023-02-06 13:45:44 +00:00
class = " fas fa-info-circle " ></ i >
</ div >
</ div >
2023-01-21 14:04:12 +00:00
2023-02-06 13:45:44 +00:00
< div class = " row mb-4 " >
< div class = " col-5 word-break " style = " hyphens: auto " >
{{ __ ( 'Next Billing Cycle' ) }} :
2023-01-21 14:04:12 +00:00
</ div >
2023-02-06 13:45:44 +00:00
< 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 >
2021-11-20 02:48:26 +00:00
</ div >
</ div >
2021-06-05 09:26:32 +00:00
2023-02-06 13:45:44 +00:00
< div class = " row mb-2 " >
< div class = " col-4 " >
{{ __ ( 'Price' ) }} :
< span class = " text-muted " >
2023-05-08 09:26:47 +00:00
({{ $credits_display_name }})
2023-02-06 13:45:44 +00:00
</ 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
2023-05-17 07:44:19 +00:00
< 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 >
2021-12-22 09:12:03 +00:00
</ div >
2023-02-06 13:45:44 +00:00
< span >
{{ $server -> product -> price == round ( $server -> product -> price ) ? round ( $server -> product -> price ) : $server -> product -> price }}
</ span >
2021-11-20 02:48:26 +00:00
</ div >
2023-02-06 20:16:54 +00:00
</ div >
2023-02-01 20:03:20 +00:00
</ div >
2021-06-05 09:26:32 +00:00
</ div >
2023-02-06 13:45:44 +00:00
< div class = " card-footer text-center " >
2023-05-08 09:35:28 +00:00
< a href = " { { $pterodactyl_url }}/server/ { { $server->identifier }} "
2023-02-06 13:45:44 +00:00
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 -> cancelled ? " 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 >
2021-06-05 09:26:32 +00:00
</ div >
2023-02-06 13:45:44 +00:00
</ div >
2023-05-08 09:03:10 +00:00
@ endif
2021-06-05 09:26:32 +00:00
@ endforeach
</ div >
<!-- END CUSTOM CONTENT -->
</ div >
</ section >
<!-- END CONTENT -->
2023-02-06 13:45:44 +00:00
< 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 ();
2023-05-08 09:35:28 +00:00
}) . catch (( error ) => {
Swal . fire ({
title : " { { __('Error') }} " ,
text : " { { __('Something went wrong, please try again later.') }} " ,
icon : 'error' ,
confirmButtonColor : '#d9534f' ,
})
})
2023-02-06 13:45:44 +00:00
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 ();
2023-05-08 09:35:28 +00:00
}) . catch (( error ) => {
Swal . fire ({
title : " { { __('Error') }} " ,
text : " { { __('Something went wrong, please try again later.') }} " ,
icon : 'error' ,
confirmButtonColor : '#d9534f' ,
})
})
2023-02-06 13:45:44 +00:00
return
}
});
}
document . addEventListener ( 'DOMContentLoaded' , () => {
$ ( '[data-toggle="popover"]' ) . popover ();
});
$ ( function () {
$ ( '[data-toggle="tooltip"]' ) . tooltip ()
})
</ script >
2021-06-05 09:26:32 +00:00
@ endsection