Merge branch 'v2.4.4' into v2.5.5-dev

This commit is contained in:
usmannasir
2025-09-23 10:59:13 +05:00
3 changed files with 105 additions and 4 deletions

View File

@@ -25,7 +25,7 @@ from managePHP.phpManager import PHPManager
from plogical.vhostConfs import vhostConfs from plogical.vhostConfs import vhostConfs
from ApachController.ApacheVhosts import ApacheVhost from ApachController.ApacheVhosts import ApacheVhost
try: try:
from websiteFunctions.models import Websites, ChildDomains, aliasDomains, DockerSites from websiteFunctions.models import Websites, ChildDomains, aliasDomains, DockerSites, WPSites, WPStaging
from databases.models import Databases from databases.models import Databases
except: except:
pass pass
@@ -404,6 +404,21 @@ class vhost:
if ACLManager.FindIfChild() == 0: if ACLManager.FindIfChild() == 0:
### Delete WordPress Sites and Staging Sites first
try:
wpSites = WPSites.objects.filter(owner=delWebsite)
for wpSite in wpSites:
# Delete any staging sites associated with this WP site
stagingSites = WPStaging.objects.filter(wpsite=wpSite)
for staging in stagingSites:
staging.delete()
logging.CyberCPLogFileWriter.writeToFile(f"Deleted staging site record: {staging.id}")
# Delete the WP site itself
wpSite.delete()
logging.CyberCPLogFileWriter.writeToFile(f"Deleted WP site: {wpSite.id}")
except Exception as msg:
logging.CyberCPLogFileWriter.writeToFile(f"Error cleaning up WP/Staging sites: {str(msg)}")
### Delete Docker Sites first before website deletion ### Delete Docker Sites first before website deletion
if os.path.exists('/home/docker/%s' % (virtualHostName)): if os.path.exists('/home/docker/%s' % (virtualHostName)):
@@ -497,6 +512,21 @@ class vhost:
## child check to make sure no database entires are being deleted from child server ## child check to make sure no database entires are being deleted from child server
if ACLManager.FindIfChild() == 0: if ACLManager.FindIfChild() == 0:
### Delete WordPress Sites and Staging Sites first
try:
wpSites = WPSites.objects.filter(owner=delWebsite)
for wpSite in wpSites:
# Delete any staging sites associated with this WP site
stagingSites = WPStaging.objects.filter(wpsite=wpSite)
for staging in stagingSites:
staging.delete()
logging.CyberCPLogFileWriter.writeToFile(f"Deleted staging site record: {staging.id}")
# Delete the WP site itself
wpSite.delete()
logging.CyberCPLogFileWriter.writeToFile(f"Deleted WP site: {wpSite.id}")
except Exception as msg:
logging.CyberCPLogFileWriter.writeToFile(f"Error cleaning up WP/Staging sites: {str(msg)}")
for items in databases: for items in databases:
mysqlUtilities.deleteDatabase(items.dbName, items.dbUser) mysqlUtilities.deleteDatabase(items.dbName, items.dbUser)

View File

@@ -33,7 +33,7 @@ from ApachController.ApacheVhosts import ApacheVhost
from managePHP.phpManager import PHPManager from managePHP.phpManager import PHPManager
try: try:
from websiteFunctions.models import Websites, ChildDomains, aliasDomains from websiteFunctions.models import Websites, ChildDomains, aliasDomains, WPSites, WPStaging
from loginSystem.models import Administrator from loginSystem.models import Administrator
from packages.models import Package from packages.models import Package
from CLManager.models import CLPackages from CLManager.models import CLPackages
@@ -599,6 +599,41 @@ local_name %s {
'This website already exists as child domain. [404]') 'This website already exists as child domain. [404]')
return 0, "This website already exists as child domain." return 0, "This website already exists as child domain."
# Check for orphaned staging site domain conflicts
try:
# Check if there are any WP sites with FinalURL matching this domain
conflicting_wp_sites = WPSites.objects.filter(FinalURL__icontains=virtualHostName)
for wp_site in conflicting_wp_sites:
# Check if the WP site's owner website still exists
try:
owner_website = wp_site.owner
if not Websites.objects.filter(id=owner_website.id).exists():
# Orphaned WP site found, clean it up
wp_site.delete()
logging.CyberCPLogFileWriter.writeToFile(f"Cleaned up orphaned WP site: {wp_site.id} with URL: {wp_site.FinalURL}")
except:
# WP site owner is missing, delete it
wp_site.delete()
logging.CyberCPLogFileWriter.writeToFile(f"Cleaned up orphaned WP site: {wp_site.id} (missing owner)")
# Check for orphaned staging sites
orphaned_staging = WPStaging.objects.filter(wpsite__FinalURL__icontains=virtualHostName)
for staging in orphaned_staging:
try:
# Check if the staging site's wpsite still exists and has valid owner
wpsite = staging.wpsite
owner_website = wpsite.owner
if not Websites.objects.filter(id=owner_website.id).exists():
# Owner website doesn't exist, clean up staging
staging.delete()
logging.CyberCPLogFileWriter.writeToFile(f"Cleaned up orphaned staging site: {staging.id}")
except:
# Staging site has invalid references, delete it
staging.delete()
logging.CyberCPLogFileWriter.writeToFile(f"Cleaned up orphaned staging site: {staging.id} (invalid references)")
except Exception as e:
logging.CyberCPLogFileWriter.writeToFile(f"Error during staging site cleanup: {str(e)}")
####### Limitations Check End ####### Limitations Check End
logging.CyberCPLogFileWriter.statusWriter(tempStatusPath, 'Creating DNS records..,10') logging.CyberCPLogFileWriter.statusWriter(tempStatusPath, 'Creating DNS records..,10')

View File

@@ -153,6 +153,24 @@ class WebsiteManager:
WPDelete = WPSites.objects.get(pk=DeleteID) WPDelete = WPSites.objects.get(pk=DeleteID)
if ACLManager.checkOwnership(WPDelete.owner.domain, admin, currentACL) == 1: if ACLManager.checkOwnership(WPDelete.owner.domain, admin, currentACL) == 1:
# Check if this is a staging site (referenced by WPStaging as wpsite)
staging_records = WPStaging.objects.filter(wpsite=WPDelete)
if staging_records.exists():
# This is a staging site - perform complete cleanup
staging_website = WPDelete.owner
# Use the same robust deletion method as regular websites
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " deleteVirtualHostConfigurations --virtualHostName " + staging_website.domain
ProcessUtilities.popenExecutioner(execPath)
# Delete all staging records
staging_records.delete() # Delete WPStaging records
WPDelete.delete() # Delete WPSites record
staging_website.delete() # Delete Websites record
else:
# Regular WP site deletion
WPDelete.delete() WPDelete.delete()
except BaseException as msg: except BaseException as msg:
pass pass
@@ -216,10 +234,28 @@ class WebsiteManager:
if DeleteID != None: if DeleteID != None:
wstagingDelete = WPStaging.objects.get(pk=DeleteID, owner=WPobj) wstagingDelete = WPStaging.objects.get(pk=DeleteID, owner=WPobj)
# Get the associated staging WPSites and Websites records
staging_wpsite = wstagingDelete.wpsite
staging_website = staging_wpsite.owner
# Delete the staging Websites record and all associated data BEFORE deleting DB records
# Use the same robust deletion method as regular websites
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/virtualHostUtilities.py"
execPath = execPath + " deleteVirtualHostConfigurations --virtualHostName " + staging_website.domain
ProcessUtilities.popenExecutioner(execPath)
# Delete the WPStaging record
wstagingDelete.delete() wstagingDelete.delete()
# Delete the staging WPSites record
staging_wpsite.delete()
# Delete the staging Websites record
staging_website.delete()
except BaseException as msg: except BaseException as msg:
da = str(msg) logging.CyberCPLogFileWriter.writeToFile(f"Error cleaning up WP/Staging sites: {str(msg)}")
proc = httpProc(request, 'websiteFunctions/WPsiteHome.html', proc = httpProc(request, 'websiteFunctions/WPsiteHome.html',
Data, 'createDatabase') Data, 'createDatabase')