<?php
 
 
class REConfigUser Extends REConfig
 
{
 
    function BuildQuery(&$data) {
 
        $privs='';
 
        $grant='N';
 
 
        if(!strcasecmp('yes',$data[5]['value'][0])) {
 
            $privs='ALL PRIVILEGES';
 
        } else {
 
            for($i=6; $i < count(@$data); $i++) {
 
                if(!strcasecmp('radio',@$data[$i]['type'])
 
                && !strcasecmp('y',@$data[$i]['value'][0])) {
 
                    if(!strcasecmp('grant',@$data[$i]['name'])) {
 
                        $grant=@$data[$i]['value'][0];
 
                    } else {
 
                        $privs.=','.@$data[$i]['name'];
 
                    }
 
                }
 
            }
 
            $privs=ltrim($privs,',');
 
        }
 
        if(@in_array('insert',$this->action)) {
 
            $this->sources['building']['out']['query']=$this->SqlGrantPrivs(
 
                $data[2]['value'][0],$data[0]['value'][0],$data[3]['value'][0],$data[4]['value'][0],$privs,$grant);
 
        } else if(@in_array('update',$this->action)) {
 
            $this->sources['building']['out']['query']=$this->SqlUpdatePrivs(
 
                $data[2]['value'][0],$data[0]['value'][0],$data[3]['value'][0],$data[4]['value'][0],$privs,$grant);
 
        } else if(@in_array('delete',$this->action)) {
 
            $this->sources['building']['out']['query']=$this->SqlRevokePrivs(
 
                   $data[2]['value'][0],$data[0]['value'][0],$data[3]['value'][0],$grant);
 
        }
 
    }
 
    function SqlListPrivs($host,$user) {
 
        return 'SELECT Host,User,password,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,Grant_priv FROM user WHERE User=\''.$user.'\' AND Host=\''.$host.'\';';
 
    }
 
    function SqlGrantPrivs($host,$db,$user,$password,$privs,$grant) {
 
        $grantoption=($grant=='Y' ? ' WITH GRANT OPTION' : '');
 
 
        if(!strcasecmp('all',$db)) $db='*';
 
        $sql = array(
 
            "CREATE USER '$user'@'$host' IDENTIFIED BY '$password';",
 
            "GRANT $privs ON $db.* TO '$user'@'$host'$grantoption;",
 
            'FLUSH PRIVILEGES;');
 
        return $sql;
 
    }
 
 
    function SqlUpdatePrivs($host,$db,$user,$password,$privs,$grant) {
 
        $grantoption=($grant=='Y' ? ' WITH GRANT OPTION' : '');
 
 
        if(!strcasecmp('all',$db)) $db='*';
 
        $sql = array(
 
            //'REVOKE ALL PRIVILEGES'.($grant=='Y'?', GRANT OPTION':'')." ON $db.* FROM '$user'@'$host';",
 
            //"REVOKE GRANT OPTION FROM '$user';", //.'\'@\''.$host.'\'',
 
            "REVOKE ALL PRIVILEGES ON $db.* FROM '$user'@'$host';",
 
            "UPDATE user SET Grant_priv='N' WHERE User='$user' AND Host='$host';",
 
            "GRANT $privs ON $db.* TO '$user'@'$host'$grantoption;");
 
        if($password!='*')
 
            $sql[] = "SET PASSWORD FOR '$user'@'$host' = PASSWORD('$password');";
 
        $sql[] = 'FLUSH PRIVILEGES;';
 
        return $sql;
 
    }
 
 
    function SqlRevokePrivs($host,$db,$user,$grant) {
 
        if(!strcasecmp('all',$db)) $db='*';
 
        $grantoption=($grant=='Y' ? ', GRANT OPTION' : '');
 
        $sql = array("REVOKE ALL PRIVILEGES ON $db.* FROM $user'@'$host';");
 
        if($grant=='Y')
 
            $sql[] = "UPDATE user SET Grant_priv='N' WHERE User='$user' AND Host='$host';";
 
            //"REVOKE GRANT OPTION FROM '$user'@'$host';";
 
        $sql[] = "DROP USER '$user'@'$host';";
 
        $sql[] = 'FLUSH PRIVILEGES;';
 
        return $sql;
 
    }
 
};
 
 
 |