From 061197e72ca7ff9792e3ee4718e9c3ca4991c284 Mon Sep 17 00:00:00 2001 From: Sven Slootweg Date: Mon, 24 Jun 2013 13:21:47 +0200 Subject: [PATCH] Implement VPS termination --- frontend/classes/vps.php | 18 +++-- frontend/locales/english.lng | 18 +++++ frontend/modules/admin/vps/terminate.php | 77 +++++++++++++++++++ .../templates/default/admin/vps/terminate.tpl | 18 +++++ 4 files changed, 124 insertions(+), 7 deletions(-) create mode 100644 frontend/modules/admin/vps/terminate.php create mode 100644 frontend/templates/default/admin/vps/terminate.tpl diff --git a/frontend/classes/vps.php b/frontend/classes/vps.php index 5d29bbe..310ccca 100644 --- a/frontend/classes/vps.php +++ b/frontend/classes/vps.php @@ -591,14 +591,16 @@ class Vps extends CPHPDatabaseRecordClass try { $this->Stop(); - $this->uStatus = CVM_STATUS_TERMINATED; - $this->uTerminationDate = time(); - $this->InsertIntoDatabase(); } catch (VpsStopException $e) { - throw new VpsTerminateException("Termination failed as the VPS could not be stopped.", 1, $this->sInternalId, $e); + /*throw new VpsTerminateException("Termination failed as the VPS could not be stopped.", 1, $this->sInternalId, $e);*/ + /* TODO: Throw warning about being unable to stop it, after checking VPS status. */ } + + $this->uStatus = CVM_STATUS_TERMINATED; + $this->uTerminationDate = time(); + $this->InsertIntoDatabase(); } else { @@ -613,13 +615,15 @@ class Vps extends CPHPDatabaseRecordClass try { $this->Start(true); - $this->uStatus = CVM_STATUS_STARTED; - $this->InsertIntoDatabase(); } catch (VpsStartException $e) { - throw new VpsUnterminateException("Untermination failed as the VPS could not be started.", 1, $this->sInternalId, $e); + /*throw new VpsUnterminateException("Untermination failed as the VPS could not be started.", 1, $this->sInternalId, $e);*/ + /* TODO: Throw warning about being unable to start it, after checking VPS status. */ } + + $this->uStatus = CVM_STATUS_STARTED; + $this->InsertIntoDatabase(); } else { diff --git a/frontend/locales/english.lng b/frontend/locales/english.lng index 01262dd..24b25a0 100644 --- a/frontend/locales/english.lng +++ b/frontend/locales/english.lng @@ -166,6 +166,24 @@ error-unsuspend-error-title; Failed to unsuspend VPS error-unsuspend-error-text; The VPS could not be unsuspended. button-admin-vps-unsuspend; Unsuspend VPS +## Terminate VPS +title-admin-vps-terminate; Terminate VPS +vps-admin-terminate-text; Are you sure you wish to terminate this VPS? The VPS will be suspended immediately, and deleted after several hours. As long as it is not deleted, the termination can be undone. +error-terminate-success-title; VPS terminated +error-terminate-success-text; The VPS has been terminated and can no longer be used by the owner. +error-terminate-error-title; Failed to terminate VPS +error-terminate-error-text; The VPS could not be terminated. +button-admin-vps-terminate; Terminate VPS + +## Unterminate VPS +title-admin-vps-unterminate; Unterminate VPS +vps-admin-unterminate-text; Are you sure you wish to unterminate this VPS? The owner will be able to use it again. +error-unterminate-success-title; VPS unterminated +error-unterminate-success-text; The VPS has been unterminated and can now be used by the owner again. +error-unterminate-error-title; Failed to unterminate VPS +error-unterminate-error-text; The VPS could not be unterminated. +button-admin-vps-unterminate; Unterminate VPS + ## Transfer VPS title-admin-vps-transfer; Transfer VPS ownership button-admin-vps-transfer; Transfer VPS diff --git a/frontend/modules/admin/vps/terminate.php b/frontend/modules/admin/vps/terminate.php new file mode 100644 index 0000000..5548850 --- /dev/null +++ b/frontend/modules/admin/vps/terminate.php @@ -0,0 +1,77 @@ +RequireAccessLevel(30); + + $sVps = new Vps($router->uParameters[1]); + + if(isset($_POST['submit'])) + { + if($_POST['action'] == "terminate") + { + $sVps->Terminate(); + + $sMainContents .= NewTemplater::Render("{$sTheme}/shared/error/success", $locale->strings, array( + 'title' => $locale->strings['error-terminate-success-title'], + 'message' => $locale->strings['error-terminate-success-text'] + )); + } + elseif($_POST['action'] == "unterminate") + { + $sVps->Unterminate(); + + $sMainContents .= NewTemplater::Render("{$sTheme}/shared/error/success", $locale->strings, array( + 'title' => $locale->strings['error-unterminate-success-title'], + 'message' => $locale->strings['error-unterminate-success-text'] + )); + } + + $sVps->RefreshData(); + + /* TODO: Flash message and redirect to VPS lookup page. */ + } + + $sTerminated = ($sVps->sStatus == CVM_STATUS_TERMINATED) ? true : false; + + $sPageContents = NewTemplater::Render("{$sTheme}/admin/vps/terminate", $locale->strings, array( + 'id' => $sVps->sId, + 'terminated' => $sTerminated, + 'can-unterminate' => !$sVps->IsTerminated + )); +} +catch (NotFoundException $e) +{ + $sMainContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( + 'title' => $locale->strings['error-notfound-title'], + 'message' => $locale->strings['error-notfound-text'] + )); +} +catch (VpsTerminateException $e) +{ + $sMainContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( + 'title' => $locale->strings['error-terminate-error-title'], + 'message' => $locale->strings['error-terminate-error-text'] + )); +} +catch (VpsUnterminateException $e) +{ + $sMainContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( + 'title' => $locale->strings['error-unterminate-error-title'], + 'message' => $locale->strings['error-unterminate-error-text'] + )); +} + diff --git a/frontend/templates/default/admin/vps/terminate.tpl b/frontend/templates/default/admin/vps/terminate.tpl new file mode 100644 index 0000000..f38842d --- /dev/null +++ b/frontend/templates/default/admin/vps/terminate.tpl @@ -0,0 +1,18 @@ +
+ {%if terminated == false} +

{%!title-admin-vps-terminate}

+

{%!vps-admin-terminate-text}

+ + + {%else} + {%if can-unterminate == true} +

{%!title-admin-vps-unterminate}

+

{%!vps-admin-unterminate-text}

+ + + {%else} + Cannot unterminate + {%/if} + {%/if} +
+