. */ 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 { public function __construct() { parent::__construct(Webtrees::NAME, Webtrees::VERSION); } public function loadCommands(): self { $commands = glob(pattern: __DIR__ . '/Commands/*.php') ?: []; foreach ($commands as $command) { $class = __NAMESPACE__ . '\\Commands\\' . basename(path: $command, suffix: '.php'); $this->add(Registry::container()->get($class)); } 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; } }