<?php

//echo '<pre>';
//var_dump($_POST);
//echo '</pre>';


$_REQUEST = _antiSqlInjection($_REQUEST);
$_POST = _antiSqlInjection($_POST);
$_GET = _antiSqlInjection($_GET);
$_COOKIE = _antiSqlInjection($_COOKIE);

function _antiSqlInjection($Target, $campos_excluidos = array()) {
    $sanitizeRules = array(' OR ', ' OR', 'FROM', 'SELECT', 'INSERT', 'DELETE', 'WHERE', 'DROP TABLE', 'SHOW TABLES', ' *', '--', '<SCRIPT>', '<script>', '</SCRIPT>', '</script>');
    //$campos_permitidos = array('recaptcha_challenge_field');
    foreach ($Target as $key => $value):
        if (is_array($value)): $arraSanitized[$key] = _antiSqlInjection($value, $campos_excluidos);
        else:
            $arraSanitized[$key] = (!get_magic_quotes_gpc()) ? addslashes(str_ireplace($sanitizeRules, "", $value)) : str_ireplace($sanitizeRules, "", $value);
        endif;


    endforeach;
    if (isset($arraSanitized)) {
        return $arraSanitized;
    }
}

function kickuser($username) {
    $url = $_SESSION["cspsrv_protocol"] . "://" . $_SESSION["cspsrv_user"] . ":" . $_SESSION["cspsrv_pass"] . "@" . $_SESSION["cspsrv_ip"] . ":" . $_SESSION["cspsrv_port"] . "/xmlHandler?command=kick-user&name=" . $username;
    file($url);
    return($username . " sucesso chutou!");
}

function removeuser($uid, $username) {
    require("config.php");
    $conn = @mysql_connect($dbhost, $dbuser, $dbpass) or sqlerror();
    mysql_select_db($dbname, $conn);
    mysql_query("DELETE FROM cmum_udb WHERE id='" . $uid . "'") or sqlerror();
    mysql_close($conn);
    return("Usuário [" . $username . "] Removido Com Sucesso");
}

function randomstring() {
    require("config.php");
    $conn = @mysql_connect($dbhost, $dbuser, $dbpass) or sqlerror();
    mysql_select_db($dbname, $conn);
    $sql = mysql_query("SELECT * FROM cmum_settings WHERE id='1'");
    $line = mysql_fetch_array($sql);
    mysql_close($conn);
    $chars = $line["rndpasschr"];
    srand((double) microtime() * 1000000);
    $i = 0;
    $pass = "";
    while ($i <= $line["rndpasschrlength"] - 1) {
        $num = rand() % 33;
        $tmp = substr($chars, $num, 1);
        $pass = $pass . $tmp;
        $i++;
    }
    return($pass);
}

function sendosdmessage($username, $text) {
    $text = str_replace(" ", "+", $text);
    $url = $_SESSION["cspsrv_protocol"] . "://" . $_SESSION["cspsrv_user"] . ":" . $_SESSION["cspsrv_pass"] . "@" . $_SESSION["cspsrv_ip"] . ":" . $_SESSION["cspsrv_port"] . "/xmlHandler?command=osd-message&name=" . $username . "&text=" . $text;
    $retvalue = file($url);

    if (substr($retvalue[2], 0, 12) == "Message sent") {
        $status = str_replace(".", "", $retvalue[2]);
    }

    if (substr($retvalue[2], 0, 9) == "No active") {
        $status = "<font color=\"#FF0000\">" . $retvalue[2] . "</font>";
    }
    return($status);
}

function updatecspudb() {

    $url = $_SESSION["cspsrv_protocol"] . "://" . $_SESSION["cspsrv_user"] . ":" . $_SESSION["cspsrv_pass"] . "@" . $_SESSION["cspsrv_ip"] . ":" . $_SESSION["cspsrv_port"] . "/xmlHandler?command=update-users";
    $retvalue = file($url);

    if (substr($retvalue[2], 0, 17) == "Updated performed") {

        $status = "<font color=\"#347C2C\">" . trim(str_replace(".", "", $retvalue[2])) . "!</font>";
    } else {

        $status = "<font color=\"#FF0000\">" . trim(str_replace(".", "", $retvalue[2])) . "!</font>";
    }
    return($status);
}

function replacechars($string) {
    $string = str_replace("'", "&#39;", $string);
    $string = str_replace("\"", "&quot;", $string);
    $string = str_replace("&", "&amp;", $string);
    $string = str_replace("¢", "&cent;", $string);
    $string = str_replace("©", "&copy;", $string);
    $string = str_replace("÷", "&divide;", $string);
    $string = str_replace(">", "&gt;", $string);
    $string = str_replace("<", "&lt;", $string);
    $string = str_replace("µ", "&micro;", $string);
    $string = str_replace("·", "&middot;", $string);
    $string = str_replace("¶", "&para;", $string);
    $string = str_replace("±", "&plusmn;", $string);
    $string = str_replace("€", "&euro;", $string);
    $string = str_replace("£", "&pound;", $string);
    $string = str_replace("®", "&reg;", $string);
    $string = str_replace("§", "&sect;", $string);
    $string = str_replace("™", "&trade;", $string);
    $string = str_replace("¥", "&yen;", $string);
    $string = str_replace("–", "&ndash;", $string);
    $string = str_replace("—", "&mdash;", $string);
    $string = str_replace("¡", "&iexcl;", $string);
    $string = str_replace("¿", "&iquest;", $string);
    $string = str_replace("\"", "&quot;", $string);
    $string = str_replace("“", "&ldquo;", $string);
    $string = str_replace("”", "&rdquo;", $string);
    $string = str_replace("‘", "&lsquo;", $string);
    $string = str_replace("’", "&rsquo;", $string);
    $string = str_replace("«", "&laquo;", $string);
    $string = str_replace("»", "&raquo;", $string);
    return($string);
}

function reversechars($string) {
    $string = str_replace("&#39;", "'", $string);
    $string = str_replace("&quot;", "\"", $string);
    $string = str_replace("&amp;", "&", $string);
    $string = str_replace("&cent;", "¢", $string);
    $string = str_replace("&copy;", "©", $string);
    $string = str_replace("&divide;", "÷", $string);
    $string = str_replace("&gt;", ">", $string);
    $string = str_replace("&lt;", "<", $string);
    $string = str_replace("&micro;", "µ", $string);
    $string = str_replace("&middot;", "·", $string);
    $string = str_replace("&para;", "¶", $string);
    $string = str_replace("&plusmn;", "±", $string);
    $string = str_replace("&euro;", "€", $string);
    $string = str_replace("&pound;", "£", $string);
    $string = str_replace("&reg;", "®", $string);
    $string = str_replace("&sect;", "§", $string);
    $string = str_replace("&trade;", "™", $string);
    $string = str_replace("&yen;", "¥", $string);
    $string = str_replace("&ndash;", "–", $string);
    $string = str_replace("&mdash;", "—", $string);
    $string = str_replace("&iexcl;", "¡", $string);
    $string = str_replace("&iquest;", "¿", $string);
    $string = str_replace("&quot;", "\"", $string);
    $string = str_replace("&ldquo;", "“", $string);
    $string = str_replace("&rdquo;", "”", $string);
    $string = str_replace("&lsquo;", "‘", $string);
    $string = str_replace("&rsquo;", "’", $string);
    $string = str_replace("&laquo;", "«", $string);
    $string = str_replace("&raquo;", "»", $string);
    $string = str_replace(array('á', 'à', 'ã'), 'a', $string);
    $string = str_replace(array('é', 'è'), 'e', $string);
    $string = str_replace(array('í', 'ì'), 'i', $string);
    $string = str_replace(array('ó', 'ò', 'õ'), 'o', $string);
    $string = str_replace(array('ú', 'ù'), 'u', $string);
    $string = str_replace(array('Á', 'À', 'Ã'), 'A', $string);
    $string = str_replace(array('É', 'È'), 'E', $string);
    $string = str_replace(array('Í', 'Ì'), 'I', $string);
    $string = str_replace(array('Ó', 'Ò', 'Õ'), 'O', $string);
    $string = str_replace(array('Ú', 'Ù'), 'U', $string);
    $string = str_replace("ç", "c", $string);
    $string = str_replace("Ç", "C", $string);

    return($string);
}

function dpt($d, $s) {
    return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $s, base64_decode($d), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)));
}

function adduser($username, $password, $displayname, $ipmask, $profiles, $maxconnections, $admin, $enabled, $mapexclude, $debug, $email, $dd, $telefone, $dd_cel, $celular, $comment, $usrgroup, $customvalues, $ecmrate, $startdate, $expiredate, $obs_user, $valor_cob) {

// Return codes
    // 0 = user added
    // 1 = no username or password
    // 2 = username allready exists
    // 10 = internal: create random password
    // 11 = internal: load defaults/auto load defaults
    // 12 = internal: user added and defaults loaded

    require("config.php");

    $expiredate = date("Y-m-d H:i:s", strtotime(str_replace("/", "-", trim($expiredate))));

    if ($username == "" or $password == "" || $displayname == "") {

        $status = "1";
    } elseif (strtotime($expiredate) < time()) {

        $status = "6";
    } else {

        $conn = @mysql_connect($dbhost, $dbuser, $dbpass);
        mysql_select_db($dbname, $conn);

        $sql = mysql_query("SELECT * FROM cmum_udb WHERE name='" . $username . "'");

        $rowcheck = mysql_num_rows($sql);

        if ($rowcheck == 1) {
            $status = "2";
            mysql_close($conn);
        } elseif ($profiles == "") {
            $status = "3";
        } elseif (strlen($username) < 3 or strlen($username) > 20) {
            $status = "4";
        } elseif (strlen($password) < 2 or strlen($password) > 15) {
            $status = "5";
        } elseif ($expiredate == "") {
            $status = "6";
        } elseif (($telefone != "" && $dd == "") || ($celular != "" && $dd_cel == "")) {//$dd_cel,$celular
            $status = "7";
        } else {
            if (!isset($profiles)) {

                $count_maxconnections = 1;
                $profiles = "N;";
            } else {

                $count_maxconnections = count($profiles);
                $profiles = serialize($profiles);
            }
            $username = trim(addslashes(replacechars($username)));
            $password = trim(addslashes(replacechars($password)));
            $displayname = trim(replacechars($displayname));
            $ipmask = trim($ipmask);
            $maxconnections = (is_numeric($maxconnections)) ? trim(addslashes(replacechars($maxconnections))) : 1;
            $admin = strtolower($admin);
            $enabled = strtolower($enabled);
            $mapexclude = strtolower($mapexclude);
            $debug = strtolower($debug);
            $email = trim(addslashes(replacechars($email)));
            $dd = trim(addslashes(replacechars($dd)));
            $telefone = trim(addslashes(replacechars($telefone)));
            $dd_cel = trim(addslashes(replacechars($dd_cel)));
            $celular = trim(addslashes(replacechars($celular)));
            $comment = replacechars($comment);
            $usrgroup = trim(replacechars($usrgroup));
            $customvalues = trim(replacechars($customvalues));
            $ecmrate = trim($ecmrate);
            $startdate = trim($startdate);
            $obs_user = trim(addslashes(replacechars($obs_user)));
            $valor_cob = trim(addslashes(replacechars($valor_cob)));
            $ip_cad = $_SERVER['REMOTE_ADDR'];

            mysql_query("INSERT INTO cmum_udb (name,password,displayname,ipmask,profiles,maxconnections,admin,enabled,mapexclude,debug,comment,email,dd,telefone,dd_cel,celular,usrgroup,customvalues,ecmrate,startdate,expiredate,added,addedby,addedbyname,changed,changedby,obs_user,valor_cob,ip_cad) VALUES "
                    . "('" . $username . "','" . $password . "','" . $displayname . "','" . $ipmask . "','" . $profiles . "','" . $maxconnections . "','" . $admin . "','" . $enabled . "','" . $mapexclude . "','" . $debug . "','" . $comment . "','" . $email . "','" . $dd . "','" . $telefone . "','" . $dd_cel . "','" . $celular . "','" . $usrgroup . "','" . $customvalues . "','" . $ecmrate . "','" . $startdate . "','" . $expiredate . "','" . date("Y-m-d H:i") . "','" . $_SESSION["adminid"] . "','" . $_SESSION["loginuser"] . "','','','{$obs_user}','{$valor_cob}','{$ip_cad}')");

            $_id_inserido = mysql_insert_id($conn);

            mysql_close($conn);

            $status = "0";
        }
    }

    return array($status, $_id_inserido);
}

function ept($e, $s) {
    return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $s, $e, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))));
}

function edituser($uid, $username, $password, $displayname, $ipmask, $profiles, $maxconnections, $admin, $enabled, $mapexclude, $debug, $email, $dd, $telefone, $dd_cel, $celular, $comment, $usrgroup, $customvalues, $ecmrate, $startdate, $expiredate, $obs_user, $valor_cob) {
    require("config.php");
    if (!isset($profiles)) {
        $count_maxconnections = 1;
        $profiles = "N;";
    } else {
        $count_maxconnections = count($profiles);
        $profiles = serialize($profiles);
    }
    $username = trim(addslashes(replacechars($username)));
    $password = trim(addslashes(replacechars($password)));
    $displayname = trim(replacechars($displayname));
    $ipmask = trim($ipmask);
    $maxconnections = (is_numeric($maxconnections)) ? trim(addslashes(replacechars($maxconnections))) : 1;
    $admin = strtolower($admin);
    $enabled = strtolower($enabled);
    $mapexclude = strtolower($mapexclude);
    $debug = strtolower($debug);
    $email = trim(addslashes(replacechars($email)));
    $dd = trim(addslashes(replacechars($dd)));
    $telefone = trim(addslashes(replacechars($telefone)));
    $dd_cel = trim(addslashes(replacechars($dd_cel)));
    $celular = trim(addslashes(replacechars($celular)));
    $comment = replacechars($comment);
    $usrgroup = trim(replacechars($usrgroup));
    $customvalues = trim(replacechars($customvalues));
    $ecmrate = trim($ecmrate);
    $startdate = trim($startdate);
    $expiredate = trim($expiredate);
    $obs_user = trim(addslashes(replacechars($obs_user)));
    $valor_cob = trim(addslashes(replacechars($valor_cob)));
    $ip_atualizacao = $_SERVER['REMOTE_ADDR'];
    $id_rev_mudou_status = "0";
    if ($enabled == "false") {
        $id_rev_mudou_status = $_SESSION['adminid'];
    }


    /* $status = 0;
      if (strlen($username) < 3 or strlen($username) > 15) {
      $status = 4; // Limites tamanhos logins
      } elseif (strlen($password) < 2 or strlen($password) > 15) {
      $status = 5;// Limites tamanhos Senhas
      } elseif ($expiredate == "") {
      $status = 6;// Vencimento Vazio
      }
      if($status > 0){
      //header($_SERVER['HTTP_REFERRER']."&status={$status}");
      //exit();
      return $status;
      } */




    $conn = @mysql_connect($dbhost, $dbuser, $dbpass);
    mysql_select_db($dbname, $conn);
    /*
      1	Pode alterar login
      2	Pode alterar senha
      3	Pode alterar email
      4	Pode alterar vencimento
      5	Pode alterar status
      6	Pode exlcuir logins
      7	Pode alterar nome
      8	Pode alterar o numero de conexoees
     *      */
    $opc_log = unserialize($_SESSION["_opcoes_log"]);
    if (is_null($opc_log)) {
        $opc_log = array();
    }
    $SQL = "";
    if ($_SESSION['adminlevel'] != "0") {

        $SQL = "UPDATE cmum_udb SET ";
        if (!empty($opc_log) && array_search('1', $opc_log) !== false) {
            $SQL .= "name='{$username}',";
        }
        if (!empty($opc_log) && array_search('2', $opc_log) !== false) {
            $SQL .= "password='{$password}',";
        }
        if (!empty($opc_log) && array_search('7', $opc_log) !== false) {
            $SQL .= "displayname='{$displayname}',";
        }
        if (!empty($opc_log) && array_search('3', $opc_log) !== false) {
            $SQL .= "email='{$email}',";
        }
        if (!empty($opc_log) && array_search('4', $opc_log) !== false) {
            $SQL .= "expiredate='{$expiredate}',";
        }
        if (!empty($opc_log) && array_search('5', $opc_log) !== false) {
            $SQL .= "enabled='{$enabled}',"
                    . "id_rev_mudou_status='{$id_rev_mudou_status}',";
        }
        if (!empty($opc_log) && array_search('8', $opc_log) !== false) {
            $SQL .= "maxconnections = '{$maxconnections}', ";
        }

        $SQL .= "dd = '{$dd}', ";
        $SQL .= "telefone = '{$telefone}', ";
        $SQL .= "dd_cel = '{$dd_cel}', ";
        $SQL .= "celular = '{$celular}', ";
        $SQL .= "profiles = '{$profiles}', ";
        $SQL .= "changed = '" . date('Y-m-d H:i:s') . "', ";
        $SQL .= "changedby = '{$_SESSION["adminid"]}', ";
        $SQL .= "obs_user = '{$obs_user}', ";
        $SQL .= "valor_cob = '{$valor_cob}'";
        $SQL .= " WHERE id = '{$uid}'";
        //exit($SQL);
    } else {
        $SQL = "UPDATE cmum_udb SET name = '" . $username . "', "
                . "password = '" . $password . "', "
                . " displayname = '" . $displayname . "', "
                . " ipmask = '" . $ipmask . "', "
                . " profiles = '" . $profiles . "', "
                . " maxconnections = '" . $maxconnections . "', "
                . " admin = '" . $admin . "', "
                . " enabled = '" . $enabled . "', "
                . " mapexclude = '" . $mapexclude . "', "
                . " debug = '" . $debug . "', "
                . " comment = '" . $comment . "', "
                . " email = '" . $email . "', "
                . " dd = '" . $dd . "', "
                . " telefone = '" . $telefone . "', "
                . " dd_cel = '" . $dd_cel . "', "
                . " celular = '" . $celular . "', "
                . " usrgroup = '" . $usrgroup . "', "
                . " customvalues = '" . $customvalues . "', "
                . " ecmrate = '" . $ecmrate . "', "
                . " startdate = '" . $startdate . "', "
                . " expiredate = '" . $expiredate . "', "
                . " changed = '" . date('Y-m-d H:i:s') . "', "
                . " changedby = '" . $_SESSION["adminid"] . "', "
                . " obs_user = '{$obs_user}', "
                . " valor_cob = '{$valor_cob}', "
                . " id_rev_mudou_status = '{$id_rev_mudou_status}',"
                . " ip_atualizacao = '{$ip_atualizacao}'"
                . " WHERE id = '" . $uid . "'";
    }
    $status = mysql_query($SQL) or die(mysql_error());
    /* mysql_query("UPDATE cmum_udb SET name = '" . $username . "', "
      . "password = '" . $password . "', "
      . " displayname = '" . $displayname . "', "
      . " ipmask = '" . $ipmask . "', "
      . " profiles = '" . $profiles . "', "
      . " maxconnections = '" . $maxconnections . "', "
      . " admin = '" . $admin . "', "
      . " enabled = '" . $enabled . "', "
      . " mapexclude = '" . $mapexclude . "', "
      . " debug = '" . $debug . "', "
      . " comment = '" . $comment . "', "
      . " email = '" . $email . "', "
      . " usrgroup = '" . $usrgroup . "', "
      . " customvalues = '" . $customvalues . "', "
      . " ecmrate = '" . $ecmrate . "', "
      . " startdate = '" . $startdate . "', "
      . " expiredate = '" . $expiredate . "', "
      . " changed = '" . date('Y-m-d H:i') . "', "
      . " changedby = '" . $_SESSION["adminid"] . "', "
      . " obs_user = '{$obs_user}'"
      . " WHERE id = '" . $uid . "'"); */
    mysql_close($conn);
    //$status = "Usuário [" . $username . "] atualizado com sucesso.";
    return $status;
}

function checkcspconn() {
    if ($_SESSION["cspconnchk"] == "1") {
        if (@simplexml_load_file($_SESSION["cspsrv_protocol"] . "://" . $_SESSION["cspsrv_user"] . ":" . $_SESSION["cspsrv_pass"] . "@" . $_SESSION["cspsrv_ip"] . ":" . $_SESSION["cspsrv_port"] . "/xmlHandler?command=proxy-status")) {
            $status = "1";
        } else {
            $status = "0";
        }
    }
    if ($_SESSION["cspconnchk"] == "0") {
        $status = "1";
    }
    return($status);
}

/* function valVers() {
  require 'config.php';
  require 'includes/debug.php';
  //echo $dbhost;
  //exit();
  $v = ept($h, $s);
  $v2 = ept(dirname(realpath(__DIR__ . '/../index.php')), $s);
  $conn = @mysql_connect($dbhost, $dbuser, $dbpass) or die(sqlerror());
  mysql_select_db($dbname, $conn);
  //8c298a406786fa34b06cbee8b81a670ecba1e6b4
  $rs = mysql_query("SELECT rndpasschr FROM cmum_settings WHERE rndpasschr = '{$v}' AND rndpasschrlength = '{$v2}' AND id = 1");
  //exit(var_dump("SELECT rndpasschr FROM cmum_settings WHERE rndpasschr = '{$v}' AND rndpasschrlength = '{$v2}'"));
  if (mysql_num_rows($rs) == 0) { //?
  //echo "SELECT rndpasschr FROM cmum_settings WHERE rndpasschr = '{$v}'";
  return true;
  } else {
  mysql_close();
  header("Location: reg.php");
  exit();
  }
  } */

function sqlerror() {
    require("config.php");
    require("includes/settings.php");
    print("<html><head>");
    print("<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">");
    print("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=" . $charset . "\">");
    print("<title>" . $longtitle . "</title>");
    print("<link href=\"css/main.css\" rel=\"stylesheet\" type=\"text/css\"></head><body>");
    print("<center><br><img src=\"images/warning.png\"><br><br>");
    print("<h1>There was a error connecting to the MySQL server!</h1>");
    print("<strong>MySQL Server Error:<br>" . mysql_error() . "</strong><br><br><br>");
    print("<a href=\"index.php\">Back to main page</a></center>");
    print("</center></body></html>");
    exit;
}

function optimizedb() {
    require("config.php");
    $connopt = @mysql_connect($dbhost, $dbuser, $dbpass) or sqlerror();
    mysql_select_db($dbname, $connopt);
    mysql_query("OPTIMIZE TABLE cmum_admins");
    mysql_query("OPTIMIZE TABLE cmum_failedlogins");
    mysql_query("OPTIMIZE TABLE cmum_profiles");
    mysql_query("OPTIMIZE TABLE cmum_settings");
    mysql_query("OPTIMIZE TABLE cmum_udb");
    mysql_close($connopt);
}

function checkdbver() {
    require("config.php");
    require("includes/settings.php");
    $conndbchk = @mysql_connect($dbhost, $dbuser, $dbpass) or sqlerror();
    mysql_select_db($dbname, $conndbchk);
    $sql = mysql_query("SELECT * FROM cmum_settings WHERE id='1'");
    $line = mysql_fetch_array($sql);
    $chkdbver = $line["dbversion"];
    mysql_close($conndbchk);
    if ($chkdbver <> $version) {
        print("<html><head>");
        print("<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">");
        print("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=" . $charset . "\">");
        print("<title>" . $longtitle . "</title>");
        print("<link href=\"css/main.css\" rel=\"stylesheet\" type=\"text/css\"></head><body>");
        print("<center><br><img src=\"images/warning.png\"><br><br>");
        print("<h1>Incorrect database version for this installation!</h1>");
        print("<strong>Your installed version: " . $version . " - Your database version: " . $chkdbver . "<br>Please run the upgrade tool to upgrade your database!</strong><br><br>");
        print("<a href=\"upgrade.php\">Click here to run the upgrade tool now</a><br><br><br>");
        print("<a href=\"index.php\">Back to main page</a>");
        print("</center></body></html>");
        exit;
    }
}

function getadminname($adminid, $dosql) {
    // 0 = no sql connect
    // 1 = do sql connect
    require("config.php");
    if ($dosql == 1) {
        $connadminchk = @mysql_connect($dbhost, $dbuser, $dbpass) or sqlerror();
        mysql_select_db($dbname, $connadminchk);
    }
    $sqladminchk = mysql_query("SELECT * FROM cmum_admins WHERE id='" . $adminid . "'");
    $lineadminchk = mysql_fetch_array($sqladminchk);
    if ($lineadminchk["username"] <> "") {
        $name = $lineadminchk["username"];
    } else {
        $name = "<i>Excluidos administrador!</i>";
    }
    if ($dosql == 1) {
        mysql_close($connadminchk);
    }
    return($name);
}

function getadminid($admname, $dosql) {
    // 0 = no sql connect
    // 1 = do sql connect
    require("config.php");
    if ($dosql == 1) {
        $connadminchk = @mysql_connect($dbhost, $dbuser, $dbpass) or sqlerror();
        mysql_select_db($dbname, $connadminchk);
    }
    $sqladminchk = mysql_query("SELECT * FROM cmum_admins WHERE username='" . $admname . "'");
    $lineadminchk = mysql_fetch_array($sqladminchk);
    if ($lineadminchk["id"] <> "") {
        $admid = $lineadminchk["id"];
    } else {
        $admid = "";
    }
    if ($dosql == 1) {
        mysql_close($connadminchk);
    }
    return($admid);
}

function smtpmailer($para, $de, $de_nome, $senha, $assunto, $corpo, $serv) {
    require_once("includes/PHPMailer/class.phpmailer.php");
    global $contato;
    //global $error;
    //global $sucesso;
    //
    //Gambiarra Email ------------//
    /* $serv = 'local';
      if ($serv == "local") {
      $mail = new PHPMailer();
      $mail->CharSet = "UTF-8";
      $mail->IsSMTP();  // Ativar SMTP
      $mail->IsHTML();
      $mail->SMTPDebug = 0;  // Debugar: 1 = erros e mensagens, 2 = mensagens apenas
      $mail->SMTPAuth = true; // Autenticação ativada
      $mail->SMTPSecure = 'ssl'; // SSL REQUERIDO pelo GMail
      $mail->Host = 'mail.cspadmin.com'; // SMTP utilizado
      $mail->Port = 465;    // A porta 465 deverá estar aberta em seu servidor
      //$mail->Username = GUSER;
      //$mail->Username = $de;
      //$mail->Password = $senha;
      $mail->Username = 'painel@cspadmin.com';
      $mail->Password = '@MAX??//';
      $mail->SetFrom($de, $de_nome);
      $mail->Subject = $assunto;
      $mail->Body = $corpo;
      $mail->AddAddress($para);
      $mail->AddBCC($contato);
      if (!$mail->Send()) {
      $msgError = 'Mail error: ' . $mail->ErrorInfo;
      return $msgError;
      //$error = "&erro=1";
      //return false;
      } else {
      //$sucesso = '&sucesso=1';
      return true;
      }
      } */
    ///------------ Fim da Gambiarra --------->
    if ($serv == "gmail") {
        $mail = new PHPMailer();
        $mail->CharSet = "UTF-8";
        $mail->IsSMTP();  // Ativar SMTP
        $mail->IsHTML();
        $mail->SMTPDebug = 0;  // Debugar: 1 = erros e mensagens, 2 = mensagens apenas
        $mail->SMTPAuth = true; // Autenticação ativada
        $mail->SMTPSecure = 'ssl'; // SSL REQUERIDO pelo GMail
        $mail->Host = 'smtp.gmail.com'; // SMTP utilizado
        $mail->Port = 465;    // A porta 465 deverá estar aberta em seu servidor
        //$mail->Username = GUSER;
        $mail->Username = $de;
        $mail->Password = $senha;
        $mail->SetFrom($de, $de_nome);
        $mail->Subject = $assunto;
        $mail->Body = $corpo;
        $mail->AddAddress($para);
        $mail->AddBCC($contato);
        if (!$mail->Send()) {
            $msgError = 'Mail error: ' . $mail->ErrorInfo;
            return $msgError;
            //$error = "&erro=1";
            //return false;
        } else {
            //$sucesso = '&sucesso=1';
            return true;
        }
    }
    if ($serv == "hotmail") {
        $mail = new PHPMailer();
        $mail->CharSet = "UTF-8";
        $mail->IsSMTP();  // Ativar SMTP
        $mail->IsHTML();
        $mail->SMTPDebug = 0;  // Debugar: 1 = erros e mensagens, 2 = mensagens apenas
        $mail->SMTPAuth = true; // Autenticação ativada
        $mail->SMTPSecure = 'tls'; // SSL REQUERIDO pelo GMail
        //$mail->Mailer = "smtp";
        $mail->Host = 'smtp.live.com'; // SMTP utilizado
        $mail->Port = 25;    // A porta 465 deverá estar aberta em seu servidor
        //$mail->Username = GUSER;
        $mail->Username = $de;
        $mail->Password = $senha;
        $mail->SetFrom($de, $de_nome);
        $mail->Subject = $assunto;
        $mail->Body = $corpo;
        $mail->AddAddress($para);
        $mail->AddBCC($contato);
        if (!$mail->Send()) {
            $msgError = 'Mail error: ' . $mail->ErrorInfo;
            return $msgError;
            //$error = "&erro=1";
            //return false;
        } else {
            //$sucesso = '&sucesso=1';
            return true;
        }
    }
    if ($serv == "yahoo") {
        //exit("Yahoo");
        $mail = new PHPMailer();
        $mail->CharSet = "UTF-8";
        $mail->IsSMTP();  // Ativar SMTP
        //$mail->IsMail();
        $mail->IsHTML();
        $mail->SMTPDebug = 1;  // Debugar: 1 = erros e mensagens, 2 = mensagens apenas
        $mail->SMTPAuth = true; // Autenticação ativado
        $mail->SMTPSecure = 'tsl'; // SSL REQUERIDO pelo GMail
        //$mail->Mailer = "smtp";
        $mail->Host = 'smtp.mail.yahoo.com.br'; // SMTP utilizado
        $mail->Port = 587;    // A porta 465 deverá estar aberta em seu servidor
        //$mail->Username = GUSER;
        $mail->Username = $de;
        $mail->Password = $senha;
        $mail->SetFrom($de, $de_nome);
        $mail->Subject = $assunto;
        $mail->Body = $corpo;
        $mail->AddAddress($para);
        $mail->AddBCC($contato);
        if (!$mail->Send()) {
            $msgError = 'Mail error: ' . $mail->ErrorInfo;
            return $msgError;
            //$error = "&erro=1";
            //return false;
        } else {
            //$sucesso = '&sucesso=1';
            return true;
        }
    }
}

function smtpmailer2($para, $de, $de_nome, $senha, $assunto, $corpo, $serv) {

    require_once __DIR__ . DIRECTORY_SEPARATOR . "PHPMailer" . DIRECTORY_SEPARATOR . "class.phpmailer.php";

    global $contato;

    if ($serv == "gmail") {

        $mail = new PHPMailer();
        $mail->CharSet = "UTF-8";
        $mail->IsSMTP();  // Ativar SMTP
        $mail->IsHTML();
        $mail->SMTPDebug = 1;  // Debugar: 1 = erros e mensagens, 2 = mensagens apenas
        $mail->SMTPAuth = true; // Autenticação ativada
        $mail->SMTPSecure = 'ssl'; // SSL REQUERIDO pelo GMail
        $mail->Host = 'smtp.gmail.com'; // SMTP utilizado
        $mail->Port = 465;    // A porta 465 deverá estar aberta em seu servidor
        //$mail->Username = GUSER;
        $mail->Username = $de;
        $mail->Password = $senha;
        $mail->SetFrom($de, $de_nome);
        $mail->Subject = $assunto;
        $mail->Body = $corpo;
        $mail->AddAddress($para);
        $mail->AddBCC($contato);
    }

    if ($serv == "hotmail") {

        $mail = new PHPMailer();
        $mail->CharSet = "UTF-8";
        $mail->IsSMTP();  // Ativar SMTP
        $mail->IsHTML();
        $mail->SMTPDebug = 1;  // Debugar: 1 = erros e mensagens, 2 = mensagens apenas
        $mail->SMTPAuth = true; // Autenticação ativada
        $mail->SMTPSecure = 'tls'; // SSL REQUERIDO pelo GMail
        //$mail->Mailer = "smtp";
        $mail->Host = 'smtp.live.com'; // SMTP utilizado
        $mail->Port = 25;    // A porta 465 deverá estar aberta em seu servidor
        //$mail->Username = GUSER;
        $mail->Username = $de;
        $mail->Password = $senha;
        $mail->SetFrom($de, $de_nome);
        $mail->Subject = $assunto;
        $mail->Body = $corpo;
        $mail->AddAddress($para);
        $mail->AddBCC($contato);
    }
    if ($serv == "yahoo") {

        $mail = new PHPMailer();
        $mail->CharSet = "UTF-8";
        $mail->IsSMTP();  // Ativar SMTP
        //$mail->IsMail();
        $mail->IsHTML();
        $mail->SMTPDebug = 1;  // Debugar: 1 = erros e mensagens, 2 = mensagens apenas
        $mail->SMTPAuth = true; // Autenticação ativado
        $mail->SMTPSecure = 'tsl'; // SSL REQUERIDO pelo GMail
        //$mail->Mailer = "smtp";
        $mail->Host = 'smtp.mail.yahoo.com.br'; // SMTP utilizado
        $mail->Port = 587;    // A porta 465 deverá estar aberta em seu servidor
        //$mail->Username = GUSER;
        $mail->Username = $de;
        $mail->Password = $senha;
        $mail->SetFrom($de, $de_nome);
        $mail->Subject = $assunto;
        $mail->Body = $corpo;
        $mail->AddAddress($para);
        $mail->AddBCC($contato);
    }

    try {

        $mail->PreSend();

        if ($mail->Send() == true) {

            return true;
        }
    } catch (phpmailerException $e) {

        return 'Erro: ' . $e->errorMessage();
    }
}

//$para, $de, $de_nome, $senha, $assunto, $corpo, $serv
function smtpmailer3($dados_envio = array()) {

    require_once __DIR__ . DIRECTORY_SEPARATOR . "PHPMailer" . DIRECTORY_SEPARATOR . "class.phpmailer.php";


    $para = $dados_envio['para_email'];
    $de = $dados_envio['de_email'];
    $de_nome = $dados_envio['de_nome'];
    $senha = $dados_envio['de_senha'];
    $assunto = $dados_envio['assunto_email'];
    $corpo = $dados_envio['corpo_email'];
    $serv = $dados_envio['servidor_email'];


    if ($serv === "gmail") {

        $mail = new PHPMailer();
        $mail->CharSet = "UTF-8";
        $mail->IsSMTP();  // Ativar SMTP
        $mail->SMTPDebug = 1;  // Debugar: 1 = erros e mensagens, 2 = mensagens apenas
        $mail->SMTPAuth = true; // Autenticação ativada
        $mail->SMTPSecure = 'ssl'; // SSL REQUERIDO pelo GMail
        $mail->Host = 'smtp.gmail.com'; // SMTP utilizado
        $mail->Port = 465;    // A porta 465 deverá estar aberta em seu servidor
        $mail->Mailer = "smtp";
        $mail->Username = $de;
        $mail->Password = $senha;
        $mail->SetFrom($de, $de_nome);
        $mail->Subject = $assunto;
        $mail->Body = html_entity_decode($corpo);
        $mail->AddAddress($para);
        //$mail->AddBCC($contato);
    }

    if ($serv === "hotmail") {

        $mail = new PHPMailer();
        $mail->CharSet = "UTF-8";
        $mail->IsSMTP();  // Ativar SMTP        
        $mail->SMTPDebug = 1;  // Debugar: 1 = erros e mensagens, 2 = mensagens apenas
        $mail->SMTPAuth = true; // Autenticação ativada
        $mail->SMTPSecure = 'tls'; // SSL REQUERIDO pelo GMail
        //$mail->Mailer = "smtp";
        $mail->Host = 'smtp.live.com'; // SMTP utilizado
        $mail->Port = 25;    // A porta 465 deverá estar aberta em seu servidor
        //$mail->Username = GUSER;
        //$mail->Username = strtr($de, '@', true);
        $mail->Username = $de;
        $mail->Password = $senha;
        $mail->SetFrom($de, $de_nome);
        $mail->Subject = $assunto;
        $mail->Body = html_entity_decode($corpo);
        $mail->AddAddress($para);
        //$mail->AddBCC($contato); 
    }
    if ($serv === "yahoo") {

        $mail = new PHPMailer();
        $mail->CharSet = "UTF-8";
        $mail->IsSMTP();  // Ativar SMTP
        //$mail->IsMail();
        $mail->SMTPDebug = 1;  // Debugar: 1 = erros e mensagens, 2 = mensagens apenas
        $mail->SMTPAuth = true; // Autenticação ativado
        $mail->SMTPSecure = 'tsl'; // SSL REQUERIDO pelo GMail
        //$mail->Mailer = "smtp";
        $mail->Host = 'smtp.mail.yahoo.com.br'; // SMTP utilizado
        $mail->Port = 587;    // A porta 465 deverá estar aberta em seu servidor
        //$mail->Username = GUSER;
        $mail->Username = $de;
        $mail->Password = $senha;
        $mail->SetFrom($de, $de_nome);
        $mail->Subject = $assunto;
        $mail->Body = html_entity_decode($corpo);
        $mail->AddAddress($para);
    }
    $mail->IsHTML(true);
    $mail->AddCC($de);

    try {


        $mail->PreSend();
        $mail->Send();

        return true;
    } catch (phpmailerException $e) {

        return 'ERROR INFO: ' . $e->errorMessage();
    }
}

// Query String da Ordenação
function url_query2($chave = array(), $valor = array()) {

    $var_query = array();

    if (isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING'] != "") {

        parse_str($_SERVER['QUERY_STRING'], $var_query);

        for ($i = 0; $i < count($chave); $i++) {

            $var_query[$chave[$i]] = $valor[$i];
        }
    } else {

        for ($i = 0; $i < count($chave); $i++) {

            $var_query[$chave[$i]] = $valor[$i];
        }
    }



    return http_build_query($var_query);
}

// Query String da Ordenação
function url_query($chave = array(), $valor = array()) {
    $var_query = array();
    if (isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING'] != "") {
        parse_str($_SERVER['QUERY_STRING'], $var_query);
    }
    for ($i = 0; $i < count($chave); $i++) {
        $var_query[$chave[$i]] = $valor[$i];
    }



    return http_build_query($var_query);
}

//Arvore Revendas
function arvoreRevendas() {
    require("config.php");
    $conn = @mysql_connect($dbhost, $dbuser, $dbpass) or die("ERROR! Não Conectado ao Banco de Dados..");
    mysql_select_db($dbname, $conn);
    $SQL = "SELECT vw1.*,vw2.total_ativos,IFNULL(vw2.total_por_con,0) AS total_por_con FROM cmum_admins_pais_filhos AS vw1 LEFT JOIN"
            . " cmum_total_logins_ativos AS vw2 ON vw1.id = vw2.id";
    $rs = mysql_query($SQL);

    $_arvore = array();

    while ($reg = mysql_fetch_assoc($rs)) {
        $_arvore[] = (object) $reg;
    }
    $_filhos = array();
    foreach ($_arvore as $_a) {
        $_filhos[$_a->id_pai][] = $_a;
    }
    /* foreach ($_arvore as $_a) {
      if (isset($_filhos[$_a->id])) {
      $_a->_filhos = $_filhos[$_a->id];
      //unset($_a);
      }
      } */
    return $_filhos;
}

//Arvore Revendas Sem Totais
function arvoreRevendasSemTotais() {
    require("config.php");
    $conn = @mysql_connect($dbhost, $dbuser, $dbpass) or die("ERROR! Não Conectado ao Banco de Dados..");
    mysql_select_db($dbname, $conn);
    $SQL = "SELECT * FROM cmum_admins_pais_filhos";
    $rs = mysql_query($SQL);

    $_arvore = array();

    while ($reg = mysql_fetch_assoc($rs)) {
        $_arvore[] = (object) $reg;
    }
    $_filhos = array();
    foreach ($_arvore as $_a) {
        $_filhos[$_a->id_pai][] = $_a;
    }
    /* foreach ($_arvore as $_a) {
      if (isset($_filhos[$_a->id])) {
      $_a->_filhos = $_filhos[$_a->id];
      //unset($_a);
      }
      } */
    return $_filhos;
}

// Arvore limpa
function arvoreRevendas2() {
    require("config.php");
    $conn = @mysql_connect($dbhost, $dbuser, $dbpass) or die("ERROR! Não Conectado ao Banco de Dados..");
    mysql_select_db($dbname, $conn);
    $SQL = "SELECT * FROM cmum_admins_pais_filhos";
    $rs = mysql_query($SQL);

    $_arvore = array();

    while ($reg = mysql_fetch_assoc($rs)) {
        $_arvore[] = (object) $reg;
    }
    $_filhos = array();

    foreach ($_arvore as $_a) {
        $_filhos[$_a->id_pai][] = $_a;
    }

    foreach ($_arvore as $_a) {
        if (isset($_filhos[$_a->id])) {
            $_a->filhos = $_filhos[$_a->id];
        }
    }
    return $_filhos;
}

function arvoreRevendasLista() {
    require("config.php");
    $conn = @mysql_connect($dbhost, $dbuser, $dbpass) or die("ERROR! Não Conectado ao Banco de Dados..");
    mysql_select_db($dbname, $conn);
    $SQL = "SELECT * FROM cmum_admins_pais_filhos";
    $rs = mysql_query($SQL);

    $_arvore = array();

    while ($reg = mysql_fetch_assoc($rs)) {
        $_arvore[$reg['id']] = $reg;
    }

    return $_arvore;
}

//Lista options para select revendas
function listaOptionsRenvendas($arvore, $arvore_lista, $rev_sel = "", $hierarquia) {
    foreach ($arvore as $folha) {
        /* $pref = "";
          $cor = "black";
          if ($folha->hierarquia > 0) {
          $pref = str_repeat("-", $folha->hierarquia * 2) . $folha->pai_login . "->";
          if ($folha->hierarquia == 0) {
          $cor = "black";
          }
          if ($folha->hierarquia == 1) {
          $cor = "red";
          }
          if ($folha->hierarquia == 2) {
          $cor = "green";
          }
          if ($folha->hierarquia == 3) {
          $cor = "blue";
          }
          } */
        $json["id"] = "{$folha->id}";
        $p = base64_encode(json_encode($json));
        //echo $rev_sel . "<br/>" . $p;
        if ($rev_sel == $p) {
            echo '<option value="' . $p . '" selected="true" >' . prefixoRevenda($folha->id, $arvore_lista, $hierarquia) . '</option>';
        } else {
            echo '<option value="' . $p . '">' . prefixoRevenda($folha->id, $arvore_lista, $hierarquia) . '</option>';
        }

        if (isset($folha->filhos)) {
            listaOptionsRenvendas($folha->filhos, $arvore_lista, $rev_sel, $hierarquia);
        }
    }
}

//Prefixo revendas
function prefixoRevenda($revenda = 0, $arvore = array(), $hierarquia) {//rev1
    $rev_atual = $arvore[$revenda];
    $prefixo = $rev_atual['username'];
    if ($rev_atual['hierarquia'] > $hierarquia) {
        return prefixoRevenda($rev_atual['id_pai'], $arvore, $hierarquia) . '->' . $prefixo;
    }
    return $prefixo;
}

// Total Login Ativos e Por Maximo de Conexões
function totalPorRevendasSub($rev, $_filhos = array(), $t = 0, $perfil = NULL) { // ID Revenda, $arvoreRevendas,$t=0 Logins Ativos, $t=1 Logins Por Conexao
    require("config.php");

    $conn = @mysql_connect($dbhost, $dbuser, $dbpass) or die("ERROR! Não Conectado ao Banco de Dados..");
    mysql_select_db($dbname, $conn);

    $s = 0;

    foreach ($_filhos as $pai => $_filho) {
        if ($pai == $rev) {
            foreach ($_filho as $_f) {
                $SQL = "select `a`.`id` AS `id`,`a`.`username` AS `username`,(select count(`vw1`.`name`) from `cmum_logins_ativos_por_rev` `vw1` where (`vw1`.`id_rev` = `a`.`id`)) AS `total_ativos`,ifnull((select sum(`vw1`.`maxconnections`) from `cmum_logins_ativos_por_rev` `vw1` where (`vw1`.`id_rev` = `a`.`id`)),0) AS `total_por_con` from `cmum_admins` `a` where a.id = '{$_f->id}'";
                if (is_numeric($perfil)) {
                    $SQL = "select `a`.`id` AS `id`,`a`.`username` AS `username`,(select count(`vw1`.`name`) from `cmum_logins_ativos_por_rev` `vw1` where (`vw1`.`id_rev` = `a`.`id` AND vw1.id_profile = '{$_GET['perfil']}')) AS `total_ativos`,ifnull((select sum(`vw1`.`maxconnections`) from `cmum_logins_ativos_por_rev` `vw1` where (`vw1`.`id_rev` = `a`.`id` AND vw1.id_profile = '{$_GET['perfil']}')),0) AS `total_por_con` from `cmum_admins` `a` where a.id = '{$_f->id}'";
                }
                $rs = mysql_query($SQL);
                $sub_rev = mysql_fetch_assoc($rs);
                if ($t == 0) {
                    $s += $sub_rev['total_ativos']; // Pode ter erros                   
                } else {
                    //$s+= $_f->total_por_con;
                    $s += $sub_rev['total_por_con'];
                }

                if (isset($_filhos[$_f->id])) {
                    $s += totalPorRevendasSub($_f->id, $_filhos, $t, $perfil);
                }
            }
        }
    }
    return $s;
}

//Totais sub revendas
function totalPorRevendasSubTestes($rev, $_filhos = array(), $t = 0, $perfil = NULL) { // ID Revenda, $arvoreRevendas,$t=0 Logins Ativos, $t=1 Logins Por Conexao
    require("config.php");
    $conn = @mysql_connect($dbhost, $dbuser, $dbpass) or die("ERROR! Não Conectado ao Banco de Dados..");
    mysql_select_db($dbname, $conn);
    $s = 0;
    //sleep(1);
    foreach ($_filhos as $pai => $_filho) {
        if ($pai == $rev) {
            foreach ($_filho as $_f) {
                $SQL = "select `a`.`id` AS `id`,`a`.`username` AS `username`,(select count(`vw1`.`name`) from `cmum_logins_testes_por_rev` `vw1` where (`vw1`.`id_rev` = `a`.`id`)) AS `total_ativos`,ifnull((select sum(`vw1`.`maxconnections`) from `cmum_logins_testes_por_rev` `vw1` where (`vw1`.`id_rev` = `a`.`id`)),0) AS `total_por_con` from `cmum_admins` `a` where a.id = '{$_f->id}'";
                if (is_numeric($perfil)) {
                    $SQL = "select `a`.`id` AS `id`,`a`.`username` AS `username`,(select count(`vw1`.`name`) from `cmum_logins_testes_por_rev` `vw1` where (`vw1`.`id_rev` = `a`.`id` AND vw1.id_profile = '{$_GET['perfil']}')) AS `total_ativos`,ifnull((select sum(`vw1`.`maxconnections`) from `cmum_logins_testes_por_rev` `vw1` where (`vw1`.`id_rev` = `a`.`id` AND vw1.id_profile = '{$_GET['perfil']}')),0) AS `total_por_con` from `cmum_admins` `a` where a.id = '{$_f->id}'";
                }
                $rs = mysql_query($SQL);
                $sub_rev = mysql_fetch_assoc($rs);
                if ($t == 0) {
                    $s += $sub_rev['total_ativos']; // Pode ter erros                   
                } else {
                    //$s+= $_f->total_por_con;
                    $s += $sub_rev['total_por_con'];
                }

                if (isset($_filhos[$_f->id])) {
                    $s += totalPorRevendasSubTestes($_f->id, $_filhos, $t, $perfil);
                }
            }
        }
    }
    return $s;
}

//Totais sub revendas desativados
function totalPorRevendasSubDesat($rev, $_filhos = array(), $t = 0, $perfil = NULL) { // ID Revenda, $arvoreRevendas,$t=0 Logins Ativos, $t=1 Logins Por Conexao
    require("config.php");
    $conn = @mysql_connect($dbhost, $dbuser, $dbpass) or die("ERROR! Não Conectado ao Banco de Dados..");
    mysql_select_db($dbname, $conn);
    $s = 0;
    //sleep(1);
    foreach ($_filhos as $pai => $_filho) {
        if ($pai == $rev) {
            foreach ($_filho as $_f) {
                $SQL = "select `a`.`id` AS `id`,`a`.`username` AS `username`,(select count(`vw1`.`name`) from `cmum_logins_desativados_por_rev` `vw1` where (`vw1`.`id_rev` = `a`.`id`)) AS `total_ativos`,ifnull((select sum(`vw1`.`maxconnections`) from `cmum_logins_desativados_por_rev` `vw1` where (`vw1`.`id_rev` = `a`.`id`)),0) AS `total_por_con` from `cmum_admins` `a` where a.id = '{$_f->id}'";
                if (is_numeric($perfil)) {
                    $SQL = "select `a`.`id` AS `id`,`a`.`username` AS `username`,(select count(`vw1`.`name`) from `cmum_logins_desativados_por_rev` `vw1` where (`vw1`.`id_rev` = `a`.`id` AND vw1.id_profile = '{$_GET['perfil']}')) AS `total_ativos`,ifnull((select sum(`vw1`.`maxconnections`) from `cmum_logins_desativados_por_rev` `vw1` where (`vw1`.`id_rev` = `a`.`id` AND vw1.id_profile = '{$_GET['perfil']}')),0) AS `total_por_con` from `cmum_admins` `a` where a.id = '{$_f->id}'";
                }
                $rs = mysql_query($SQL);
                $sub_rev = mysql_fetch_assoc($rs);
                if ($t == 0) {
                    $s += $sub_rev['total_ativos']; // Pode ter erros                   
                } else {
                    //$s+= $_f->total_por_con;
                    $s += $sub_rev['total_por_con'];
                }

                if (isset($_filhos[$_f->id])) {
                    $s += totalPorRevendasSubDesat($_f->id, $_filhos, $t, $perfil);
                }
            }
        }
    }
    return $s;
}

//totais logins sub revendas vencidos
function totalPorRevendasSubVenc($rev, $_filhos = array(), $t = 0, $perfil = NULL) { // ID Revenda, $arvoreRevendas,$t=0 Logins Ativos, $t=1 Logins Por Conexao
    require("config.php");
    $conn = @mysql_connect($dbhost, $dbuser, $dbpass) or die("ERROR! Não Conectado ao Banco de Dados..");
    mysql_select_db($dbname, $conn);
    $s = 0;
    //sleep(1);
    foreach ($_filhos as $pai => $_filho) {
        if ($pai == $rev) {
            foreach ($_filho as $_f) {
                $SQL = "select `a`.`id` AS `id`,`a`.`username` AS `username`,(select count(`vw1`.`name`) from `cmum_logins_vencidos_por_rev` `vw1` where (`vw1`.`id_rev` = `a`.`id`)) AS `total_ativos`,ifnull((select sum(`vw1`.`maxconnections`) from `cmum_logins_vencidos_por_rev` `vw1` where (`vw1`.`id_rev` = `a`.`id`)),0) AS `total_por_con` from `cmum_admins` `a` where a.id = '{$_f->id}'";
                if (is_numeric($perfil)) {
                    $SQL = "select `a`.`id` AS `id`,`a`.`username` AS `username`,(select count(`vw1`.`name`) from `cmum_logins_vencidos_por_rev` `vw1` where (`vw1`.`id_rev` = `a`.`id` AND vw1.id_profile = '{$_GET['perfil']}')) AS `total_ativos`,ifnull((select sum(`vw1`.`maxconnections`) from `cmum_logins_vencidos_por_rev` `vw1` where (`vw1`.`id_rev` = `a`.`id` AND vw1.id_profile = '{$_GET['perfil']}')),0) AS `total_por_con` from `cmum_admins` `a` where a.id = '{$_f->id}'";
                }
                $rs = mysql_query($SQL);
                $sub_rev = mysql_fetch_assoc($rs);
                if ($t == 0) {
                    $s += $sub_rev['total_ativos']; // Pode ter erros                   
                } else {
                    //$s+= $_f->total_por_con;
                    $s += $sub_rev['total_por_con'];
                }

                if (isset($_filhos[$_f->id])) {
                    $s += totalPorRevendasSubVenc($_f->id, $_filhos, $t, $perfil);
                }
            }
        }
    }
    return $s;
}

// Total Login Ativos e Por Maximo de Conexões 2
function totalPorRevendasSub2($rev, $_filhos = array(), $t = 0) { // ID Revenda, $arvoreRevendas,$t=0 Logins Ativos, $t=1 Logins Por Conexao
    $s = 0;
    foreach ($_filhos as $pai => $_filho) {
        if ($pai == $rev) {
            foreach ($_filho as $_f) {
                if ($t == 0) {
                    $s+= $_f->total_ativos;
                } else {
                    $s+= $_f->total_por_con;
                }

                if (isset($_filhos[$_f->id])) {
                    $s += totalPorRevendasSub($_f->id, $_filhos, $t);
                }
            }
        }
    }
    return $s;
}

function base64_url_decode($input) {

    return base64_decode(strtr($input, '_-,', '+/='));
}

function base64_url_encode($input) {

    return strtr(base64_encode($input), '+/=', '_-,');
}

// saldo logins
function saldo_revenda() {

    $arg = func_get_args();

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $conn = @mysql_connect($dbhost, $dbuser, $dbpass) or die("ERROR! Não Conectado ao Banco de Dados..");
    mysql_select_db($dbname, $conn);

    //Pegando a quantidade definida pra revenda
    $SQL = "SELECT quantidade FROM "
            . "cmum_limite_logins_profiles WHERE "
            . "id_revenda='{$arg[0]}' AND id_profiles='{$arg[1]}'";

    $rs = mysql_query($SQL);

    $limite_rev = 0;

    if ($rs !== false && mysql_num_rows($rs) > 0) {

        while ($row = mysql_fetch_assoc($rs)) {

            $limite_rev = $row['quantidade'];
        }
    }
    //pega os logins cadastrados
    $SQL = "SELECT COUNT(*) AS total_cad FROM "
            . "cmum_logins_com_perfis_limpos WHERE "
            . "addedby='{$arg[0]}' AND perfil_lp='{$arg[1]}' AND enabled='true'";

    $rs = mysql_query($SQL);

    $total_cad = 0;

    if ($rs !== false && mysql_num_rows($rs) > 0) {

        while ($row = mysql_fetch_assoc($rs)) {

            $total_cad = $row['total_cad'];
        }
    }
    //pega as subrevendas
    $SQL = "SELECT id FROM "
            . "cmum_admins WHERE "
            . "addedby='{$arg[0]}' AND enabled='true'";

    $rs = mysql_query($SQL);

    $revs = '';

    if ($rs !== false && mysql_num_rows($rs) > 0) {

        while ($row = mysql_fetch_assoc($rs)) {

            $revs .= $row["id"] . ',';
        }
    }

    $revs = substr($revs, 0, -1);

    //soma a quantidade de todas as subs
    $SQL = "SELECT SUM(quantidade) as total_sub FROM "
            . "cmum_limite_logins_profiles WHERE "
            . "id_revenda IN ({$revs}) AND id_profiles='{$arg[1]}'";

    $rs = mysql_query($SQL);

    $total_sub = 0;

    if ($rs !== false && mysql_num_rows($rs) > 0) {

        if (mysql_num_rows($rs) > 0) {

            while ($row = mysql_fetch_assoc($rs)) {

                $total_sub = $row['total_sub'];
            }
        }
    }

    return $limite_rev - ($total_cad + $total_sub);
}

// saldo revenda 2 
// 
function saldo_revenda2($id_rev_atual = null, $id_rev_exc = null) { //args: lista ids revendas
    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $conn = @mysql_connect($dbhost, $dbuser, $dbpass) or die("ERROR! Não Conectado ao Banco de Dados..");
    mysql_select_db($dbname, $conn);

    // pegando os ativos da revenda atual
    /*
      id	int(11)	Não 	0
      username	tinytext	Não
      total_ativos	bigint(21)	Sim 	NULL
      total_por_con	double	Não
     */
    $SQL = "SELECT total_ativos FROM cmum_total_logins_ativos WHERE id='{$id_rev_atual}'";

    $rs = mysql_query($SQL);

    // qtd logins ativos
    $qtd_logins_ativos = 0;

    if (mysql_num_rows($rs) > 0) {

        while ($row = mysql_fetch_assoc($rs)) {

            $qtd_logins_ativos = $row['total_ativos'];
        }
    }

    // qtd liberado pra revenda atual
    $SQL = "SELECT qtd_logins FROM cmum_admins WHERE id='{$id_rev_atual}'";

    $rs = mysql_query($SQL);

    $qtd_logins_rev_atual = 0;

    if (mysql_num_rows($rs) > 0) {

        while ($row = mysql_fetch_assoc($rs)) {

            $qtd_logins_rev_atual = $row['qtd_logins'];
        }
    }

    //qtd liberado para as revendas
    $SQL = "SELECT SUM(qtd_logins) AS total_lib_rev FROM cmum_admins WHERE addedby='{$id_rev_atual}' AND enabled='true'";

    if (is_numeric($id_rev_exc)) {

        $SQL = "SELECT SUM(qtd_logins) AS total_lib_rev FROM cmum_admins WHERE addedby='{$id_rev_atual}' AND enabled='true' AND id <> '$id_rev_exc'";
    }
    $rs = mysql_query($SQL);

    $total_lib_rev = 0;

    if (mysql_num_rows($rs) > 0) {

        while ($row = mysql_fetch_assoc($rs)) {

            $total_lib_rev = $row['total_lib_rev'];
        }
    }

    return ($qtd_logins_rev_atual - $qtd_logins_ativos - $total_lib_rev);
}

// saldo revenda pre paga
function saldo_revenda_pre($id_revenda = null, $nomes_revendas = false, $subrevendas = false) {

    if (!is_numeric($id_revenda)) {

        exit();
    }

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    /* $rs = $con->query("SELECT cpp.*,a.username FROM cmum_cota_pre_paga AS cpp "
      . "INNER JOIN cmum_admins AS a ON cpp.id_revenda = a.id WHERE a.id = '{$id_revenda}'"); */

    $rs = $con->query("SELECT cpp.*,a.username,vw_sb_rev.qtd_logins AS qtd_bloqueados_rev,vw_sb_log.qtd_logins AS qtd_bloqueados_log FROM cmum_cota_pre_paga AS cpp 
        INNER JOIN cmum_admins AS a ON cpp.id_revenda = a.id LEFT JOIN cmum_saldo_bloq_pre_rev AS vw_sb_rev 
        ON a.id = vw_sb_rev.id_pai LEFT JOIN cmum_saldo_bloq_pre_log AS vw_sb_log ON a.id = vw_sb_log.id_revenda WHERE a.id = '{$id_revenda}'");


    $retorno = array();

    if ($rs->num_rows > 0) {

        $row = $rs->fetch_assoc();

        // calculando saldo real      

        $saldo_real = intval($row['qtd_atual']) - (intval($row['qtd_bloqueados_rev'] + intval($row['qtd_bloqueados_log'])));

        if ($nomes_revendas == true) {

            $retorno[$row['id_revenda']] = array('username' => $row['username'], 'saldo_atual' => intval($row['qtd_atual']), 'saldo_bloqueado' => (intval($row['qtd_bloqueados_rev']) + intval($row['qtd_bloqueados_log'])), 'saldo_real' => $saldo_real);
        } else {

            $retorno[$id_revenda] = array('saldo_atual' => intval($row['qtd_atual']), 'saldo_bloqueado' => (intval($row['qtd_bloqueados_rev']) + intval($row['qtd_bloqueados_log'])), 'saldo_real' => $saldo_real);
        }
    }

    if ($subrevendas == true) {

        $retorno['subrevendas'] = saldo_subrevenda_pre($id_revenda, $nomes_revendas);
    }

    return $retorno;
}

function saldo_subrevenda_pre($id_revenda_pai = null, $nomes_revendas = false) {

    if (!is_numeric($id_revenda_pai)) {

        exit();
    }

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    /* $rs = $con->query("SELECT cpp.*,a.username FROM cmum_cota_pre_paga AS cpp "
      . "INNER JOIN cmum_admins AS a ON cpp.id_revenda = a.id WHERE a.addedby = '{$id_revenda_pai}'"); */

    $rs = $con->query("SELECT cpp.*,a.username,vw_sb_rev.qtd_logins AS qtd_bloqueados_rev,vw_sb_log.qtd_logins AS qtd_bloqueados_log FROM cmum_cota_pre_paga AS cpp 
        INNER JOIN cmum_admins AS a ON cpp.id_revenda = a.id LEFT JOIN cmum_saldo_bloq_pre_rev AS vw_sb_rev 
        ON a.id = vw_sb_rev.id_pai LEFT JOIN cmum_saldo_bloq_pre_log AS vw_sb_log ON a.id = vw_sb_log.id_revenda WHERE a.addedby = '{$id_revenda_pai}' AND a.rev_pre='1'");


    $retorno = array();

    if ($rs->num_rows > 0) {

        while ($row = $rs->fetch_assoc()) {

            // calculando saldo real      

            $saldo_real = intval($row['qtd_atual']) - (intval($row['qtd_bloqueados_rev'] + intval($row['qtd_bloqueados_log'])));

            if ($nomes_revendas == true) {

                $retorno[$row['id_revenda']] = array('username' => $row['username'], 'saldo_atual' => intval($row['qtd_atual']), 'saldo_bloqueado' => (intval($row['qtd_bloqueados_rev']) + intval($row['qtd_bloqueados_log'])), 'saldo_real' => $saldo_real);
            } else {

                $retorno[$id_revenda] = array('saldo_atual' => intval($row['qtd_atual']), 'saldo_bloqueado' => (intval($row['qtd_bloqueados_rev']) + intval($row['qtd_bloqueados_log'])), 'saldo_real' => $saldo_real);
            }
        }
    }

    return $retorno;
}

// retorno o valor base a ser comparado e debitado do saldo disponivel.
function valor_base_pre($vencimento = null, $data_cadastro = null) {

    if (null === $vencimento) {
        exit();
    }

    $vencimento = date("Y-m-d", strtotime(str_replace("/", "-", trim($vencimento))));

    if (null === $data_cadastro) {
        $data_cadastro = date('Y-m-d');
    }

    $dif_data = date_diff(date_create($data_cadastro), date_create($vencimento));

    $valor_base_pre = 0;

    $valor_base_pre += $dif_data->format('%m');

    if ($dif_data->format('%d') > 2) {

        $valor_base_pre++;
    }

    return $valor_base_pre;
}

// atualiza cota revenda pre paga| id_revenda, tipo: 0 - retira, 1 - adiciona; quantidade

function atualiza_cota_pre($id_revenda = null, $tipo = 0, $quantidade = 0) {

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    $SQL = "UPDATE cmum_cota_pre_paga SET "
            . "qtd_atual = (qtd_atual - {$quantidade}) WHERE "
            . "id_revenda = {$id_revenda}";

    if ($tipo == 1) {

        $SQL = "UPDATE cmum_cota_pre_paga SET "
                . "qtd_atual = (qtd_atual + {$quantidade}) WHERE "
                . "id_revenda = {$id_revenda}";
    }

    $retorno = $con->query($SQL);

    return $retorno;
}

// cria cota pra revenda pre paga

function cria_cota_rev_pre($id_revenda = null) {

    if ($id_revenda === null) {

        exit();
    }

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    $rs = $con->query("INSERT INTO cmum_cota_pre_paga (id_revenda) VALUES('$id_revenda')");

    if ($rs === true) {

        return true;
    }

    return false;
}

// saldo real pre pago

function saldo_real_pre($id_revenda = null) {

    if (null === $id_revenda) {
        exit();
    }

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    //id	username	qtd_atual	qtd_bloq_log	qtd_bloq_rev
    $rs = $con->query("SELECT * FROM cmum_detalhes_saldo_pre WHERE id='{$id_revenda}'");

    $saldo_real = 0;

    if ($rs->num_rows > 0) {

        $row = $rs->fetch_assoc();

        $saldo_real = $row['qtd_atual'] - ($row['qtd_bloq_log'] + $row['qtd_bloq_rev']);
    }

    return $saldo_real;
}

// verificando se uma revenda é pre paga

function is_pre_paga($id_revenda = null) {

    if (null === $id_revenda) {
        exit();
    }

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    $rs = $con->query("SELECT rev_pre FROM cmum_admins WHERE id = '{$id_revenda}'");

    $rev_pre = 0;

    if ($rs->num_rows > 0) {

        $row = $rs->fetch_assoc();
        $rev_pre = intval($row['rev_pre']);
    }

    return $rev_pre;
}

function listaIdsRenvendasSub($_arv, &$a) { // arvoreRevendas2() e array referencia
    foreach ($_arv as $folha) {

        $a[] = $folha->id;

        if (isset($folha->filhos)) {

            listaIdsRenvendasSub($folha->filhos, $a);
        }
    }
}

function arrayListaRevenda($revenda = 0, $arvore = array(), $hierarquia, &$a = array()) {//rev1
    $rev_atual = $arvore[$revenda];
    $a[] = $rev_atual['id'];
    if ($rev_atual['hierarquia'] > $hierarquia) {
        return arrayListaRevenda($rev_atual['id_pai'], $arvore, $hierarquia, $a);
    }
}

function is_painel() {

    $is_painel = __DIR__ . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . "is_painel.php";

    if (!file_exists($is_painel)) {

        return false;
    }

    return str_replace("\\", "/", dirname(realpath($is_painel)));
}

function v() {
    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';
    $db = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
    $SQL = "SELECT * FROM cmum_painel_ativacao WHERE 1=1 ORDER BY ID DESC LIMIT 1";
    $rs = $db->query($SQL);
    $ativacao = $rs->fetch_assoc();

    list($vencimento, $dir_instal) = explode(":", dpt($ativacao["chave1"], "sdebug"));
    list($vencimento, $ip_instal) = explode(":", dpt($ativacao["chave2"], "sdebug"));

    $is_painel = is_painel();


    if ($dir_instal !== $is_painel) {
        exit(header("Location: index.php?error=9"));
    }
    $ip_local = $_SERVER["SERVER_ADDR"];
    if ($ip_instal !== $ip_local) {
        exit(header("Location: index.php?error=10"));
    }

    $hoje = time();

    if (strtotime($vencimento) < $hoje) {
        exit(header("Location: index.php?error=9"));
    }
}

// funções pre do sistema pre pago


function cria_transacao_plano($dados = array()) {
    /*
     * 
     * cmum_transacoes_planos
     * 
      id	int(11)	Não
      id_revenda	int(11)	Não
      id_pai	int(11)	Não
      id_plano	int(11)	Não
      tipo	tinyint(4)	Não
      valor_pagamento	decimal(10,2)	Não
      qtd_logins
      detalhes	tinytext	Não
      data_cad	date	Não
      data_atualizacao	date	Não
      status	tinyint(4)	Não
     */

    $id_revenda = isset($dados['id_revenda']) ? $dados['id_revenda'] : exit(__FUNCTION__ . ": Argumento id_revenda Inválido");
    $id_pai = isset($dados['id_pai']) ? $dados['id_pai'] : exit(__FUNCTION__ . ": Argumento id_pai Inválido");
    $id_plano = isset($dados['id_plano']) ? $dados['id_plano'] : exit(__FUNCTION__ . ": Argumento id_plano Inválido");
    $tipo = isset($dados['tipo']) ? $dados['tipo'] : exit(__FUNCTION__ . ": Argumento tipo pagamento Inválido");
    $valor_pagamento = isset($dados['valor_pagamento']) ? $dados['valor_pagamento'] : exit(__FUNCTION__ . ": Argumento valor_pagamento Inválido");
    $qtd_logins = isset($dados['qtd_logins']) ? $dados['qtd_logins'] : exit(__FUNCTION__ . ": Argumento qtd_logins Inválido");
    $detalhes = isset($dados['detalhes']) ? $dados['detalhes'] : exit(__FUNCTION__ . ": Argumento detalhes Inválido");
    $data_cad = date('Y-m-d');
    $status = isset($dados['status']) ? $dados['status'] : exit(__FUNCTION__ . ": Argumento status Inválido");

    require("config.php");

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    $SQL = "INSERT INTO cmum_transacoes_planos ("
            . "id_revenda,"
            . "id_pai,"
            . "id_plano,"
            . "tipo,"
            . "valor_pagamentos,"
            . "qtd_logins,"
            . "detalhes,"
            . "data_cad,"
            . "data_atualizacao) VALUES("
            . "'$id_revenda',"
            . "'$id_pai',"
            . "'$id_plano',"
            . "'$tipo',"
            . "'$valor_pagamento',"
            . "'$qtd_logins',"
            . "'$detalhes',"
            . "'$data_cad',"
            . "'$data_cad',"
            . "'$status')";

    $retorno = $con->query($SQL);

    $con->close();

    return $retorno;
}

// checka permissões revendas

function checkar_permissao_rev($id_revenda = null, $id_permissao = null) {

    /*
      1	Pode alterar login
      2	Pode alterar senha
      3	Pode alterar nome
      4	Pode alterar email
      5	Pode alterar vencimento
      6	Pode alterar status
      7	Pode adicionar revendas
      8	Pode excluir revendas
      9	Pode alterar qtd de logins
      10 Pode criar revenda pre pagas
      11	 Pode criar planos pre pagos
     */

    if (!is_numeric($id_revenda) && !is_numeric($id_permissao)) {
        exit();
    }

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    $SQL = "SELECT opcoes_rev FROM cmum_admins WHERE id = {$id_revenda}";

    $rs = $con->query($SQL);

    $opc_rev = "";

    if ($rs->num_rows > 0) {

        $opcoes = $rs->fetch_assoc();

        $opc_rev_array = array();

        $opc_rev_array = unserialize($opcoes['opcoes_rev']);

        return in_array($id_permissao, $opc_rev_array);
    }

    return false;
}

// retorna os perfis disponiveis pra revenda
function perfis_disponiveis_revenda($id_revenda = null) {

    if (null === $id_revenda) {

        exit();
    }

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    $rs = $con->query("SELECT profiles_pm FROM cmum_admins WHERE id = {$id_revenda}");

    $profiles_pm_rev = array();

    if ($rs->num_rows > 0) {

        $row = $rs->fetch_assoc();

        $profiles_pm_rev = unserialize($row['profiles_pm']);
    }

    $profiles_sistema = array();

    if (count($profiles_pm_rev) > 0) {

        $profiles_pm_rev_str = implode(",", $profiles_pm_rev);

        $rs = $con->query("SELECT id,name FROM cmum_profiles WHERE id IN({$profiles_pm_rev_str}) AND bloqueado = 0");

        if ($rs->num_rows > 0) {

            while ($row = $rs->fetch_assoc()) {

                $profiles_sistema[$row['id']] = $row;
            }
        }
    }

    return $profiles_sistema;
}

// retorna os perfis disponiveis pra revenda
function perfis_disponiveis_adm() {

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);


    $profiles_sistema = array();

    $rs = $con->query("SELECT id,name FROM cmum_profiles WHERE bloqueado = 0");

    if ($rs->num_rows > 0) {

        while ($row = $rs->fetch_assoc()) {

            $profiles_sistema[$row['id']] = $row;
        }
    }


    return $profiles_sistema;
}

//retorna configurações do painel

function config_painel($valor_config = "*") {

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    $rs = $con->query("SELECT {$valor_config} FROM cmum_settings WHERE id = 1");

    $config_salvo = array();

    if ($rs->num_rows > 0) {

        $config_salvo = $rs->fetch_assoc();
    }

    return $config_salvo;
}

//funcoes da solicitação de testes automaticos

function check_teste_pedido($email = null) {

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    $rs = $con->query("SELECT * FROM cmum_teste_cs WHERE email LIKE '%$email%'");

    $teste_existente = array();

    if ($rs->num_rows > 0) {

        $teste_existente = $rs->fetch_assoc();
    }

    return $teste_existente;
}

// lista negra de dominios proibidos pra envio de emails

function listaNegra($email) {

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'lista_negra.php';

    if (in_array(substr($email, strrpos($email, '@') + 1), $lista_negra)) {

        return true;
    }

    return false;
}

//gera login randomico

function gera_login_rand($email = null) {

    if (null === $email) {

        exit();
    }

    $login_rand = strtolower(substr(preg_replace("/[^A-Za-z0-9]/", "", $email), 0, 3)) . mt_rand(10, 999);

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    $rs = $con->query("SELECT id FROM cmum_udb WHERE name LIKE '%{$login_rand}%'");

    if ($rs->num_rows > 0) {

        return gera_login_rand($email);
    }

    return $login_rand;
}

//cadastra novo login testes

function add_login_teste($login_teste = array()) {

    if (empty($login_teste)) {

        exit();
    }

    $campos = implode(",", array_keys($login_teste));
    $values = implode(",", array_map('aspas_values', array_values($login_teste)));


    $SQL = "INSERT INTO cmum_udb ($campos) VALUES($values)";

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    $rs = $con->query($SQL);

    return $rs;
}

// registra teste pedido

function registra_teste_pedido($teste_pedido = array()) {

    if (empty($teste_pedido)) {

        exit();
    }

    $campos = implode(",", array_keys($teste_pedido));
    $values = implode(",", array_map('aspas_values', array_values($teste_pedido)));

    $SQL = "INSERT INTO cmum_teste_cs ($campos) VALUES($values)";

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    $rs = $con->query($SQL);

    return $rs;
}

function aspas_values($value) {

    return "'{$value}'";
}

function dados_revenda($id_revenda = null, $dados = "*") {

    if (null === $id_revenda) {

        exit();
    }

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    $rs = $con->query("SELECT {$dados} FROM cmum_admins WHERE id = {$id_revenda}");

    $dados_revenda = array();

    if ($rs->num_rows > 0) {

        $dados_revenda = $rs->fetch_assoc();
    }

    return $dados_revenda;
}

//retorna modelos de email do sistema

function modelo_email_sistema($id_modelo = null) {

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    $rs = $con->query("SELECT assunto,corpo FROM cmum_modelos_email WHERE id = {$id_modelo}");

    $dados_modelo = array();

    if ($rs->num_rows > 0) {

        $dados_modelo = $rs->fetch_assoc();
    }

    return $dados_modelo;
}

// retorna modelo de email revenda

function modelo_email_revenda($id_revenda = null, $id_modelo = null) {

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    $rs = $con->query("SELECT assunto,corpo FROM cmum_modelos_email_rev WHERE id = {$id_modelo} AND aid = {$id_revenda}");

    $dados_modelo = array();

    if ($rs->num_rows > 0) {

        $dados_modelo = $rs->fetch_assoc();
    }

    return $dados_modelo;
}

function email_envio_revenda($id_revenda = null) {

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    $rs = $con->query("SELECT * FROM cmum_mail_settings WHERE uid = {$id_revenda}");

    $config_email_revenda = array();

    if ($rs->num_rows > 0) {

        $config_email_revenda = $rs->fetch_assoc();
    }

    return $config_email_revenda;
}

// lista variaveis modelo email

function lista_var_modelo_email() {

    $var_email['[EMVENDEDOR]'] = 'Email do revendedor';
    $var_email['[NMVENDEDOR]'] = 'Nome do revendedor';
    $var_email['[LGCLIENTE]'] = 'Login do cliente';
    $var_email['[SNCLIENTE]'] = 'Senha do Login cliente ';
    $var_email['[NMCLIENTE]'] = 'Nome do cliente';
    $var_email['[VCCLIENTE]'] = 'Vencimento do Login cliente';
    $var_email['[DDSERVIDOR]'] = 'Dados servidor.(urls,portas)';

    return array_keys($var_email);
}

//pega urls dos profiles

function urls_profiles($id_revenda = null, $perfis_array = array()) {

    if (null === $id_revenda || empty($perfis_array)) {

        exit();
    }

    $dados_revenda = dados_revenda($id_revenda, 'level,addedby,profiles_pm');

    $profiles_pm = unserialize($dados_revenda['profiles_pm']);

    //$profiles_selec = array_intersect($profiles_pm, $perfis_array);
    //$profiles_rev_str = implode(',', $profiles_selec);

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    if ($dados_revenda['level'] == '1') {

        $profiles_selec = array_intersect($profiles_pm, $perfis_array);

        $profiles_rev_str = implode(',', $profiles_selec);

        $rs = $con->query("SELECT id,name,url_ip,porta FROM cmum_profiles WHERE id IN({$profiles_rev_str})");
    } else {

        $profiles_adm_str = implode(',', $perfis_array);

        $rs = $con->query("SELECT id,name,url_ip,porta FROM cmum_profiles WHERE id IN($profiles_adm_str)");
    }

    //$rs = $con->query("SELECT id,name,url_ip,porta FROM cmum_profiles WHERE id IN({$profiles_rev_str})");

    $profiles_urls = array();

    // pega os profiles e urls do sistema    
    if ($rs->num_rows > 0) {

        while ($row = $rs->fetch_assoc()) {

            $profiles_urls[$row['id']] = $row;
        }
    }


    if ($dados_revenda['level'] == "1") {

        // pegando as urls da revenda 
        $rs = $con->query("SELECT id_profiles,url,portas FROM cmum_urls_rev WHERE id_rev = {$id_revenda} AND url != '' AND portas != ''");

        $urls_revenda = array();

        if ($rs->num_rows > 0) {

            while ($row = $rs->fetch_assoc()) {

                $_row['url_ip'] = $row['url'];
                $_row['porta'] = $row['portas'];

                $urls_revenda[$row['id_profiles']] = $_row;
            }
        }

        //pegando as urls pai da revenda
        $rs = $con->query("SELECT id_profiles,url,portas FROM cmum_urls_rev WHERE id_rev = {$dados_revenda['addedby']} AND url != '' AND portas != ''");

        $urls_revenda_pai = array();

        if ($rs->num_rows > 0) {

            while ($row = $rs->fetch_assoc()) {

                $_row['url_ip'] = $row['url'];
                $_row['porta'] = $row['portas'];

                $urls_revenda_pai[$row['id_profiles']] = $_row;
            }
        }
    }// if revenda comum


    foreach ($profiles_urls as $id_profile => $dados_profile) {

        if (isset($urls_revenda[$id_profile]['url_ip'])) {

            $profiles_urls[$id_profile]['url_ip'] = $urls_revenda[$id_profile]['url_ip'];
            $profiles_urls[$id_profile]['porta'] = $urls_revenda[$id_profile]['porta'];
        } elseif (isset($urls_revenda_pai[$id_profile]['url_ip'])) {

            $profiles_urls[$id_profile]['url_ip'] = $urls_revenda_pai[$id_profile]['url_ip'];
            $profiles_urls[$id_profile]['porta'] = $urls_revenda_pai[$id_profile]['porta'];
        }
    }

    return $profiles_urls;
}

function html_url_profiles($profiles_urls = array()) {

    $html = "";

    if (empty($profiles_urls)) {

        $html = "<p>Não há inforamções das Op/Região Cadastrada.</p>";
    }

    foreach ($profiles_urls as $profiles) {

        $html .= <<<EOF
                <div>
                   <p><strong>{$profiles['name']}</strong></p>
                   <p>Url/Ip:&nbsp;{$profiles['url_ip']}<br/>Portas:&nbsp;{$profiles['porta']}</p>
                </div>
EOF;
    }

    return $html;
}

//url exibivel do painel

function url_exibivel_painel($complemento_url = null) {

    $protocolo = array();

    preg_match('/[A-Z]+/', $_SERVER['SERVER_PROTOCOL'], $protocolo);

    $dominio = (isset($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : $_SERVER['SERVER_ADDR'];

    $raiz_arquivo = str_replace("\\", "/", dirname(realpath(__DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'index.php')));

    $raiz_doc = $_SERVER['DOCUMENT_ROOT'];

    $pasta_complementar = "";

    if ($raiz_doc != $raiz_arquivo) {

        $pasta_complementar = str_replace($raiz_doc, "", $raiz_arquivo);
    }

    if (null === $complemento_url || $complemento_url === "") {

        return strtolower($protocolo[0]) . "://" . $dominio . $pasta_complementar;
    }

    return strtolower($protocolo[0]) . "://" . $dominio . $pasta_complementar . '/' . $complemento_url;
}

// funções que criam pagamentos
function cria_pagamento_ps($dados_pagamento_ps = array()) {

    require_once __DIR__ . DIRECTORY_SEPARATOR . "PagSeguroLibrary" . DIRECTORY_SEPARATOR . "PagSeguroLibrary.php";


    $url_notificao = $dados_pagamento_ps['url_notificacao'];
    $descricao_produto = $dados_pagamento_ps['desc_produto'];
    $quantidade = $dados_pagamento_ps['qtd'];
    $valor_un = $dados_pagamento_ps['valor_un'];
    $id_referencia = $dados_pagamento_ps['id_referencia'];
    $email_ps = $dados_pagamento_ps['email_ps_rev'];
    $token_ps = $dados_pagamento_ps['token_ps_rev'];

    $ps = new PagSeguroPaymentRequest();

    $ps->setNotificationURL($url_notificao); // Url notificação dinamica
    $ps->addItem('0001', $descricao_produto, $quantidade, $valor_un);
    $ps->setCurrency("BRL");
    $ps->setReference($id_referencia);

    $credenciais = new PagSeguroAccountCredentials(
            $email_ps, $token_ps
    );

    $url = $ps->register($credenciais);

    return $url;
}

// cria pagamento boleto facil

function cria_pagamento_bf($dados_pagamento = array()) {

    $dados_pagamento_bf['token'] = $dados_pagamento['token'];
    $dados_pagamento_bf['description'] = $dados_pagamento['desc_produto'];
    $dados_pagamento_bf['reference'] = $dados_pagamento['id_referencia'];
    $dados_pagamento_bf['amount'] = $dados_pagamento['valor_total'];
    $dados_pagamento_bf['payerName'] = $dados_pagamento['nome_cliente'];
    $dados_pagamento_bf['payerCpfCnpj'] = $dados_pagamento['cpf_cpnj_cliente'];
    $dados_pagamento_bf['payerEmail'] = $dados_pagamento['email_cliente'];
    $dados_pagamento_bf['notifyPayer'] = 'true';
    //$dados_pagamento_bf['test'] = 'true';

    $url = "https://www.boletobancario.com/boletofacil/integration/api/v1/issue-charge?" . http_build_query($dados_pagamento_bf);

    return $url;
}

//tranforma dados retornado boleto facil em array

function retorno_bf($url_pagamento_bf = null) {


    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url_pagamento_bf);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);


    $output = curl_exec($ch);
    $response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    curl_close($ch);

    $retorno = new stdClass();

    if ($response_code == '400') {

        //$retorno->error = 'Falha de comunicação: Code Resposta: ' . $response_code . 'Detalhes Erro: ' . curl_error($ch);
        $retorno->dados = json_decode($output, true);
        $retorno->sucesso = false;
    } else {

        $retorno->dados = json_decode($output, true);
        $retorno->sucesso = true;
    }

    return $retorno;
}

// consulta 
/* function consulta_bf($url_consulta = null, $post = array()) {// ??? chamada get?
  if (null === $url_consulta) {

  $url_consulta = "https://www.boletobancario.com/boletofacil/integration/api/v1/fetch-payment-details";
  }

  $post = array(
  'paymentToken' => $post['paymentToken'],
  'responseType' => $post['responseType']
  );

  //open connection
  $ch = curl_init();

  //set the url, number of POST vars, POST data
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  curl_setopt($ch, CURLOPT_POST, count($post));
  curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));

  //execute post
  $output = curl_exec($ch);
  $response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

  //close connection
  curl_close($ch);

  $retorno = new stdClass();

  if ($response_code == '400') {
  //$retorno->error = 'Falha de comunicação: Code Resposta: ' . $response_code . 'Detalhes Erro: ' . curl_error($ch);
  $retorno->dados = json_decode($output, true); //success: false; "errorMessage":"Token inválido"
  $retorno->sucesso = false;
  } else {

  $retorno->dados = json_decode($output, true);
  $retorno->sucesso = true;
  }

  return $retorno;
  } */


function consulta_bf($url_consulta = null, $post = array()) {// ??? chamada get?
    
    if (null === $url_consulta) {

        $url_consulta = "https://www.boletobancario.com/boletofacil/integration/api/v1/fetch-payment-details";
    }

    $parametros_get["paymentToken"] = $post['paymentToken'];
    $parametros_get["responseType"] = $post['responseType'];

    $url = $url_consulta . "?" . http_build_query($parametros_get);


    //open connection
    $ch = curl_init();

//set the url, number of POST vars, POST data
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

//execute post
    $output = curl_exec($ch);
    $response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

//close connection
    curl_close($ch);

    $retorno = new stdClass();

    if ($response_code == '400') {
        //$retorno->error = 'Falha de comunicação: Code Resposta: ' . $response_code . 'Detalhes Erro: ' . curl_error($ch);
        $retorno->dados = json_decode($output, true); //success: false; "errorMessage":"Token inválido"
        $retorno->sucesso = false;
    } else {

        $retorno->dados = json_decode($output, true);
        $retorno->sucesso = true;
    }

    return $retorno;
}

//altera status transação revenda

function altera_status_rev($dados = array()) {

    if (empty($dados)) {

        exit();
    }

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $id_transacao = $dados['id_transacao'];
    $datalhes = $dados['detalhes'];
    $status = $dados['status'];
    $data_atualizacao = $dados['data_atualizacao'];

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    $rs = $con->query("UPDATE cmum_transacoes_planos SET "
            . "detalhes=concat(detalhes,'{$datalhes}'),"
            . "status='{$status}',"
            . "data_atualizacao='$data_atualizacao'"
            . " WHERE id={$id_transacao} AND status != 3");



    //atualizaou os dados das revendas        
    if ($rs === true) {

        if ($status == 3) {//se aprovado
            $rs = $con->query("SELECT id_revenda,id_pai,qtd_logins FROM cmum_transacoes_planos "
                    . "WHERE id = {$id_transacao}");

            if ($rs->num_rows > 0) {


                $row = $rs->fetch_assoc();

                $id_revenda = $row['id_revenda'];
                $id_pai = $row['id_pai'];
                $qtd_logins = $row['qtd_logins'];

                //atualiza cota revenda pai ** decrementa
                atualiza_cota_pre($id_pai, 0, $qtd_logins);
                //exit(var_dump(atualiza_cota_pre($id_revenda, 1, $qtd_logins)));
                //atualiza cota revenda atual ** incrementa             
                atualiza_cota_pre($id_revenda, 1, $qtd_logins);
            }
        }
        return true;
    }
    return false;
}

// validação de cpf

function isCpfValid($cpf) {
    //Etapa 1: Cria um array com apenas os digitos numéricos, isso permite receber o cpf em diferentes formatos como "000.000.000-00", "00000000000", "000 000 000 00" etc...
    $j = 0;
    for ($i = 0; $i < (strlen($cpf)); $i++) {
        if (is_numeric($cpf[$i])) {
            $num[$j] = $cpf[$i];
            $j++;
        }
    }
    //Etapa 2: Conta os dígitos, um cpf válido possui 11 dígitos numéricos.
    if (count($num) != 11) {
        $isCpfValid = false;
    }
    //Etapa 3: Combinações como 00000000000 e 22222222222 embora não sejam cpfs reais resultariam em cpfs válidos após o calculo dos dígitos verificares e por isso precisam ser filtradas nesta parte.
    else {
        for ($i = 0; $i < 10; $i++) {
            if ($num[0] == $i && $num[1] == $i && $num[2] == $i && $num[3] == $i && $num[4] == $i && $num[5] == $i && $num[6] == $i && $num[7] == $i && $num[8] == $i) {
                $isCpfValid = false;
                break;
            }
        }
    }
    //Etapa 4: Calcula e compara o primeiro dígito verificador.
    if (!isset($isCpfValid)) {
        $j = 10;
        for ($i = 0; $i < 9; $i++) {
            $multiplica[$i] = $num[$i] * $j;
            $j--;
        }
        $soma = array_sum($multiplica);
        $resto = $soma % 11;
        if ($resto < 2) {
            $dg = 0;
        } else {
            $dg = 11 - $resto;
        }
        if ($dg != $num[9]) {
            $isCpfValid = false;
        }
    }
    //Etapa 5: Calcula e compara o segundo dígito verificador.
    if (!isset($isCpfValid)) {
        $j = 11;
        for ($i = 0; $i < 10; $i++) {
            $multiplica[$i] = $num[$i] * $j;
            $j--;
        }
        $soma = array_sum($multiplica);
        $resto = $soma % 11;
        if ($resto < 2) {
            $dg = 0;
        } else {
            $dg = 11 - $resto;
        }
        if ($dg != $num[10]) {
            $isCpfValid = false;
        } else {
            $isCpfValid = true;
        }
    }
    //Trecho usado para depurar erros.
    /*
      if($isCpfValid==true)
      {
      echo "<font color="GREEN">Cpf é Válido</font>";
      }
      if($isCpfValid==false)
      {
      echo "<font color="RED">Cpf Inválido</font>";
      }
     */
    //Etapa 6: Retorna o Resultado em um valor booleano.
    return $isCpfValid;
}

// valida cnpj

function isCnpjValid($cnpj) {
    //Etapa 1: Cria um array com apenas os digitos numéricos, isso permite receber o cnpj em diferentes formatos como "00.000.000/0000-00", "00000000000000", "00 000 000 0000 00" etc...
    $j = 0;

    for ($i = 0; $i < (strlen($cnpj)); $i++) {

        if (is_numeric($cnpj[$i])) {
            $num[$j] = $cnpj[$i];
            $j++;
        }
    }
    //Etapa 2: Conta os dígitos, um Cnpj válido possui 14 dígitos numéricos.
    if (count($num) != 14) {
        $isCnpjValid = false;
    }
    //Etapa 3: O número 00000000000 embora não seja um cnpj real resultaria um cnpj válido após o calculo dos dígitos verificares e por isso precisa ser filtradas nesta etapa.
    if ($num[0] == 0 && $num[1] == 0 && $num[2] == 0 && $num[3] == 0 && $num[4] == 0 && $num[5] == 0 && $num[6] == 0 && $num[7] == 0 && $num[8] == 0 && $num[9] == 0 && $num[10] == 0 && $num[11] == 0) {
        $isCnpjValid = false;
    }
    //Etapa 4: Calcula e compara o primeiro dígito verificador.
    else {
        $j = 5;
        for ($i = 0; $i < 4; $i++) {
            $multiplica[$i] = $num[$i] * $j;
            $j--;
        }
        $soma = array_sum($multiplica);
        $j = 9;
        for ($i = 4; $i < 12; $i++) {
            $multiplica[$i] = $num[$i] * $j;
            $j--;
        }
        $soma = array_sum($multiplica);
        $resto = $soma % 11;
        if ($resto < 2) {
            $dg = 0;
        } else {
            $dg = 11 - $resto;
        }
        if ($dg != $num[12]) {
            $isCnpjValid = false;
        }
    }
    //Etapa 5: Calcula e compara o segundo dígito verificador.
    if (!isset($isCnpjValid)) {
        $j = 6;
        for ($i = 0; $i < 5; $i++) {
            $multiplica[$i] = $num[$i] * $j;
            $j--;
        }
        $soma = array_sum($multiplica);
        $j = 9;
        for ($i = 5; $i < 13; $i++) {
            $multiplica[$i] = $num[$i] * $j;
            $j--;
        }
        $soma = array_sum($multiplica);
        $resto = $soma % 11;
        if ($resto < 2) {
            $dg = 0;
        } else {
            $dg = 11 - $resto;
        }
        if ($dg != $num[13]) {
            $isCnpjValid = false;
        } else {
            $isCnpjValid = true;
        }
    }
    //Trecho usado para depurar erros.
    /*
      if($isCnpjValid==true)
      {
      echo "<p><font color="GREEN">Cnpj é Válido</font></p>";
      }
      if($isCnpjValid==false)
      {
      echo "<p><font color="RED">Cnpj Inválido</font></p>";
      }
     */
    //Etapa 6: Retorna o Resultado em um valor booleano.
    return $isCnpjValid;
}

//atualiza vencimento automatico

function atualiza_venc_login($id_transacao = null) {

    if (null === $id_transacao) {

        exit();
    }

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    $rs = $con->query("SELECT ct.id_user,ct.id_revenda,ct.qtd_meses,ct.data_atualizacao,u.expiredate,r.rev_pre FROM cmum_transacoes AS ct "
            . "INNER JOIN cmum_udb AS u ON ct.id_user = u.id "
            . "INNER JOIN cmum_admins AS r ON ct.id_revenda = r.id "
            . "WHERE ct.id = {$id_transacao}"); // ct.tipo restringe a transacoes somente do pagseguro e permite que seja alterado somente uma vez

    if ($rs->num_rows > 0) {

        $row = $rs->fetch_assoc(); //id_user,id_revenda,qtd_meses,data_atualizacao,expiredate,rev_pre 

        $id_login = $row['id_user'];
        $id_revenda = $row['id_revenda'];
        $qtd_meses = $row['qtd_meses'];
        $data_atualizacao = $row['data_atualizacao'];
        $expiredate = $row['expiredate'];
        $rev_pre = $row['rev_pre'];

        $time_data_atualizacao = strtotime($data_atualizacao);
        $time_expiredate = strtotime($expiredate);

        //acrescenta os meses a data de atualizacao
        $novo_vencimento = date('Y-m-d H:i:s', strtotime('+' . $qtd_meses . 'month', $time_data_atualizacao));

        //se o vencimento do login for maior que a data atual acrescenta os meses a data de vencimento
        if ($time_expiredate > $time_data_atualizacao) {

            $novo_vencimento = date('Y-m-d H:i:s', strtotime('+' . $qtd_meses . 'month', $time_expiredate));
        }

        $rs = $con->query("UPDATE cmum_udb SET "
                . "expiredate='{$novo_vencimento}' "
                . "WHERE id = {$id_login} AND addedby = {$id_revenda}");

        if ($rs == true) {

            if ($rev_pre == '1') {

                atualiza_cota_pre($id_revenda, 0, $qtd_meses);
            }
        }
        return true;
    }
    return false;
}

// pega profiles base em value csp 

function profiles_por_csp_value($profiles = null) {

    if (null === $profiles || $profiles == "") {

        exit();
    }

    $str_busca_profiles = "";

    if (is_array($profiles)) {

        for ($i = 0; $i < count($profiles); $i++) {

            if ($i == 0) {

                $str_busca_profiles = "value LIKE '%{$profiles[$i]}%'";
            } else {

                $str_busca_profiles .= " OR value LIKE '%{$profiles[$i]}%'";
            }
        }
    } else {

        $str_busca_profiles = "value LIKE '%$profiles%'";
    }

    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    $rs = $con->query("SELECT id,name,value FROM cmum_profiles WHERE {$str_busca_profiles}");

    $profiles_array = array();

    if ($rs->num_rows > 0) {

        while ($row = $rs->fetch_assoc()) {

            $profiles_array[] = $row['id'];
        }
    }

    return $profiles_array;
}

// busca valores cobrados das revendas.
function logins_ativos_calculo($id_revenda_pai = null) {

    if (null === $id_revenda_pai) {

        exit();
    }


    require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config.php';

    $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    $rs = $con->query("SELECT * FROM cmum_total_logins_ativos WHERE revenda_pai = {$id_revenda_pai}");

    $lista_revendas = array();

    if ($rs->num_rows > 0) {

        while ($row = $rs->fetch_assoc()) {

            $lista_revendas[$row['id']] = $row;
        }
    }

    return $lista_revendas;
}

// logins ativos sub revendas

function qtd_logins_ativos_sub($id_revenda_pai = null) {

    if (null === $id_revenda_pai) {

        exit();
    }

    $logins_ativos_sub = logins_ativos_calculo($id_revenda_pai);

    $total_ativos_sub = 0;
    $total_ativos_sub_con = 0;

    $qtd_ativos = array();

    if (!empty($logins_ativos_sub)) {

        foreach ($logins_ativos_sub as $ativo_sub) {

            $total_ativos_sub += $ativo_sub['total_ativos'];
            $total_ativos_sub_con += $ativo_sub['total_por_con'];
        }

        $qtd_ativos['ativos_sub'] = $total_ativos_sub;
        $qtd_ativos['ativos_sub_con'] = $total_ativos_sub_con;
    }

    return $qtd_ativos;
}
