Current File : //etc/zpanel/panel/modules/mysql_users/code/controller.ext.php
<?php

/**
 * @copyright 2014-2015 Sentora Project (http://www.sentora.org/) 
 * Sentora is a GPL fork of the ZPanel Project whose original header follows:
 *
 * ZPanel - A Cross-Platform Open-Source Web Hosting Control panel.
 *
 * @package ZPanel
 * @version $Id$
 * @author Bobby Allen - ballen@bobbyallen.me
 * @copyright (c) 2008-2014 ZPanel Group - http://www.zpanelcp.com/
 * @license http://opensource.org/licenses/gpl-3.0.html GNU Public License v3
 *
 * This program (ZPanel) is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */
class module_controller extends ctrl_module
{

    static $alreadyexists;
    static $dbalreadyadded;
    static $blank;
    static $badname;
    static $badpass;
    static $rootabuse;
    static $badIP;
    static $created_ok;
    static $deleted_ok;
    static $passreset_ok;
    static $blankdbadded;
    static $priv_req_err;
    static $update_priv_succ;
    static $db_added;

    /**
     * The 'worker' methods.
     */
    static function CleanOrphanDatabases($uid)
    {
        global $zdbh;
        $sql = "SELECT * FROM x_mysql_dbmap WHERE mm_user_fk=:userid";
        $numrows = $zdbh->prepare($sql);
        $numrows->bindParam(':userid', $uid);
        $numrows->execute();

        if ($numrows->fetchColumn() <> 0) {
            $sql = $zdbh->prepare($sql);
            $sql->bindParam(':userid', $uid);
            $sql->execute();
            while ($rowmysql = $sql->fetch()) {
                $rowdbSql = "SELECT * FROM x_mysql_databases WHERE my_id_pk=:id AND my_deleted_ts IS NULL";
                $find = $zdbh->prepare($rowdbSql);
                $find->bindParam(':id', $rowmysql['mm_database_fk']);
                $find->execute();
                $rowdb = $find->fetch();

                if (!$rowdb) {

                }
            }
            return true;
        } else {
            return false;
        }
    }

    static function ListUsers($uid)
    {
        global $zdbh;
        // Remove deleted databases from MySQL userlist...
        self::CleanOrphanDatabases($uid);
        $sql = "SELECT * FROM x_mysql_users WHERE mu_acc_fk=:userid AND mu_deleted_ts IS NULL";
        $numrows = $zdbh->prepare($sql);
        $numrows->bindParam(':userid', $uid);
        $numrows->execute();
        if ($numrows->fetchColumn() <> 0) {
            $sql = $zdbh->prepare($sql);
            $sql->bindParam(':userid', $uid);
            $res = array();
            $sql->execute();
            while ($rowmysql = $sql->fetch()) {
                //$numrowdb = $zdbh->query("SELECT COUNT(*) FROM x_mysql_dbmap WHERE mm_user_fk=" . $rowmysql['mu_id_pk'] . "")->fetch();
                $numrows = $zdbh->prepare("SELECT COUNT(*) FROM x_mysql_dbmap WHERE mm_user_fk=:mysql");
                $numrows->bindParam(':mysql', $rowmysql['mu_id_pk']);
                $numrows->execute();
                $numrowdb = $numrows->fetch();

                if ($rowmysql['mu_access_vc'] == "localhost") {
                    $access = $rowmysql['mu_access_vc'];
                } else {
                    $access = $rowmysql['mu_access_vc'];
                }
                array_push($res, array('userid' => $rowmysql['mu_id_pk'],
                    'username' => $rowmysql['mu_name_vc'],
                    'dbpassword' => $rowmysql['mu_pass_vc'],
                    'totaldb' => $numrowdb[0],
                    'accesshtml' => $access,
                    'access' => $rowmysql['mu_access_vc']));
            }
            return $res;
        } else {
            return false;
        }
    }
    static function gethelpicon()
    {
    	global $zdbh;
    	global $controller;
    	$temp=$controller->GetControllerRequest('URL','module') ;
    	$val = '/assets/one.txt';
    	$val1 = '/modules/';
    	$name=file_get_contents("modules/$temp/assets/helpicon.txt");
    	return $name;
    }

    static function ListDatabases($uid)
    {
        global $zdbh;
        $sql = "SELECT * FROM x_mysql_databases WHERE my_acc_fk=:userid AND my_deleted_ts IS NULL";
        $numrows = $zdbh->prepare($sql);
        $numrows->bindParam(':userid', $uid);
        $numrows->execute();
	$num_res = $numrows->rowCount();
	if($num_res <> 0) {
        //if ($numrows->fetchColumn() <> 0) {
        //  $sql = $zdbh->prepare($sql);
            $res = array();
        //  $sql->bindParam(':userid', $uid);
        //  $sql->execute();
            while ($rowmysql = $numrows->fetch()) {
		$sql = "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME=:db_name";
                $num = $zdbh->prepare($sql);
                $num->bindParam(':db_name', $rowmysql['my_name_vc']);
                $num->execute();
                $result_count = $num->rowCount();
                if($result_count <> 0)
                {
                	array_push($res, array('mysqlid' => $rowmysql['my_id_pk'], 'mysqlname' => $rowmysql['my_name_vc']));
		}
            }
            return $res;
        } else {
            return false;
        }
    }

    static function ListUserDatabases($uid)
    {
        global $zdbh;
        $sql = "SELECT * FROM x_mysql_dbmap WHERE mm_user_fk=:userid";
        $numrows = $zdbh->prepare($sql);
        $numrows->bindParam(':userid', $uid);
        $numrows->execute();

        if ($numrows->fetchColumn() <> 0) {
            $sql = $zdbh->prepare($sql);
            $res = array();
            $sql->bindParam(':userid', $uid);
            $sql->execute();
            while ($rowmysql = $sql->fetch()) {
                $numrows = $zdbh->prepare("SELECT * FROM x_mysql_databases WHERE my_id_pk=:database AND my_deleted_ts IS NULL");
                $numrows->bindParam(':database', $rowmysql['mm_database_fk']);
                $numrows->execute();
                $rowdb = $numrows->fetch();
                if ($rowdb) {
                    array_push($res, array('mmid' => $rowmysql['mm_id_pk'],
                        'mmaccount' => $rowmysql['mm_acc_fk'],
                        'mmuserid' => $rowmysql['mm_user_fk'],
                        'mmdbid' => $rowmysql['mm_database_fk'],
                        'mmdbname' => $rowdb['my_name_vc']));
                }
            }
            return $res;
        } else {
            return false;
        }
    }
    static function currentMySqlUserData($mid)
    {
	global $zdbh;
        //$numrows = $zdbh->prepare("SELECT * FROM x_mysql_users WHERE mu_id_pk=(SELECT mm_user_fk FROM x_mysql_dbmap WHERE mm_id_pk =:mid) AND mu_deleted_ts IS NULL");
        $numrows = $zdbh->prepare("SELECT u.mu_id_pk as user_id, u.mu_name_vc as user_name, d.my_id_pk as db_id , d.my_name_vc as db_name FROM x_mysql_users as u JOIN x_mysql_dbmap as dm ON (u.mu_id_pk = mm_user_fk) JOIN x_mysql_databases as d ON (dm.mm_database_fk = d.my_id_pk) WHERE dm.mm_id_pk =:mid AND u.mu_deleted_ts IS NULL;");
        $numrows->bindParam(':mid', $mid);
        $numrows->execute();
        $res_count = $numrows->rowCount();
        if ($res_count <> 0) {
            //$sql = $zdbh->prepare("SELECT * FROM x_mysql_users WHERE mu_id_pk=:mid AND mu_deleted_ts IS NULL");
            $res = array();
            //$sql->bindParam(':mid', $mid);
            //$sql->execute();
            while ($rowmysql = $numrows->fetch()) {
                array_push($res, array('user_id' => $rowmysql['user_id'],
                    	'user_name' => $rowmysql['user_name'],
			'db_id' => $rowmysql['db_id'],
			'db_name' => $rowmysql['db_name']));
            }
            return $res;
        } else {
            return false;
        }
    }

    static function ListCurrentUser($mid)
    {
        global $zdbh;
        $numrows = $zdbh->prepare("SELECT * FROM x_mysql_users WHERE mu_id_pk=:mid AND mu_deleted_ts IS NULL");
        $numrows->bindParam(':mid', $mid);
        $numrows->execute();
	$res_count = $numrows->rowCount();
        if ($res_count <> 0) {
            //$sql = $zdbh->prepare("SELECT * FROM x_mysql_users WHERE mu_id_pk=:mid AND mu_deleted_ts IS NULL");
            $res = array();
            //$sql->bindParam(':mid', $mid);
            //$sql->execute();
            while ($rowmysql = $numrows->fetch()) {
                array_push($res, array('userid' => $rowmysql['mu_id_pk'],
                    'username' => $rowmysql['mu_name_vc']));
            }
            return $res;
        } else {
            return false;
        }
    }

    static function ExecuteCreateUser($uid, $username, $database, $access, $prefix, $privileges)
    {
        global $zdbh;
        global $controller;
        $currentuser = ctrl_users::GetUserDetail($uid);
        $currentuser_details = ctrl_users::GetUserDetail();
        
        // 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');

	$numrows = $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();
/********** code added by Sangeeth to revoke remotehost Start *************/
	//if ($rowcount <> 0) {
	$rowmysqls = $numrows->fetchAll();
	$localhost= array("re_host_vc"=>$access, "re_acc_fk"=>$uid);
	array_push($rowmysqls, $localhost);
	$password = fs_director::GenerateRandomPassword(9, 4);
	$user_access	  = $access;
	foreach($rowmysqls as $rowmysql) {
		$access = $rowmysql['re_host_vc'];
		echo $access;
        	//$password = fs_director::GenerateRandomPassword(9, 4);
        	// Create user in MySQL
        	$sql = $zdbh->prepare("CREATE USER :username@:access;");
        	$sql->bindParam(':username', $username);
        	$sql->bindParam(':access', $access);
        	$sql->execute();
        	// Set MySQL password for new user...
        	$sql = $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 = $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 = $zdbh->prepare("GRANT USAGE ON *.* TO :username@:access");
        	$sql->bindParam(':username', $username);
        	$sql->bindParam(':access', $access);
        	$sql->execute();
		$dbname = $rowdb['my_name_vc'];
		$usernameClean = $zdbh->mysqlRealEscapeString($username);
		$accessClean = $zdbh->mysqlRealEscapeString($access);
		//$accessClean = $zdbh->mysqlRealEscapeString($user_access);
		$my_name_vc = $zdbh->mysqlRealEscapeString($dbname);
		//$my_name_vc = $zdbh->mysqlRealEscapeString($rowdb['my_name_vc']);
		$sql = $zdbh->prepare("GRANT $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 = $zdbh->prepare("FLUSH PRIVILEGES");
        	$sql->execute();
		//}
		//}
	}
/********** code added by Sangeeth to revoke remotehost End *************/
	//}
        // Add user to Sentora database...
        $sql = $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', $user_access);
        $time = time();
        $sql->bindParam(':time', $time);
        $sql->execute();
	$mysql_userid = $zdbh->lastInsertId();

/********** Code removed by Sangeeth to get LastInsertId Start *************/
        // Get the new users id...
        //$rowuser = $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 = $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);
*//********** Code removed by Sangeeth to get LastInsertId End *************/
	self::ExecuteAddDB($uid, $mysql_userid, $database,$privileges);
        runtime_hook::Execute('OnAfterCreateDatabaseUser');
        self::$created_ok = true;
        return true;

    }

    static function CheckCreateForErrors($username, $database, $access)
    {
        global $zdbh;
        // Check to make sure the user name is not blank before we go any further...
        if ($username == '') {
            self::$blank = true;
            return false;
        }
        // Check to make sure the user name is not blank before we go any further...
        if ($username == 'root') {
            self::$rootabuse = true;
            return false;
        }
        // Check to make sure the user name is not blank before we go any further...
        if ($database == '') {
            self::$blank = true;
            return false;
        }
        // Check to make sure the user name is not a duplicate...
        $sql = "SELECT COUNT(*) FROM x_mysql_users WHERE mu_name_vc=:username AND mu_deleted_ts IS NULL";
        $numrows = $zdbh->prepare($sql);
        $numrows->bindParam(':username', $username);
        if ($numrows->execute()) {
            if ($numrows->fetchColumn() <> 0) {
                self::$alreadyexists = true;
                return false;
            }
        }
        // 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)";
        $numrows = $zdbh->prepare($sql);
        $numrows->bindParam(':username', $username);
        if ($numrows->execute()) {
            if ($numrows->fetchColumn() <> 0) {
                self::$alreadyexists = true;
                return false;
            }
        }
        // Check for invalid username
        if (!self::IsValidUserName($username)) {
            self::$badname = true;
            return false;
        }
        // Check for invalid IP address
        if ($access != "localhost" && strtolower($access) != "localhost") {
            if (!sys_monitoring::IsAnyValidIP($access)) {
                self::$badIP = true;
                return false;
            }
        }
        return true;
    }

    static function CheckAddForErrors($userid, $database)
    {
	if(!($database) || $database =="" ) {
		self::$blankdbadded = true;
            	return false;
	}
        global $zdbh;
        // Check to make sure the database isnt already added...
        //$result = $zdbh->query("SELECT * FROM x_mysql_dbmap WHERE mm_database_fk=" . $database . " AND mm_user_fk=" . $userid . "")->fetch();
        $numrows = $zdbh->prepare("SELECT * FROM x_mysql_dbmap WHERE mm_database_fk=:database AND mm_user_fk=:userid");
        $numrows->bindParam(':database', $database);
        $numrows->bindParam(':userid', $userid);
        $numrows->execute();
        $result = $numrows->fetch();
        if ($result) {
            self::$dbalreadyadded = true;
            return false;
        }
        return true;
    }

    static function ExecuteDeleteUser($mu_id_pk)
    {
        global $zdbh;
        runtime_hook::Execute('OnBeforeDeleteDatabaseUser');
        //$rowuser = $zdbh->query("SELECT * FROM x_mysql_users WHERE mu_id_pk=" . $mu_id_pk . " AND mu_deleted_ts IS NULL")->fetch();
        $numrows = $zdbh->prepare("SELECT * FROM x_mysql_users WHERE mu_id_pk=:mu_id_pk AND mu_deleted_ts IS NULL");
        $numrows->bindParam(':mu_id_pk', $mu_id_pk);
        $numrows->execute();
        $rowuser = $numrows->fetch();

        $sql = "SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = :name)";
        $numrows = $zdbh->prepare($sql);
        $numrows->bindParam(':name', $rowuser['mu_name_vc']);
        if ($numrows->execute()) {
		//echo $numrows->fetchColumn();exit;
		$currentuser = ctrl_users::GetUserDetail();
	        $uid = $currentuser['userid'];
            if ($numrows->fetchColumn() <> 0) {
		$numrows = $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();
		$access  = $rowuser['mu_access_vc'];
		array_push($rowhosts, array("re_host_vc"=>$access, "re_acc_fk"=>$uid));
		
		foreach($rowhosts as $rowhost) {
                	//drop user
                	$sql = $zdbh->prepare("DROP USER :name@:access;");
                	$sql->bindParam(':name', $rowuser['mu_name_vc']);
                	//$sql->bindParam(':access', $rowuser['mu_access_vc']);
			$sql->bindParam(':access', $rowhost['re_host_vc']);
                	$sql->execute();
                	//flush privileges
                	$sql = $zdbh->prepare("FLUSH PRIVILEGES");
                	$sql->execute();
		}
            }
        }
	$client_ip = self::get_client_ip();
        $sql = $zdbh->prepare("
			UPDATE x_mysql_users
			SET mu_deleted_ts = :time,
			ip_deleted = :client_ip
			WHERE mu_id_pk = :mu_id_pk");
        $time = time();
        $sql->bindParam(':time', $time);
        $sql->bindParam(':client_ip', $client_ip);
	$sql->bindParam(':mu_id_pk', $mu_id_pk);
        $sql->execute();
        $sql = $zdbh->prepare("
			DELETE FROM x_mysql_dbmap
			WHERE mm_user_fk = :mu_id_pk");
        $sql->bindParam(':mu_id_pk', $mu_id_pk);
        $sql->execute();
        runtime_hook::Execute('OnAfterDeleteDatabaseUser');
        self::$deleted_ok = true;
        return true;
    }
    static function get_client_ip() {
    	$ipaddress = '';
    	if (isset($_SERVER['HTTP_CLIENT_IP']))
       		$ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    	else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        	$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
	else if(isset($_SERVER['HTTP_X_FORWARDED']))
        	$ipaddress = $_SERVER['HTTP_X_FORWARDED'];
	else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
       		$ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
   	else if(isset($_SERVER['HTTP_FORWARDED']))
       		$ipaddress = $_SERVER['HTTP_FORWARDED'];
	else if(isset($_SERVER['REMOTE_ADDR']))
       		$ipaddress = $_SERVER['REMOTE_ADDR'];
	else
       		$ipaddress = 'UNKNOWN';
	return $ipaddress;
    }

    static function ExecuteAddDB($uid, $myuserid, $dbid, $privileges)
    {
        
        global $zdbh;
        if (fs_director::CheckForEmptyValue(self::CheckAddForErrors($myuserid, $dbid))) {
            return false;
        }
        if (!isset($uid) || $uid == NULL || $uid == '') {
            $currentuser = ctrl_users::GetUserDetail();
            $uid = $currentuser['userid'];
        }
        runtime_hook::Execute('OnBeforeAddDatabaseAccess');
        //$rowdb = $zdbh->query("SELECT * FROM x_mysql_databases WHERE my_id_pk=" . $dbid . " AND my_deleted_ts IS NULL")->fetch();
        $numrows = $zdbh->prepare("SELECT * FROM x_mysql_databases WHERE my_id_pk=:dbid AND my_deleted_ts IS NULL");
        $numrows->bindParam(':dbid', $dbid);
        $numrows->execute();
        $rowdb = $numrows->fetch();
        
	//$rowuser = $zdbh->query("SELECT * FROM x_mysql_users WHERE mu_id_pk=" . $myuserid . " AND mu_deleted_ts IS NULL")->fetch();
        $numrows = $zdbh->prepare("SELECT * FROM x_mysql_users WHERE mu_id_pk=:myuserid AND mu_deleted_ts IS NULL");
        $numrows->bindParam(':myuserid', $myuserid);
        $numrows->execute();
        $rowuser = $numrows->fetch();
	
	$numrows = $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();
	
	//$localhost= array("re_host_vc"=>"localhost", "re_acc_fk"=>$uid);
        array_push($rowhosts, array("re_host_vc"=>$rowuser['mu_access_vc'], "re_acc_fk"=>$uid));
	foreach ($rowhosts as $rowhost) {
		$my_name_vc = $zdbh->mysqlRealEscapeString($rowdb['my_name_vc']);
		$mu_name_vc = $zdbh->mysqlRealEscapeString($rowuser['mu_name_vc']);
		//$mu_access_vc = $zdbh->mysqlRealEscapeString($rowuser['mu_access_vc']);
		$mu_access_vc = $zdbh->mysqlRealEscapeString($rowhost['re_host_vc']);
		$sql = $zdbh->prepare("GRANT $privileges ON `$my_name_vc`.* TO `$mu_name_vc`@`$mu_access_vc`");
		$sql->bindParam(':my_name_vc', $rowdb['my_name_vc'], PDO::PARAM_STR);
		$sql->bindParam(':mu_name_vc', $rowuser['mu_name_vc'], PDO::PARAM_STR);
		//$sql->bindParam(':mu_access_vc', $rowuser['mu_access_vc'], PDO::PARAM_STR);
		$sql->bindParam(':mu_access_vc', $rowhost['re_host_vc'], PDO::PARAM_STR);
        //echo "<pre>";print_r($sql);exit;
		$sql->execute();
		$sql = $zdbh->prepare("FLUSH PRIVILEGES");
		$sql->execute();
	}

        $sql2 = $zdbh->prepare("INSERT INTO x_mysql_dbmap (
							mm_acc_fk,
							mm_user_fk,
							mm_database_fk) VALUES (
							:uid,
							:myuserid,
							:dbid
                                                        )");
        $sql2->bindParam(':uid', $uid);
        $sql2->bindParam(':myuserid', $myuserid);
        $sql2->bindParam(':dbid', $dbid);
        $sql2->execute();

        runtime_hook::Execute('OnAfterAddDatabaseAccess');
        //self::$created_ok = true;
        self::$db_added = true;
        
        
        if(isset($_SESSION['cgs_user'])  && isset($_SESSION['cgs_id']) && array_key_exists("cgs_user",$_SESSION) && array_key_exists("cgs_id",$_SESSION) )
    	{
  
  
	   if($_SESSION['cgs_pk_id'] == $uid)
		{
		    $user_name = $_SESSION['cgs_user'];
		    $sql2 = $zdbh->prepare("select  my_name_vc  from x_mysql_databases where my_acc_fk =:newid  and my_deleted_ts IS NULL");
		    $sql2->bindParam(':newid',$uid);
		    $sql2->execute();
		    $row_count3 = $sql2->rowCount();
		    if($row_count3 >0)
		    {

			while($rows=$sql2->fetch())
			{
		       
			$my_name_vc = $rows['my_name_vc'];
			    try{
			    $sql = $zdbh->prepare("GRANT $privileges ON `$my_name_vc`. * TO :username@'localhost' ");
			    $sql->bindParam(':username', $user_name);
			    $sql->execute();
			    
			    $sql = $zdbh->prepare("FLUSH PRIVILEGES");
			    $sql->execute();
			    }
			    catch(Exception $e) { }
			}
		    }
		}
	    }
	    return true;
    }

    static function ExecuteRemoveDB($myuserid, $mapid)
    { // <-- mmid = dbmaps
        global $zdbh;
        runtime_hook::Execute('OnBeforeRemoveDatabaseAccess');

        $numrows = $zdbh->prepare("SELECT * FROM x_mysql_dbmap WHERE mm_id_pk=:mapid");
        $numrows->bindParam(':mapid', $mapid);
        $numrows->execute();
        $rowdbmap = $numrows->fetch();

        $numrows = $zdbh->prepare("SELECT * FROM x_mysql_databases WHERE my_id_pk=:mm_database_fk AND my_deleted_ts IS NULL");
        $numrows->bindParam(':mm_database_fk', $rowdbmap['mm_database_fk']);
        $numrows->execute();
        $rowdb = $numrows->fetch();

        $numrows = $zdbh->prepare("SELECT * FROM x_mysql_users WHERE mu_id_pk=:myuserid AND mu_deleted_ts IS NULL");
        $numrows->bindParam(':myuserid', $myuserid);
        $numrows->execute();
        $rowuser = $numrows->fetch();

        /*$sql = $zdbh->prepare("REVOKE ALL PRIVILEGES ON `" . $rowdb['my_name_vc'] . "`.* FROM '" . $rowuser['mu_name_vc'] . "'@'" . $rowuser['mu_access_vc'] . "'");
        $sql->execute();*/

	$sql = "SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = :name)";
        $numrows = $zdbh->prepare($sql);
        $numrows->bindParam(':name', $rowuser['mu_name_vc']);
        if ($numrows->execute()) {
                //echo $numrows->fetchColumn();exit;
                $currentuser = ctrl_users::GetUserDetail();
                $uid = $currentuser['userid'];
		if ($numrows->fetchColumn() <> 0) {
			$numrows = $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) {
				$sql = $zdbh->prepare("REVOKE ALL PRIVILEGES ON `" . $rowdb['my_name_vc'] . "`.* FROM '" . $rowuser['mu_name_vc'] . "'@'" . $rowhost['re_host_vc'] . "'");
				$sql->execute();
			}
		}
	}	

        $sql = $zdbh->prepare("FLUSH PRIVILEGES");
        $sql->execute();

        $sql = $zdbh->prepare("DELETE FROM x_mysql_dbmap WHERE mm_id_pk=:mapid AND mm_user_fk=:myuserid");
        $sql->bindParam(':mapid', $mapid);
        $sql->bindParam(':myuserid', $myuserid);
        $sql->execute();

        runtime_hook::Execute('OnAfterRemoveDatabaseAccess');
        self::$deleted_ok = true;
        return true;
    }

    static function ExecuteResetPassword($myuserid, $password)
    {
        global $zdbh;
        global $controller;
        runtime_hook::Execute('OnBeforeResetDatabasePassword');
        //$rowuser = $zdbh->query("SELECT * FROM x_mysql_users WHERE mu_id_pk=" . $myuserid . " AND mu_deleted_ts IS NULL")->fetch();
        $numrows = $zdbh->prepare("SELECT * FROM x_mysql_users WHERE mu_id_pk=:myuserid AND mu_deleted_ts IS NULL");
        $numrows->bindParam(':myuserid', $myuserid);
        $numrows->execute();
        $rowuser = $numrows->fetch();

	$currentuser = ctrl_users::GetUserDetail();
        $uid = $currentuser['userid'];	
	$query = "SELECT * from x_password_strength WHERE ps_user_vc='$uid'";
        $res = $zdbh->prepare($query);
        $res->execute();
        $results = $res->rowCount();
        if($results == 0)
        {
         
        	if (fs_director::CheckForEmptyValue(self::CheckPasswordForErrors($password))) {
            		return false;
         	}

		$sql = "SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = :mu_name_vc)";
		$numrows = $zdbh->prepare($sql);
		$numrows->bindParam(':mu_name_vc', $rowuser['mu_name_vc']);
		if ($numrows->execute()) {
		    if ($numrows->fetchColumn() <> 0) {
			// Set MySQL password for new user...
			$sql = $zdbh->prepare("SET PASSWORD FOR :mu_name_vc@:mu_access_vc=PASSWORD(:password)");
			$sql->bindParam(':mu_name_vc', $rowuser['mu_name_vc']);
			$sql->bindParam(':mu_access_vc', $rowuser['mu_access_vc']);
			$sql->bindParam(':password', $password);
			$sql->execute();
			$sql = $zdbh->prepare("FLUSH PRIVILEGES");
			$sql->execute();
			$sql = $zdbh->prepare("UPDATE x_mysql_users SET mu_pass_vc=:password WHERE mu_id_pk=:myuserid");
			$sql->bindParam(':password', $password);
			$sql->bindParam(':myuserid', $myuserid);
			$sql->execute();
		    }
		}
		runtime_hook::Execute('OnAfterResetDatabasePassword');
		self::$passreset_ok = true;
		return true;

        }

	while($rows=$res->fetch())
	{	   
		
        	$values= ($rows['ps_muenabled_in'] == 0 ) ? "CheckPasswordForErrors" : "";
        	// $values= ($rows['ps_muenabled_in'] == 0 ) ? "CheckPasswordForErrors" : "";
       
       		if($values == "CheckPasswordForErrors")
		{
        		if (fs_director::CheckForEmptyValue(self::$values($password))) {
            			return false;
        		}
		               
			/* New Code Start */

			/*if (!preg_match_all('$\S*(?=\S{9,})(?=\S*[a-z])(?=\S*[A-Z])(?=\S*[\d])(?=\S*[\W])\S*$', $password)) {
				self::$badpass = true;
			}*/

			$sql = "SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = :mu_name_vc)";
			$numrows = $zdbh->prepare($sql);
			$numrows->bindParam(':mu_name_vc', $rowuser['mu_name_vc']);
			if ($numrows->execute()) {
			    if ($numrows->fetchColumn() <> 0) {
				// Set MySQL password for new user...
				$sql = $zdbh->prepare("SET PASSWORD FOR :mu_name_vc@:mu_access_vc=PASSWORD(:password)");
				$sql->bindParam(':mu_name_vc', $rowuser['mu_name_vc']);
				$sql->bindParam(':mu_access_vc', $rowuser['mu_access_vc']);
				$sql->bindParam(':password', $password);
				$sql->execute();
				$sql = $zdbh->prepare("FLUSH PRIVILEGES");
				$sql->execute();
				$sql = $zdbh->prepare("UPDATE x_mysql_users SET mu_pass_vc=:password WHERE mu_id_pk=:myuserid");
				$sql->bindParam(':password', $password);
				$sql->bindParam(':myuserid', $myuserid);
				$sql->execute();
			    }
			}
			runtime_hook::Execute('OnAfterResetDatabasePassword');
			self::$passreset_ok = true;
			return true;		
		}
	       else
	       if($values == "")
	       {
			$sql = "SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = :mu_name_vc)";
			$numrows = $zdbh->prepare($sql);
			$numrows->bindParam(':mu_name_vc', $rowuser['mu_name_vc']);
			if ($numrows->execute()) {
			    if ($numrows->fetchColumn() <> 0) {
				// Set MySQL password for new user...
				$sql = $zdbh->prepare("SET PASSWORD FOR :mu_name_vc@:mu_access_vc=PASSWORD(:password)");
				$sql->bindParam(':mu_name_vc', $rowuser['mu_name_vc']);
				$sql->bindParam(':mu_access_vc', $rowuser['mu_access_vc']);
				$sql->bindParam(':password', $password);
				$sql->execute();
				$sql = $zdbh->prepare("FLUSH PRIVILEGES");
				$sql->execute();
				$sql = $zdbh->prepare("UPDATE x_mysql_users SET mu_pass_vc=:password WHERE mu_id_pk=:myuserid");
				$sql->bindParam(':password', $password);
				$sql->bindParam(':myuserid', $myuserid);
				$sql->execute();
			    }
			}
        		runtime_hook::Execute('OnAfterResetDatabasePassword');
        		self::$passreset_ok = true;
        		return true;
       		}
	}
    }
    static function getManagePrivileges() {
	global $zdbh;
	global $controller;
	$select_priv ="";$insert_priv="";$update_priv="";$delete_priv="";
	$create_priv="";$drop_priv="";$grant_priv="";$references_priv="";
	$index_priv="";$alter_priv="";$create_tmp_table_priv="";$lock_tables_priv="";
	$create_view_priv="";$show_view_priv="";$create_routine_priv="";
	$alter_routine_priv="";$execute_priv="";$event_priv="";$trigger_priv="";
        $currentuser = ctrl_users::GetUserDetail();
	$display  ='';
	if($controller->GetControllerRequest('URL', 'other')) {
		$formvars = $controller->GetAllControllerRequests('FORM');
		$db_username= self::getManageUserName();
		$db_name= self::getManageUserDatabaseName();
		$host='localhost';
		$sql = $zdbh->prepare("SELECT *FROM mysql.db WHERE db='$db_name' AND user='$db_username' AND Host='$host'");
		$sql->execute();
		if($sql->rowCount()>0) {
			while ($res = $sql->fetch()) {
				$select_priv = $res['Select_priv']=="Y" ? 'checked="checked"' : ''; 
				$insert_priv= $res['Insert_priv']=="Y" ? 'checked="checked"' : ''; 
				$update_priv= $res['Update_priv']=="Y" ? 'checked="checked"' : ''; 
				$delete_priv= $res['Delete_priv']=="Y" ? 'checked="checked"' : ''; 
				$create_priv= $res['Create_priv']=="Y" ? 'checked="checked"' : ''; 
				$drop_priv= $res['Drop_priv']=="Y" ? 'checked="checked"' : ''; 
				$grant_priv= $res['Grant_priv']=="Y" ? 'checked="checked"' : ''; 
				$references_priv= $res['References_priv']=="Y" ? 'checked="checked"' : ''; 
				$index_priv= $res['Index_priv']=="Y" ? 'checked="checked"' : ''; 
				$alter_priv= $res['Alter_priv']=="Y" ? 'checked="checked"' : ''; 
				$create_tmp_table_priv= $res['Create_tmp_table_priv']=="Y" ? 'checked="checked"' : ''; 
				$lock_tables_priv= $res['Lock_tables_priv']=="Y" ? 'checked="checked"' : ''; 
				$create_view_priv= $res['Create_view_priv']=="Y" ? 'checked="checked"' : ''; 
				$show_view_priv= $res['Show_view_priv']=="Y" ? 'checked="checked"' : ''; 
				$create_routine_priv= $res['Create_routine_priv']=="Y" ? 'checked="checked"' : ''; 
				$alter_routine_priv= $res['Alter_routine_priv']=="Y" ? 'checked="checked"' : ''; 
				$execute_priv= $res['Execute_priv']=="Y" ? 'checked="checked"' : ''; 
				$event_priv= $res['Event_priv']=="Y" ? 'checked="checked"' : ''; 
				$trigger_priv= $res['Trigger_priv']=="Y" ? 'checked="checked"' : ''; 
			}
		
		}
		$display .='<form action="./?module=mysql_users&action=ManagePrivileges" method="post">';
		$display .='<input type="hidden" id="db_username" name="db_username" value="'.$db_username.'" />';
        	$display .='<input type="hidden" id="db_name" name="db_name" value="'.$db_name.'" />';
	} else {}
	//$display ='<h2><: Manage User Privileges :></h2>';
	//$display .='<h4>User : <@ ManageUserName @> </h4>';
	//$display .='<h4>Database : <@ ManageUserDatabaseName @> </h4>';
	//$display .='<form action="./?module=mysql_users&action=ManagePrivileges" method="post">';
	$display .='<table id="privilage_table">';
	$display .='<thead><tr><td>-------------------------------------------------- </td>';
	$display .='<td>-------------------------------------------------- </td></tr>';
	$display .='<tr><th colspan="2"><div><label>';
	$display .='<input name="all_privi" id="all_privi" value="all_privileges" type="checkbox" onclick="checkUncheckAll()">';
	$display .='ALL PRIVILEGES';
	$display .='</label></div></th></tr>';
	$display .='<tr><td>--------------------------------------------- </td>';
	$display .='<td>-------------------------------------------------- </td></tr>';
	$display .='</thead>';
	$display .='<tbody>';
	$display .='<tr>';
	$display .='<td><div><label>';
	$display .='<input id="chkALTER" name="privileges[]" value="ALTER" class="privil_right" type="checkbox" '.$alter_priv.'onclick="checkAnyone()">';
	$display .='ALTER';
	$display .='</label></div></td>';
	$display .='<td><div><label>';
	$display .='<input id="chkALTERROUTINE" name="privileges[]" value="ALTER ROUTINE" class="privil_right" type="checkbox" '.$alter_routine_priv.' onclick="checkAnyone()">';
	$display .='ALTER ROUTINE';
	$display .='</label></div></td></tr>';
	$display .='<tr><td><div><label>';
	$display .='<input id="chkCREATE" name="privileges[]" value="CREATE" class="privil_right" type="checkbox" '.$create_priv.' onclick="checkAnyone()">';
	$display .='CREATE';
	$display .='</label></div></td><td>';
	$display .='<div><label>';
	$display .='<input id="chkCREATEROUTINE" name="privileges[]" value="CREATE ROUTINE" class="privil_right" type="checkbox" '.$create_routine_priv.' onclick="checkAnyone()">';
	$display .='CREATE ROUTINE';
	$display .='</label></div></td></tr>';
	$display .='<tr><td><div><label>';
	$display .='<input id="chkCREATETEMPORARYTABLES" name="privileges[]" value="CREATE TEMPORARY TABLES" class="privil_right" type="checkbox" '.$create_tmp_table_priv.' onclick="checkAnyone()">';
	$display .='CREATE TEMPORARY TABLES';
	$display .='</label></div></td>';
	$display .='<td><div><label>';
	$display .='<input id="chkCREATEVIEW" name="privileges[]" value="CREATE VIEW" class="privil_right" type="checkbox" '.$create_view_priv.' onclick="checkAnyone()">';
	$display .='CREATE VIEW';
	$display .='</label></div></td></tr>';
	$display .='<tr><td><div><label>';
	$display .='<input id="chkDELETE" name="privileges[]" value="DELETE" class="privil_right" type="checkbox" '.$delete_priv.' onclick="checkAnyone()">';
	$display .='DELETE';
	$display .='</label></div></td><td>';
	$display .='<div><label>';
	$display .='<input id="chkDROP" name="privileges[]" value="DROP" class="privil_right" type="checkbox" '.$drop_priv.' onclick="checkAnyone()">';
	$display .='DROP';
	$display .='</label></div></td></tr>';
	$display .='<tr><td><div><label>';
	$display .='<input id="chkEVENT" name="privileges[]" value="EVENT" class="privil_right" type="checkbox" '.$event_priv.' onclick="checkAnyone()">';
	$display .='EVENT';
	$display .='</label></div></td><td>';
	$display .='<div><label>';
	$display .='<input id="chkEXECUTE" name="privileges[]" value="EXECUTE" class="privil_right" type="checkbox" '.$execute_priv.' onclick="checkAnyone()">';
	$display .='EXECUTE';
	$display .='</label></div></td></tr>';
	$display .='<tr><td><div><label>';
	$display .='<input id="chkINDEX" name="privileges[]" value="INDEX" class="privil_right" type="checkbox" '.$index_priv.' onclick="checkAnyone()">';
	$display .='INDEX';
	$display .='</label></div></td>';
	$display .='<td><div><label>';
	$display .='<input id="chkINSERT" name="privileges[]" value="INSERT" class="privil_right" type="checkbox" '.$insert_priv.' onclick="checkAnyone()">';
	$display .='INSERT';
	$display .='</label></div></td></tr>';
	$display .='<tr><td><div><label>';
	$display .='<input id="chkLOCKTABLES" name="privileges[]" value="LOCK TABLES" class="privil_right" type="checkbox" '.$lock_tables_priv.' onclick="checkAnyone()">';
	$display .='LOCK TABLES';
	$display .='</label></div></td><td>';
	$display .='<div><label>';
	$display .='<input id="chkREFERENCES" name="privileges[]" value="REFERENCES" class="privil_right" type="checkbox" '.$references_priv.' onclick="checkAnyone()">';
	$display .='REFERENCES';
	$display .='</label></div></td></tr>';
	$display .='<tr><td><div><label>';
	$display .='<input id="chkSELECT" name="privileges[]" value="SELECT" class="privil_right" type="checkbox" '.$select_priv.' onclick="checkAnyone()">';
	$display .='SELECT';
	$display .='</label></div></td>';
	$display .='<td><div><label>';
	$display .='<input id="chkSHOWVIEW" name="privileges[]" value="SHOW VIEW" class="privil_right" type="checkbox" '.$show_view_priv.' onclick="checkAnyone()">';
	$display .='SHOW VIEW';
	$display .='</label></div></td></tr>';
	$display .='<tr><td><div><label>';
	$display .='<input id="chkTRIGGER" name="privileges[]" value="TRIGGER" class="privil_right" type="checkbox" '.$trigger_priv.' onclick="checkAnyone()">';
	$display .='TRIGGER';
	$display .='</label></div></td>';
	$display .='<td><div><label>';
	$display .='<input id="chkUPDATE" name="privileges[]" value="UPDATE" class="privil_right" type="checkbox" '.$update_priv.' onclick="checkAnyone()">';
	$display .='UPDATE';
	$display .='</label></div></td></tr>';
	$display .='<tr><td>--------------------------------------------- </td>';
	$display .='<td>-------------------------------------------------- </td></tr>';
	$display .='<td></td>';
	$display .='<td>';
	$display .='<input type="hidden" name="inUser" value="<@ EditCurrentUserID @>">';
	$display .='<button id="sub_priv" name ="sub_priv" class="button-loader btn btn-primary" type="submit" >Update Privileges</button>';
	$display .='</td>';
	$display .='</tbody>';
	$display .='</table>';
	if($controller->GetControllerRequest('URL', 'other'))
		$display .='</form>';
	return $display;
	
    }
    static function doManagePrivileges()
    {
	global $controller;
        //runtime_csfr::Protect();
        $currentuser = ctrl_users::GetUserDetail();
        $formvars = $controller->GetAllControllerRequests('FORM');
	    $db_username= $formvars['db_username']; 
	    $db_name= $formvars['db_name'];
        if(!isset($formvars['all_privi']) && !isset($formvars['privileges'])) {
            self::$priv_req_err= true;
            return false;
        }
	    if($formvars['all_privi']== "all_privileges") {
                $privileges = "ALL PRIVILEGES";
        }
        else {
                $privileges = implode(", ",$formvars['privileges']);
        }
	    //$privileges = implode(", ",$formvars['privileges']);
	    self::ExecuteManagePrivilages($db_username, $db_name, $privileges);
    }

    static function ExecuteManagePrivilages($db_username, $db_name, $privileges)
    {
	    global $zdbh;
	    $currentuser = ctrl_users::GetUserDetail();
	    $uid = $currentuser['userid'];
	    $numrows = $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();
        $rowmysqls = $numrows->fetchAll();
        $localhost= array("re_host_vc"=>'localhost', "re_acc_fk"=>$uid);
        array_push($rowmysqls, $localhost);
        $password = fs_director::GenerateRandomPassword(9, 4);
        $user_access      = $access;
        foreach($rowmysqls as $rowmysql) {
            $access = $rowmysql['re_host_vc'];
            $sql = $zdbh->prepare("REVOKE ALL PRIVILEGES ON `".$db_name ."`.* FROM '".$db_username."'@'".$access."'");
            $sql->execute();
            $sql = $zdbh->prepare("FLUSH PRIVILEGES");
            $sql->execute();

            $sql = $zdbh->prepare("GRANT $privileges ON `$db_name`.* TO `$db_username`@`$access`");
            $sql->execute();
            $sql = $zdbh->prepare("FLUSH PRIVILEGES");
            $sql->execute();
        }
        self::$update_priv_succ = true;
    }

    static function CheckPasswordForErrors($password)
    {
        if (!self::IsValidPassword($password)) {
            self::$badpass = true;
            return false;
        }
        return true;
    }

    static function IsValidUserName($username)
    {
        if (!preg_match('/^[a-z\d\w][a-z\d\w-]{0,62}$/i', $username) || preg_match('/-$/', $username)) {
            return false;
        } else {
            if (strlen($username) < 17) {
                // Enforce the MySQL username limit! (http://dev.mysql.com/doc/refman/4.1/en/user-names.html)
                return true;
            }
            return false;
        }
    }

    static function IsValidPassword($password)
    {
       if (!preg_match_all('$\S*(?=\S{9,})(?=\S*[a-z])(?=\S*[A-Z])(?=\S*[\d])(?=\S*[\W])\S*$', $password)) {
                return false;
        }
        return true;
    }

    /**
     * End 'worker' methods.
     */

    /**
     * Webinterface sudo methods.
     */
    static function doCreateUser()
    {
        global $controller;
        runtime_csfr::Protect();
        $currentuser = ctrl_users::GetUserDetail();
        $formvars = $controller->GetAllControllerRequests('FORM');
        if ($formvars['inAccess'] == 1) {
            $access = "localhost";
        } else {
            $access = $formvars['inAccessIP'];
        }
        if(!isset($formvars['all_privi']) && !isset($formvars['privileges'])) { 
            self::$priv_req_err= true;
            return false;
        }
	    if($formvars['all_privi']== "all_privileges") {
                $privileges = "ALL PRIVILEGES";
        }
        else {
                $privileges = implode(", ",$formvars['privileges']);
        }
        if (self::ExecuteCreateUser($currentuser['userid'], $formvars['inUserName'], $formvars['inDatabase'], $access,  $formvars['inprefix'],$privileges))
            return true;
        return false;
    }

    static function doEditUser()
    {
        global $controller;
        runtime_csfr::Protect();
        $currentuser = ctrl_users::GetUserDetail();
        $formvars = $controller->GetAllControllerRequests('FORM');
        foreach (self::ListUsers($currentuser['userid']) as $row) {
            if (isset($formvars['inDelete_' . $row['userid'] . ''])) {
                header("location: ./?module=" . $controller->GetCurrentModule() . "&show=Delete&other=" . $row['userid'] . "");
                exit;
            }
            if (isset($formvars['inEdit_' . $row['userid'] . ''])) {
                header("location: ./?module=" . $controller->GetCurrentModule() . "&show=Edit&other=" . $row['userid'] . "");
                exit;
            }
        }
        return;
    }

    static function doAddDB()
    {
        global $controller;
        global $zdbh;
        runtime_csfr::Protect();
        $currentuser = ctrl_users::GetUserDetail();
        $formvars = $controller->GetAllControllerRequests('FORM');
        //echo "<pre>";print_r($formvars);
        if(!isset($formvars['all_privi']) && !isset($formvars['privileges']))
        {
            $select_priv ="";$insert_priv="";$update_priv="";$delete_priv="";
            $create_priv="";$drop_priv="";$grant_priv="";$references_priv="";
            $index_priv="";$alter_priv="";$create_tmp_table_priv="";$lock_tables_priv="";
            $create_view_priv="";$show_view_priv="";$create_routine_priv="";
            $alter_routine_priv="";$execute_priv="";$event_priv="";$trigger_priv="";
            $currentuser = ctrl_users::GetUserDetail();
            $display  ='';
            
            $db_userid = $formvars['inUser'];
            $db_id = $formvars['inDatabase'];
            $sql = $zdbh->prepare("SELECT mu_name_vc FROM x_mysql_users WHERE mu_id_pk=$db_userid");
            $sql->execute();
            $res = $sql->fetch();
            $db_username = $res['mu_name_vc'];
            
            //$db_username= self::getManageUserName();
            //$db_name= self::getManageUserDatabaseName();
            
            $host='localhost';
            $sql = $zdbh->prepare("SELECT * FROM mysql.db WHERE user='$db_username' AND Host='$host'");
            $sql->execute();
            //echo "SELECT * FROM mysql.db WHERE db='$db_name' AND user='$db_username' AND Host='$host'";
            //echo $sql->rowCount();
            if($sql->rowCount()>0) {
                while ($res = $sql->fetch()) {
                    $select_priv = $res['Select_priv']=="Y" ? 'SELECT' : '';
                    $insert_priv= $res['Insert_priv']=="Y" ? 'INSERT' : '';
                    $update_priv= $res['Update_priv']=="Y" ? 'UPDATE' : '';
                    $delete_priv= $res['Delete_priv']=="Y" ? 'DELETE' : '';
                    $create_priv= $res['Create_priv']=="Y" ? 'CREATE' : '';
                    $drop_priv= $res['Drop_priv']=="Y" ? 'DROP' : '';
                    $grant_priv= $res['Grant_priv']=="Y" ? 'ALL PRIVILEGES' : '';
                    $references_priv= $res['References_priv']=="Y" ? 'REFERENCES' : '';
                    $index_priv= $res['Index_priv']=="Y" ? 'INDEX' : '';
                    $alter_priv= $res['Alter_priv']=="Y" ? 'ALTER' : '';
                    $create_tmp_table_priv= $res['Create_tmp_table_priv']=="Y" ? 'CREATE TEMPORARY TABLES' : '';
                    $lock_tables_priv= $res['Lock_tables_priv']=="Y" ? 'LOCK TABLES' : '';
                    $create_view_priv= $res['Create_view_priv']=="Y" ? 'CREATE VIEW' : '';
                    $show_view_priv= $res['Show_view_priv']=="Y" ? 'SHOW VIEW' : '';
                    $create_routine_priv= $res['Create_routine_priv']=="Y" ? 'CREATE ROUTINE' : '';
                    $alter_routine_priv= $res['Alter_routine_priv']=="Y" ? 'ALTER ROUTINE' : '';
                    $execute_priv= $res['Execute_priv']=="Y" ? 'EXECUTE' : '';
                    $event_priv= $res['Event_priv']=="Y" ? 'EVENT' : '';
                    $trigger_priv= $res['Trigger_priv']=="Y" ? 'TRIGGER' : '';
                     
                }                    
                $privileges = array($select_priv,$insert_priv,$update_priv,$delete_priv,$create_priv,$drop_priv,$grant_priv,$references_priv,$index_priv,$alter_priv,$create_tmp_table_priv,$lock_tables_priv,$create_view_priv,$show_view_priv,$create_routine_priv,$alter_routine_priv,$execute_priv,$event_priv,$trigger_priv);
                $privileges = implode(",", array_filter($privileges));
            }
        }
        else if($formvars['all_privi']== "all_privileges") {
            $privileges = "ALL PRIVILEGES";
        }
        else {
            $privileges = implode(", ",$formvars['privileges']);            
        }
        
        if (self::ExecuteAddDB($currentuser['userid'], $formvars['inUser'], $formvars['inDatabase'], $privileges))
            return true;
        return false;
    }

    static function doRemoveDB()
    {
        global $controller;
        runtime_csfr::Protect();
        $currentuser = ctrl_users::GetUserDetail();
        $formvars = $controller->GetAllControllerRequests('FORM');
        foreach (self::ListUserDatabases($formvars['inUser']) as $row) {
            /*if (isset($formvars['inRemove_' . $row['mmid'] . ''])) {
                if (self::ExecuteRemoveDB($formvars['inUser'], $formvars['inRemove_' . $row['mmid'] . ''])) {
                    return true;
                } else {
                    return false;
                }
            }*/
	        if (isset($formvars['inRemove_' . $row['mmid'] . ''])) {
                header("location: ./?module=" . $controller->GetCurrentModule() . "&show=RemoveDb&other=" . $row['mmid'] . "");
                exit;
            }
            if (isset($formvars['inManage_' . $row['mmid'] . ''])) {
                header("location: ./?module=" . $controller->GetCurrentModule() . "&show=Manage&other=" . $row['mmid'] . "");
                exit;
            }
        }
        return false;
    }

    static function doConfirmDeleteUser()
    {
        global $controller;
        runtime_csfr::Protect();
        $formvars = $controller->GetAllControllerRequests('FORM');
        if (self::ExecuteDeleteUser($formvars['inDelete']))
            return true;
        return false;
    }
    static function doConfirmRemoveDb()
    {
        global $controller;
        runtime_csfr::Protect();
        $formvars = $controller->GetAllControllerRequests('FORM');
        if (self::ExecuteRemoveDB($formvars['inUser'], $formvars['inRemoveDb']))
            return true;
        return false;
    }

    static function doResetPW()
    {
        global $controller;
        runtime_csfr::Protect();
        $formvars = $controller->GetAllControllerRequests('FORM');
        if (self::ExecuteResetPassword($formvars['inUser'], $formvars['inResetPW']))
            return true;
        return false;
    }

    static function getUserList()
    {
        global $controller;
        $currentuser = ctrl_users::GetUserDetail();
        return self::ListUsers($currentuser['userid']);
    }

    static function getDatabaseList()
    {
        global $controller;
        $currentuser = ctrl_users::GetUserDetail();
        return self::ListDatabases($currentuser['userid']);
    }

    static function getUserDatabaseList()
    {
        global $controller;
        $currentuser = ctrl_users::GetUserDetail();
        return self::ListUserDatabases($controller->GetControllerRequest('URL', 'other'));
    }

    static function getisDeleteUser()
    {
        global $controller;
        $urlvars = $controller->GetAllControllerRequests('URL');
        if ((isset($urlvars['show'])) && ($urlvars['show'] == "Delete"))
            return true;
        return false;
    }
    static function getisRemoveDb()
    {
        global $controller;
        $urlvars = $controller->GetAllControllerRequests('URL');
        if ((isset($urlvars['show'])) && ($urlvars['show'] == "RemoveDb"))
            return true;
        return false;
    }

    static function getisEditUser()
    {
        global $controller;
        $urlvars = $controller->GetAllControllerRequests('URL');
        if ((isset($urlvars['show'])) && ($urlvars['show'] == "Edit"))
            return true;
        return false;
    }
    static function getisManageUser()
    {
        global $controller;
        $urlvars = $controller->GetAllControllerRequests('URL');
        if ((isset($urlvars['show'])) && ($urlvars['show'] == "Manage"))
            return true;
        return false;
    }

    static function getisCreateUser()
    {
        global $controller;
        $urlvars = $controller->GetAllControllerRequests('URL');
        if (!isset($urlvars['show']))
            return true;
        return false;
    }

    static function getCurrentUserName()
    {
        global $zdbh;
        global $controller;
        $currentuser = ctrl_users::GetUserDetail();
        $uid = $currentuser['userid'];
        $query = "SELECT * from x_database_settings WHERE ds_user_vc='$uid'";
        $res = $zdbh->prepare($query);
        $res->execute();
        $results = $res->rowCount();
        $val = "";
        if($results == 0)
        {
          return $currentuser['username']."_";
        }
        else
        if($results > 0)
        {
           while($rows=$res->fetch())
           {
                if($rows['ds_enabled_in'] == 0)
                {
                  return $currentuser['username']."_";
                }
                else if($rows['ds_enabled_in'] == 1)
                {
                  return $val;
                }
           }
        }
    }

    static function getCurrentID()
    {
        global $zdbh;
        global $controller;
        $currentuser = ctrl_users::GetUserDetail();
        $uid = $currentuser['userid'];
        $query = "SELECT * from x_password_strength WHERE ps_user_vc='$uid'";
        $res = $zdbh->prepare($query);
        $res->execute();
        $results = $res->rowCount();
        $val = "";
        if($results == 0)
        {
	  return "input-password";
        }
        else
        if($results > 0)
        {
           while($rows=$res->fetch())
           {
                if($rows['ps_muenabled_in'] == 0)
                {
                  return "input-password";
                }
                else if($rows['ps_muenabled_in'] == 1)
                {
                  return $val;
                }
           }
        }
    }

    static function getGeneratePass()
    {
        global $zdbh;
        global $controller;
        $currentuser = ctrl_users::GetUserDetail();
        $uid = $currentuser['userid'];
        $query = "SELECT * from x_password_strength WHERE ps_user_vc='$uid'";
        $res = $zdbh->prepare($query);
        $res->execute();
        $results = $res->rowCount();
        $val = "";
        if($results == 0)
        {
          return "Generate Password";
        }
        else
        if($results > 0)
        {
           while($rows=$res->fetch())
           {
                if($rows['ps_muenabled_in'] == 0)
                {
                  return "Generate Password";
                }
                else if($rows['ps_muenabled_in'] == 1)
                {
                  return $val;
                }
           }
        }
    }
    static function getEditCurrentUserName()
    {
        global $controller;
        if ($controller->GetControllerRequest('URL', 'other')) {
            $current = self::ListCurrentUser($controller->GetControllerRequest('URL', 'other'));
            return $current[0]['username'];
        } else {
            return "";
        }
    }
    static function getManageUserName()
    {
	    global $controller;
        if ($controller->GetControllerRequest('URL', 'other')) {
            $current = self::currentMySqlUserData($controller->GetControllerRequest('URL', 'other'));
            if($controller->GetControllerRequest('URL', 'show') == "RemoveDb")
                return $current[0]['user_id'];
            else
                return $current[0]['user_name'];
        } else {
            return "";
        }
    }
    static function getRemoveDbId()
    {
        global $controller;
        if ($controller->GetControllerRequest('URL', 'other')) {
            return $controller->GetControllerRequest('URL', 'other');
        } else {
            return "";
        }
    }
    static function getManageUserDatabaseName()
    {
        global $controller;
        if ($controller->GetControllerRequest('URL', 'other')) {
            $current = self::currentMySqlUserData($controller->GetControllerRequest('URL', 'other'));
            return $current[0]['db_name'];
        } else {
            return "";
        }
    }

    static function getEditCurrentUserID()
    {
        global $controller;
        if ($controller->GetControllerRequest('URL', 'other')) {
            $current = self::ListCurrentUser($controller->GetControllerRequest('URL', 'other'));
            return $current[0]['userid'];
        } else {
            return "";
        }
    }

    static function getcurrentnote()
    {
        global $zdbh;
        global $controller;
        $currentuser = ctrl_users::GetUserDetail();
        $uid = $currentuser['userid'];
        $query = "SELECT * from x_password_strength WHERE ps_user_vc='$uid'";
        $res = $zdbh->prepare($query);
        $res->execute();
        $results = $res->rowCount();
        $val = "";
        if($results == 0)
        {
          return true;
        }
        else
        if($results > 0)
        {
           while($rows=$res->fetch())
           {
                if($rows['ps_muenabled_in'] == 0)
                {
                  return true;
                }
                else if($rows['ps_muenabled_in'] == 1)
                {
                  return false;
                }
           }
        }
    }

    static function getMysqlUsagepChart()
    {
        return '<img src="' .ui_tpl_assetfolderpath::Template(). 'img/misc/unlimited.png" alt="' .ui_language::translate('Unlimited'). '"/>';
    }

    static function getResult()
    {
        if (!fs_director::CheckForEmptyValue(self::$blank)) {
            return ui_sysmessage::shout(ui_language::translate("To create your MySQL user, Please specify the username and select the database."), "zannounceerror");
        }
        if (!fs_director::CheckForEmptyValue(self::$rootabuse)) {
            return ui_sysmessage::shout(ui_language::translate("You can't create a user named 'root'! This attempt has been logged and the system administrator notified!."), "zannounceerror");
        }
        if (!fs_director::CheckForEmptyValue(self::$alreadyexists)) {
            return ui_sysmessage::shout(ui_language::translate("This MySQL username has already exsist."), "zannounceerror");
        }
        if (!fs_director::CheckForEmptyValue(self::$badname)) {
            return ui_sysmessage::shout(ui_language::translate("Your MySQL user name is not valid. Please enter a valid MySQL user name of length 16 including prefix."), "zannounceerror");
        }
        if (!fs_director::CheckForEmptyValue(self::$badpass)) {
            return ui_sysmessage::shout(ui_language::translate("Your MySQL password is not valid. Enter Valid characters of length 9 with atleast 1 uppercase,lowercase,number,special character."), "zannounceerror");
        }
        if (!fs_director::CheckForEmptyValue(self::$badIP)) {
            return ui_sysmessage::shout(ui_language::translate("The IP address is not valid. Please enter a valid IP address."), "zannounceerror");
        }
        if (!fs_director::CheckForEmptyValue(self::$dbalreadyadded)) {
            return ui_sysmessage::shout(ui_language::translate("That database has already been added to this user."), "zannounceerror");
        }
	    if (!fs_director::CheckForEmptyValue(self::$blankdbadded)) {
            return ui_sysmessage::shout(ui_language::translate("Please select any database to add for this user."), "zannounceerror");
        }
        if (!fs_director::CheckForEmptyValue(self::$priv_req_err)) {
            return ui_sysmessage::shout(ui_language::translate("Please assign privileges to the user."), "zannounceerror");
        }
        if (!fs_director::CheckForEmptyValue(self::$deleted_ok)) {
            return ui_sysmessage::shout(ui_language::translate("MySQL user has been deleted successfully!"), "zannounceok");
        }
        if (!fs_director::CheckForEmptyValue(self::$created_ok)) {
            return ui_sysmessage::shout(ui_language::translate("MySQL user has been created successfully!"), "zannounceok");
        }
        if (!fs_director::CheckForEmptyValue(self::$update_priv_succ)) {
            return ui_sysmessage::shout(ui_language::translate("MySQL user privileges has been updated successfully!"), "zannounceok");
        }
        if (!fs_director::CheckForEmptyValue(self::$db_added)) {
            return ui_sysmessage::shout(ui_language::translate("MySQL database has been added successfully to the user!"), "zannounceok");
        }
        if (!fs_director::CheckForEmptyValue(self::$passreset_ok)) {
            return ui_sysmessage::shout(ui_language::translate("MySQL user password has been changed successfully!"), "zannounceok");
        }

        return;
    }

    /**
     * Webinterface sudo methods.
     */
}