. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Cli; use Fisharebest\Webtrees\DB; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Webtrees; use Symfony\Component\Console\Application; use function parse_ini_file; final class Console extends Application { private const array COMMANDS = [ Commands\CompilePoFiles::class, Commands\TreeCreate::class, Commands\TreeList::class, Commands\UserCreate::class, Commands\UserList::class, ]; public function __construct() { parent::__construct(Webtrees::NAME, Webtrees::VERSION); } public function loadCommands(): self { foreach (self::COMMANDS as $command) { $this->add(Registry::container()->get($command)); } return $this; } public function bootstrap(): self { I18N::init(code: 'en-US', setup: true); $config = parse_ini_file(filename: Webtrees::CONFIG_FILE); if ($config === false) { return $this; } DB::connect( driver: $config['dbtype'] ?? DB::MYSQL, host: $config['dbhost'], port: $config['dbport'], database: $config['dbname'], username: $config['dbuser'], password: $config['dbpass'], prefix: $config['tblpfx'], key: $config['dbkey'] ?? '', certificate: $config['dbcert'] ?? '', ca: $config['dbca'] ?? '', verify_certificate: (bool) ($config['dbverify'] ?? ''), ); DB::exec('START TRANSACTION'); return $this; } }