fix: PHP versions fallback and auto-migrate on panel start
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
func MigrationsPath() (string, error) {
|
||||
if p := os.Getenv("MIGRATIONS_PATH"); p != "" {
|
||||
return p, nil
|
||||
}
|
||||
wd, err := os.Getwd()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return filepath.Join(wd, "migrations"), nil
|
||||
}
|
||||
@@ -126,8 +126,7 @@ func dashboardPageHTML(username string) string {
|
||||
<tbody id="sites"></tbody></table></div>
|
||||
</div>
|
||||
<script>
|
||||
async function loadPHP(){const r=await fetch('/api/v1/php-versions');const d=await r.json();const s=document.getElementById('php_version');s.innerHTML='';
|
||||
(d.versions||[]).forEach(v=>{const o=document.createElement('option');o.value=v;o.textContent='PHP '+v;s.appendChild(o);});}
|
||||
async function loadPHP(){const fallback=['8.1','8.2','8.3','8.4'];let versions=fallback;try{const r=await fetch('/api/v1/php-versions');const d=await r.json();if(r.ok&&d.versions&&d.versions.length)versions=d.versions;}catch(e){}const s=document.getElementById('php_version');s.innerHTML='';versions.forEach(v=>{const o=document.createElement('option');o.value=v;o.textContent='PHP '+v;s.appendChild(o);});if(versions.length)s.value=versions[versions.length-1];}
|
||||
async function loadSites(){const r=await fetch('/api/v1/sites');const d=await r.json();const tb=document.getElementById('sites');tb.innerHTML='';
|
||||
(d.sites||[]).forEach(site=>{const tr=document.createElement('tr');
|
||||
tr.innerHTML='<td>'+site.name+'</td><td>'+site.primary_domain+'</td><td>'+(site.php_version||'-')+'</td><td><span class="badge">'+site.status+'</span></td><td><code>'+site.document_root+'</code></td>';
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package phpversions
|
||||
|
||||
var Defaults = []string{"8.1", "8.2", "8.3", "8.4"}
|
||||
|
||||
func Contains(version string) bool {
|
||||
for _, v := range Defaults {
|
||||
if v == version {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
+12
-15
@@ -8,6 +8,7 @@ import (
|
||||
"github.com/jackc/pgx/v5"
|
||||
"github.com/jackc/pgx/v5/pgxpool"
|
||||
"github.com/panelhosting/panel/internal/models"
|
||||
"github.com/panelhosting/panel/internal/phpversions"
|
||||
)
|
||||
|
||||
type SiteRepository struct {
|
||||
@@ -121,10 +122,7 @@ func (r *PHPVersionRepository) ListActive(ctx context.Context) ([]string, error)
|
||||
SELECT version FROM php_versions WHERE is_active = true ORDER BY sort_order
|
||||
`)
|
||||
if err != nil {
|
||||
if errors.Is(err, pgx.ErrNoRows) {
|
||||
return defaultPHPVersions(), nil
|
||||
}
|
||||
return nil, err
|
||||
return phpversions.Defaults, nil
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
@@ -132,25 +130,24 @@ func (r *PHPVersionRepository) ListActive(ctx context.Context) ([]string, error)
|
||||
for rows.Next() {
|
||||
var v string
|
||||
if err := rows.Scan(&v); err != nil {
|
||||
return nil, err
|
||||
return phpversions.Defaults, nil
|
||||
}
|
||||
versions = append(versions, v)
|
||||
}
|
||||
if len(versions) == 0 {
|
||||
return defaultPHPVersions(), nil
|
||||
if err := rows.Err(); err != nil || len(versions) == 0 {
|
||||
return phpversions.Defaults, nil
|
||||
}
|
||||
return versions, rows.Err()
|
||||
return versions, nil
|
||||
}
|
||||
|
||||
func (r *PHPVersionRepository) IsActive(ctx context.Context, version string) (bool, error) {
|
||||
var active bool
|
||||
err := r.pool.QueryRow(ctx, `SELECT is_active FROM php_versions WHERE version = $1`, version).Scan(&active)
|
||||
if errors.Is(err, pgx.ErrNoRows) {
|
||||
return false, nil
|
||||
if err != nil {
|
||||
if errors.Is(err, pgx.ErrNoRows) {
|
||||
return phpversions.Contains(version), nil
|
||||
}
|
||||
return phpversions.Contains(version), nil
|
||||
}
|
||||
return active, err
|
||||
}
|
||||
|
||||
func defaultPHPVersions() []string {
|
||||
return []string{"8.1", "8.2", "8.3", "8.4"}
|
||||
return active, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user