Add mounts page to server admin view
This commit is contained in:
parent
34f718a8b1
commit
fa902cc074
9 changed files with 151 additions and 17 deletions
|
@ -8,9 +8,9 @@ use Prologue\Alerts\AlertsMessageBag;
|
|||
use Pterodactyl\Exceptions\DisplayException;
|
||||
use Pterodactyl\Http\Controllers\Controller;
|
||||
use Pterodactyl\Services\Mounts\MountUpdateService;
|
||||
use Pterodactyl\Http\Requests\Admin\MountFormRequest;
|
||||
use Pterodactyl\Services\Mounts\MountCreationService;
|
||||
use Pterodactyl\Services\Mounts\MountDeletionService;
|
||||
use Pterodactyl\Http\Requests\Admin\MountFormRequest;
|
||||
use Pterodactyl\Repositories\Eloquent\MountRepository;
|
||||
use Pterodactyl\Contracts\Repository\NestRepositoryInterface;
|
||||
use Pterodactyl\Contracts\Repository\LocationRepositoryInterface;
|
||||
|
@ -22,6 +22,11 @@ class MountController extends Controller
|
|||
*/
|
||||
protected $alert;
|
||||
|
||||
/**
|
||||
* @var \Pterodactyl\Repositories\Eloquent\MountRepository
|
||||
*/
|
||||
protected $mountRepository;
|
||||
|
||||
/**
|
||||
* @var \Pterodactyl\Contracts\Repository\NestRepositoryInterface
|
||||
*/
|
||||
|
|
|
@ -9,6 +9,7 @@ use Pterodactyl\Models\Server;
|
|||
use Illuminate\Contracts\View\Factory;
|
||||
use Pterodactyl\Exceptions\DisplayException;
|
||||
use Pterodactyl\Http\Controllers\Controller;
|
||||
use Pterodactyl\Repositories\Eloquent\MountRepository;
|
||||
use Pterodactyl\Repositories\Eloquent\NestRepository;
|
||||
use Pterodactyl\Repositories\Eloquent\NodeRepository;
|
||||
use Pterodactyl\Repositories\Eloquent\ServerRepository;
|
||||
|
@ -35,6 +36,11 @@ class ServerViewController extends Controller
|
|||
*/
|
||||
private $repository;
|
||||
|
||||
/**
|
||||
* @var \Pterodactyl\Repositories\Eloquent\MountRepository
|
||||
*/
|
||||
protected $mountRepository;
|
||||
|
||||
/**
|
||||
* @var \Pterodactyl\Repositories\Eloquent\NestRepository
|
||||
*/
|
||||
|
@ -53,27 +59,30 @@ class ServerViewController extends Controller
|
|||
/**
|
||||
* ServerViewController constructor.
|
||||
*
|
||||
* @param \Illuminate\Contracts\View\Factory $view
|
||||
* @param \Pterodactyl\Repositories\Eloquent\DatabaseHostRepository $databaseHostRepository
|
||||
* @param \Pterodactyl\Repositories\Eloquent\NestRepository $nestRepository
|
||||
* @param \Pterodactyl\Repositories\Eloquent\LocationRepository $locationRepository
|
||||
* @param \Pterodactyl\Repositories\Eloquent\MountRepository $mountRepository
|
||||
* @param \Pterodactyl\Repositories\Eloquent\NestRepository $nestRepository
|
||||
* @param \Pterodactyl\Repositories\Eloquent\NodeRepository $nodeRepository
|
||||
* @param \Pterodactyl\Repositories\Eloquent\ServerRepository $repository
|
||||
* @param \Illuminate\Contracts\View\Factory $view
|
||||
*/
|
||||
public function __construct(
|
||||
Factory $view,
|
||||
DatabaseHostRepository $databaseHostRepository,
|
||||
NestRepository $nestRepository,
|
||||
LocationRepository $locationRepository,
|
||||
MountRepository $mountRepository,
|
||||
NestRepository $nestRepository,
|
||||
NodeRepository $nodeRepository,
|
||||
ServerRepository $repository,
|
||||
Factory $view
|
||||
ServerRepository $repository
|
||||
) {
|
||||
$this->view = $view;
|
||||
$this->databaseHostRepository = $databaseHostRepository;
|
||||
$this->repository = $repository;
|
||||
$this->locationRepository = $locationRepository;
|
||||
$this->mountRepository = $mountRepository;
|
||||
$this->nestRepository = $nestRepository;
|
||||
$this->nodeRepository = $nodeRepository;
|
||||
$this->locationRepository = $locationRepository;
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -160,6 +169,21 @@ class ServerViewController extends Controller
|
|||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all of the mounts that exist for the server.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Pterodactyl\Models\Server $server
|
||||
* @return \Illuminate\Contracts\View\View
|
||||
*/
|
||||
public function mounts(Request $request, Server $server)
|
||||
{
|
||||
return $this->view->make('admin.servers.view.mounts', [
|
||||
'mounts' => $this->mountRepository->getMountListForServer($server),
|
||||
'server' => $server,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the base server management page, or an exception if the server
|
||||
* is in a state that cannot be recovered from.
|
||||
|
@ -169,7 +193,6 @@ class ServerViewController extends Controller
|
|||
* @return \Illuminate\Contracts\View\View
|
||||
*
|
||||
* @throws \Pterodactyl\Exceptions\DisplayException
|
||||
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
|
||||
*/
|
||||
public function manage(Request $request, Server $server)
|
||||
{
|
||||
|
|
|
@ -16,6 +16,7 @@ use Prologue\Alerts\AlertsMessageBag;
|
|||
use Pterodactyl\Exceptions\DisplayException;
|
||||
use Pterodactyl\Http\Controllers\Controller;
|
||||
use Pterodactyl\Services\Servers\SuspensionService;
|
||||
use Pterodactyl\Repositories\Eloquent\MountRepository;
|
||||
use Pterodactyl\Services\Servers\ServerDeletionService;
|
||||
use Pterodactyl\Services\Servers\ReinstallServerService;
|
||||
use Pterodactyl\Services\Servers\BuildModificationService;
|
||||
|
@ -83,6 +84,11 @@ class ServersController extends Controller
|
|||
*/
|
||||
protected $detailsModificationService;
|
||||
|
||||
/**
|
||||
* @var \Pterodactyl\Repositories\Eloquent\MountRepository
|
||||
*/
|
||||
protected $mountRepository;
|
||||
|
||||
/**
|
||||
* @var \Pterodactyl\Contracts\Repository\NestRepositoryInterface
|
||||
*/
|
||||
|
@ -123,6 +129,7 @@ class ServersController extends Controller
|
|||
* @param \Pterodactyl\Services\Servers\DetailsModificationService $detailsModificationService
|
||||
* @param \Pterodactyl\Services\Servers\ReinstallServerService $reinstallService
|
||||
* @param \Pterodactyl\Contracts\Repository\ServerRepositoryInterface $repository
|
||||
* @param \Pterodactyl\Repositories\Eloquent\MountRepository $mountRepository
|
||||
* @param \Pterodactyl\Contracts\Repository\NestRepositoryInterface $nestRepository
|
||||
* @param \Pterodactyl\Services\Servers\StartupModificationService $startupModificationService
|
||||
* @param \Pterodactyl\Services\Servers\SuspensionService $suspensionService
|
||||
|
@ -140,6 +147,7 @@ class ServersController extends Controller
|
|||
DetailsModificationService $detailsModificationService,
|
||||
ReinstallServerService $reinstallService,
|
||||
ServerRepositoryInterface $repository,
|
||||
MountRepository $mountRepository,
|
||||
NestRepositoryInterface $nestRepository,
|
||||
StartupModificationService $startupModificationService,
|
||||
SuspensionService $suspensionService
|
||||
|
@ -157,6 +165,7 @@ class ServersController extends Controller
|
|||
$this->nestRepository = $nestRepository;
|
||||
$this->reinstallService = $reinstallService;
|
||||
$this->repository = $repository;
|
||||
$this->mountRepository = $mountRepository;
|
||||
$this->startupModificationService = $startupModificationService;
|
||||
$this->suspensionService = $suspensionService;
|
||||
}
|
||||
|
@ -168,7 +177,6 @@ class ServersController extends Controller
|
|||
* @param \Pterodactyl\Models\Server $server
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*
|
||||
* @throws \Pterodactyl\Exceptions\DisplayException
|
||||
* @throws \Pterodactyl\Exceptions\Model\DataValidationException
|
||||
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
|
||||
*/
|
||||
|
|
|
@ -4,6 +4,7 @@ namespace Pterodactyl\Repositories\Eloquent;
|
|||
|
||||
use Pterodactyl\Models\Mount;
|
||||
use Illuminate\Support\Collection;
|
||||
use Pterodactyl\Models\Server;
|
||||
use Pterodactyl\Repositories\Concerns\Searchable;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use Pterodactyl\Exceptions\Repository\RecordNotFoundException;
|
||||
|
@ -48,4 +49,22 @@ class MountRepository extends EloquentRepository
|
|||
throw new RecordNotFoundException;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return mounts available to a server. (ignoring if they are or are not mounted)
|
||||
*
|
||||
* @param Server $server
|
||||
* @return \Illuminate\Support\Collection
|
||||
*/
|
||||
public function getMountListForServer(Server $server): Collection
|
||||
{
|
||||
return $this->getBuilder()
|
||||
->whereHas('eggs', function ($q) use ($server) {
|
||||
$q->where('id', '=', $server->egg_id);
|
||||
})
|
||||
->whereHas('nodes', function ($q) use ($server) {
|
||||
$q->where('id', '=', $server->node_id);
|
||||
})
|
||||
->get($this->getColumns());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,6 +29,11 @@
|
|||
|
||||
<form action="{{ route('admin.mounts.view', $mount->id) }}" method="POST">
|
||||
<div class="box-body">
|
||||
<div class="form-group">
|
||||
<label for="PUniqueID" class="form-label">Unique ID</label>
|
||||
<input type="text" id="PUniqueID" class="form-control" value="{{ $mount->uuid }}" disabled />
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="pName" class="form-label">Name</label>
|
||||
<input type="text" id="pName" name="name" class="form-control" value="{{ $mount->name }}" />
|
||||
|
@ -117,8 +122,8 @@
|
|||
|
||||
@foreach ($mount->eggs as $egg)
|
||||
<tr>
|
||||
<td><code>{{ $egg->id }}</code></td>
|
||||
<td><a href="{{ route('admin.nests.egg.view', $egg->id) }}">{{ $egg->name }}</a></td>
|
||||
<td class="col-sm-2 middle"><code>{{ $egg->id }}</code></td>
|
||||
<td class="middle"><a href="{{ route('admin.nests.egg.view', $egg->id) }}">{{ $egg->name }}</a></td>
|
||||
<td class="col-sm-1 middle">
|
||||
<button data-action="detach-egg" data-id="{{ $egg->id }}" class="btn btn-sm btn-danger"><i class="fa fa-trash-o"></i></button>
|
||||
</td>
|
||||
|
@ -148,9 +153,9 @@
|
|||
|
||||
@foreach ($mount->nodes as $node)
|
||||
<tr>
|
||||
<td><code>{{ $node->id }}</code></td>
|
||||
<td><a href="{{ route('admin.nodes.view', $node->id) }}">{{ $node->name }}</a></td>
|
||||
<td><code>{{ $node->fqdn }}</code></td>
|
||||
<td class="col-sm-2 middle"><code>{{ $node->id }}</code></td>
|
||||
<td class="middle"><a href="{{ route('admin.nodes.view', $node->id) }}">{{ $node->name }}</a></td>
|
||||
<td class="middle"><code>{{ $node->fqdn }}</code></td>
|
||||
<td class="col-sm-1 middle">
|
||||
<button data-action="detach-node" data-id="{{ $node->id }}" class="btn btn-sm btn-danger"><i class="fa fa-trash-o"></i></button>
|
||||
</td>
|
||||
|
@ -254,7 +259,7 @@
|
|||
@section('footer-scripts')
|
||||
@parent
|
||||
|
||||
<script type="application/javascript">
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#pEggs').select2({
|
||||
placeholder: 'Select eggs..',
|
||||
|
|
|
@ -21,6 +21,9 @@
|
|||
<li class="{{ $router->currentRouteNamed('admin.servers.view.database') ? 'active' : '' }}">
|
||||
<a href="{{ route('admin.servers.view.database', $server->id) }}">Database</a>
|
||||
</li>
|
||||
<li class="{{ $router->currentRouteNamed('admin.servers.view.mounts') ? 'active' : '' }}">
|
||||
<a href="{{ route('admin.servers.view.mounts', $server->id) }}">Mounts</a>
|
||||
</li>
|
||||
@endif
|
||||
<li class="{{ $router->currentRouteNamed('admin.servers.view.manage') ? 'active' : '' }}">
|
||||
<a href="{{ route('admin.servers.view.manage', $server->id) }}">Manage</a>
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
<th>Username</th>
|
||||
<th>Connections From</th>
|
||||
<th>Host</th>
|
||||
<th>Max Conenctions</th>
|
||||
<th>Max Connections</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
@foreach($server->databases as $database)
|
||||
|
|
70
resources/views/admin/servers/view/mounts.blade.php
Normal file
70
resources/views/admin/servers/view/mounts.blade.php
Normal file
|
@ -0,0 +1,70 @@
|
|||
@extends('layouts.admin')
|
||||
|
||||
@section('title')
|
||||
Server — {{ $server->name }}: Mounts
|
||||
@endsection
|
||||
|
||||
@section('content-header')
|
||||
<h1>{{ $server->name }}<small>Manage server mounts.</small></h1>
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="{{ route('admin.index') }}">Admin</a></li>
|
||||
<li><a href="{{ route('admin.servers') }}">Servers</a></li>
|
||||
<li><a href="{{ route('admin.servers.view', $server->id) }}">{{ $server->name }}</a></li>
|
||||
<li class="active">Mounts</li>
|
||||
</ol>
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
@include('admin.servers.partials.navigation')
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="box box-primary">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">Available Mounts</h3>
|
||||
</div>
|
||||
|
||||
<div class="box-body table-responsible no-padding">
|
||||
<table class="table table-hover">
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>Name</th>
|
||||
<th>Source</th>
|
||||
<th>Target</th>
|
||||
<th>Status</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
|
||||
@foreach ($mounts as $mount)
|
||||
<tr>
|
||||
<td class="col-sm-1 middle"><code>{{ $mount->id }}</code></td>
|
||||
<td class="middle"><a href="{{ route('admin.mounts.view', $mount->id) }}">{{ $mount->name }}</a></td>
|
||||
<td class="middle"><code>{{ $mount->source }}</code></td>
|
||||
<td class="col-sm-2 middle"><code>{{ $mount->target }}</code></td>
|
||||
<td class="col-sm-2 middle">
|
||||
@if ($mount->id == 2)
|
||||
<span class="label label-primary">Unmounted</span>
|
||||
@else
|
||||
<span class="label label-success">Mounted</span>
|
||||
@endif
|
||||
</td>
|
||||
|
||||
<td class="col-sm-1 middle">
|
||||
@if ($mount->id == 2)
|
||||
<button data-action="mount" data-id="{{ $mount->id }}" class="btn btn-xs btn-success"><i class="fa fa-plus"></i></button>
|
||||
@else
|
||||
<button data-action="unmount" data-id="{{ $mount->id }}" class="btn btn-xs btn-danger"><i class="fa fa-times"></i></button>
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@section('footer-scripts')
|
||||
@parent
|
||||
@endsection
|
|
@ -113,6 +113,7 @@ Route::group(['prefix' => 'servers'], function () {
|
|||
Route::get('/view/{server}/build', 'Servers\ServerViewController@build')->name('admin.servers.view.build');
|
||||
Route::get('/view/{server}/startup', 'Servers\ServerViewController@startup')->name('admin.servers.view.startup');
|
||||
Route::get('/view/{server}/database', 'Servers\ServerViewController@database')->name('admin.servers.view.database');
|
||||
Route::get('/view/{server}/mounts', 'Servers\ServerViewController@mounts')->name('admin.servers.view.mounts');
|
||||
});
|
||||
|
||||
Route::get('/view/{server}/manage', 'Servers\ServerViewController@manage')->name('admin.servers.view.manage');
|
||||
|
|
Loading…
Reference in a new issue