mirror of
				https://github.com/pelican-dev/panel.git
				synced 2025-11-04 11:26:52 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace App\Services\Eggs;
 | 
						|
 | 
						|
use App\Models\Egg;
 | 
						|
use App\Models\Server;
 | 
						|
use App\Models\ServerVariable;
 | 
						|
use Illuminate\Support\Arr;
 | 
						|
 | 
						|
class EggChangerService
 | 
						|
{
 | 
						|
    public function handle(Server $server, Egg|int $newEgg, bool $keepOldVariables = true): void
 | 
						|
    {
 | 
						|
        if (!$newEgg instanceof Egg) {
 | 
						|
            $newEgg = Egg::findOrFail($newEgg);
 | 
						|
        }
 | 
						|
 | 
						|
        if ($server->egg->id === $newEgg->id) {
 | 
						|
            return;
 | 
						|
        }
 | 
						|
 | 
						|
        // Change egg id, default image and startup command
 | 
						|
        $server->forceFill([
 | 
						|
            'egg_id' => $newEgg->id,
 | 
						|
            'image' => Arr::first($newEgg->docker_images),
 | 
						|
            'startup' => Arr::first($newEgg->startup_commands),
 | 
						|
        ])->saveOrFail();
 | 
						|
 | 
						|
        $oldVariables = [];
 | 
						|
        if ($keepOldVariables) {
 | 
						|
            // Keep copy of old server variables
 | 
						|
            foreach ($server->serverVariables as $serverVariable) {
 | 
						|
                $oldVariables[$serverVariable->variable->env_variable] = $serverVariable->variable_value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        // Delete old server variables
 | 
						|
        ServerVariable::where('server_id', $server->id)->delete();
 | 
						|
 | 
						|
        // Create new server variables
 | 
						|
        foreach ($newEgg->variables as $eggVariable) {
 | 
						|
            ServerVariable::create([
 | 
						|
                'server_id' => $server->id,
 | 
						|
                'variable_id' => $eggVariable->id,
 | 
						|
                'variable_value' => $oldVariables[$eggVariable->env_variable] ?? $eggVariable->default_value,
 | 
						|
            ]);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |