From 7fa9bf206243af2dab4c51d74d781ae0f73048c0 Mon Sep 17 00:00:00 2001 From: IceToast Date: Fri, 22 Jul 2022 03:52:49 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20=E2=9C=A8=20Added=20Server=20Cancelatio?= =?UTF-8?q?n=20route=20method=20and=20charging?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Commands/ChargeServers.php | 8 ++++---- .../Controllers/Admin/ServerController.php | 20 ++++++++++++++++++- app/Http/Controllers/ServerController.php | 16 ++++++++++++++- app/Models/Server.php | 3 ++- resources/views/servers/index.blade.php | 4 ++-- routes/web.php | 2 ++ 6 files changed, 44 insertions(+), 9 deletions(-) diff --git a/app/Console/Commands/ChargeServers.php b/app/Console/Commands/ChargeServers.php index 769909c3..2a5d8a5a 100644 --- a/app/Console/Commands/ChargeServers.php +++ b/app/Console/Commands/ChargeServers.php @@ -81,14 +81,14 @@ class ChargeServers extends Command continue; } - // check if user has enough credits to charge the server - if ($user->credits < $product->price) { + // check if the server is canceled or if user has enough credits to charge the server or + if ( $server->cancelled || $user->credits < $product->price) { try { - #suspend server + // suspend server $this->line("{$server->name} from user: {$user->name} has been suspended!"); $server->suspend(); - #add user to notify list + // add user to notify list if (!in_array($user, $this->usersToNotify)) { array_push($this->usersToNotify, $user); } diff --git a/app/Http/Controllers/Admin/ServerController.php b/app/Http/Controllers/Admin/ServerController.php index 06d2cc22..b4e06ed1 100644 --- a/app/Http/Controllers/Admin/ServerController.php +++ b/app/Http/Controllers/Admin/ServerController.php @@ -133,7 +133,25 @@ class ServerController extends Controller } /** - * @param Server $server + * 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() . '"'); + } + } + + /** + * @param Server $server * @return RedirectResponse */ public function toggleSuspended(Server $server) diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index b066e77d..bef8338a 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -246,7 +246,21 @@ class ServerController extends Controller return redirect()->route('servers.index')->with('success', __('Server removed')); } catch (Exception $e) { - return redirect()->route('servers.index')->with('error', __('An exception has occurred while trying to remove a resource "').$e->getMessage().'"'); + return redirect()->route('servers.index')->with('error', __('An exception has occurred while trying to delete the server"') . $e->getMessage() . '"'); + } + } + + /** Cancel Server */ + 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() . '"'); } } diff --git a/app/Models/Server.php b/app/Models/Server.php index c3ea621a..b2c19b8b 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -54,7 +54,8 @@ class Server extends Model "identifier", "product_id", "pterodactyl_id", - "last_billed" + "last_billed", + "cancelled" ]; /** diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index 9c9d81b0..e96b46b1 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -219,8 +219,8 @@ }).then((result) => { if (result.value) { // Delete server - fetch("{{ route('servers.destroy', '') }}" + '/' + serverId, { - method: 'DELETE', + fetch("{{ route('servers.cancel', '') }}" + '/' + serverId, { + method: 'PATCH', headers: { 'X-CSRF-TOKEN': '{{ csrf_token() }}' } diff --git a/routes/web.php b/routes/web.php index c86a0c66..d980e3a4 100644 --- a/routes/web.php +++ b/routes/web.php @@ -72,6 +72,7 @@ Route::middleware(['auth', 'checkSuspended'])->group(function () { //normal routes Route::get('notifications/readAll', [NotificationController::class, 'readAll'])->name('notifications.readAll'); Route::resource('notifications', NotificationController::class); + Route::patch('/servers/cancel/{server}', [ServerController::class, 'cancel'])->name('servers.cancel'); Route::resource('servers', ServerController::class); if (config('SETTINGS::SYSTEM:ENABLE_UPGRADE')) { Route::post('servers/{server}/upgrade', [ServerController::class, 'upgrade'])->name('servers.upgrade'); @@ -140,6 +141,7 @@ Route::middleware(['auth', 'checkSuspended'])->group(function () { //servers Route::get('servers/datatable', [AdminServerController::class, 'datatable'])->name('servers.datatable'); Route::post('servers/togglesuspend/{server}', [AdminServerController::class, 'toggleSuspended'])->name('servers.togglesuspend'); + Route::patch('/servers/cancel/{server}', [AdminServerController::class, 'cancel'])->name('servers.cancel'); Route::get('servers/sync', [AdminServerController::class, 'syncServers'])->name('servers.sync'); Route::resource('servers', AdminServerController::class);