with([ 'server' => $server ]); } /** * Update the specified resource in storage. * * @param Request $request * @param Server $server * @return Response */ public function update(Request $request, Server $server) { $request->validate([ "identifier" => "required|string", ]); $server->update($request->all()); return redirect()->route('admin.servers.index')->with('success', 'Server updated!'); } /** * Remove the specified resource from storage. * * @param Server $server * @return RedirectResponse|Response */ public function destroy(Server $server) { try { $server->delete(); return redirect()->route('admin.servers.index')->with('success', __('Server removed')); } catch (Exception $e) { return redirect()->route('admin.servers.index')->with('error', __('An exception has occurred while trying to remove a resource "') . $e->getMessage() . '"'); } } /** * @param Server $server * @return RedirectResponse */ public function toggleSuspended(Server $server) { try { $server->isSuspended() ? $server->unSuspend() : $server->suspend(); } catch (Exception $exception) { return redirect()->back()->with('error', $exception->getMessage()); } return redirect()->back()->with('success', __('Server has been updated!')); } public function syncServers() { $pteroServers = Pterodactyl::getServers(); $CPServers = Server::get(); $CPIDArray = []; $renameCount = 0; foreach($CPServers as $CPServer)//go thru all CP servers and make array with IDs as keys. All values are false. { if($CPServer->pterodactyl_id) $CPIDArray[$CPServer->pterodactyl_id] = false; } foreach($pteroServers as $server)//go thru all ptero servers, if server exists, change value to true in array. { if(isset($CPIDArray[$server['attributes']['id']])){ $CPIDArray[$server['attributes']['id']]=true; if(isset($server['attributes']['name'])){//failsafe //Check if a server got renamed $savedServer = Server::query()->where('pterodactyl_id', $server['attributes']['id'])->first(); if($savedServer->name != $server['attributes']['name']){ $savedServer->name = $server['attributes']['name']; $savedServer->save(); $renameCount++; } } } } $filteredArray = array_filter($CPIDArray, function($v, $k) { return $v == false; }, ARRAY_FILTER_USE_BOTH); //Array of servers, that dont exist on ptero (value == false) $deleteCount = 0; foreach($filteredArray as $key => $CPID)//delete servers that dont exist on ptero anymore { if(!Pterodactyl::getServerAttributes($key, true)) $deleteCount++; } return redirect()->back()->with('success', __('Servers synced successfully' . (($renameCount)?(',\n' . __('renamed') . ' ' . $renameCount . ' ' . __('servers')):'') . ((count($filteredArray))?(',\n' . __('deleted') . ' ' . $deleteCount . '/' . count($filteredArray) . ' ' . __('old servers')):''))) . '.'; } /** * @return JsonResponse|mixed * @throws Exception */ public function dataTable(Request $request) { $query = Server::with(['user', 'product']); 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 '' . $server->user->name . ''; }) ->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"; $suspendText = $server->isSuspended() ? __("Unsuspend") : __("Suspend"); return '
' . csrf_field() . '
' . csrf_field() . ' ' . method_field("DELETE") . '
'; }) ->addColumn('status', function (Server $server) { $labelColor = $server->isSuspended() ? 'text-danger' : 'text-success'; return ''; }) ->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) { return 'pterodactyl_id . '">' . strip_tags($server->name) . ''; }) ->rawColumns(['user', 'actions', 'status', 'name']) ->make(); } }