2021-06-05 09:26:32 +00:00
< ? php
namespace App\Http\Controllers\Admin ;
use App\Classes\Pterodactyl ;
use App\Classes\PterodactylWrapper ;
use App\Http\Controllers\Controller ;
use App\Models\Server ;
2022-01-07 09:16:33 +00:00
use App\Models\Settings ;
2021-06-05 09:26:32 +00:00
use Exception ;
use Illuminate\Contracts\Foundation\Application ;
use Illuminate\Contracts\View\Factory ;
use Illuminate\Contracts\View\View ;
use Illuminate\Http\JsonResponse ;
use Illuminate\Http\RedirectResponse ;
use Illuminate\Http\Request ;
use Illuminate\Http\Response ;
class ServerController extends Controller
{
/**
* Display a listing of the resource .
*
* @ return Application | Factory | View | Response
*/
public function index ()
{
return view ( 'admin.servers.index' );
}
/**
* Show the form for creating a new resource .
*
* @ return Response
*/
public function create ()
{
//
}
/**
* Store a newly created resource in storage .
*
* @ param Request $request
* @ return Response
*/
public function store ( Request $request )
{
//
}
/**
* Display the specified resource .
*
* @ param Server $server
* @ return Response
*/
public function show ( Server $server )
{
//
}
/**
* Show the form for editing the specified resource .
*
* @ param Server $server
* @ return Response
*/
2022-07-19 08:36:40 +00:00
2021-06-05 09:26:32 +00:00
public function edit ( Server $server )
{
2022-07-19 08:36:40 +00:00
return view ( 'admin.servers.edit' ) -> with ([
'server' => $server
]);
2021-06-05 09:26:32 +00:00
}
/**
* Update the specified resource in storage .
*
* @ param Request $request
* @ param Server $server
* @ return Response
*/
public function update ( Request $request , Server $server )
{
2022-07-19 08:36:40 +00:00
$request -> validate ([
" identifier " => " required|string " ,
]);
$server -> update ( $request -> all ());
return redirect () -> route ( 'admin.servers.index' ) -> with ( 'success' , 'Server updated!' );
2021-06-05 09:26:32 +00:00
}
/**
* Remove the specified resource from storage .
*
* @ param Server $server
* @ return RedirectResponse | Response
*/
public function destroy ( Server $server )
{
2021-08-02 14:47:22 +00:00
try {
$server -> delete ();
2021-12-13 10:47:35 +00:00
return redirect () -> route ( 'admin.servers.index' ) -> with ( 'success' , __ ( 'Server removed' ));
2021-08-02 14:47:22 +00:00
} catch ( Exception $e ) {
2021-12-13 10:47:35 +00:00
return redirect () -> route ( 'admin.servers.index' ) -> with ( 'error' , __ ( 'An exception has occurred while trying to remove a resource "' ) . $e -> getMessage () . '"' );
2021-08-02 14:47:22 +00:00
}
2021-06-05 09:26:32 +00:00
}
2022-07-22 01:52:49 +00:00
/**
* Cancel the Server billing cycle .
*
* @ param Server $server
* @ return RedirectResponse | Response
*/
public function cancel ( Server $server )
{
try {
error_log ( $server -> update ([
'cancelled' => now (),
]));
return redirect () -> route ( 'servers.index' ) -> with ( 'success' , __ ( 'Server cancelled' ));
} catch ( Exception $e ) {
return redirect () -> route ( 'servers.index' ) -> with ( 'error' , __ ( 'An exception has occurred while trying to cancel the server"' ) . $e -> getMessage () . '"' );
}
}
2021-06-05 09:26:32 +00:00
/**
* @ param Server $server
* @ return RedirectResponse
*/
2022-01-25 21:52:19 +00:00
public function toggleSuspended ( Server $server )
{
2021-06-05 09:26:32 +00:00
try {
$server -> isSuspended () ? $server -> unSuspend () : $server -> suspend ();
} catch ( Exception $exception ) {
return redirect () -> back () -> with ( 'error' , $exception -> getMessage ());
}
2021-12-13 10:47:35 +00:00
return redirect () -> back () -> with ( 'success' , __ ( 'Server has been updated!' ));
2021-06-05 09:26:32 +00:00
}
/**
* @ return JsonResponse | mixed
* @ throws Exception
*/
public function dataTable ( Request $request )
{
2021-06-06 20:04:46 +00:00
$query = Server :: with ([ 'user' , 'product' ]);
2021-06-05 09:26:32 +00:00
if ( $request -> has ( 'product' )) $query -> where ( 'product_id' , '=' , $request -> input ( 'product' ));
if ( $request -> has ( 'user' )) $query -> where ( 'user_id' , '=' , $request -> input ( 'user' ));
$query -> select ( 'servers.*' );
return datatables ( $query )
-> addColumn ( 'user' , function ( Server $server ) {
return '<a href="' . route ( 'admin.users.show' , $server -> user -> id ) . '">' . $server -> user -> name . '</a>' ;
})
-> addColumn ( 'resources' , function ( Server $server ) {
return $server -> product -> description ;
})
-> addColumn ( 'actions' , function ( Server $server ) {
$suspendColor = $server -> isSuspended () ? " btn-success " : " btn-warning " ;
$suspendIcon = $server -> isSuspended () ? " fa-play-circle " : " fa-pause-circle " ;
2021-12-14 14:47:17 +00:00
$suspendText = $server -> isSuspended () ? __ ( " Unsuspend " ) : __ ( " Suspend " );
2021-06-05 09:26:32 +00:00
return '
2022-07-19 08:36:40 +00:00
< a data - content = " ' . __( " Edit " ) . ' " data - toggle = " popover " data - trigger = " hover " data - placement = " top " href = " ' . route('admin.servers.edit', $server->id ) . ' " class = " btn btn-sm btn-info mr-1 " >< i class = " fas fa-pen " ></ i ></ a >
2021-06-05 09:26:32 +00:00
< form class = " d-inline " method = " post " action = " ' . route('admin.servers.togglesuspend', $server->id ) . ' " >
' . csrf_field() . '
2022-01-25 21:52:19 +00:00
< button data - content = " ' . $suspendText . ' " data - toggle = " popover " data - trigger = " hover " data - placement = " top " class = " btn btn-sm ' . $suspendColor . ' text-white mr-1 " >< i class = " far ' . $suspendIcon . ' " ></ i ></ button >
2021-06-05 09:26:32 +00:00
</ form >
< form class = " d-inline " onsubmit = " return submitResult(); " method = " post " action = " ' . route('admin.servers.destroy', $server->id ) . ' " >
' . csrf_field() . '
' . method_field("DELETE") . '
2022-01-25 21:52:19 +00:00
< button data - content = " ' . __( " Delete " ) . ' " data - toggle = " popover " data - trigger = " hover " data - placement = " top " class = " btn btn-sm btn-danger mr-1 " >< i class = " fas fa-trash " ></ i ></ button >
2021-06-05 09:26:32 +00:00
</ form >
' ;
})
-> addColumn ( 'status' , function ( Server $server ) {
$labelColor = $server -> isSuspended () ? 'text-danger' : 'text-success' ;
return '<i class="fas ' . $labelColor . ' fa-circle mr-2"></i>' ;
})
-> editColumn ( 'created_at' , function ( Server $server ) {
return $server -> created_at ? $server -> created_at -> diffForHumans () : '' ;
})
-> editColumn ( 'suspended' , function ( Server $server ) {
return $server -> suspended ? $server -> suspended -> diffForHumans () : '' ;
})
-> editColumn ( 'name' , function ( Server $server ) {
2022-04-20 10:12:48 +00:00
return '<a class="text-info" target="_blank" href="' . config ( " SETTINGS::SYSTEM:PTERODACTYL:URL " ) . '/admin/servers/view/' . $server -> pterodactyl_id . '">' . strip_tags ( $server -> name ) . '</a>' ;
2021-06-05 09:26:32 +00:00
})
-> rawColumns ([ 'user' , 'actions' , 'status' , 'name' ])
-> make ();
}
}