Add mount_server table, fix wrong field type on other many to many tables, add routes for mounting and unmounting mounts on a server, finish server admin mounts page

This commit is contained in:
Matthew Penner 2020-05-21 14:23:12 -06:00
parent a0900b8b94
commit 0eb29dac9c
8 changed files with 119 additions and 22 deletions

View file

@ -178,6 +178,8 @@ class ServerViewController extends Controller
*/
public function mounts(Request $request, Server $server)
{
$server->load('mounts');
return $this->view->make('admin.servers.view.mounts', [
'mounts' => $this->mountRepository->getMountListForServer($server),
'server' => $server,

View file

@ -378,4 +378,34 @@ class ServersController extends Controller
return response('', 204);
}
/**
* Add a mount to a server.
*
* @param Server $server
* @param int $mount_id
* @return \Illuminate\Http\RedirectResponse
*/
public function addMount(Server $server, int $mount_id)
{
$server->mounts()->attach($mount_id);
$this->alert->success('Mount was added successfully.')->flash();
return redirect()->route('admin.servers.view.mounts', $server->id);
}
/**
* Remove a mount from a server.
*
* @param Server $server
* @param int $mount_id
* @return \Illuminate\Http\RedirectResponse
*/
public function deleteMount(Server $server, int $mount_id)
{
$server->mounts()->detach($mount_id);
$this->alert->success('Mount was removed successfully.')->flash();
return redirect()->route('admin.servers.view.mounts', $server->id);
}
}

View file

@ -12,8 +12,9 @@ namespace Pterodactyl\Models;
* @property bool $read_only
* @property bool $user_mountable
*
* @property \Illuminate\Database\Eloquent\Relations\BelongsToMany $eggs
* @property \Illuminate\Database\Eloquent\Relations\BelongsToMany $nodes
* @property \Pterodactyl\Models\Egg[]|\Illuminate\Database\Eloquent\Collection $eggs
* @property \Pterodactyl\Models\Node[]|\Illuminate\Database\Eloquent\Collection $nodes
* @property \Pterodactyl\Models\Server[]|\Illuminate\Database\Eloquent\Collection $servers
*/
class Mount extends Model
{
@ -94,4 +95,14 @@ class Mount extends Model
{
return $this->belongsToMany(Node::class);
}
/**
* Returns all servers that have this mount assigned.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function servers()
{
return $this->belongsToMany(Server::class);
}
}

View file

@ -53,6 +53,7 @@ use Znck\Eloquent\Traits\BelongsToThrough;
* @property \Pterodactyl\Models\DaemonKey[]|\Illuminate\Database\Eloquent\Collection $keys
* @property \Pterodactyl\Models\ServerTransfer $transfer
* @property \Pterodactyl\Models\Backup[]|\Illuminate\Database\Eloquent\Collection $backups
* @property \Pterodactyl\Models\Mount[]|\Illuminate\Database\Eloquent\Collection $mounts
*/
class Server extends Model
{
@ -351,4 +352,14 @@ class Server extends Model
{
return $this->hasMany(Backup::class);
}
/**
* Returns all mounts that have this server has mounted.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function mounts()
{
return $this->belongsToMany(Mount::class);
}
}

View file

@ -26,14 +26,14 @@ class AddMountsTable extends Migration
Schema::create('egg_mount', function (Blueprint $table) {
$table->integer('egg_id');
$table->char('mount_id', 36);
$table->integer('mount_id');
$table->unique(['egg_id', 'mount_id']);
});
Schema::create('mount_node', function (Blueprint $table) {
$table->integer('node_id');
$table->char('mount_id', 36);
$table->integer('mount_id');
$table->unique(['node_id', 'mount_id']);
});

View file

@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddMountServerTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('mount_server', function (Blueprint $table) {
$table->integer('server_id');
$table->integer('mount_id');
$table->unique(['server_id', 'mount_id']);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('mount_server');
}
}

View file

@ -41,21 +41,33 @@
<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>
@if (! in_array($mount->id, $server->mounts->pluck('id')->toArray()))
<td class="col-sm-2 middle">
<span class="label label-primary">Unmounted</span>
</td>
<td class="col-sm-1 middle">
<form action="{{ route('admin.servers.view.mounts.toggle', [ 'server' => $server->id, 'mount' => $mount->id ]) }}" method="POST">
{!! csrf_field() !!}
<button type="submit" class="btn btn-xs btn-success"><i class="fa fa-plus"></i></button>
</form>
</td>
@else
<td class="col-sm-2 middle">
<span class="label label-success">Mounted</span>
</td>
<td class="col-sm-1 middle">
<form action="{{ route('admin.servers.view.mounts.toggle', [ 'server' => $server->id, 'mount' => $mount->id ]) }}" method="POST">
@method('DELETE')
{!! csrf_field() !!}
<button type="submit" class="btn btn-xs btn-danger"><i class="fa fa-times"></i></button>
</form>
</td>
@endif
</tr>
@endforeach
</table>
@ -64,7 +76,3 @@
</div>
</div>
@endsection
@section('footer-scripts')
@parent
@endsection

View file

@ -123,6 +123,7 @@ Route::group(['prefix' => 'servers'], function () {
Route::post('/view/{server}/build', 'ServersController@updateBuild');
Route::post('/view/{server}/startup', 'ServersController@saveStartup');
Route::post('/view/{server}/database', 'ServersController@newDatabase');
Route::post('/view/{server}/mounts/{mount}', 'ServersController@addMount')->name('admin.servers.view.mounts.toggle');
Route::post('/view/{server}/manage/toggle', 'ServersController@toggleInstall')->name('admin.servers.view.manage.toggle');
Route::post('/view/{server}/manage/suspension', 'ServersController@manageSuspension')->name('admin.servers.view.manage.suspension');
Route::post('/view/{server}/manage/reinstall', 'ServersController@reinstallServer')->name('admin.servers.view.manage.reinstall');
@ -133,6 +134,7 @@ Route::group(['prefix' => 'servers'], function () {
Route::patch('/view/{server}/database', 'ServersController@resetDatabasePassword');
Route::delete('/view/{server}/database/{database}/delete', 'ServersController@deleteDatabase')->name('admin.servers.view.database.delete');
Route::delete('/view/{server}/mounts/{mount}', 'ServersController@deleteMount');
});
/*