validate($server, $input); /** @var Service $php */ $php = $server->php($input['version']); $php->status = ServiceStatus::UNINSTALLING; $php->save(); dispatch(function () use ($php) { $php->handler()->uninstall(); $php->delete(); })->catch(function () use ($php) { $php->status = ServiceStatus::FAILED; $php->save(); })->onConnection('ssh'); } /** * @throws ValidationException */ private function validate(Server $server, array $input): void { Validator::make($input, [ 'version' => 'required|string', ])->validate(); if (! in_array($input['version'], $server->installedPHPVersions())) { throw ValidationException::withMessages( ['version' => __('This version is not installed')] ); } $hasSite = $server->sites()->where('php_version', $input['version'])->first(); if ($hasSite) { throw ValidationException::withMessages( ['version' => __('Cannot uninstall this version because some sites are using it!')] ); } } }