diff --git a/app/Models/Allocation.php b/app/Models/Allocation.php index 00d02de8..5f243562 100644 --- a/app/Models/Allocation.php +++ b/app/Models/Allocation.php @@ -18,7 +18,7 @@ namespace Pterodactyl\Models; * @property \Pterodactyl\Models\Server|null $server * @property \Pterodactyl\Models\Node $node */ -class Allocation extends Validable +class Allocation extends Model { /** * The resource name for this model when it is transformed into an @@ -75,7 +75,7 @@ class Allocation extends Validable /** * Accessor to automatically provide the IP alias if defined. * - * @param null|string $value + * @param string|null $value * @return string */ public function getAliasAttribute($value) @@ -86,7 +86,7 @@ class Allocation extends Validable /** * Accessor to quickly determine if this allocation has an alias. * - * @param null|string $value + * @param string|null $value * @return bool */ public function getHasAliasAttribute($value) diff --git a/app/Models/ApiKey.php b/app/Models/ApiKey.php index 53a3fa81..59517621 100644 --- a/app/Models/ApiKey.php +++ b/app/Models/ApiKey.php @@ -16,7 +16,7 @@ use Pterodactyl\Services\Acl\Api\AdminAcl; * @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $updated_at */ -class ApiKey extends Validable +class ApiKey extends Model { const RESOURCE_NAME = 'api_key'; diff --git a/app/Models/DaemonKey.php b/app/Models/DaemonKey.php index 9f5384d5..fa5bb6a9 100644 --- a/app/Models/DaemonKey.php +++ b/app/Models/DaemonKey.php @@ -4,7 +4,7 @@ namespace Pterodactyl\Models; use Znck\Eloquent\Traits\BelongsToThrough; -class DaemonKey extends Validable +class DaemonKey extends Model { use BelongsToThrough; diff --git a/app/Models/Database.php b/app/Models/Database.php index 08ef3e56..2db45734 100644 --- a/app/Models/Database.php +++ b/app/Models/Database.php @@ -2,7 +2,7 @@ namespace Pterodactyl\Models; -class Database extends Validable +class Database extends Model { /** * The resource name for this model when it is transformed into an diff --git a/app/Models/DatabaseHost.php b/app/Models/DatabaseHost.php index 88d6dcde..6fafce2f 100644 --- a/app/Models/DatabaseHost.php +++ b/app/Models/DatabaseHost.php @@ -2,7 +2,7 @@ namespace Pterodactyl\Models; -class DatabaseHost extends Validable +class DatabaseHost extends Model { /** * The resource name for this model when it is transformed into an diff --git a/app/Models/Egg.php b/app/Models/Egg.php index 8db40679..1bdb48ca 100644 --- a/app/Models/Egg.php +++ b/app/Models/Egg.php @@ -39,7 +39,7 @@ namespace Pterodactyl\Models; * @property \Pterodactyl\Models\Egg|null $scriptFrom * @property \Pterodactyl\Models\Egg|null $configFrom */ -class Egg extends Validable +class Egg extends Model { /** * The resource name for this model when it is transformed into an diff --git a/app/Models/EggVariable.php b/app/Models/EggVariable.php index 727a67b9..2db891dc 100644 --- a/app/Models/EggVariable.php +++ b/app/Models/EggVariable.php @@ -2,7 +2,7 @@ namespace Pterodactyl\Models; -class EggVariable extends Validable +class EggVariable extends Model { /** * The resource name for this model when it is transformed into an diff --git a/app/Models/Location.php b/app/Models/Location.php index 20a8e4c3..e0871edf 100644 --- a/app/Models/Location.php +++ b/app/Models/Location.php @@ -2,7 +2,7 @@ namespace Pterodactyl\Models; -class Location extends Validable +class Location extends Model { /** * The resource name for this model when it is transformed into an diff --git a/app/Models/Validable.php b/app/Models/Model.php similarity index 84% rename from app/Models/Validable.php rename to app/Models/Model.php index f11c8ad0..6607a39f 100644 --- a/app/Models/Validable.php +++ b/app/Models/Model.php @@ -5,11 +5,21 @@ namespace Pterodactyl\Models; use Illuminate\Support\Str; use Illuminate\Validation\Rule; use Illuminate\Container\Container; -use Illuminate\Database\Eloquent\Model; use Illuminate\Contracts\Validation\Factory; +use Pterodactyl\Models\Traits\WithImmutableDates; +use Illuminate\Database\Eloquent\Model as IlluminateModel; -abstract class Validable extends Model +abstract class Model extends IlluminateModel { + use WithImmutableDates; + + /** + * Set to true to return immutable Carbon date instances from the model. + * + * @var bool + */ + protected $immutableDates = false; + /** * Determines if the model should undergo data validation before it is saved * to the database. @@ -47,7 +57,7 @@ abstract class Validable extends Model static::$validatorFactory = Container::getInstance()->make(Factory::class); - static::saving(function (Validable $model) { + static::saving(function (Model $model) { return $model->validate(); }); } @@ -148,4 +158,19 @@ abstract class Validable extends Model ) )->passes(); } + + /** + * Return a timestamp as DateTime object. + * + * @param mixed $value + * @return \Illuminate\Support\Carbon|\Carbon\CarbonImmutable + */ + protected function asDateTime($value) + { + if (! $this->immutableDates) { + return parent::asDateTime($value); + } + + return $this->asImmutableDateTime($value); + } } diff --git a/app/Models/Nest.php b/app/Models/Nest.php index af77dc46..d2839919 100644 --- a/app/Models/Nest.php +++ b/app/Models/Nest.php @@ -15,7 +15,7 @@ namespace Pterodactyl\Models; * @property \Illuminate\Database\Eloquent\Collection|\Pterodactyl\Models\Egg[] $eggs * @property \Illuminate\Database\Eloquent\Collection|\Pterodactyl\Models\Pack[] $packs */ -class Nest extends Validable +class Nest extends Model { /** * The resource name for this model when it is transformed into an diff --git a/app/Models/Node.php b/app/Models/Node.php index 81cd9938..ca87e78e 100644 --- a/app/Models/Node.php +++ b/app/Models/Node.php @@ -32,9 +32,10 @@ use Pterodactyl\Models\Traits\Searchable; * @property \Pterodactyl\Models\Server[]|\Illuminate\Database\Eloquent\Collection $servers * @property \Pterodactyl\Models\Allocation[]|\Illuminate\Database\Eloquent\Collection $allocations */ -class Node extends Validable +class Node extends Model { - use Notifiable, Searchable; + use Notifiable; + use Searchable; /** * The resource name for this model when it is transformed into an diff --git a/app/Models/Pack.php b/app/Models/Pack.php index 092f1cbf..3846d74e 100644 --- a/app/Models/Pack.php +++ b/app/Models/Pack.php @@ -20,7 +20,7 @@ use Pterodactyl\Models\Traits\Searchable; * @property \Pterodactyl\Models\Egg|null $egg * @property \Illuminate\Database\Eloquent\Collection|\Pterodactyl\Models\Server[] $servers */ -class Pack extends Validable +class Pack extends Model { use Searchable; diff --git a/app/Models/Permission.php b/app/Models/Permission.php index df19f595..d91e87da 100644 --- a/app/Models/Permission.php +++ b/app/Models/Permission.php @@ -4,7 +4,7 @@ namespace Pterodactyl\Models; use Illuminate\Support\Collection; -class Permission extends Validable +class Permission extends Model { /** * The resource name for this model when it is transformed into an diff --git a/app/Models/Schedule.php b/app/Models/Schedule.php index 21cad0e5..384d354a 100644 --- a/app/Models/Schedule.php +++ b/app/Models/Schedule.php @@ -25,7 +25,7 @@ use Pterodactyl\Contracts\Extensions\HashidsInterface; * @property \Pterodactyl\Models\Server $server * @property \Pterodactyl\Models\Task[]|\Illuminate\Support\Collection $tasks */ -class Schedule extends Validable +class Schedule extends Model { /** * The resource name for this model when it is transformed into an diff --git a/app/Models/Server.php b/app/Models/Server.php index b3270348..2629449a 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -52,9 +52,11 @@ use Znck\Eloquent\Traits\BelongsToThrough; * @property \Pterodactyl\Models\DaemonKey $key * @property \Pterodactyl\Models\DaemonKey[]|\Illuminate\Database\Eloquent\Collection $keys */ -class Server extends Validable +class Server extends Model { - use BelongsToThrough, Notifiable, Searchable; + use BelongsToThrough; + use Notifiable; + use Searchable; /** * The resource name for this model when it is transformed into an diff --git a/app/Models/Setting.php b/app/Models/Setting.php index c23afb6e..1a91a578 100644 --- a/app/Models/Setting.php +++ b/app/Models/Setting.php @@ -2,7 +2,7 @@ namespace Pterodactyl\Models; -class Setting extends Validable +class Setting extends Model { /** * The table associated with the model. diff --git a/app/Models/Subuser.php b/app/Models/Subuser.php index e5e8e318..d75bbe9a 100644 --- a/app/Models/Subuser.php +++ b/app/Models/Subuser.php @@ -15,7 +15,7 @@ use Illuminate\Notifications\Notifiable; * @property \Pterodactyl\Models\User $user * @property \Pterodactyl\Models\Server $server */ -class Subuser extends Validable +class Subuser extends Model { use Notifiable; diff --git a/app/Models/Task.php b/app/Models/Task.php index 83d4119f..f5a26b78 100644 --- a/app/Models/Task.php +++ b/app/Models/Task.php @@ -22,7 +22,7 @@ use Pterodactyl\Contracts\Extensions\HashidsInterface; * @property \Pterodactyl\Models\Schedule $schedule * @property \Pterodactyl\Models\Server $server */ -class Task extends Validable +class Task extends Model { use BelongsToThrough; diff --git a/app/Models/Traits/WithImmutableDates.php b/app/Models/Traits/WithImmutableDates.php new file mode 100644 index 00000000..12b2f166 --- /dev/null +++ b/app/Models/Traits/WithImmutableDates.php @@ -0,0 +1,20 @@ +asDateTime($value)->toImmutable(); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index e3fccad4..c8efc7bd 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -40,12 +40,17 @@ use Pterodactyl\Notifications\SendPasswordReset as ResetPasswordNotification; * @property \Pterodactyl\Models\Server[]|\Illuminate\Database\Eloquent\Collection $servers * @property \Pterodactyl\Models\DaemonKey[]|\Illuminate\Database\Eloquent\Collection $keys */ -class User extends Validable implements +class User extends Model implements AuthenticatableContract, AuthorizableContract, CanResetPasswordContract { - use Authenticatable, Authorizable, AvailableLanguages, CanResetPassword, Notifiable, Searchable; + use Authenticatable; + use Authorizable; + use AvailableLanguages; + use CanResetPassword; + use Notifiable; + use Searchable; const USER_LEVEL_USER = 0; const USER_LEVEL_ADMIN = 1;