Current File : //etc/zpanel/panel/modules/wordpress_installation/code/MysqlConnectivity.php
<?php
error_reporting(0);
class MysqlConnectivity {
	
	private $zdbh;
	public function __construct()
	{
		require('/etc/sentora/panel/cnf/db.php');
		include_once('/etc/sentora/panel/dryden/db/driver.class.php');
		include_once('/etc/sentora/panel/dryden/debug/logger.class.php');
		include_once('/etc/sentora/panel/dryden/runtime/dataobject.class.php');
		include_once('/etc/sentora/panel/dryden/runtime/hook.class.php');
		include_once('/etc/sentora/panel/dryden/runtime/hash.class.php');
		include_once('/etc/sentora/panel/dryden/sys/versions.class.php');
		include_once('/etc/sentora/panel/dryden/ctrl/options.class.php');
		include_once('/etc/sentora/panel/dryden/ctrl/users.class.php');
		include_once('/etc/sentora/panel/dryden/ctrl/auth.class.php');
		include_once('/etc/sentora/panel/dryden/fs/director.class.php');
		include_once('/etc/sentora/panel/dryden/fs/filehandler.class.php');
		include_once('/etc/sentora/panel/inc/dbc.inc.php');

		try
		{
		    $this->zdbh = new db_driver("mysql:host=" . $host . ";dbname=" . $dbname . "", $user, $pass);
		    $mysqli=mysqli_connect($host,$user, $pass);
		} catch (PDOException $e) {
			exit();
		}
	}
	public function checkMysqlStatus() {
		$output = shell_exec('./mysqlStatus.sh');
		if($output == 'Mysql Not Running') {
			$cmd = "service mysqld restart";
			$mysql_status = MYSQL_NOT_RUNNING;
		}
		else {
			$mysql_status = MYSQL_RUNNING;
		}
		return $mysql_status;
	}
	public function checkMysqlConnection($username, $password) {
		$conn = new mysqli("localhost", $username, $password);
		if ($conn->connect_error) {
			$mysql_conn_status = MYSQL_CONNECT_FAILED;
		}
		else { 
			$mysql_conn_status = MYSQL_CONNECT_SUCCESS;
		}
		return $mysql_conn_status;
	}
	public function checkDbExist($dbname) {
        	$sql = "SELECT * FROM x_mysql_databases WHERE my_name_vc =:dbname AND my_deleted_ts is NULL";
        	$sql = $this->zdbh->prepare($sql);
        	$sql->bindParam(':dbname', $dbname);
        	$sql->execute();
			$sentora_numrows = $sql->rowCount();
			$sql = "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '".$dbname."'";
			$sql = $this->zdbh->prepare($sql);
            $sql->bindParam(':dbname', $dbname);
            $sql->execute();
            $db_numrows = $sql->rowCount();
            if($sentora_numrows && $db_numrows) {
                $db_conn_status = DATABASE_EXIST;
            }
			else if($sentora_numrows) {
				$db_conn_status = DATABASE_EXIST_ONLY_IN_SENTORA;
			}
			else if($db_numrows) {
				$db_conn_status = DATABASE_EXIST_ONLY_IN_SCHEMA;
			}
            else {
                $db_conn_status = DATABASE_DOESNOT_EXIST;
            }
        return $db_conn_status;
    }
	public function checkUserExist($username) {
        $sql = "SELECT * FROM x_mysql_users WHERE mu_name_vc =:username AND mu_deleted_ts is NULL";
        $sql = $this->zdbh->prepare($sql);
        $sql->bindParam(':username', $username);
        $sql->execute();
        $sentora_user_numrows = $sql->rowCount();
		$sql = "SELECT * FROM mysql.user WHERE user =:username AND host ='localhost'";
        $sql = $this->zdbh->prepare($sql);
        $sql->bindParam(':username', $username);
//		$sql->bindParam(':hostname', 'localhost');
        $sql->execute();
        $mysql_user_numrows = $sql->rowCount();
        if($sentora_user_numrows && $mysql_user_numrows) {
            $user_status = USER_EXIST;
        }
		else if($sentora_user_numrows) {
			$user_status = USER_EXIST_ONLY_IN_SENTORA;
		}
		else if($mysql_user_numrows) {
            $user_status = USER_EXIST_ONLY_IN_SCHEMA;
        }
        else {
            $user_status = USER_DOESNOT_EXIST;
        }
        return $user_status;
    }

	public function createDatabase($domainname, $dbname) {
        //$currentuser = ctrl_users::GetUserDetail($uid);
        $databasename = strtolower(str_replace(' ', '', $dbname));
        $check_db_exist = self::checkDbExist($dbname);
		if($check_db_exist == DATABASE_EXIST) {
			return DATABASE_ALREADY_CREATED;
		}
		
		/*else {
			continue;
		}*/
		/*if (fs_director::CheckForEmptyValue(self::CheckCreateForErrors($currentuser['username'], $databasename))) {
            return false;
        }*/
        //runtime_hook::Execute('OnBeforeCreateDatabase');
		$dbvals = self::getUserDetails($domainname);
        try {
            $db = $this->zdbh->mysqlRealEscapeString($dbvals['ac_user_vc'] . "_" . $databasename);
            $sql = $this->zdbh->prepare("CREATE DATABASE `$db` DEFAULT CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';");
            $sql->execute();
            $sql = $this->zdbh->prepare("FLUSH PRIVILEGES");
            $qqq = $sql->execute();
            $sql = $this->zdbh->prepare("INSERT INTO x_mysql_databases (
                                    my_acc_fk,
                                    my_name_vc,
                                    my_created_ts) VALUES (
                                    :userid,
                                    :name,
                                    :time)");
            $time = time();
            $name = $dbvals['ac_user_vc'] . "_" . $databasename;

            $sql->bindParam(':userid', $dbvals['ac_id_pk']);
            $sql->bindParam(':time', $time);
            $sql->bindParam(':name', $name);
            $create_db_status = $sql->execute();
            self::addPrevilages($dbvals['ac_id_pk'], $dbvals['ac_user_vc'], $name);
			if($create_db_status) {
				return DATABASE_CREATED.":".$name;
			}
			else {
				return DATABASE_NOT_CREATED;
			}
        } catch (PDOException $e) {
            return false;
        }
		//runtime_hook::Execute('OnAfterCreateDatabase');
	}
	public function createUserForNewVersion($domainname, $username, $password, $dbname) {
        global $controller;
		
		$dbvals = self::getUserDetails($domainname);
        //$access = "localhost";
        $prefix = $dbvals['ac_user_vc'];
		$uid = $dbvals['ac_id_pk'];
        // Check for spaces and remove if found...
        $username = strtolower(str_replace(' ', '', $prefix."_".$username));
	    //$dbname  = $prefix."_".$dbname;	
		$check_db_exist = self::checkUserExist($username);
        if($check_db_exist == USER_EXIST) {
            return USER_ALREADY_CREATED;
        }

        // If errors are found, then exit before creating user...
        /*if (fs_director::CheckForEmptyValue(self::CheckCreateForErrors($username, $database, $access))) {
            return false;
        }*/

        //runtime_hook::Execute('OnBeforeCreateDatabaseUser');

        $numrows = $this->zdbh->prepare("SELECT * FROM x_remote_mysql_hosts WHERE re_acc_fk=:userid AND re_deleted_ts IS NULL");
        $numrows->bindParam(':userid', $uid);
        $numrows->execute();
        $rowcount= $numrows->rowCount();
        //if ($rowcount <> 0) {
        $rowmysqls = $numrows->fetchAll();
        $localhost= array("re_host_vc"=>"localhost", "re_acc_fk"=>$uid);
        array_push($rowmysqls, $localhost);

         // Get the database name from the ID...
         $numrows = $this->zdbh->prepare("SELECT * FROM x_mysql_databases WHERE my_name_vc=:database AND my_deleted_ts IS NULL");
         $numrows->bindParam(':database', $dbname);
         $numrows->execute();
         $rowdb = $numrows->fetch();
		 $database = $rowdb['my_id_pk'];
        //$password = fs_director::GenerateRandomPassword(9, 4);
        foreach($rowmysqls as $rowmysql) {
                $access = $rowmysql['re_host_vc'];
                //$password = fs_director::GenerateRandomPassword(9, 4);
                // Create user in MySQL
                $sql = $this->zdbh->prepare("CREATE USER :username@:access;");
                $sql->bindParam(':username', $username);
                $sql->bindParam(':access', $access);
                $sql->execute();
                // Set MySQL password for new user...
                $sql = $this->zdbh->prepare("SET PASSWORD FOR :username@:access=PASSWORD(:password)");
				$sql->bindParam(':username', $username);
                $sql->bindParam(':access', $access);
                $sql->bindParam(':password', $password);
                $sql->execute();
                /*// Get the database name from the ID...
                $numrows = $this->zdbh->prepare("SELECT * FROM x_mysql_databases WHERE my_name_vc=:database AND my_deleted_ts IS NULL");
                $numrows->bindParam(':database', $dbname);
                $numrows->execute();
                $rowdb = $numrows->fetch();*/

                // Remove all priveledges to all databases
                $sql = $this->zdbh->prepare("GRANT USAGE ON *.* TO :username@:access");
                $sql->bindParam(':username', $username);
                $sql->bindParam(':access', $access);
                $sql->execute();

                //$database = $rowdb['my_id_pk'];
                $usernameClean = $this->zdbh->mysqlRealEscapeString($username);
                $accessClean = $this->zdbh->mysqlRealEscapeString($access);
                $my_name_vc = $this->zdbh->mysqlRealEscapeString($dbname);
                //$my_name_vc = $this->zdbh->mysqlRealEscapeString($rowdb['my_name_vc']);
                $sql = $this->zdbh->prepare("GRANT ALL PRIVILEGES ON `$my_name_vc`.* TO `$usernameClean`@`$accessClean`");
                //$sql->bindParam(':username', $username, PDO::PARAM_STR);
                //$sql->bindParam(':access', $access, PDO::PARAM_STR);
                //$sql->bindParam(':name', $rowdb['my_name_vc'], PDO::PARAM_STR);
                $sql->execute();
                $sql = $this->zdbh->prepare("FLUSH PRIVILEGES");
                $sql->execute();			
			}
			$sql = $this->zdbh->prepare("INSERT INTO x_mysql_users (
                                                                mu_acc_fk,
                                                                mu_name_vc,
                                                                mu_database_fk,
                                                                mu_pass_vc,
                                                                mu_access_vc,
                                                                mu_created_ts) VALUES (
                                                                :userid,
                                                                :username,
                                                                :database,
                                                                :password,
                                                                :access,
                                                                :time)");
        $sql->bindParam(':userid', $uid);
        $sql->bindParam(':username', $username);
        $sql->bindParam(':database', $database);
        $sql->bindParam(':password', $password);
        $sql->bindParam(':access', $access);
        $time = time();
        $sql->bindParam(':time', $time);
        $sql->execute();
        $mysql_userid = $this->zdbh->lastInsertId();
		$sql = $this->zdbh->prepare("INSERT INTO x_mysql_dbmap (
                                                                mm_acc_fk,
                                                                mm_user_fk,
                                                                mm_database_fk) VALUES (
                                                                :userid,
                                                                :mysqluserid,
                                                                :databaseid)");
        $sql->bindParam(':userid', $uid);
        $sql->bindParam(':mysqluserid', $mysql_userid);
        $sql->bindParam(':databaseid', $database);
        $sql->execute();
        //self::AddPrevilages($uid, $username, $database);
        //runtime_hook::Execute('OnAfterCreateDatabaseUser');
        //self::$ok = true;
		//return true;
		return USER_CREATED.":".$username;
	}
	public function addPrevilages($uid, $username, $dbname) {
		$numrows = $this->zdbh->prepare("SELECT * FROM x_remote_mysql_hosts WHERE re_acc_fk=:userid AND re_deleted_ts IS NULL");
        $numrows->bindParam(':userid', $uid);
        $numrows->execute();
        $rowhosts= $numrows->fetchAll();

        array_push($rowhosts, array("re_host_vc"=>"localhost", "re_acc_fk"=>$uid));
        foreach ($rowhosts as $rowhost) {
        	$my_name_vc = $dbname;
        	//$my_name_vc = $this->zdbh->mysqlRealEscapeString($rowdb['my_name_vc']);
        	$mu_name_vc = $username;
        	//$mu_name_vc = $this->zdbh->mysqlRealEscapeString($rowuser['mu_name_vc']);
        	$mu_access_vc = $this->zdbh->mysqlRealEscapeString($rowhost['re_host_vc']);
        	$sql = $this->zdbh->prepare("GRANT ALL PRIVILEGES ON `$my_name_vc`.* TO `$mu_name_vc`@`$mu_access_vc`");
        	$sql->bindParam(':my_name_vc', $my_name_vc, PDO::PARAM_STR);
        	$sql->bindParam(':mu_name_vc', $mu_name_vc, PDO::PARAM_STR);
        	//$sql->bindParam(':mu_access_vc', $rowuser['mu_access_vc'], PDO::PARAM_STR);
        	$sql->bindParam(':mu_access_vc', $mu_access_vc, PDO::PARAM_STR);
        	$sql->execute();
        	$sql = $this->zdbh->prepare("FLUSH PRIVILEGES");
        	$sql->execute();
		}
		return USER_PREVILAGE_ASSIGNED;
	}
	public function createUserForOldVersion($domainname, $username, $password, $dbname) {
        global $controller;

		$dbvals = self::getUserDetails($domainname);
		$access = "localhost";
		$prefix = $dbvals['ac_user_vc'];
        
        // Check for spaces and remove if found...
        $username = strtolower(str_replace(' ', '', $prefix.$username));
        
        // If errors are found, then exit before creating user...
        /*if (fs_director::CheckForEmptyValue(self::CheckCreateForErrors($username, $database, $access))) {
            return false;
       	}*/
        
        //runtime_hook::Execute('OnBeforeCreateDatabaseUser');
		//$password = fs_director::GenerateRandomPassword(9, 4);
        // Create user in MySQL
        $sql = $this->zdbh->prepare("CREATE USER :username@:access;");
        $sql->bindParam(':username', $username);
        $sql->bindParam(':access', $access);
        $sql->execute();
        // Set MySQL password for new user...
        $sql = $this->zdbh->prepare("SET PASSWORD FOR :username@:access=PASSWORD(:password)");
        $sql->bindParam(':username', $username);
        $sql->bindParam(':access', $access);
        $sql->bindParam(':password', $password);
        $sql->execute();
        // Get the database name from the ID...
        /*$numrows = $this->zdbh->prepare("SELECT * FROM x_mysql_databases WHERE my_id_pk=:database AND my_deleted_ts IS NULL");
        $numrows->bindParam(':database', $database);
        $numrows->execute();
        $rowdb = $numrows->fetch();*/
        // Remove all priveledges to all databases
        $sql = $this->zdbh->prepare("GRANT USAGE ON *.* TO :username@:access");
        $sql->bindParam(':username', $username);
        $sql->bindParam(':access', $access);
        $sql->execute();
        // Grant privileges for new user to the assigned database...
        $usernameClean = $this->zdbh->mysqlRealEscapeString($username);
        $accessClean = $this->zdbh->mysqlRealEscapeString($access);
        //$my_name_vc = $this->zdbh->mysqlRealEscapeString($rowdb['my_name_vc']);
        $my_name_vc = $this->zdbh->mysqlRealEscapeString($dbname);
        $sql = $this->zdbh->prepare("GRANT ALL PRIVILEGES ON `$my_name_vc`.* TO `$usernameClean`@`$accessClean`");
        //$sql->bindParam(':username', $username, PDO::PARAM_STR);
        //$sql->bindParam(':access', $access, PDO::PARAM_STR);
        //$sql->bindParam(':name', $rowdb['my_name_vc'], PDO::PARAM_STR);
        $sql->execute();
        $sql = $this->zdbh->prepare("FLUSH PRIVILEGES");
        $sql->execute();
        // Add user to Sentora database...
        $sql = $this->zdbh->prepare("INSERT INTO x_mysql_users (
								mu_acc_fk,
								mu_name_vc,
								mu_database_fk,
								mu_pass_vc,
								mu_access_vc,
								mu_created_ts) VALUES (
								:userid,
								:username,
								:database,
								:password,
								:access,
								:time)");
        $sql->bindParam(':userid', $uid);
        $sql->bindParam(':username', $username);
        $sql->bindParam(':database', $dbname);
        $sql->bindParam(':password', $password);
        $sql->bindParam(':access', $access);
        $time = time();
        $sql->bindParam(':time', $time);
        $sql->execute();
		$mysql_userid = $this->zdbh->lastInsertId();
       /* // Get the new users id...
        //$rowuser = $this->zdbh->query("SELECT * FROM x_mysql_users WHERE mu_name_vc='" . $username . "' AND mu_acc_fk=" . $uid . " AND mu_deleted_ts IS NULL")->fetch();
        $numrows = $this->zdbh->prepare("SELECT * FROM x_mysql_users WHERE mu_name_vc=:username AND mu_acc_fk=:userid AND mu_deleted_ts IS NULL");
        $numrows->bindParam(':username', $username);
        $numrows->bindParam(':userid', $uid);
        $numrows->execute();
        $rowuser = $numrows->fetch();
        // Add database to Sentora user account...
        self::ExecuteAddDB($uid, $rowuser['mu_id_pk'], $database);*/
		self::ExecuteAddDB($uid, $mysql_userid, $database);
        runtime_hook::Execute('OnAfterCreateDatabaseUser');
        self::$ok = true;
        return true;
    }
	public function getUserDetails($domainname) {
		$rows = $this->zdbh->prepare("SELECT a.ac_id_pk, a.ac_user_vc FROM x_accounts as a INNER JOIN x_vhosts as h ON (a.ac_id_pk = h.vh_acc_fk) WHERE h.vh_name_vc = :domainname AND a.ac_deleted_ts IS NULL");
        $rows->bindParam(':domainname', $domainname);
        $rows->execute();
        $dbvals = $rows->fetch();
		return $dbvals;
	}
	/**************************** RemoTe Mysql Start ****************************/
	public function remoteMySqlConnection ($hostname, $domainname) {
		$userdetails= self::getUserDetails($domainname);
		//$username 	= $userdetails['ac_user_vc'];
		$uid 		= $userdetails['ac_id_pk'];

        $hostname = strtolower(str_replace(' ', '', $hostname));

        $numrows = $this->zdbh->prepare("SELECT * FROM x_mysql_users WHERE mu_acc_fk =:userid AND mu_deleted_ts IS NULL");
        $numrows->bindParam(':userid', $uid);
        $numrows->execute();
        $rowcount= $numrows->rowCount();
		while ($rowmysql = $numrows->fetch()) {
                $password  = $rowmysql['mu_pass_vc'];
                $username  = $rowmysql['mu_name_vc'];
                $sql_userid= $rowmysql['mu_id_pk'];
                //$database= $rowmysql['db_id'];
                //$dbname  = $rowmysql['db_name'];
				$check_valid_hostname = self::CheckCreateForErrors($hostname,$uid,$username);
                //if (fs_director::CheckForEmptyValue(self::CheckCreateForErrors($hostname,$uid,$username))) {
                if (!$check_valid_hostname) {
                        return false;
                }
                //$password = fs_director::GenerateRandomPassword(9, 4);
                // Create user in MySQL
                $sql = $this->zdbh->prepare("CREATE USER :username@:access;");
                $sql->bindParam(':username', $username);
                $sql->bindParam(':access', $hostname);
                $sql->execute();
                // Set MySQL password for new user...
                $sql = $this->zdbh->prepare("SET PASSWORD FOR :username@:access=PASSWORD(:password)");
                $sql->bindParam(':username', $username);
                $sql->bindParam(':access', $hostname);
                $sql->bindParam(':password', $password);
                $sql->execute();
                
				$numrows1 = $this->zdbh->prepare("SELECT DISTINCT A.my_id_pk as db_id, A.my_name_vc as db_name From x_mysql_databases as A INNER JOIN x_mysql_dbmap AS B ON (A.my_id_pk = B.mm_database_fk) WHERE A.my_acc_fk=:userid AND mm_user_fk=:mysql_userid");
                $numrows1->bindParam(':userid', $uid);
                $numrows1->bindParam(':mysql_userid', $sql_userid);
                $numrows1->execute();
				$rowcount1= $numrows->rowCount();
                if($rowcount1 >0)
                {
                        while ($rowmysql1 = $numrows1->fetch()) {
                                $dbname = $rowmysql1['db_name'];
                                $sql = $this->zdbh->prepare("GRANT USAGE ON *.* TO :username@:access");
                                $sql->bindParam(':username', $username);
                                $sql->bindParam(':access', $hostname);
                                $sql->execute();
                                // Grant privileges for new user to the assigned database...
                                $usernameClean = $this->zdbh->mysqlRealEscapeString($username);
                                $accessClean = $this->zdbh->mysqlRealEscapeString($hostname);
                                $my_name_vc = $this->zdbh->mysqlRealEscapeString($dbname);
                                //$my_name_vc = $zdbh->mysqlRealEscapeString($rowdb['my_name_vc']);
                                $sql = $this->zdbh->prepare("GRANT ALL PRIVILEGES ON `$my_name_vc`.* TO `$usernameClean`@`$accessClean`");
                                //$sql->bindParam(':username', $username, PDO::PARAM_STR);
                                //$sql->bindParam(':access', $access, PDO::PARAM_STR);
                                //$sql->bindParam(':name', $rowdb['my_name_vc'], PDO::PARAM_STR);
                                $sql->execute();
                                $sql = $this->zdbh->prepare("FLUSH PRIVILEGES");
                                $sql->execute();
                        }
                }
		}
		// Add user to Sentora database...
        $sql = $this->zdbh->prepare("INSERT INTO x_remote_mysql_hosts (
                                                                re_host_vc,
                                                                re_acc_fk,
                                                                re_created_ts) VALUES (
                                                                :hostname,
                                                                :userid,
                                                                :time)");
        $sql->bindParam(':userid', $uid);
        $sql->bindParam(':hostname', $hostname);
        $time = time();
        $sql->bindParam(':time', $time);
        $sql->execute();
        // Get the new users id...
        $numrows = $this->zdbh->prepare("SELECT * FROM x_remote_mysql_hosts WHERE re_host_vc=:hostname AND re_acc_fk=:userid AND re_deleted_ts IS NULL");
        $numrows->bindParam(':hostname', $hostname);
        $numrows->bindParam(':userid', $uid);
        $numrows->execute();
        $rowuser = $numrows->fetch();
        // Add database to Sentora user account...
        //self::ExecuteAddDB($uid, $rowuser['mu_id_pk'], $database);
        //runtime_hook::Execute('OnAfterCreateDatabaseUser');
        //self::$ok = true;
        //return true;
		return HOSTNAME_CREATED;
	}
	/**************************** Remote Mysql End   ****************************/
	
	/*********************** MysqlCheck & MysqlRepair start *********************/
    public function doMySqlCheck() {
        $mysql_check_result = shell_exec("mysqlcheck --databases mysql | grep 'status' | awk '{ print $3}' ");
        if($mysql_check_result && $mysql_check_result !='OK') {
            $ret = self::doMysqlRepair();
			$mysql_check_status = $ret;
        } else {
            $mysql_check_status = MYSQL_DB_WORKING;
        }
        return $mysql_check_status;
    }
    public function doMysqlRepair() {
        $sql = "SELECT table_name,ENGINE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='mysql' AND ENGINE !='InnoDB'";
        $numrows = $zdbh->prepare($sql);
        $numrows->execute();
        $rowcount= $numrows->rowCount();
        if($rowcount) {
            $mysql_tables = $numrows1->fetchAll();
            foreach($mysql_tables as $table) {
                //$mysql_repair_result = shell_exec("mysqlcheck -r --databases mysql | grep 'status' | awk '{ print $3}' ");
                $mysql_repair_result = shell_exec("mysqlcheck --repair --databases $table");
                if($mysql_repair_result && $mysql_check_result !='OK') {
                    $mysql_repair_status = MYSQL_DB_NOT_REPAIRED;
                } else {
                    $mysql_repair_status = MYSQL_DB_REPAIRED;
                }
                return $mysql_repair_status;
            }
        }
    }


    /*********************** MysqlCheck & MysqlRepair End   *********************

	/**************************** validations start ****************************/
	public function CheckCreateForErrors($hostname,$userid,$username)
	{
        // Check to make sure the user name is not blank before we go any further...
        if ($hostname == '') {
            //self::$blank = true;
            //return false;
			return BLANK_HOSTNAME;
        }
        if($hostname !="%")
        {
                if(!filter_var($hostname, FILTER_VALIDATE_IP))
                {
                        /*lf::$badIP = true;
                        return false;*/
						return INVALID_IP;
                }
        }
        // Check to make sure the user name is not a duplicate...
        $sql = "SELECT COUNT(*) FROM x_remote_mysql_hosts WHERE re_host_vc=:hostname AND re_acc_fk=:userid  AND re_deleted_ts IS NULL";
        $numrows = $this->zdbh->prepare($sql);
        $numrows->bindParam(':hostname', $hostname);
		 $numrows->bindParam(':userid', $userid);
        if ($numrows->execute()) {
            if ($numrows->fetchColumn() <> 0) {
                /*self::$alreadyexists = true;
                return false;*/
				return HOSTNAME_ALREADY_EXIST;
            }
        }
        // Check to make sure the user name is not a duplicate (checks actual mysql table)...
        $sql = "SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = :username AND host = :hostname)";
        $numrows = $this->zdbh->prepare($sql);
        $numrows->bindParam(':username', $username);
        $numrows->bindParam(':hostname', $hostname);
        if ($numrows->execute()) {
            if ($numrows->fetchColumn() <> 0) {
                /*lf::$alreadyexists = true;
                return false;*/
				return USERNAME_ALREADY_EXIST;
            }
        }
        /* Check for invalid IP address
        if ($hostname != "localhost" && strtolower($hostname) != "localhost" && $hostname != "%") {
            if (!sys_monitoring::IsAnyValidIP($hostname)) {
                self::$badIP = true;
                return false;
            }
        }*/
        return true;
	}
		
	/**************************** validations end   ****************************/
	

	
}
?>