public function ajax_check_mysql_credentials()
{
$xml = new \SimpleXMLElement('<response></response>');
// Missing anything?
if (!isset($_POST['host'])) {
$xml->addChild('status', 0);
$xml_error = $xml->addChild('error');
$xml_error->addChild('id', '#mysqldatabasehost');
$xml_error->addChild('message', _t('The database host field was left empty.'));
}
if (!isset($_POST['database'])) {
$xml->addChild('status', 0);
$xml_error = $xml->addChild('error');
$xml_error->addChild('id', '#mysqldatabasename');
$xml_error->addChild('message', _t('The database name field was left empty.'));
}
if (!isset($_POST['user'])) {
$xml->addChild('status', 0);
$xml_error = $xml->addChild('error');
$xml_error->addChild('id', '#mysqldatabaseuser');
$xml_error->addChild('message', _t('The database user field was left empty.'));
}
if (isset($_POST['table_prefix']) && preg_replace('/[^a-zA-Z_]/', '', $_POST['table_prefix']) !== $_POST['table_prefix']) {
$xml->addChild('status', 0);
$xml_error = $xml->addChild('error');
$xml_error->addChild('id', '#tableprefix');
$xml_error->addChild('message', _t('Allowed characters are A-Z, a-z and "_".'));
}
if (!isset($xml_error)) {
// Can we connect to the DB?
$pdo = 'mysql:host=' . $_POST['host'] . ';dbname=' . $_POST['database'];
try {
$connect = DB::connect($pdo, $_POST['user'], $_POST->raw('pass'));
$xml->addChild('status', 1);
} catch (\Exception $e) {
$xml->addChild('status', 0);
$xml_error = $xml->addChild('error');
if (strpos($e->getMessage(), '[1045]')) {
$xml_error->addChild('id', '#mysqldatabaseuser');
$xml_error->addChild('id', '#mysqldatabasepass');
$xml_error->addChild('message', _t('Access denied. Make sure these credentials are valid.'));
} else {
if (strpos($e->getMessage(), '[1049]')) {
$xml_error->addChild('id', '#mysqldatabasename');
$xml_error->addChild('message', _t('That database does not exist.'));
} else {
if (strpos($e->getMessage(), '[2005]')) {
$xml_error->addChild('id', '#mysqldatabasehost');
$xml_error->addChild('message', _t('Could not connect to host.'));
} else {
$xml_error->addChild('id', '#mysqldatabaseuser');
$xml_error->addChild('id', '#mysqldatabasepass');
$xml_error->addChild('id', '#mysqldatabasename');
$xml_error->addChild('id', '#mysqldatabasehost');
$xml_error->addChild('message', $e->getMessage());
}
}
}
}
}
$xml = $xml->asXML();
ob_clean();
header("Content-type: application/xml");
header("Cache-Control: no-cache");
print $xml;
}