Fix WordPress path parsing for multi-panel support in reference-db.sh
Problem:
User reported launcher showing "0 0 domains", "0 0 users", "0 0 databases"
on Plesk server after pulling from git. Root cause was build_wordpress_section()
in reference-db.sh assuming cPanel-only directory structure.
Changes to lib/reference-db.sh:
1. WordPress Username/Domain Extraction (lines 282-304):
- OLD: Hardcoded /home/username/ path extraction
- NEW: Panel-agnostic case statement:
* cPanel: Extract from /home/username/
* Plesk: Extract domain from /var/www/vhosts/domain.com/, get owner via get_domain_owner()
* InterWorx: Extract from /chroot/home/user/var/domain.com/
* Standalone: Use stat -c "%U" to get filesystem owner
2. cPanel Domain Inference (lines 306-322):
- Moved cPanel-specific path parsing inside conditional
- Only runs if domain not already set AND on cPanel
- Removed duplicate "local domain=" declaration
Impact:
WordPress section in system reference database will now correctly identify
WordPress installations on Plesk (/var/www/vhosts/) and InterWorx
(/chroot/home/) servers, not just cPanel (/home/).
Related Commits:
- 589247d: Fixed build_domains_section() to use unified discovery
- 0984e76: Fixed domain-discovery.sh Plesk helper sourcing
Status: READY FOR TESTING ON PLESK SERVER
Remaining Work:
Comprehensive audit found 13 additional modules with cPanel-specific code
that need similar multi-panel support. See /tmp/plesk-migration-status.md
for full migration plan and recommendations.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
+28
-6
@@ -279,14 +279,35 @@ build_wordpress_section() {
|
||||
for wp_config in $wp_configs; do
|
||||
local wp_dir=$(dirname "$wp_config")
|
||||
|
||||
# Extract username from path (/home/username/...)
|
||||
local username=$(echo "$wp_dir" | cut -d'/' -f3)
|
||||
|
||||
# Try to get domain from path - check if it's in a subdomain or addon domain folder
|
||||
local path_after_home=$(echo "$wp_dir" | sed "s|^/home/$username/||")
|
||||
# Extract username/domain from path (panel-agnostic)
|
||||
local username=""
|
||||
local domain=""
|
||||
|
||||
# Check for common domain folder patterns
|
||||
case "$SYS_CONTROL_PANEL" in
|
||||
cpanel)
|
||||
# cPanel: /home/username/...
|
||||
username=$(echo "$wp_dir" | cut -d'/' -f3)
|
||||
;;
|
||||
plesk)
|
||||
# Plesk: /var/www/vhosts/domain.com/...
|
||||
domain=$(echo "$wp_dir" | cut -d'/' -f5)
|
||||
username=$(get_domain_owner "$domain" 2>/dev/null || echo "unknown")
|
||||
;;
|
||||
interworx)
|
||||
# InterWorx: /chroot/home/user/var/domain.com/...
|
||||
username=$(echo "$wp_dir" | cut -d'/' -f4)
|
||||
;;
|
||||
*)
|
||||
# Standalone: try to extract from path
|
||||
username=$(stat -c "%U" "$wp_dir" 2>/dev/null || echo "unknown")
|
||||
;;
|
||||
esac
|
||||
|
||||
# If domain not set yet (cPanel/InterWorx/Standalone), try to infer from path
|
||||
if [ -z "$domain" ] && [ "$SYS_CONTROL_PANEL" = "cpanel" ]; then
|
||||
# cPanel: check if this is primary domain or addon/subdomain
|
||||
local path_after_home=$(echo "$wp_dir" | sed "s|^/home/$username/||")
|
||||
|
||||
if [[ "$path_after_home" == public_html ]]; then
|
||||
# This is the primary domain - get it from user info
|
||||
domain=$(grep "USER|${username}|" "$SYSREF_DB" 2>/dev/null | cut -d'|' -f3 || true)
|
||||
@@ -298,6 +319,7 @@ build_wordpress_section() {
|
||||
# Might be addon/parked domain with own directory
|
||||
domain=$(echo "$path_after_home" | cut -d'/' -f1)
|
||||
fi
|
||||
fi
|
||||
|
||||
# Try to get actual domain from WP database options (more reliable)
|
||||
local db_name=$(grep "DB_NAME" "$wp_config" | grep -oP "'[^']+'" 2>/dev/null | tail -1 | tr -d "'" || true)
|
||||
|
||||
Reference in New Issue
Block a user