2018-11-13 21:55:59 +01:00
|
|
|
from cement.core.controller import CementBaseController, expose
|
|
|
|
|
from cement.core import handler, hook
|
|
|
|
|
from wo.core.fileutils import WOFileUtils
|
|
|
|
|
from wo.cli.plugins.sitedb import *
|
|
|
|
|
from wo.core.mysql import *
|
|
|
|
|
from wo.core.logging import Log
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def wo_sync_hook(app):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WOSyncController(CementBaseController):
|
|
|
|
|
class Meta:
|
|
|
|
|
label = 'sync'
|
|
|
|
|
stacked_on = 'base'
|
|
|
|
|
stacked_type = 'nested'
|
|
|
|
|
description = 'synchronize the WordOps database'
|
|
|
|
|
|
|
|
|
|
@expose(hide=True)
|
|
|
|
|
def default(self):
|
|
|
|
|
self.sync()
|
|
|
|
|
|
|
|
|
|
@expose(hide=True)
|
|
|
|
|
def sync(self):
|
|
|
|
|
"""
|
|
|
|
|
1. reads database information from wp/wo-config.php
|
|
|
|
|
2. updates records into wo database accordingly.
|
|
|
|
|
"""
|
|
|
|
|
Log.info(self, "Synchronizing wo database, please wait...")
|
|
|
|
|
sites = getAllsites(self)
|
|
|
|
|
if not sites:
|
|
|
|
|
pass
|
|
|
|
|
for site in sites:
|
|
|
|
|
if site.site_type in ['mysql', 'wp', 'wpsubdir', 'wpsubdomain']:
|
|
|
|
|
wo_site_webroot = site.site_path
|
|
|
|
|
# Read config files
|
|
|
|
|
configfiles = glob.glob(wo_site_webroot + '/*-config.php')
|
|
|
|
|
|
2019-03-04 12:18:20 +01:00
|
|
|
# search for wp-config.php inside htdocs/
|
2018-11-13 21:55:59 +01:00
|
|
|
if not configfiles:
|
|
|
|
|
Log.debug(self, "Config files not found in {0}/ "
|
|
|
|
|
.format(wo_site_webroot))
|
|
|
|
|
if site.site_type != 'mysql':
|
|
|
|
|
Log.debug(self, "Searching wp-config.php in {0}/htdocs/ "
|
|
|
|
|
.format(wo_site_webroot))
|
|
|
|
|
configfiles = glob.glob(wo_site_webroot + '/htdocs/wp-config.php')
|
|
|
|
|
|
|
|
|
|
if configfiles:
|
|
|
|
|
if WOFileUtils.isexist(self, configfiles[0]):
|
|
|
|
|
wo_db_name = (WOFileUtils.grep(self, configfiles[0],
|
|
|
|
|
'DB_NAME').split(',')[1]
|
|
|
|
|
.split(')')[0].strip().replace('\'', ''))
|
|
|
|
|
wo_db_user = (WOFileUtils.grep(self, configfiles[0],
|
|
|
|
|
'DB_USER').split(',')[1]
|
|
|
|
|
.split(')')[0].strip().replace('\'', ''))
|
|
|
|
|
wo_db_pass = (WOFileUtils.grep(self, configfiles[0],
|
|
|
|
|
'DB_PASSWORD').split(',')[1]
|
|
|
|
|
.split(')')[0].strip().replace('\'', ''))
|
|
|
|
|
wo_db_host = (WOFileUtils.grep(self, configfiles[0],
|
|
|
|
|
'DB_HOST').split(',')[1]
|
|
|
|
|
.split(')')[0].strip().replace('\'', ''))
|
|
|
|
|
|
|
|
|
|
# Check if database really exist
|
|
|
|
|
try:
|
|
|
|
|
if not WOMysql.check_db_exists(self, wo_db_name):
|
|
|
|
|
# Mark it as deleted if not exist
|
|
|
|
|
wo_db_name = 'deleted'
|
|
|
|
|
wo_db_user = 'deleted'
|
|
|
|
|
wo_db_pass = 'deleted'
|
|
|
|
|
except StatementExcecutionError as e:
|
|
|
|
|
Log.debug(self, str(e))
|
|
|
|
|
except Exception as e:
|
|
|
|
|
Log.debug(self, str(e))
|
|
|
|
|
|
|
|
|
|
if site.db_name != wo_db_name:
|
|
|
|
|
# update records if any mismatch found
|
|
|
|
|
Log.debug(self, "Updating wo db record for {0}"
|
|
|
|
|
.format(site.sitename))
|
|
|
|
|
updateSiteInfo(self, site.sitename,
|
|
|
|
|
db_name=wo_db_name,
|
|
|
|
|
db_user=wo_db_user,
|
|
|
|
|
db_password=wo_db_pass,
|
|
|
|
|
db_host=wo_db_host)
|
|
|
|
|
else:
|
|
|
|
|
Log.debug(self, "Config files not found for {0} "
|
|
|
|
|
.format(site.sitename))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def load(app):
|
|
|
|
|
# register the plugin class.. this only happens if the plugin is enabled
|
|
|
|
|
handler.register(WOSyncController)
|
|
|
|
|
# register a hook (function) to run after arguments are parsed.
|
|
|
|
|
hook.register('post_argument_parsing', wo_sync_hook)
|