Habari\InstallHandler::ajax_check_mysql_credentials PHP Метод

ajax_check_mysql_credentials() публичный Метод

Validate database credentials for MySQL Try to connect and verify if database name exists
    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;
    }