new installation fix
This commit is contained in:
parent
7c9d532070
commit
8896b8d05a
14
db/seed.sql
14
db/seed.sql
@ -303,17 +303,9 @@ INSERT INTO `role_permissions` VALUES
|
|||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Dumping data for table `users`
|
-- Users are created during installation step 3.
|
||||||
--
|
-- Keep seed data user-free so fresh installs do not ship demo admin accounts
|
||||||
|
-- and stay compatible with the latest users table structure.
|
||||||
LOCK TABLES `users` WRITE;
|
|
||||||
/*!40000 ALTER TABLE `users` DISABLE KEYS */;
|
|
||||||
INSERT INTO `users` VALUES
|
|
||||||
(1,1,'admin','$2y$10$uLxB5VJa9nZ3nGhukx7jOeBotQ/PtumL3ndbzTZ.TjrAr9yJH/hIq','admin@example.com',NULL,'uploads/profile_1_1771401598.png','default','active','2026-02-18 05:30:12'),
|
|
||||||
(2,1,'admin2','$2y$10$A299UOd8VZWXyuKcbcLwWewIg.7V2ti3oomGaKH9qhMm4vdG6a/xi',NULL,NULL,NULL,'default','active','2026-02-18 06:44:10'),
|
|
||||||
(5,1,'moosa','$2y$10$Ho5NrFTAb6HUH4VvCd4NZuCsKGMl4v1pvWiesEuC29fDDu6Pkg7AS','aalabry@gmail.com',NULL,NULL,'default','active','2026-02-18 09:30:38');
|
|
||||||
/*!40000 ALTER TABLE `users` ENABLE KEYS */;
|
|
||||||
UNLOCK TABLES;
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Dumping data for table `payment_methods`
|
-- Dumping data for table `payment_methods`
|
||||||
|
|||||||
@ -138,28 +138,49 @@ class DatabaseInstaller {
|
|||||||
private static function executeSqlFile(string $filePath): void {
|
private static function executeSqlFile(string $filePath): void {
|
||||||
require_once __DIR__ . '/../db/config.php';
|
require_once __DIR__ . '/../db/config.php';
|
||||||
|
|
||||||
$host = DB_HOST;
|
$pdo = db();
|
||||||
$name = DB_NAME;
|
$sql = file_get_contents($filePath);
|
||||||
$user = DB_USER;
|
if ($sql === false) {
|
||||||
$pass = DB_PASS;
|
throw new RuntimeException('Unable to read SQL file: ' . basename($filePath));
|
||||||
|
|
||||||
$passwordSegment = $pass !== '' ? ' -p' . escapeshellarg($pass) : '';
|
|
||||||
$command = sprintf(
|
|
||||||
'mysql -h %s -u %s%s %s < %s',
|
|
||||||
escapeshellarg($host),
|
|
||||||
escapeshellarg($user),
|
|
||||||
$passwordSegment,
|
|
||||||
escapeshellarg($name),
|
|
||||||
escapeshellarg($filePath)
|
|
||||||
);
|
|
||||||
|
|
||||||
$output = [];
|
|
||||||
$returnVar = 0;
|
|
||||||
exec($command . ' 2>&1', $output, $returnVar);
|
|
||||||
|
|
||||||
if ($returnVar !== 0) {
|
|
||||||
throw new Exception('Failed to execute SQL file: ' . implode("\n", $output));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$statements = self::splitSqlStatements($sql);
|
||||||
|
foreach ($statements as $index => $statement) {
|
||||||
|
if (self::shouldSkipSqlFileStatement($statement, $filePath)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$pdo->exec($statement);
|
||||||
|
} catch (PDOException $exception) {
|
||||||
|
if (self::isIgnorableMigrationError($pdo, $exception, $statement)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new RuntimeException(
|
||||||
|
'Failed to execute SQL file ' . basename($filePath) . ' at statement ' . ($index + 1) . ': ' . $exception->getMessage(),
|
||||||
|
0,
|
||||||
|
$exception
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function shouldSkipSqlFileStatement(string $statement, string $filePath): bool {
|
||||||
|
$normalized = strtoupper(trim($statement));
|
||||||
|
if ($normalized === '') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (str_starts_with($normalized, 'LOCK TABLES ') || str_starts_with($normalized, 'UNLOCK TABLES')) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (basename($filePath) === 'seed.sql' && preg_match('/^INSERT\s+INTO\s+`?users`?/i', $statement) === 1) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function ensureMigrationsTable(PDO $pdo): void {
|
private static function ensureMigrationsTable(PDO $pdo): void {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user