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 ''.strip_tags($server->name).''; }) ->rawColumns(['user', 'actions', 'status', 'name']) ->make(); } }