Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pterodactyl
GitHub Repository: pterodactyl/panel
Path: blob/1.0-develop/database/Seeders/EggSeeder.php
7458 views
1
<?php
2
3
namespace Database\Seeders;
4
5
use Pterodactyl\Models\Egg;
6
use Pterodactyl\Models\Nest;
7
use Illuminate\Database\Seeder;
8
use Illuminate\Http\UploadedFile;
9
use Pterodactyl\Services\Eggs\Sharing\EggImporterService;
10
use Pterodactyl\Services\Eggs\Sharing\EggUpdateImporterService;
11
12
class EggSeeder extends Seeder
13
{
14
protected EggImporterService $importerService;
15
16
protected EggUpdateImporterService $updateImporterService;
17
18
/**
19
* @var string[]
20
*/
21
public static array $import = [
22
'Minecraft',
23
'Source Engine',
24
'Voice Servers',
25
'Rust',
26
];
27
28
/**
29
* EggSeeder constructor.
30
*/
31
public function __construct(
32
EggImporterService $importerService,
33
EggUpdateImporterService $updateImporterService,
34
) {
35
$this->importerService = $importerService;
36
$this->updateImporterService = $updateImporterService;
37
}
38
39
/**
40
* Run the egg seeder.
41
*/
42
public function run()
43
{
44
foreach (static::$import as $nest) {
45
/* @noinspection PhpParamsInspection */
46
$this->parseEggFiles(
47
Nest::query()->where('author', '[email protected]')->where('name', $nest)->firstOrFail()
48
);
49
}
50
}
51
52
/**
53
* Loop through the list of egg files and import them.
54
*/
55
protected function parseEggFiles(Nest $nest)
56
{
57
$files = new \DirectoryIterator(database_path('Seeders/eggs/' . kebab_case($nest->name)));
58
59
$this->command->alert('Updating Eggs for Nest: ' . $nest->name);
60
/** @var \DirectoryIterator $file */
61
foreach ($files as $file) {
62
if (!$file->isFile() || !$file->isReadable()) {
63
continue;
64
}
65
66
$decoded = json_decode(file_get_contents($file->getRealPath()), true, 512, JSON_THROW_ON_ERROR);
67
$file = new UploadedFile($file->getPathname(), $file->getFilename(), 'application/json');
68
69
$egg = $nest->eggs()
70
->where('author', $decoded['author'])
71
->where('name', $decoded['name'])
72
->first();
73
74
if ($egg instanceof Egg) {
75
$this->updateImporterService->handle($egg, $file);
76
$this->command->info('Updated ' . $decoded['name']);
77
} else {
78
$this->importerService->handle($file, $nest->id);
79
$this->command->comment('Created ' . $decoded['name']);
80
}
81
}
82
83
$this->command->line('');
84
}
85
}
86
87