Skip to content

Commit c17f9ba

Browse files
committed
Move server view management parts to new controller and clean up code
1 parent 8f00445 commit c17f9ba

File tree

10 files changed

+309
-157
lines changed

10 files changed

+309
-157
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?php
2+
3+
namespace Pterodactyl\Http\Controllers\Admin\Servers;
4+
5+
use Illuminate\Http\Request;
6+
use Illuminate\Contracts\View\Factory;
7+
use Pterodactyl\Http\Controllers\Controller;
8+
use Pterodactyl\Repositories\Eloquent\ServerRepository;
9+
10+
class ServerController extends Controller
11+
{
12+
/**
13+
* @var \Illuminate\Contracts\View\Factory
14+
*/
15+
private $view;
16+
17+
/**
18+
* @var \Pterodactyl\Repositories\Eloquent\ServerRepository
19+
*/
20+
private $repository;
21+
22+
/**
23+
* ServerController constructor.
24+
*
25+
* @param \Illuminate\Contracts\View\Factory $view
26+
* @param \Pterodactyl\Repositories\Eloquent\ServerRepository $repository
27+
*/
28+
public function __construct(
29+
Factory $view,
30+
ServerRepository $repository
31+
) {
32+
$this->view = $view;
33+
$this->repository = $repository;
34+
}
35+
36+
/**
37+
* Returns all of the servers that exist on the system using a paginated result set. If
38+
* a query is passed along in the request it is also passed to the repository function.
39+
*
40+
* @param \Illuminate\Http\Request $request
41+
* @return \Illuminate\Contracts\View\View
42+
*/
43+
public function index(Request $request)
44+
{
45+
return $this->view->make('admin.servers.index', [
46+
'servers' => $this->repository->setSearchTerm($request->input('query'))->getAllServers(
47+
config()->get('pterodactyl.paginate.admin.servers')
48+
),
49+
]);
50+
}
51+
}
Lines changed: 176 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
1+
<?php
2+
3+
namespace Pterodactyl\Http\Controllers\Admin\Servers;
4+
5+
use Illuminate\Http\Request;
6+
use Pterodactyl\Models\Nest;
7+
use Pterodactyl\Models\Server;
8+
use Illuminate\Contracts\View\Factory;
9+
use Pterodactyl\Exceptions\DisplayException;
10+
use Pterodactyl\Http\Controllers\Controller;
11+
use Pterodactyl\Repositories\Eloquent\NestRepository;
12+
use Pterodactyl\Repositories\Eloquent\ServerRepository;
13+
use Pterodactyl\Traits\Controllers\JavascriptInjection;
14+
use Pterodactyl\Repositories\Eloquent\DatabaseHostRepository;
15+
16+
class ServerViewController extends Controller
17+
{
18+
use JavascriptInjection;
19+
20+
/**
21+
* @var \Illuminate\Contracts\View\Factory
22+
*/
23+
private $view;
24+
25+
/**
26+
* @var \Pterodactyl\Repositories\Eloquent\DatabaseHostRepository
27+
*/
28+
private $databaseHostRepository;
29+
30+
/**
31+
* @var \Pterodactyl\Repositories\Eloquent\ServerRepository
32+
*/
33+
private $repository;
34+
35+
/**
36+
* @var \Pterodactyl\Repositories\Eloquent\NestRepository
37+
*/
38+
private $nestRepository;
39+
40+
/**
41+
* ServerViewController constructor.
42+
*
43+
* @param \Pterodactyl\Repositories\Eloquent\DatabaseHostRepository $databaseHostRepository
44+
* @param \Pterodactyl\Repositories\Eloquent\NestRepository $nestRepository
45+
* @param \Pterodactyl\Repositories\Eloquent\ServerRepository $repository
46+
* @param \Illuminate\Contracts\View\Factory $view
47+
*/
48+
public function __construct(
49+
DatabaseHostRepository $databaseHostRepository,
50+
NestRepository $nestRepository,
51+
ServerRepository $repository,
52+
Factory $view
53+
) {
54+
$this->view = $view;
55+
$this->databaseHostRepository = $databaseHostRepository;
56+
$this->repository = $repository;
57+
$this->nestRepository = $nestRepository;
58+
}
59+
60+
/**
61+
* Returns the index view for a server.
62+
*
63+
* @param \Illuminate\Http\Request $request
64+
* @param \Pterodactyl\Models\Server $server
65+
* @return \Illuminate\Contracts\View\View
66+
*/
67+
public function index(Request $request, Server $server)
68+
{
69+
return $this->view->make('admin.servers.view.index', compact('server'));
70+
}
71+
72+
/**
73+
* Returns the server details page.
74+
*
75+
* @param \Illuminate\Http\Request $request
76+
* @param \Pterodactyl\Models\Server $server
77+
* @return \Illuminate\Contracts\View\View
78+
*/
79+
public function details(Request $request, Server $server)
80+
{
81+
return $this->view->make('admin.servers.view.details', compact('server'));
82+
}
83+
84+
/**
85+
* Returns a view of server build settings.
86+
*
87+
* @param \Illuminate\Http\Request $request
88+
* @param \Pterodactyl\Models\Server $server
89+
* @return \Illuminate\Contracts\View\View
90+
*/
91+
public function build(Request $request, Server $server)
92+
{
93+
$allocations = $server->node->allocations->toBase();
94+
95+
return $this->view->make('admin.servers.view.build', [
96+
'server' => $server,
97+
'assigned' => $allocations->where('server_id', $server->id)->sortBy('port')->sortBy('ip'),
98+
'unassigned' => $allocations->where('server_id', null)->sortBy('port')->sortBy('ip'),
99+
]);
100+
}
101+
102+
/**
103+
* Returns the server startup management page.
104+
*
105+
* @param \Illuminate\Http\Request $request
106+
* @param \Pterodactyl\Models\Server $server
107+
* @return \Illuminate\Contracts\View\View
108+
*
109+
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
110+
*/
111+
public function startup(Request $request, Server $server)
112+
{
113+
$parameters = $this->repository->getVariablesWithValues($server->id, true);
114+
$nests = $this->nestRepository->getWithEggs();
115+
116+
$this->plainInject([
117+
'server' => $server,
118+
'server_variables' => $parameters->data,
119+
'nests' => $nests->map(function (Nest $item) {
120+
return array_merge($item->toArray(), [
121+
'eggs' => $item->eggs->keyBy('id')->toArray(),
122+
]);
123+
})->keyBy('id'),
124+
]);
125+
126+
return $this->view->make('admin.servers.view.startup', compact('server', 'nests'));
127+
}
128+
129+
/**
130+
* Returns all of the databases that exist for the server.
131+
*
132+
* @param \Illuminate\Http\Request $request
133+
* @param \Pterodactyl\Models\Server $server
134+
* @return \Illuminate\Contracts\View\View
135+
*/
136+
public function database(Request $request, Server $server)
137+
{
138+
return $this->view->make('admin.servers.view.database', [
139+
'hosts' => $this->databaseHostRepository->all(),
140+
'server' => $server,
141+
]);
142+
}
143+
144+
/**
145+
* Returns the base server management page, or an exception if the server
146+
* is in a state that cannot be recovered from.
147+
*
148+
* @param \Illuminate\Http\Request $request
149+
* @param \Pterodactyl\Models\Server $server
150+
* @return \Illuminate\Contracts\View\View
151+
*
152+
* @throws \Pterodactyl\Exceptions\DisplayException
153+
*/
154+
public function manage(Request $request, Server $server)
155+
{
156+
if ($server->installed > 1) {
157+
throw new DisplayException(
158+
'This server is in a failed install state and cannot be recovered. Please delete and re-create the server.'
159+
);
160+
}
161+
162+
return $this->view->make('admin.servers.view.manage', compact('server'));
163+
}
164+
165+
/**
166+
* Returns the server deletion page.
167+
*
168+
* @param \Illuminate\Http\Request $request
169+
* @param \Pterodactyl\Models\Server $server
170+
* @return \Illuminate\Contracts\View\View
171+
*/
172+
public function delete(Request $request, Server $server)
173+
{
174+
return $this->view->make('admin.servers.view.delete', compact('server'));
175+
}
176+
}

app/Http/Controllers/Admin/ServersController.php

Lines changed: 0 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
namespace Pterodactyl\Http\Controllers\Admin;
1111

12-
use Javascript;
1312
use Illuminate\Http\Request;
1413
use Pterodactyl\Models\User;
1514
use Pterodactyl\Models\Server;
@@ -171,151 +170,6 @@ public function __construct(
171170
$this->suspensionService = $suspensionService;
172171
}
173172

174-
/**
175-
* Display the index page with all servers currently on the system.
176-
*
177-
* @param \Illuminate\Http\Request $request
178-
* @return \Illuminate\View\View
179-
*/
180-
public function index(Request $request)
181-
{
182-
return view('admin.servers.index', [
183-
'servers' => $this->repository->setSearchTerm($request->input('query'))->getAllServers(
184-
$this->config->get('pterodactyl.paginate.admin.servers')
185-
),
186-
]);
187-
}
188-
189-
/**
190-
* Display the index when viewing a specific server.
191-
*
192-
* @param \Pterodactyl\Models\Server $server
193-
* @return \Illuminate\View\View
194-
*/
195-
public function viewIndex(Server $server)
196-
{
197-
return view('admin.servers.view.index', ['server' => $server]);
198-
}
199-
200-
/**
201-
* Display the details page when viewing a specific server.
202-
*
203-
* @param int $server
204-
* @return \Illuminate\View\View
205-
*
206-
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
207-
*/
208-
public function viewDetails($server)
209-
{
210-
return view('admin.servers.view.details', [
211-
'server' => $this->repository->findFirstWhere([
212-
['id', '=', $server],
213-
['installed', '=', 1],
214-
]),
215-
]);
216-
}
217-
218-
/**
219-
* Display the build details page when viewing a specific server.
220-
*
221-
* @param int $server
222-
* @return \Illuminate\View\View
223-
*
224-
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
225-
*/
226-
public function viewBuild($server)
227-
{
228-
$server = $this->repository->findFirstWhere([
229-
['id', '=', $server],
230-
['installed', '=', 1],
231-
]);
232-
233-
$allocations = $this->allocationRepository->getAllocationsForNode($server->node_id);
234-
235-
return view('admin.servers.view.build', [
236-
'server' => $server,
237-
'assigned' => $allocations->where('server_id', $server->id)->sortBy('port')->sortBy('ip'),
238-
'unassigned' => $allocations->where('server_id', null)->sortBy('port')->sortBy('ip'),
239-
]);
240-
}
241-
242-
/**
243-
* Display startup configuration page for a server.
244-
*
245-
* @param \Pterodactyl\Models\Server $server
246-
* @return \Illuminate\View\View
247-
*
248-
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
249-
*/
250-
public function viewStartup(Server $server)
251-
{
252-
$parameters = $this->repository->getVariablesWithValues($server->id, true);
253-
if (! $parameters->server->installed) {
254-
abort(404);
255-
}
256-
257-
$nests = $this->nestRepository->getWithEggs();
258-
259-
Javascript::put([
260-
'server' => $server,
261-
'nests' => $nests->map(function ($item) {
262-
return array_merge($item->toArray(), [
263-
'eggs' => $item->eggs->keyBy('id')->toArray(),
264-
]);
265-
})->keyBy('id'),
266-
'server_variables' => $parameters->data,
267-
]);
268-
269-
return view('admin.servers.view.startup', [
270-
'server' => $parameters->server,
271-
'nests' => $nests,
272-
]);
273-
}
274-
275-
/**
276-
* Display the database management page for a specific server.
277-
*
278-
* @param \Pterodactyl\Models\Server $server
279-
* @return \Illuminate\View\View
280-
*/
281-
public function viewDatabase(Server $server)
282-
{
283-
$this->repository->loadDatabaseRelations($server);
284-
285-
return view('admin.servers.view.database', [
286-
'hosts' => $this->databaseHostRepository->all(),
287-
'server' => $server,
288-
]);
289-
}
290-
291-
/**
292-
* Display the management page when viewing a specific server.
293-
*
294-
* @param \Pterodactyl\Models\Server $server
295-
* @return \Illuminate\View\View
296-
*
297-
* @throws \Pterodactyl\Exceptions\DisplayException
298-
*/
299-
public function viewManage(Server $server)
300-
{
301-
if ($server->installed > 1) {
302-
throw new DisplayException('This server is in a failed installation state and must be deleted and recreated.');
303-
}
304-
305-
return view('admin.servers.view.manage', ['server' => $server]);
306-
}
307-
308-
/**
309-
* Display the deletion page for a server.
310-
*
311-
* @param \Pterodactyl\Models\Server $server
312-
* @return \Illuminate\View\View
313-
*/
314-
public function viewDelete(Server $server)
315-
{
316-
return view('admin.servers.view.delete', ['server' => $server]);
317-
}
318-
319173
/**
320174
* Update the details for a server.
321175
*

0 commit comments

Comments
 (0)