diff --git a/panel/api/endpoints/system.php b/panel/api/endpoints/system.php index 1d1b1a2..566628b 100644 --- a/panel/api/endpoints/system.php +++ b/panel/api/endpoints/system.php @@ -924,6 +924,8 @@ BASH; || is_dir('/usr/share/phpmyadmin'); $pgaInstalled = (int)trim(shell_exec("dpkg -l pgadmin4 2>/dev/null | grep -c '^ii'") ?: '0') > 0 || is_file('/usr/pgadmin4/bin/pgadmin4') || is_dir('/usr/pgadmin4'); + $adminerInstalled = is_file(NOVACPX_ROOT . '/adminer.php'); + $adminerVer = $adminerInstalled ? 'bundled' : ''; $pmaVer = $pmaInstalled ? trim(shell_exec("dpkg -l phpmyadmin 2>/dev/null | awk '/^ii/{print $3}' | head -1") ?: '') : ''; @@ -931,8 +933,9 @@ BASH; ? trim(shell_exec("pgadmin4 --version 2>/dev/null | grep -oP '[0-9]+\\.[0-9]+' | head -1") ?: '') : ''; Response::success([ - 'phpmyadmin' => ['installed' => $pmaInstalled, 'version' => $pmaVer], + 'phpmyadmin' => ['installed' => $pmaInstalled, 'version' => $pmaVer, 'url' => '/phpmyadmin'], 'pgadmin' => ['installed' => $pgaInstalled, 'version' => $pgaVer], + 'adminer' => ['installed' => $adminerInstalled, 'version' => $adminerVer, 'url' => '/adminer.php'], ]); })(), diff --git a/panel/public/assets/js/admin.js b/panel/public/assets/js/admin.js index 5c2bc5b..e7761b6 100644 --- a/panel/public/assets/js/admin.js +++ b/panel/public/assets/js/admin.js @@ -2384,6 +2384,8 @@ ${ips.length ? ` const actE = engRes?.data?.active_engine || 'mysql'; const dbs = dbRes?.data || []; const tools = toolsRes?.data || {}; + const pgDbs = (dbs||[]).filter(d => d.db_type === 'pgsql' || d.db_type === 'postgresql'); + const myDbs = (dbs||[]).filter(d => !d.db_type || d.db_type === 'mysql' || d.db_type === 'mariadb'); const engineCard = (id, label, icon) => { const e = eng[id] || {}; @@ -2415,6 +2417,7 @@ ${ips.length ? ` const t = tools[id] || {}; const statusColor = t.installed ? 'green' : 'default'; const statusText = t.installed ? 'Installed' : 'Not Installed'; + const openUrl = t.url || url; return `
@@ -2478,16 +2481,28 @@ ${dbs.map(d=>`