Skip to content

Commit 177bd4e

Browse files
committed
add ability to delete a service
1 parent a50bb5d commit 177bd4e

File tree

4 files changed

+54
-0
lines changed

4 files changed

+54
-0
lines changed

app/Http/Controllers/Admin/ServiceController.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,22 @@ public function postService(Request $request, $service)
106106
return redirect()->route('admin.services.service', $service)->withInput();
107107
}
108108

109+
public function deleteService(Request $request, $service)
110+
{
111+
try {
112+
$repo = new ServiceRepository\Service;
113+
$repo->delete($service);
114+
Alert::success('Successfully deleted that service.')->flash();
115+
return redirect()->route('admin.services');
116+
} catch (DisplayException $ex) {
117+
Alert::danger($ex->getMessage())->flash();
118+
} catch (\Exception $ex) {
119+
Log::error($ex);
120+
Alert::danger('An error was encountered while attempting to delete that service.')->flash();
121+
}
122+
return redirect()->route('admin.services.service', $service);
123+
}
124+
109125
public function getOption(Request $request, $option)
110126
{
111127
$opt = Models\ServiceOptions::findOrFail($option);

app/Http/Routes/AdminRoutes.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,10 @@ public function map(Router $router) {
366366
'uses' => 'Admin\ServiceController@postService'
367367
]);
368368

369+
$router->delete('/service/{id}', [
370+
'uses' => 'Admin\ServiceController@deleteService'
371+
]);
372+
369373
$router->get('/option/{id}', [
370374
'as' => 'admin.services.option',
371375
'uses' => 'Admin\ServiceController@getOption'

app/Repositories/ServiceRepository/Service.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,26 @@ public function update($id, array $data)
8585
$service->save();
8686
}
8787

88+
public function delete($id)
89+
{
90+
$service = Models\Service::findOrFail($id);
91+
$servers = Models\Server::where('service', $service->id)->get();
92+
$options = Models\ServiceOptions::select('id')->where('parent_service', $service->id);
93+
94+
if (count($servers) !== 0) {
95+
throw new DisplayException('You cannot delete a service that has servers associated with it.');
96+
}
97+
98+
DB::beginTransaction();
99+
try {
100+
Models\ServiceVariables::whereIn('option_id', $options->get()->toArray())->delete();
101+
$options->delete();
102+
$service->delete();
103+
DB::commit();
104+
} catch (\Exception $ex) {
105+
DB::rollBack();
106+
throw $ex;
107+
}
108+
}
109+
88110
}

resources/views/admin/services/view.blade.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,18 @@
106106
</div>
107107
</form>
108108
</div>
109+
<form action="{{ route('admin.services.service', $service->id) }}" method="POST">
110+
<div class="row">
111+
<div class="col-md-12">
112+
<div class="alert alert-danger">
113+
Deleting a service is an irreversible action. A service can <em>only</em> be deleted if no servers are associated with it.
114+
</div>
115+
{!! csrf_field() !!}
116+
{!! method_field('DELETE') !!}
117+
<input type="submit" class="btn btn-sm btn-danger pull-right" value="Delete Service" />
118+
</div>
119+
</div>
120+
</form>
109121
</div>
110122
<script>
111123
$(document).ready(function () {

0 commit comments

Comments
 (0)