Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pterodactyl
GitHub Repository: pterodactyl/panel
Path: blob/1.0-develop/app/Http/Controllers/Admin/MountController.php
10279 views
1
<?php
2
3
namespace Pterodactyl\Http\Controllers\Admin;
4
5
use Ramsey\Uuid\Uuid;
6
use Illuminate\View\View;
7
use Illuminate\Http\Request;
8
use Pterodactyl\Models\Nest;
9
use Illuminate\Http\Response;
10
use Pterodactyl\Models\Mount;
11
use Pterodactyl\Models\Location;
12
use Illuminate\Http\RedirectResponse;
13
use Prologue\Alerts\AlertsMessageBag;
14
use Illuminate\View\Factory as ViewFactory;
15
use Pterodactyl\Http\Controllers\Controller;
16
use Pterodactyl\Http\Requests\Admin\MountFormRequest;
17
use Pterodactyl\Repositories\Eloquent\MountRepository;
18
use Pterodactyl\Contracts\Repository\NestRepositoryInterface;
19
use Pterodactyl\Contracts\Repository\LocationRepositoryInterface;
20
21
class MountController extends Controller
22
{
23
/**
24
* MountController constructor.
25
*/
26
public function __construct(
27
protected AlertsMessageBag $alert,
28
protected NestRepositoryInterface $nestRepository,
29
protected LocationRepositoryInterface $locationRepository,
30
protected MountRepository $repository,
31
protected ViewFactory $view,
32
) {
33
}
34
35
/**
36
* Return the mount overview page.
37
*/
38
public function index(): View
39
{
40
return view('admin.mounts.index', [
41
'mounts' => $this->repository->getAllWithDetails(),
42
]);
43
}
44
45
/**
46
* Return the mount view page.
47
*
48
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
49
*/
50
public function view(string $id): View
51
{
52
$nests = Nest::query()->with('eggs')->get();
53
$locations = Location::query()->with('nodes')->get();
54
55
return view('admin.mounts.view', [
56
'mount' => $this->repository->getWithRelations($id),
57
'nests' => $nests,
58
'locations' => $locations,
59
]);
60
}
61
62
/**
63
* Handle request to create new mount.
64
*
65
* @throws \Throwable
66
*/
67
public function create(MountFormRequest $request): RedirectResponse
68
{
69
$model = (new Mount())->fill($request->validated());
70
$model->forceFill(['uuid' => Uuid::uuid4()->toString()]);
71
72
$model->saveOrFail();
73
$mount = $model->fresh();
74
75
$this->alert->success('Mount was created successfully.')->flash();
76
77
return redirect()->route('admin.mounts.view', $mount->id);
78
}
79
80
/**
81
* Handle request to update or delete location.
82
*
83
* @throws \Throwable
84
*/
85
public function update(MountFormRequest $request, Mount $mount): RedirectResponse
86
{
87
if ($request->input('action') === 'delete') {
88
return $this->delete($mount);
89
}
90
91
$mount->forceFill($request->validated())->save();
92
93
$this->alert->success('Mount was updated successfully.')->flash();
94
95
return redirect()->route('admin.mounts.view', $mount->id);
96
}
97
98
/**
99
* Delete a location from the system.
100
*
101
* @throws \Exception
102
*/
103
public function delete(Mount $mount): RedirectResponse
104
{
105
$mount->delete();
106
107
return redirect()->route('admin.mounts');
108
}
109
110
/**
111
* Adds eggs to the mount's many-to-many relation.
112
*/
113
public function addEggs(Request $request, Mount $mount): RedirectResponse
114
{
115
$validatedData = $request->validate([
116
'eggs' => 'required|exists:eggs,id',
117
]);
118
119
$eggs = $validatedData['eggs'] ?? [];
120
if (count($eggs) > 0) {
121
$mount->eggs()->attach($eggs);
122
}
123
124
$this->alert->success('Mount was updated successfully.')->flash();
125
126
return redirect()->route('admin.mounts.view', $mount->id);
127
}
128
129
/**
130
* Adds nodes to the mount's many-to-many relation.
131
*/
132
public function addNodes(Request $request, Mount $mount): RedirectResponse
133
{
134
$data = $request->validate(['nodes' => 'required|exists:nodes,id']);
135
136
$nodes = $data['nodes'] ?? [];
137
if (count($nodes) > 0) {
138
$mount->nodes()->attach($nodes);
139
}
140
141
$this->alert->success('Mount was updated successfully.')->flash();
142
143
return redirect()->route('admin.mounts.view', $mount->id);
144
}
145
146
/**
147
* Deletes an egg from the mount's many-to-many relation.
148
*/
149
public function deleteEgg(Mount $mount, int $egg_id): Response
150
{
151
$mount->eggs()->detach($egg_id);
152
153
return response('', 204);
154
}
155
156
/**
157
* Deletes a node from the mount's many-to-many relation.
158
*/
159
public function deleteNode(Mount $mount, int $node_id): Response
160
{
161
$mount->nodes()->detach($node_id);
162
163
return response('', 204);
164
}
165
}
166
167