Add the ability to create mounts

This commit is contained in:
Matthew Penner 2020-05-20 18:55:59 -06:00
parent a750362e5a
commit a4af8ec977
6 changed files with 167 additions and 5 deletions

View file

@ -1,26 +1,45 @@
<?php
namespace Pterodactyl\Http\Controllers\Admin\Mounts;
namespace Pterodactyl\Http\Controllers\Admin;
use Prologue\Alerts\AlertsMessageBag;
use Pterodactyl\Http\Controllers\Controller;
use Pterodactyl\Http\Requests\Admin\MountFormRequest;
use Pterodactyl\Repositories\Eloquent\MountRepository;
use Pterodactyl\Services\Mounts\MountCreationService;
class MountController extends Controller
{
/**
* @var \Prologue\Alerts\AlertsMessageBag
*/
protected $alert;
/**
* @var \Pterodactyl\Repositories\Eloquent\MountRepository
*/
protected $repository;
/**
* @var \Pterodactyl\Services\Locations\LocationCreationService
*/
protected $creationService;
/**
* MountController constructor.
*
* @param \Prologue\Alerts\AlertsMessageBag $alert
* @param \Pterodactyl\Repositories\Eloquent\MountRepository $repository
* @param \Pterodactyl\Services\Mounts\MountCreationService $creationService
*/
public function __construct(
MountRepository $repository
AlertsMessageBag $alert,
MountRepository $repository,
MountCreationService $creationService
) {
$this->alert = $alert;
$this->repository = $repository;
$this->creationService = $creationService;
}
/**
@ -34,4 +53,21 @@ class MountController extends Controller
'mounts' => $this->repository->getAllWithDetails(),
]);
}
/**
* Handle request to create new mount.
*
* @param \Pterodactyl\Http\Requests\Admin\MountFormRequest $request
* @return \Illuminate\Http\RedirectResponse
*
* @throws \Throwable
*/
public function create(MountFormRequest $request)
{
$mount = $this->creationService->handle($request->normalize());
$this->alert->success('Mount was created successfully.')->flash();
//return redirect()->route('admin.mounts.view', $mount->id);
return redirect()->route('admin.mounts');
}
}

View file

@ -0,0 +1,29 @@
<?php
/**
* Pterodactyl - Panel
* Copyright (c) 2015 - 2017 Dane Everitt <dane@daneeveritt.com>.
*
* This software is licensed under the terms of the MIT license.
* https://opensource.org/licenses/MIT
*/
namespace Pterodactyl\Http\Requests\Admin;
use Pterodactyl\Models\Mount;
class MountFormRequest extends AdminFormRequest
{
/**
* Setup the validation rules to use for these requests.
*
* @return array
*/
public function rules()
{
if ($this->method() === 'PATCH') {
return Mount::getRulesForUpdate($this->route()->parameter('mount')->id);
}
return Mount::getRules();
}
}

View file

@ -52,7 +52,7 @@ class Mount extends Model
* @var string
*/
public static $validationRules = [
'id' => 'required|string|size:36|unique:mounts,id',
// 'id' => 'required|string|size:36|unique:mounts,id',
'name' => 'required|string|min:2|max:64|unique:mounts,name',
'description' => 'nullable|string|max:255',
'source' => 'required|string',
@ -61,6 +61,13 @@ class Mount extends Model
'user_mountable' => 'sometimes|boolean',
];
/**
* Disable timestamps on this model.
*
* @var bool
*/
public $timestamps = false;
/**
* Returns all eggs that have this mount assigned.
*

View file

@ -0,0 +1,40 @@
<?php
namespace Pterodactyl\Services\Mounts;
use Ramsey\Uuid\Uuid;
use Pterodactyl\Repositories\Eloquent\MountRepository;
class MountCreationService
{
/**
* @var \Pterodactyl\Repositories\Eloquent\MountRepository
*/
protected $repository;
/**
* MountCreationService constructor.
*
* @param \Pterodactyl\Repositories\Eloquent\MountRepository $repository
*/
public function __construct(MountRepository $repository)
{
$this->repository = $repository;
}
/**
* Create a new mount.
*
* @param array $data
* @return \Pterodactyl\Models\Mount
*
* @throws \Exception
* @throws \Pterodactyl\Exceptions\Model\DataValidationException
*/
public function handle(array $data)
{
return $this->repository->create(array_merge($data, [
'id' => Uuid::uuid4()->toString(),
]), true, true);
}
}