dbName = $db; $this->hostName = $host; $this->dbUser = $user; $this->keepLog = $keeplog; $this->logPath = $logpath; $this->fullErr = $fullErr; $this->rollBackSup = $rollBackSup; if (strlen($pwd) > 0) { $this->dbPwd = "Yes"; } else { $this->dbPwd = "No"; } // Creates connection to server and selects appropriate database $dbLink = mysql_connect($this->hostName, $this->dbUser, $pwd) or $this->goError($qry, mysql_error()); mysql_select_db($this->dbName) or $this->goError($qry, mysql_error()); } function mysql_db_disconnect() { mysql_close($dbLink); } // Displays the end of the error message function endError($err, $from) { // Displays error print $err."

"; // Displays conection details as well as the page using this class if set if ($this->fullErr == 1) { print "System variables:
"; print "Host: ".$this->hostName."
"; print "Database: ".$this->dbName."
"; print "User: ".$this->dbUser."
"; print "Password Used: ".$this->dbPwd."
"; print "Refering Page: ".$from."
"; } print ""; print "

Please contact your system administrator for assistance!

"; // Make sure script dies die(date(r, time())); } // Displays error if a rollback could not be done. function rollError($err, $from) { print "ERROR:
"; print ""; if ($this->fullErr == 1) { print "Query: $qry
"; } print "Could not roll back transaction!!

\n"; $this->endError($err, $from); } // If something has gone wrong, displays an error function goError($qry, $err, $from) { // Rolls back transaction if required if ($this->rollBackSup == 1) { print "Transaction rolled back!

\n"; mysql_query("rollback;") or $this->rollError(mysql_error()); } print "ERROR:
"; print ""; if ($this->fullErr == 1) { print "Query: $qry
"; } $this->endError($err, $from); } // Executes a query ($qry). $from is the page you are calling from - optional function db_qry($qry, $from="") { global $global_bd_charset; if($global_bd_charset) mysql_query("SET NAMES '$global_bd_charset'"); $this->dbQryResult = mysql_query($qry) or $this->goError($qry, mysql_error(), $from); // If required, write query to a log file if ($this->keepLog == 1) { $fp = fopen($this->logPath."mysql_db_class.log", "a+"); fputs($fp, date("r", time())." - ".$from."\n"); fputs($fp, $qry."\n"); fclose($fp); } $qtyLines = mysql_affected_rows(); return $qtyLines; } // Retorna ultimo id inserido function get_last_id() { $this->dbQryResult = mysql_query("SELECT LAST_INSERT_ID()"); list($last_id) = mysql_fetch_array($this->dbQryResult); return $last_id; } // Returns the resultset, one row at a time in an array function get_data() { $this->dbResultLine = mysql_fetch_array($this->dbQryResult); return $this->dbResultLine; } // Number of rows in resultset function row_count() { $qtyLines = mysql_num_rows($this->dbQryResult); return $qtyLines; } // Array with field names of resultset function get_fields() { $fldList = Array(); for ($fldCntr = 0; $fldCntr < mysql_num_fields($this->dbQryResult); $fldCntr++) { $fldList[$fldCntr] = mysql_field_name($this->dbQryResult, $fldCntr); } return $fldList; } // Retorna Linhas modificadas function affected_rows() { return mysql_affected_rows(); } } ?> $value) $lista[$key] = ($acao == "encode") ? utf8_encode($value) : utf8_decode($value); else $lista = ($acao == "encode") ? utf8_encode($lista) : utf8_decode($lista); return($lista); } function redireciona($url) { header("Location: $url"); echo ""; exit; } function ConvertResultToArray($lista = null, $first_value = null, $chave = null, $valor = null, $separador = null, $fechador = null) { $result = array(); //if (!$lista) return $result; if($first_value) $result[null] = $first_value; $valores = explode(",", $valor); foreach($lista as $key => $obj) { unset($valores_carregados); foreach($valores as $key1 => $obj1) $valores_carregados[] = $obj->$obj1; $newvalores = implode($separador, $valores_carregados); if($fechador) $newvalores .= $fechador; if($chave) $result[$obj->$chave] = $newvalores; else $result[] = $newvalores; } return $result; } function converteDataPeriodo($data = null, $tipo = null) { if($data) { list($dia, $mes, $ano) = split("-", $data); if(!$tipo) return "$ano$mes"; elseif($tipo == 1) return "$ano-$mes-01"; elseif($tipo == 2) return "$ano$mes$dia"; } else return false; } function conveteDataPeriodoExt($data = null) { if($data) { list($dia, $mes, $ano) = split("-", $data); if(substr($mes, 0, 1) == "0") $mes = substr($mes, 1, 1); $mesAno = array(); $mesAno[1] = "Jan"; $mesAno[2] = "Fev"; $mesAno[3] = "Mar"; $mesAno[4] = "Abr"; $mesAno[5] = "Mai"; $mesAno[6] = "Jun"; $mesAno[7] = "Jul"; $mesAno[8] = "Ago"; $mesAno[9] = "Set"; $mesAno[10] = "Out"; $mesAno[11] = "Nov"; $mesAno[12] = "Dez"; return $mesAno[$mes]."-".substr($ano, 2, 2); } else return false; } function converteTimestampToRead($data) { if ($data) { list($dt, $hr) = split(" ",$data); list($ano, $mes, $dia) = split("-", $dt); list($hora, $min, $sec) = split(":", $hr); return "$dia-$mes-$ano $hora"."h".$min; } else return false; } function converteTimestampTiraData($data) { if ($data) { list($dt, $hr) = split(" ",$data); list($ano, $mes, $dia) = split("-", $dt); list($hora, $min, $sec) = split(":", $hr); return "$dia-$mes-$ano"; } else return false; } function converteDataToTimestamp($data = null) { if(is_null($data) || $data == NULL || $data == "00-00-0000" || $data == "0000-00-00") return null; else { list($dt, $hr) = split(" ",$data); list($dia, $mes, $ano) = split("-", $dt); if($hr) list($hora, $min, $sec) = split(":", $hr); else { $hora = 0; $min = 0; $sec = 0; } return mktime($hora, $min, $sec, $mes, $dia, $ano); } } function converteTimestampToField($data) { if ($data) { list($dt, $hr) = split(" ",$data); list($ano, $mes, $dia) = split("-", $dt); list($hora, $min, $sec) = split(":", $hr); return "$dia-$mes-$ano $hora:$min:$sec"; } else return false; } function converteTimestampToMySQL($data) { if ($data) { list($dt, $hr) = split(" ",$data); list($dia, $mes, $ano) = split("-", $dt); list($hora, $min, $sec) = split(":", $hr); return "$ano-$mes-$dia $hora:$min:$sec"; } else return false; } function PegaVideoID($url) { preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'>]+)/", $url, $matches); if (isset($matches[1])) $videoID = $matches[1]; else $videoID = ''; // clean video id $videoID = preg_replace('/[^\w-_]+/', '', $videoID); return $videoID; } function InverteData($data = null) { if(is_null($data) || $data == NULL || $data == "00-00-0000" || $data == "0000-00-00") return null; $data = explode('-', $data); $data = $data[2].'-'.$data[1].'-'.$data[0]; return $data; } function InverteData2($data = null) { if(is_null($data) || $data == NULL || $data == "00-00-0000" || $data == "0000-00-00") return null; $data = explode('-', $data); $data = $data[1].'-'.$data[0]; return $data; } function Slugify($text) { // replace non letter or digits by - $text = preg_replace('~[^\\pL\d]+~u', '-', $text); // trim $text = trim($text, '-'); // transliterate $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text); // lowercase $text = strtolower($text); // remove unwanted characters $text = preg_replace('~[^-\w]+~', '', $text); if (empty($text)) { return 'n-a'; } return $text; } function FormatSize($bytes, $unit = 'auto', $precision = 2, $dec_point = '.', $thousands_sep = ',') { $units = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'); $unit = array_search(strtolower($unit), array_map('strtolower', $units)); if ($unit === false) { $unit = ($bytes > 0) ? floor(log($bytes, 1024)) : 0; } return sprintf('%s %s', number_format( bcdiv(strval($bytes), bcpow(1024, $unit), $precision), ($unit == 0) ? 0 : $precision, $dec_point, $thousands_sep ), $units[$unit] ); } function NumberToMysql($numero) { $numero = str_replace(".", "", $numero); $numero = str_replace(",", ".", $numero); return $numero; } function ValidaSenha($senha = null) { //Pelo menos 1 letra, 1 numero e 1 letra maiuscula, de 6 a 10 caracteres //if(preg_match("#.*^(?=.{6,10})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).*$#", $senha)) return true; //Caio em Agosto/2016 pediu para eu liberar as regras... colocarei apenas a regra do tamanho, mínimo 6 caracteres if(preg_match("#.*^(?=.{6,10}).*$#", $senha)) return true; else return false; } function ValidaUsuario($usuario = null) { if(preg_match('/^[a-z0-9]{6,30}$/', $usuario)) return true; return false; } function ValidaString($str = null, $min = 1, $max = 10) { $pattern = '/^[a-z0-9]{'.$min.','.$max.'}$/'; if(preg_match($pattern, $str)) return true; return false; } function isDate($date) { $char = strpos($date, "/")!==false?"/":"-"; $date_array = explode($char,$date); if(count($date_array)!=3) return false; return checkdate($date_array[1],$date_array[0],$date_array[2])?($date_array[2] . "-" . $date_array[1] . "-" . $date_array[0]):false; } function GeraSenha($tamanho = 8, $maiusculas = true, $numeros = true, $simbolos = false) { // Caracteres de cada tipo $lmin = 'abcdefghijklmnopqrstuvwxyz'; $lmai = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $num = '1234567890'; $simb = '!@#$%*-'; // Variáveis internas $retorno = ''; $caracteres = ''; // Agrupamos todos os caracteres que poderão ser utilizados $caracteres .= $lmin; if ($maiusculas) $caracteres .= $lmai; if ($numeros) $caracteres .= $num; if ($simbolos) $caracteres .= $simb; // Calculamos o total de caracteres possíveis $len = strlen($caracteres); for ($n = 1; $n <= $tamanho; $n++) { // Criamos um número aleatório de 1 até $len para pegar um dos caracteres $rand = mt_rand(1, $len); // Concatenamos um dos caracteres na variável $retorno $retorno .= $caracteres[$rand-1]; } return $retorno; } function Aborta($msg) { GLOBAL $objetoTelas, $msg_erro; $msg_erro = $msg; session_destroy(); msgSet(); $objetoTelas->error_page(); exit; } //Funçãozinha pro arrayfilter do $itemsel function filtra_msg_validas($item) { if(isset($item) && trim($item)!=='') return($item); } function msgSet() { GLOBAL $msg_ok, $msg_erro, $msg_info; if(session_status() == PHP_SESSION_NONE) { session_name("saam2"); session_start(); } //Mensagens de OK if(is_array($msg_ok) && count($msg_ok)) { $msg_ok = array_filter($msg_ok, "filtra_msg_validas"); $msg_ok = implode("
", $msg_ok); } if($msg_ok) $_SESSION['msg_ok'] = ($_SESSION['msg_ok'] != null) ? $_SESSION['msg_ok']."
".$msg_ok : $msg_ok; //Mensagens de ERRO if(is_array($msg_erro) && count($msg_erro)) { $msg_erro = array_filter($msg_erro, "filtra_msg_validas"); $msg_erro = implode("
", $msg_erro); } if($msg_erro) $_SESSION['msg_erro'] = ($_SESSION['msg_erro'] != null) ? $_SESSION['msg_erro']."
".$msg_erro : $msg_erro; //Mensagens de INFO if(is_array($msg_info) && count($msg_info)) { $msg_info = array_filter($msg_info, "filtra_msg_validas"); $msg_info = implode("
", $msg_info); } if($msg_info) $_SESSION['msg_info'] = ($_SESSION['msg_info'] != null) ? $_SESSION['msg_info']."
".$msg_info : $msg_info; } function msgUnset() { $_SESSION['msg_ok'] = null; $_SESSION['msg_erro'] = null; $_SESSION['msg_info'] = null; } function MontaArvoreDir($listadiretorios = null, $diretorio = null, $pula = null, $pegoupasta = null) { GLOBAL $arvore; if(!count($listadiretorios) || !$diretorio) return $arvore; if(!$pegoupasta) $arvore['pasta'] = $diretorio; foreach($listadiretorios as $key => $value) { if(is_array($value)) { $pula++; MontaArvoreDir($value, $diretorio."/".$value[0], $pula, 1); $pula = 0; } else { if($pula) { $arvore['DIR'][$value] = CUSTOMERDIR ."/". $diretorio; $arvore['URL'][$value] = CUSTOMERURL ."/". $diretorio; $pula = 0; } else { $arvore['DIR'][$value] = CUSTOMERDIR ."/". $diretorio . "/". $value; $arvore['URL'][$value] = CUSTOMERURL ."/". $diretorio . "/". $value; } } } return $arvore; } // Função que recebe ALLMAPEAMENTO e retorna um ARRAY com os níveis máximos de permissão do Usuário que está na sessão, // ou seja, do usuário que está manipulando as permissões. Usado para controle de permissão de USO. function CriaMyNiveis($allmapeamento = null) { $result = array(); foreach($allmapeamento as $key => $value) { $result[$value->id_mapeamento] = range(0, $_SESSION['my_permissao'][$value->id_mapeamento]); } return $result; } // Function for basic field validation (present and neither empty nor only white space function IsNullOrEmptyString($str){ return (!isset($str) || trim($str)===''); } function CheckStringEnclosure($str, $start, $end) { $match = 0; $pattern = sprintf('/%s(.+?)%s/ims',preg_quote($start, '/'), preg_quote($end, '/')); if(preg_match($pattern, $str, $matches)) list(, $match) = $matches; return $match; } function inrange($min, $number, $max) { if($number >= $min && $number <= $max) return true; else return false; } function num_to_mysql($get_valor) { $source = array('.', ','); $replace = array('', '.'); $valor = str_replace($source, $replace, $get_valor); //remove os pontos e substitui a virgula pelo ponto return $valor; //retorna o valor formatado para gravar no banco } function dateDifference($date_1 , $date_2 , $differenceFormat = '%a' ) { $datetime1 = date_create($date_1); $datetime2 = date_create($date_2); $interval = date_diff($datetime1, $datetime2); return $interval->format($differenceFormat); } function MontaMenuDropdown($conteudo) { $estrutura = array(); $linhas = explode("\n",$conteudo); $separador = "|"; $erro = 0; $cont_menu = 0; $cont_item = 0; $id_anterior = null; for($i = 0; $i <= count($linhas)-1; $i++) { $linhas[$i] = rtrim($linhas[$i]); if($linhas[$i]) { $dados = explode($separador, $linhas[$i]); $campos = count($dados); $id = $dados[0]; $label = $dados[1]; $icone = $dados[2]; if($campos != 3 && $campos != 5) $erro = $erro + 1; else { if(!$memorizou) { $id_anterior = $id; $memorizou = 1; } if($id != $id_anterior) { $cont_menu++; $cont_item = 0; } $estrutura[$cont_menu][$cont_item] = array($label, $icone, $dados[3], $dados[4]); $id_anterior = $id; $cont_item++; } } } return $estrutura; } function MontaFatiaDePeriodo($time_inicial = null, $time_final = null, $fatia = null, $objeto = null, $datas_com_progresso = null, $debug = null) { $result = array(); if(!$time_inicial || !$time_final) return $result; //OBJETO Projeto ou Linear, é mesmo campo para pegar: $diabase = $objeto->diabase; $mesbase = $objeto->it_mesbase; //Define as fatias $dia = (1 * 24 * 60 * 60); $semana = (7 * 24 * 60 * 60); $quinzena = (15 * 24 * 60 * 60); $mes = (30 * 24 * 60 * 60); //Pega os parametros da data inicial $dia_inicial = date('j', $time_inicial); $mes_inicial = date('n', $time_inicial); $ano_inicial = date('Y', $time_inicial); //Faz este ajuste para ignorar o horario de verão //$time_inicial = mktime(22, 0, 0, $mes_inicial, $dia_inicial, $ano_inicial); //Comentei esta linha acima em 15/fev/16 quando estava implementando os Resumos Gerenciais.... pois não vi sentido colocar os horários para as 22hs... depois se for o caso eu preciso pesquisas do por quê que eu havia colocado este trick no passado... $time_inicial = mktime(0, 0, 0, $mes_inicial, $dia_inicial, $ano_inicial); //Pega os parametros da data final $dia_final = date('j', $time_final); $mes_final = date('n', $time_final); $ano_final = date('Y', $time_final); //Faz este ajuste para ignorar o horario de verão //$time_final = mktime(22, 0, 0, $mes_final, $dia_final, $ano_final); //Comentei esta linha acima em 15/fev/16 quando estava implementando os Resumos Gerenciais.... pois não vi sentido colocar os horários para as 22hs... depois se for o caso eu preciso pesquisas do por quê que eu havia colocado este trick no passado... $time_final = mktime(23, 59, 59, $mes_final, $dia_final, $ano_final); if($debug) { print "OBJETO"; print_r($objeto); } if($debug) print "FATIA: $fatia \n"; if($debug) print "TimeInicial[$time_inicial] [$dia_inicial][$mes_inicial][$ano_inicial][$hora_inicial : $minuto_inicial : $segundo_inicial]\n"; if($debug) print "TimeFinal[$time_final] [$dia_final][$mes_final][$ano_final][$hora_final : $minuto_final : $segundo_final]\n"; //Monta um array de acordo com a fatia semana, quinzenal e mensal $time_fatia[1] = $semana; $time_fatia[2] = $quinzena; $time_fatia[3] = $mes; if($debug) print "TIMEFATIA[]:\n"; if($debug) print_r($time_fatia); if($debug) print "\n\n"; $label[1] = "semana"; $label[2] = "quinzena"; //Esse campo tem só em $projeto, então se o objeto tiver, usa, senão pega a label default if($objeto->perlabelcont) $label[3] = $objeto->perlabelcont; else $label[3] = "mês"; //PASSO 1 - AJUSTANDO PERIODO INICIAL E FINAL //PASSO 1 - Faz ajustes no periodo inicial e final segundo o dia base do objeto e a fatia que foi escolhida, para assim encontrar a data inicial e final do objeto. if($fatia == 1) { //################################# //AJUSTA O PERIODO INICIAL //Primeiro deve-se achar o primeiro domingo anterior ao time_inicial, pois este será o novo time inicial $dia_da_semana_atual = date('w',$time_inicial); $aux_time = $time_inicial; while($dia_da_semana_atual != 0) { $aux_time = $aux_time - $dia; $dia_da_semana_atual = date('w', $aux_time); $time_inicial = $aux_time; } //################################# //AJUSTA O PERIODO FINAL //Pega o sábado depois da data final $dia_da_semana_atual = date('w',$time_final); $aux_time = $time_final; while($dia_da_semana_atual != 6) { $aux_time = $aux_time + $dia; $dia_da_semana_atual = date('w', $aux_time); $time_final = $aux_time; } //################################# } elseif($fatia == 2) { //################################# //AJUSTA O PERIODO INICIAL //Pega o primeiro dia da quinzena $dia_inicial = date('j', $time_inicial); $dias_do_mes = date('t', $time_inicial); if($dia_inicial <= 15) { $time_inicial = $time_inicial - ($dia_inicial * $dia) + $dia; $quinzena_atual = 1; } else { $time_inicial = $time_inicial - (($dia_inicial - 15)*$dia) + $dia; $quinzena_atual = 2; } //################################# //AJUSTA O PERIODO FINAL //Pega o ultimo dia da quinzena $dia_final = date('j', $time_final); $dias_do_mes_final = date('t', $time_final); if($dia_final <= 15) $time_final = $time_final + ((15 - $dia_final)*$dia); else $time_final = $time_final + (($dias_do_mes_final - $dia_final)*$dia); //################################# } elseif($fatia == 3) { //Verifica se o objeto possui dia-base para montagem da fatia de PERIODOS if($diabase >= 2) { //################################# //AJUSTA O PERIODO INICIAL //Se o diabase for maior que o dia inicial, então tem que voltar 1 mês nos periodos if($diabase > $dia_inicial) { $ano_anterior = $ano_inicial; $mes_anterior = $mes_inicial - 1; if($mes_anterior == 0) { $mes_anterior = 12; $ano_anterior = $ano_anterior - 1; } $time_inicial = mktime(22, 0, 0, $mes_anterior, $diabase, $ano_anterior); //Faz este ajuste para ignorar o horario de verão } else $time_inicial = mktime(22, 0, 0, $mes_inicial, $diabase, $ano_inicial); //Faz este ajuste para ignorar o horario de verão //################################# //AJUSTA O PERIODO FINAL if($diabase > $dia_final) { $dia_final = $diabase - 1; $time_final = mktime(22, 0, 0, $mes_final, $dia_final, $ano_final); //Faz este ajuste para ignorar o horario de verão } else { $dia_final = $diabase - 1; $mes_final = $mes_final + 1; if($mes_final == 13) { $mes_final = 1; $ano_final = $ano_final + 1; } $time_final = mktime(22, 0, 0, $mes_final, $dia_final, $ano_final); //Faz este ajuste para ignorar o horario de verão } //################################# } else { //################################# //AJUSTA O PERIODO INICIAL $dias_do_mes = date('t', $time_inicial); $time_inicial = $time_inicial - ($dia_inicial * $dia) + $dia; $time_fatia[$fatia] = $dias_do_mes * $dia; //################################# //AJUSTA O PERIODO FINAL $dias_do_mes_final = date('t', $time_final); $time_final = $time_final + (($dias_do_mes_final - $dia_final)*$dia); //################################# } } if($debug) { print "AJUSTADOS:\n"; print "INICIO:[".date("d-m-Y H:i:s", $time_inicial)."] FIM:[".date("d-m-Y H:i:s", $time_final)."]\n"; print "Dias do Mes INI: $dias_do_mes e Dias do Mes FIM: $dias_do_mes_final\n"; print "FATIA: $fatia\r\n"; print "TIMEFATIA[FATIA]:\r\n"; print_r($time_fatia); } //PASSO 2 - MONTA O ARRAY DE FATIAS DE PERIODO //PASSO 2 - Baseado no novo time_inicial e time_final, é montado um array de fatias de periodo que será utilizado pelo script. //Monta o array de fatias $listFatias = array(); $progrediu = 0; $cont = 0; $cont_tem_input = 0; if($debug) print "\n\nENTRANDO NO LOOP PRA MONTAR A LISTA...\n\n"; $pegueimarco = 0; for($i = $time_inicial; $i <= $time_final; $i = $i + $time_fatia[$fatia]) { if($debug) print "NOVA INTERACAO:\n"; $mes_atual = date('m', $i); //SE for QUINZENAL considera esta manobra if($fatia == 2) { $dias_do_mes = date('t', $i); if($debug) print "DiasDoMes[$dias_do_mes]\n"; //Se for a primeira quinzena, a fatia é 15 dias. //Se for a segunda, é o numero de dias do mes - 15 if($quinzena_atual == 1) { $time_fatia[$fatia] = $quinzena; if($debug) print "PQ [".$quinzena/$dia."] DIAS somados...\n"; } else { $time_fatia[$fatia] = ($dias_do_mes - 15) * $dia; if($debug) print "SQ [".(($dias_do_mes - 15) * $dia)/$dia."] DIAS somados...\n"; } } elseif($fatia == 3) { //Se o mês for JANEIRO e o diabase for maior ou igual a 29 //Pega quantos dias terá o mes de FEVEREIRO do ano corrente e usa este valor como dias_do_mes if(date('n', $i) == 1 && $diabase >= 29) { //Neste caso o $i deve ser o último dia do mês que vem, fevereiro. $auxano = date('Y', $i); $dateToTest = $auxano."-02-01"; if($debug) print "[$dateToTest]"; $lastday = date('t',strtotime($dateToTest)); if($debug) print "[$lastday]"; $auxtime = mktime(22, 0, 0, 2, $lastday, $auxano); if($debug) print date('d-m-Y H:m:s', $auxtime); if($debug) print "[$i][$auxtime][$dia]"; $dias_do_mes = (($auxtime - $i)/$dia); $time_fatia[$fatia] = $dias_do_mes * $dia + $dia; } elseif(!$pegueimarco && date('n', $i) == 3 && $diabase >= 29) { //Neste caso o $i deve ser o diabase - 1 deste mês de março $auxano = date('Y', $i); $auxtime = mktime(22, 0, 0, 3, ($diabase-1), $auxano); if($debug) print date('d-m-Y H:m:s', $auxtime); if($debug) print "[$i][$auxtime][$dia]"; $dias_do_mes = (($auxtime - $i)/$dia); $time_fatia[$fatia] = $dias_do_mes * $dia + $dia; $pegueimarco = 1; } else { $dias_do_mes = date('t', $i); $time_fatia[$fatia] = $dias_do_mes * $dia; } } if($debug) print "Diabase[$diabase] Mes[".date('m', $i)."] DiasDoMes[$dias_do_mes]\n"; if($debug) print "TIMEFATIA[FATIA]:\r\n"; if($debug) print_r($time_fatia); $de_ate = ""; $de_ate->indice = $cont; $de_ate->de_time = $i; $de_ate->de = date('Y-m-d', $de_ate->de_time); $de_ate->de_formatado = date('d-m-Y', $de_ate->de_time); $de_ate->defull_formatado = date('d-m-Y H:i:s', $de_ate->de_time); $de_ate->ate_time = $i + $time_fatia[$fatia] - $dia; if($debug) print "ANTES ATE: ".$de_ate->ate_time."\n"; //Verifica se houve mudança de horario de verao durante este periodo $horarioVeraoAntes = date('I', $de_ate->de_time); $horarioVeraoDepois = date('I', $de_ate->ate_time); if($debug) print "HVAntes: [$horarioVeraoAntes] - HVDepois: [$horarioVeraoDepois]\n"; //Se teve, então SOMA ou SUBTRAI uma hora do tempo final $auxi = $i; //Armazena o valor original do $i porque mais abaixo ele é usado pra calcular ate_anterior. Aí ele não é afetado por este IF abaixo, se mantendo preservado. if($horarioVeraoAntes == 1 && $horarioVeraoDepois == 0) { $de_ate->ate_time = $de_ate->ate_time + 3600; $i = $i + 3600; } elseif($horarioVeraoAntes == 0 && $horarioVeraoDepois == 1) { $de_ate->ate_time = $de_ate->ate_time - 3600; $i = $i - 3600; } if($debug) print "DEPOIS ATE: ".$de_ate->ate_time."\n"; $de_ate->ate = date('Y-m-d', $de_ate->ate_time); $de_ate->ate_formatado = date('d-m-Y', $de_ate->ate_time); $de_ate->atefull_formatado = date('d-m-Y H:i:s', $de_ate->ate_time); $de_ate->ate_anterior = date('Y-m-d', $auxi - $dia); $de_ate->ate_anterior_full_formatado = date('Y-m-d H:i:s', $auxi - $dia); //Aqui acerta o mês de acordo com a referencia do periodo em "Editar Projeto" if($diabase >= 2 && $mesbase == 1) $de_ate->label1 = labelFatia($de_ate->de_time); elseif($diabase >= 2 && $mesbase == 2) $de_ate->label1 = labelFatia($de_ate->ate_time); else $de_ate->label1 = labelFatia($de_ate->ate_time); //Aqui acerta o mês de acordo com a referencia do periodo em "Editar Projeto" if($diabase >= 2 && $mesbase == 1) $de_ate->label0 = labelFatia($de_ate->de_time, 1); elseif($diabase >= 2 && $mesbase == 2) $de_ate->label0 = labelFatia($de_ate->ate_time, 1); else $de_ate->label0 = labelFatia($de_ate->ate_time, 1); //Verifica SE o periodo possui algum input de porcentagem $de_ate->tem_input = 0; //print "Datas com Progressos - cont[$cont]:
"; //print_r($datas_com_progresso); foreach($datas_com_progresso as $time_periodo => $nada) { //print "time_periodo[$time_periodo]
"; //print "de_time:".$de_ate->de_time." - ".$de_ate->de_formatado."
"; //print "ate_time:".$de_ate->ate_time." - ".$de_ate->ate_formatado."
"; if($time_periodo >= $de_ate->de_time && $time_periodo <= $de_ate->ate_time) { //echo date('d-m-Y', $time_periodo); //print " ENTROU!!
"; $de_ate->tem_input = 1; //SE teve input, armazena o último contador com input $progrediu = $cont+1; //20160919 - Aqui estava -1 antes... não sei porque. Mudei pra +1 porque estava posicionando errado na barra de periodos. //print "Progrediu: $progrediu
"; } //else print "Não Entrou!
"; } //SE exibe contador: $aux = $cont+1; if($objeto->percont) { if($de_ate->tem_input && $objeto->it_pertipocont == '1') { $cont_tem_input++; $aux = $cont_tem_input; } $de_ate->label2 = $label[$fatia]." ".$aux; } elseif($classe == "projeto") $de_ate->label2 = " "; else $de_ate->label2 = $label[$fatia]." ".$aux; if($debug) { print_r($de_ate); print "\n\n"; } array_push($listFatias, $de_ate); $cont++; //SE for QUINZENAL considera esta manobra if($fatia == 2) { //Altera a quinzena if($quinzena_atual == 1) $quinzena_atual = 2; else $quinzena_atual = 1; } } if($debug) print "ARRAY DE FATIAS:\n"; if($debug) print_r($listFatias); $result[] = $listFatias; $result[] = $cont; //Último elemento, ou último período apontado $result[] = $progrediu; //Último período com progresso return($result); } function MontaFatiaDePeriodoRG($lista = null, $fatia = null, $objeto = null, $datas_com_progresso = null, $debug = null) { $result = array(); if(!$lista || !is_array($lista)) return $result; //OBJETO Projeto ou Linear, é mesmo campo para pegar: $diabase = $objeto->diabase; $mesbase = $objeto->it_mesbase; //Define as fatias $dia = (1 * 24 * 60 * 60); $semana = (7 * 24 * 60 * 60); $quinzena = (15 * 24 * 60 * 60); $mes = (30 * 24 * 60 * 60); //Data Inicial: $inicio = pegaprimeiro($lista); $data_inicial = $lista[$inicio]; list($diai, $mesi, $anoi) = split("-", $data_inicial); $time_inicial = mktime(0, 0, 0, $mesi, $diai, $anoi); //Data Final: $final = pegaultimo($lista); $data_final = $lista[$final]; list($diaf, $mesf, $anof) = split("-", $data_final); $time_final = mktime(23, 59, 59, $mesf, $diaf, $anof); if($debug) { print "INICIO: $inicio - $data_inicial - $diai, $mesi, $anoi - $time_inicial
"; } if($debug) { print "FINAL: $final - $data_final - $diaf, $mesf, $anof - $time_final
"; } //Monta um array de acordo com a fatia semana, quinzenal e mensal $time_fatia[1] = $semana; $time_fatia[2] = $quinzena; $time_fatia[3] = $mes; $label[1] = "semana"; $label[2] = "quinzena"; //Esse campo tem só em $projeto, então se o objeto tiver, usa, senão pega a label default if($objeto->perlabelcont) $label[3] = $objeto->perlabelcont; else $label[3] = "mês"; //################################# //AJUSTA O PERIODO INICIAL $dias_do_mes = date('t', $time_inicial); $time_inicial = $time_inicial - ($diai * $dia) + $dia; $time_fatia[$fatia] = $dias_do_mes * $dia; //################################# //AJUSTA O PERIODO FINAL $dias_do_mes_final = date('t', $time_final); $time_final = $time_final + (($dias_do_mes_final - $diaf)*$dia); //################################# if($debug) print "AJUSTADOS:\n"; if($debug) print "INICIO:[".date("d-m-Y H:i:s", $time_inicial)."] FIM:[".date("d-m-Y H:i:s", $time_final)."]\n\n"; //PASSO 2 - MONTA O ARRAY DE FATIAS DE PERIODO //PASSO 2 - Baseado no novo time_inicial e time_final, é montado um array de fatias de periodo que será utilizado pelo script. //Monta o array de fatias $listFatias = array(); $progrediu = 0; $maior = 0; $cont = 0; $cont_tem_input = 0; //print "
";
	for($i = $time_inicial; $i <= $time_final; $i = $i + $time_fatia[$fatia])
	{
		$mes_atual = date('m', $i);
		
		$dias_do_mes = date('t', $i);
		if($debug) print "DiasDoMes[$dias_do_mes]\n";
		$time_fatia[$fatia] = $dias_do_mes * $dia;
		
		$de_ate = "";
		$de_ate->indice = $cont;
		$de_ate->de_time = $i;
		$de_ate->de = date('Y-m-d', $de_ate->de_time);
		$de_ate->de_formatado = date('d-m-Y', $de_ate->de_time);
		$de_ate->defull_formatado = date('d-m-Y H:i:s', $de_ate->de_time);
		$de_ate->ate_time = $i + $time_fatia[$fatia] - $dia;
		//Verifica se houve mudança de horario de verao durante este periodo
		$horarioVeraoAntes = date('I', $de_ate->de_time);
		$horarioVeraoDepois = date('I', $de_ate->ate_time);
		if($debug) print "HVAntes: [$horarioVeraoAntes] - HVDepois: [$horarioVeraoDepois]\n";
		//Se teve, então SOMA ou SUBTRAI uma hora do tempo final
		$auxi = $i; //Armazena o valor original do $i porque mais abaixo ele é usado pra calcular ate_anterior. Aí ele não é afetado por este IF abaixo, se mantendo preservado.
		if($horarioVeraoAntes == 1 && $horarioVeraoDepois == 0) { $de_ate->ate_time = $de_ate->ate_time + 3600; $i = $i + 3600; }
		elseif($horarioVeraoAntes == 0 && $horarioVeraoDepois == 1) { $de_ate->ate_time = $de_ate->ate_time - 3600; $i = $i - 3600; }
		if($debug) print "DEPOIS ATE: ".$de_ate->ate_time."\n";
		$de_ate->ate = date('Y-m-d', $de_ate->ate_time);
		$de_ate->ate_formatado = date('d-m-Y', $de_ate->ate_time);
		$de_ate->atefull_formatado = date('d-m-Y H:i:s', $de_ate->ate_time);
		$de_ate->ate_anterior = date('Y-m-d', $auxi - $dia);
		$de_ate->ate_anterior_full_formatado = date('Y-m-d H:i:s', $auxi - $dia);
		$de_ate->label1 = labelFatia($de_ate->ate_time);
		$de_ate->periodo1 = date('Ym', $de_ate->ate_time);
		//Verifica SE o periodo possui algum input de porcentagem
		$de_ate->tem_input = 0;
		//print_r($de_ate);
		if($lista[$de_ate->periodo1]) $de_ate->tem_input = 1;
		foreach($datas_com_progresso as $time_periodo => $nada)
		{
			$auxperiodo1 = date('Ym', $time_periodo);
			//print "Testando: [$time_periodo][";
			//echo date('d-m-Y', $time_periodo)." - ".date('d-m-Y', $de_ate->de_time)." - ".date('d-m-Y', $de_ate->ate_time);
			//print "]
"; if($auxperiodo1 >= $de_ate->periodo1 && $auxperiodo1 <= $de_ate->periodo1) { //print "enquadrou
"; //SE teve input, armazena o último contador com input $progrediu = $de_ate->periodo1; //$cont-1; } //print "PROGREDIU: [$progrediu]
"; } //print "** PROGREDIU FINAL : [$progrediu] Maior: [$maior]
"; if($progrediu > $maior) $maior = $progrediu; //print "** MAIOR FINAL : [$maior]
"; //SE exibe contador: $aux = $cont+1; if($objeto->percont) { if($de_ate->tem_input && $objeto->it_pertipocont == '1') { $cont_tem_input++; $aux = $cont_tem_input; } $de_ate->label2 = $label[$fatia]." ".$aux; } elseif($classe == "projeto") $de_ate->label2 = " "; else $de_ate->label2 = $label[$fatia]." ".$aux; if($debug) { print_r($de_ate); print "\n\n"; } array_push($listFatias, $de_ate); $cont++; } if($debug) print "ARRAY DE FATIAS:\n"; if($debug) print_r($listFatias); $result[] = $listFatias; $result[] = $cont; $result[] = $maior; //print_r($result); print "
"; return($result); } function CalculaEAP($id_contrato, $eap, $filhos) { $debug = $_GET['debug']; if($debug) print "
";
	
	if(!$id_contrato) return false;
	
	//Carrega os ultimos filhos
	$allfilhos = ($filhos) ? $filhos : EapOperations::LoadUltimosFilhos($id_contrato, "ultimos");
	if($debug) print "-------------------------------------------------------------\r\n";
	if($debug) print "ALLFILHOS NO INICIO:\r\n ";
	if($debug) print_r($allfilhos);
	
	//Carrega as EAP
	//$auxalleap = ($eap) ? $eap : EapOperations::LoadEapHierarquizado($id_contrato, 0, 0, " ordem ASC ", "|---- ", "calculaeap", null, " >> ", null);
	$auxalleap = ($eap) ? $eap : EapOperations::LoadEapHierarquizadoNova($id_contrato, 0, null, " ordem ASC ", "|---- ", " >> ", "calculaeap", 0);
	if($debug) print "-------------------------------------------------------------\r\n";
	if($debug) print "ALLEAP NO INICIO:\r\n ";
	if($debug) print_r($auxalleap);
	$alleap = array();
	foreach($auxalleap as $key => $value)
	{
		//PRIMEIRO: deve-se ZERAR os valores iniciais para as fases que não forem ultimos filhos
		if(!in_array($value->id_eap, $allfilhos))
		{
			$value->valor_inicial = 0; $value->valor_inicial_formatado = "0,00";
//			$value->valor_ajustado = 0; $value->valor_ajustado_formatado = "0,00";
			$value->valor_unitario = 0; $value->valor_unitario_formatado = "0,00";
		}
		else 
		{
//			if($value->valor_ajustado <= 0)
//			{
//				$value->valor_ajustado = $value->valor_inicial;
//				$value->valor_ajustado_formatado = $value->valor_inicial_formatado;
//			}
			//Calcula os unitarios
			$value->valor_unitario = ($value->valor_inicial > 0 && $value->qtde_inicial > 0) ? $value->valor_inicial/$value->qtde_inicial : 0;
			$value->valor_unitario_formatado = number_format($value->valor_unitario, 2, ',', '.');
		}
		//Cria o objeto de EAP final
		$alleap[$value->id_eap] = $value;
	}
	if($debug) print "-------------------------------------------------------------\r\n";
	if($debug) print "ALLEAP COM VALORES ZERADOS PARA OS NIVEIS SUPERIORES:\r\n ";
	if($debug) print_r($alleap);
	
	//Cria o objeto do Contrato
	$todo_contrato = new Eap();
	$todo_contrato->id_eap = 0;
	$todo_contrato->id_eap_pai = '';
	$todo_contrato->valor_inicial = 0;
//	$todo_contrato->valor_ajustado = 0;
	$alleap[0] = $todo_contrato;
	$tratados = $allfilhos;
	//Agora acerta os valores de dentro pra fora
	$continua = (count($allfilhos)) ? 1 : 0;
	$ultima = 0;
	$cont = 0;
	while($continua)
	{
		if($debug) print "-------------------------------------------------------------\r\n";
		if($debug) print "NOVA INTERACAO DE WHILE:\r\n";
		if($debug) print "-------------------------------------------------------------\r\n";
		if($debug) print "ALLFILHOS:\r\n ";
		if($debug) print_r($allfilhos);
		
		//Auxfilhos acomoda os id_pai para a proxima interação, e assim ir subindo os valores pra cima
		$auxfilhos = array();
		foreach($allfilhos as $key => $id_eap)
		{
			$id_eap_pai = $alleap[$id_eap]->id_eap_pai;
			if($debug) print "FILHA: $id_eap - PAI: $id_eap_pai\r\n";
			if($debug) print "ANTES:\r\n";
			if($debug) print "Valor da Filha [$id_eap]: ". $alleap[$id_eap]->valor_inicial. "\r\n";
			if($debug) print "Valor do Pai [$id_eap_pai]: ". $alleap[$id_eap_pai]->valor_inicial. "\r\n";
			if($id_eap_pai != null)
			{
				$alleap[$id_eap_pai]->valor_inicial = $alleap[$id_eap_pai]->valor_inicial + $alleap[$id_eap]->valor_inicial;
//				$alleap[$id_eap_pai]->valor_ajustado = $alleap[$id_eap_pai]->valor_ajustado + $alleap[$id_eap]->valor_ajustado;
				if(!in_array($id_eap_pai,$auxfilhos) && !in_array($id_eap_pai,$tratados)) $auxfilhos[] = $id_eap_pai;
			}
			if($debug) print "DEPOIS:\r\n";
			if($debug) print "Valor do Pai [$id_eap_pai]: ". $alleap[$id_eap_pai]->valor_inicial. "\r\n-------\r\n";
		}
		//Retira os IDs repetidos do Auxfilhos
		$allfilhos = array_unique($auxfilhos);
		$allfilhos = array_values($allfilhos);
		$tratados = array_unique(array_merge($tratados, $allfilhos));
		$tratados = array_values($tratados);
		if($debug) print "ULTIMA[$ultima] CONTINUA[$continua]\r\n";
		if($ultima == 1) $continua = 0;
		if($debug) print "ULTIMA[$ultima] CONTINUA[$continua]\r\n";
		$qtde = count($allfilhos);
		if($debug) print "QTDE[$qtde]\r\n";
		if($qtde == 1) $ultima = 1;
		if($debug) print "ULTIMA[$ultima]\r\n";
		
		$cont++;
		if($cont >= 3500) { print "
ATENÇÃO:
O SISTEMA IDENTIFICOU UMA GRANDE QUANTIDADE DE INFORMAÇÕES PARA COMPLIAR/PROCESSAR. PODE SER QUE SEU CÁLCULO NÃO TENHA SE DADO POR COMPLETO.
VERIFIQUE A INFORMAÇÃO CALCULADA, E CASO VOCÊ TENHA NOTADO ALGUMA INCONSISTÊNCIA, POR FAVOR INFORME A URL ACIMA PARA MELHOR IDENTIFICAÇÃO DO PROBLEMA DIRETAMENTE AO DESENVOLVEDOR OU SEU SUPERIOR.
"; break; } } //Agora formata todos os campos $alleap[0]->valor_inicial = 0; // $alleap[0]->valor_ajustado = 0; foreach($alleap as $key => $value) { if($key != 0 && !$value->id_eap_pai) { $alleap[0]->valor_inicial = $alleap[0]->valor_inicial + $value->valor_inicial; // $alleap[0]->valor_ajustado = $alleap[0]->valor_ajustado + $value->valor_ajustado; } //Formatando $alleap[$key]->valor_inicial_formatado = number_format($alleap[$key]->valor_inicial, 2, ',', '.'); $alleap[$key]->valor_inicial_arredondado = round($alleap[$key]->valor_inicial); // $alleap[$key]->valor_ajustado_formatado = number_format($alleap[$key]->valor_ajustado, 2, ',', '.'); // $alleap[$key]->valor_ajustado_arredondado = round($alleap[$key]->valor_ajustado); } if($debug) print_r($alleap); if($debug) print "
"; return $alleap; } function CalculaEAPnoPeriodo($id_contrato, $eap, $filhos, $periodo, $allitemmedido) { $debug = $_GET['debug']; if($debug) print "
";
	
	if(!$id_contrato || !$periodo) return false;
	
	$periodo_data = formata_periodo($periodo, "-", 7);
	
	//Carrega os ultimos filhos
	$allfilhos = ($filhos) ? $filhos : EapOperations::LoadUltimosFilhos($id_contrato, "ultimos");
	if($debug) print "-------------------------------------------------------------\r\n";
	if($debug) print "ALLFILHOS NO INICIO:\r\n ";
	if($debug) print_r($allfilhos);
	
	//Carrega as EAP
	//$auxalleap = ($eap) ? $eap : EapOperations::LoadEapHierarquizado($id_contrato, 0, 0, " ordem ASC ", "|---- ", "calculaeap", null, " >> ", null);
	$auxalleap = ($eap) ? $eap : EapOperations::LoadEapHierarquizadoNova($id_contrato, 0, $periodo, " ordem ASC ", "|---- ", " >> ", "calculaeap", 0);
	if($debug) print "-------------------------------------------------------------\r\n";
	if($debug) print "ALLEAP NO INICIO:\r\n ";
	if($debug) print_r($auxalleap);
	$alleap = array();
	foreach($auxalleap as $key => $value)
	{
		//PRIMEIRO: deve-se ZERAR os valores iniciais para as fases que não forem ultimos filhos
		if(!in_array($value->id_eap, $allfilhos))
		{
			$value->qtde = 0; $value->qtde_formatado = "0,00";
			$value->valor = 0; $value->valor_formatado = "0,00";
			$value->valor_unitario = 0; $value->valor_unitario_formatado = "0,00";
			$value->qtde_medido = 0; $value->qtde_medido_formatado = "0,00";
			$value->valor_medido = 0; $value->valor_medido_formatado = "0,00";
			$value->qtde_saldo = 0; $value->qtde_saldo_formatado = "0,00";
			$value->valor_saldo = 0; $value->valor_saldo_formatado = "0,00";
		}
		else 
		{
			//Se não tem entrada pro período, então adota os valores iniciais
			if(!$value->id_eapperiodo)
			{
				$value->qtde = $value->qtde_inicial;
				$value->qtde_formatado = $value->qtde_inicial_formatado;
				$value->valor = $value->valor_inicial;
				$value->valor_formatado = $value->valor_inicial_formatado;
				$value->valor_unitario = $value->valor_unitario_inicial;
				$value->valor_unitario_formatado = $value->valor_unitario_inicial_formatado;
			}
			else 
			{
				//Verifica se tem Reajuste para esta EAP, conforme o ultimo periodo reajustado (pega ultimo reajuste <= PERIODO atual)
				//Se tiver, este é o $value->valor para esta EAP neste nó.
				$onereajuste = ReajusteOperations::LoadReajusteNoPeriodo($value->id_eap, $periodo, 2);
				$value->valor = ($onereajuste->valor) ? $onereajuste->valor : $value->valor_inicial;
				$value->valor_formatado = number_format($value->valor, 2, ',', '.');
				$value->qtde = ($onereajuste->qtde) ? $onereajuste->qtde : $value->qtde_inicial;
				$value->qtde_formatado = number_format($value->qtde, 2, ',', '.');
				
				//Calcula os unitarios
				$value->valor_unitario = ($value->valor > 0 && $value->qtde > 0) ? $value->valor/$value->qtde : 0;
				$value->valor_unitario_formatado = number_format($value->valor_unitario, 2, ',', '.');
				
			}
			
			//Atualiza os valores medidos
			$value->qtde_medido = ($allitemmedido[$value->id_eap]) ? $allitemmedido[$value->id_eap]->qtde_medido : 0;
			$value->qtde_medido_formatado = ($allitemmedido[$value->id_eap]) ? $allitemmedido[$value->id_eap]->qtde_medido_formatado : "0,00";
			$value->valor_medido = ($allitemmedido[$value->id_eap]) ? $allitemmedido[$value->id_eap]->valor_medido : 0;
			$value->valor_medido_formatado = ($allitemmedido[$value->id_eap]) ? $allitemmedido[$value->id_eap]->valor_medido_formatado : "0,00";
			//Atualiza os saldos
			$value->qtde_saldo = $value->qtde - $value->qtde_medido;
			$value->qtde_saldo_formatado = number_format($value->qtde_saldo, 2, ',', '.');
			$value->valor_saldo = $value->valor - $value->valor_medido;
			$value->valor_saldo_formatado = number_format($value->valor_saldo, 2, ',', '.');
		}
		//Cria o objeto de EAP final
		$alleap[$value->id_eap] = $value;
	}
	if($debug) print "-------------------------------------------------------------\r\n";
	if($debug) print "ALLEAP COM VALORES ZERADOS PARA OS NIVEIS SUPERIORES:\r\n ";
	if($debug) print_r($alleap);
	
	//Cria o objeto do Contrato
	$todo_contrato = new Eap();
	$todo_contrato->id_eap = 0;
	$todo_contrato->id_eap_pai = '';
	$todo_contrato->qtde = 0;
	$todo_contrato->valor = 0;
	$todo_contrato->valor_medido = 0;
	$todo_contrato->valor_saldo = 0;
	$alleap[0] = $todo_contrato;
	$tratados = $allfilhos;
	//Agora acerta os valores de dentro pra fora
	$continua = (count($allfilhos)) ? 1 : 0;
	$ultima = 0;
	$cont = 0;
	while($continua)
	{
		if($debug) print "-------------------------------------------------------------\r\n";
		if($debug) print "NOVA INTERACAO DE WHILE:\r\n";
		if($debug) print "-------------------------------------------------------------\r\n";
		if($debug) print "ALLFILHOS:\r\n ";
		if($debug) print_r($allfilhos);
		
		//Auxfilhos acomoda os id_pai para a proxima interação, e assim ir subindo os valores pra cima
		$auxfilhos = array();
		foreach($allfilhos as $key => $id_eap)
		{
			$id_eap_pai = $alleap[$id_eap]->id_eap_pai;
			if($debug) print "FILHA: $id_eap - PAI: $id_eap_pai\r\n";
			if($debug) print "ANTES:\r\n";
			if($debug) print "Valor da Filha [$id_eap]: ". $alleap[$id_eap]->valor. "\r\n";
			if($debug) print "Valor do Pai [$id_eap_pai]: ". $alleap[$id_eap_pai]->valor. "\r\n";
			if($id_eap_pai != null)
			{
				$alleap[$id_eap_pai]->valor = $alleap[$id_eap_pai]->valor + $alleap[$id_eap]->valor;
				$alleap[$id_eap_pai]->valor_medido = $alleap[$id_eap_pai]->valor_medido + $alleap[$id_eap]->valor_medido;
				$alleap[$id_eap_pai]->valor_saldo = $alleap[$id_eap_pai]->valor_saldo + $alleap[$id_eap]->valor_saldo;
				if(!in_array($id_eap_pai,$auxfilhos) && !in_array($id_eap_pai,$tratados)) $auxfilhos[] = $id_eap_pai;
			}
			if($debug) print "DEPOIS:\r\n";
			if($debug) print "Valor do Pai [$id_eap_pai]: ". $alleap[$id_eap_pai]->valor. "\r\n-------\r\n";
		}
		//Retira os IDs repetidos do Auxfilhos
		$allfilhos = array_unique($auxfilhos);
		$allfilhos = array_values($allfilhos);
		$tratados = array_unique(array_merge($tratados, $allfilhos));
		$tratados = array_values($tratados);
		if($debug) print "ULTIMA[$ultima] CONTINUA[$continua]\r\n";
		if($ultima == 1) $continua = 0;
		if($debug) print "ULTIMA[$ultima] CONTINUA[$continua]\r\n";
		$qtde = count($allfilhos);
		if($debug) print "QTDE[$qtde]\r\n";
		if($qtde == 1) $ultima = 1;
		if($debug) print "ULTIMA[$ultima]\r\n";
		
		$cont++;
		if($cont >= 3500)
		{
			//print "
ATENÇÃO:
O SISTEMA IDENTIFICOU UMA GRANDE QUANTIDADE DE INFORMAÇÕES PARA COMPLIAR/PROCESSAR. PODE SER QUE SEU CÁLCULO NÃO TENHA SE DADO POR COMPLETO.
VERIFIQUE A INFORMAÇÃO CALCULADA, E CASO VOCÊ TENHA NOTADO ALGUMA INCONSISTÊNCIA, POR FAVOR INFORME A URL ACIMA PARA MELHOR IDENTIFICAÇÃO DO PROBLEMA DIRETAMENTE AO DESENVOLVEDOR OU SEU SUPERIOR.
"; break; } } //Agora formata todos os campos $alleap[0]->valor = 0; $alleap[0]->valor_medido = 0; $alleap[0]->valor_saldo = 0; foreach($alleap as $key => $value) { if($key != 0 && !$value->id_eap_pai) { $alleap[0]->valor = $alleap[0]->valor + $value->valor; $alleap[0]->valor_medido = $alleap[0]->valor_medido + $value->valor_medido; $alleap[0]->valor_saldo = $alleap[0]->valor_saldo + $value->valor_saldo; } //Formatando $alleap[$key]->valor_formatado = number_format($alleap[$key]->valor, 2, ',', '.'); $alleap[$key]->valor_arredondado = round($alleap[$key]->valor); $alleap[$key]->valor_medido_formatado = number_format($alleap[$key]->valor_medido, 2, ',', '.'); $alleap[$key]->valor_medido_arredondado = round($alleap[$key]->valor_medido); $alleap[$key]->valor_saldo_formatado = number_format($alleap[$key]->valor_saldo, 2, ',', '.'); $alleap[$key]->valor_saldo_arredondado = round($alleap[$key]->valor_saldo); } if($debug) print_r($alleap); if($debug) print "
"; return $alleap; } function MontaPeriodosContrato($data_ini = null, $data_fim = null, $ordem = null, $tipo_retorno = null) { $result = array(); //if(CHROMEDEBUG) ChromePhp::log($data_ini); //if(CHROMEDEBUG) ChromePhp::log($data_fim); list($anoi, $mesi, $diai) = split("-", $data_ini); list($anof, $mesf, $diaf) = split("-", $data_fim); $periodoini = $anoi.$mesi; $periodofim = $anof.$mesf; $data = $anoi."-".$mesi."-01"; while($periodofim > $periodoini) { list($ano, $mes, $dia) = split("-", $data); $periodoini = $ano.$mes; $result[strval($periodoini)] = formata_periodo($periodoini, "-", $tipo_retorno); $date = new DateTime($ano."-".$mes."-01"); $date->add(date_interval_create_from_date_string('1 month')); $data = $date->format('Y-m-d'); } //if(CHROMEDEBUG) ChromePhp::log($ordem); //if(CHROMEDEBUG) ChromePhp::log($result); if($ordem == "desc") return array_combine(array_reverse(array_keys($result)),array_reverse(array_values($result))); else return $result; } function formata_periodo($periodo = null, $separador = "-", $tipo_retorno = null) { $periodo = ($periodo) ? $periodo : date("Ym"); $ano = substr($periodo,0,4); $ano2d = substr($periodo,2,2); $mes = substr($periodo,4,2); $lmes = ltrim($mes,'0'); $mesAno = array(); $mesAno[1] = "Janeiro"; $mesAno[2] = "Fevereiro"; $mesAno[3] = "Março"; $mesAno[4] = "Abril"; $mesAno[5] = "Maio"; $mesAno[6] = "Junho"; $mesAno[7] = "Julho"; $mesAno[8] = "Agosto"; $mesAno[9] = "Setembro"; $mesAno[10] = "Outubro"; $mesAno[11] = "Novembro"; $mesAno[12] = "Dezembro"; $mesAbr = array(); $mesAbr[1] = "JAN"; $mesAbr[2] = "FEV"; $mesAbr[3] = "MAR"; $mesAbr[4] = "ABR"; $mesAbr[5] = "MAI"; $mesAbr[6] = "JUN"; $mesAbr[7] = "JUL"; $mesAbr[8] = "AGO"; $mesAbr[9] = "SET"; $mesAbr[10] = "OUT"; $mesAbr[11] = "NOV"; $mesAbr[12] = "DEZ"; //ucfirst(strtolower($bar)) if($tipo_retorno == 1) return $mesAbr[$lmes].$separador.$ano; //ABR-2019 elseif($tipo_retorno == 2) return $mesAbr[$lmes].$separador.$ano2d; //ABR-19 elseif($tipo_retorno == 3) return $mesAno[$lmes].$separador.$ano; //Abril-2019 elseif($tipo_retorno == 4) return $mesAno[$lmes].$separador.$ano2d; //Abril-19 elseif($tipo_retorno == 5) return $mesAno[$lmes]." de ".$ano; //Abril de 2019 elseif($tipo_retorno == 6) return $mes.$separador.$ano; //04-2019 elseif($tipo_retorno == 7) return $ano.$separador.$mes.$separador."01"; //2019-04-01 else return $mesAbr[$lmes].$separador.$ano; //ABR-2019 } function labelFatia($data, $tipo) { global $mesAno; if($tipo == 1) { $ano = date("Y",$data); $mes = date("m",$data); return $ano.$mes; } else { $ano = date("y",$data); $mes = date("n",$data); return $mesAno[$mes].".".$ano; } } function labelFatia2($anomes) { global $mesAno; $ano = substr($anomes, 2, 2); $mes = ltrim(substr($anomes, 4, 2), '0'); return $mesAno[$mes].".".$ano; } function pegaprimeiro($lista) { if(!count($lista)) return null; reset($lista); return key($lista); } function pegaultimo($lista) { if(!count($lista)) return null; end($lista); return key($lista); } ############################################################################## ############################################################################## ## FUNCOES DO CORE DO SAS ########## ABAIXO ################################## ############################################################################## ############################################################################## function converteData($data) { if ($data) { list($ano, $mes, $dia) = split("-", $data); return "$dia-$mes-$ano"; } else return false; } function converteData_tirahora($data) { if ($data) { list($date, $time) = split(" ", $data); list($ano, $mes, $dia) = split("-", $date); return "$dia-$mes-$ano"; } else return false; } function converteData_numeral($data) { if ($data) { list($date, $time) = split(" ", $data); list($ano, $mes, $dia) = split("-", $date); return "$ano$mes$dia"; } else return false; } function converteData_numeral2($data) { if ($data) { list($dia, $mes, $ano) = split("-", $data); $dia = str_pad($dia, 2, "0", STR_PAD_LEFT); $mes = str_pad($mes, 2, "0", STR_PAD_LEFT); return "$ano$mes$dia"; } else return false; } function saudata($formato = null) { $hora = date("G:i:s"); $dia = date("D"); $diaN = date("j"); $mes = date("n"); $mes0x = date("m"); $ano = date("Y"); if(($hora >= 0) AND ($hora < 12)){$saudacao = "Bom dia";} if(($hora >= 12) AND ($hora < 18)){$saudacao = "Boa Tarde";} if(($hora >= 18) AND ($hora < 24)){$saudacao = "Boa Noite";} $diaSemana = array(); $diaSemana["Sun"] = "Domingo"; $diaSemana["Mon"] = "Segunda-feira"; $diaSemana["Tue"] = "Terça-feira"; $diaSemana["Wed"] = "Quarta-feira"; $diaSemana["Thu"] = "Quinta-feira"; $diaSemana["Fri"] = "Sexta-feira"; $diaSemana["Sat"] = "Sábado"; $mesAno = array(); $mesAno[1] = "Janeiro"; $mesAno[2] = "Fevereiro"; $mesAno[3] = "Março"; $mesAno[4] = "Abril"; $mesAno[5] = "Maio"; $mesAno[6] = "Junho"; $mesAno[7] = "Julho"; $mesAno[8] = "Agosto"; $mesAno[9] = "Setembro"; $mesAno[10] = "Outubro"; $mesAno[11] = "Novembro"; $mesAno[12] = "Dezembro"; $mesc = array(); $mesc[1] = "JAN"; $mesc[2] = "FEV"; $mesc[3] = "MAR"; $mesc[4] = "ABR"; $mesc[5] = "MAI"; $mesc[6] = "JUN"; $mesc[7] = "JUL"; $mesc[8] = "AGO"; $mesc[9] = "SET"; $mesc[10] = "OUT"; $mesc[11] = "NOV"; $mesc[12] = "DEZ"; if($formato == 1) return $diaSemana[$dia].", ".$diaN." de ".$mesAno[$mes]." de ".$ano." às ".$hora; elseif($formato == 2) return $diaN."/".$mes0x."/".$ano." - ".$hora; elseif($formato == 3) return "São Paulo, ".$diaN." de ".$mesAno[$mes]." de ".$ano; elseif($formato == 4) return $diaN."/".$mes0x."/".$ano; elseif($formato == 5) return $diaSemana[$dia].", ".$diaN." de ".$mesAno[$mes]." de ".$ano; elseif($formato == 6) return $ano.$mes0x; elseif($formato == 7) return $mesc[$mes]."-".$ano; else return "".$saudacao."!  ".$diaSemana[$dia].", ".$diaN." de ".$mesAno[$mes]." de ".$ano; } function getTimestamp() { $hora = date("H", time()); $min = date("i", time()); $seg = date("s", time()); $dia = date("d", time()); $mes = date("m", time()); $ano = date("Y", time()); return $ano."-".$mes."-".$dia." ".$hora.":".$min.":".$seg; } function dataExtenso($data) { list($dia, $mes, $ano) = split("-", $data); if(substr($mes, 0, 1) == "0") $mes = substr($mes, 1, 1); $mesAno = array(); $mesAno[1] = "Janeiro"; $mesAno[2] = "Fevereiro"; $mesAno[3] = "Março"; $mesAno[4] = "Abril"; $mesAno[5] = "Maio"; $mesAno[6] = "Junho"; $mesAno[7] = "Julho"; $mesAno[8] = "Agosto"; $mesAno[9] = "Setembro"; $mesAno[10] = "Outubro"; $mesAno[11] = "Novembro"; $mesAno[12] = "Dezembro"; return $dia." de ".$mesAno[$mes]." de ".$ano; } function gethoje() { $diaN = date("d"); $mes = date("n"); $ano = date("Y"); return $diaN."-".$mes."-".$ano; } function monta_infowindow($mapa = null) { GLOBAL $listProjeto, $listLinear, $VAR_sin; //Verifica se o mapa é usado por projetos e quais $string_projetosutilizam = ""; if(count($mapa->projetosutilizam)) { if(count($mapa->projetosutilizam) > 1) $string_projetosutilizam = "

corbg.";\">corbg."; color: ".$VAR_sin['PRJ']->cortxt.";\">".$VAR_sin['PRJ']->letra." ".$VAR_sin['PRJ']->sinp.":

"; foreach($mapa->projetosutilizam as $k => $v) { $p = $listProjeto[$v]; if(count($mapa->projetosutilizam) > 1) $string_projetosutilizam = $string_projetosutilizam . "

".$p->nome; if($p->info) $string_projetosutilizam = $string_projetosutilizam . " id_concentrador."&id_projeto=".$p->id_projeto."\" class=\"modal-dinamico cursor-clique\" data-toggle=\"modal\" data-dynamic=\"true\">Info"; $string_projetosutilizam = $string_projetosutilizam . " id_projeto."\" title=\"Progresso\"> "; if(count($mapa->projetosutilizam) > 1) $string_projetosutilizam = $string_projetosutilizam . "

"; } } //Verifica se o mapa é usado por projetos lineares e quais $string_linearesutilizam = ""; if(count($mapa->linearesutilizam)) { if(count($mapa->linearesutilizam) > 1) $string_linearesutilizam = "

corbg.";\">corbg."; color: ".$VAR_sin['LIN']->cortxt.";\">".$VAR_sin['LIN']->letra." ".$VAR_sin['LIN']->sinp.":

"; foreach($mapa->linearesutilizam as $k => $v) { $p = $listLinear[$v]; if(count($mapa->linearesutilizam) > 1) $string_linearesutilizam = $string_linearesutilizam . "

".$p->nome; if($p->info) $string_linearesutilizam = $string_linearesutilizam . " id_concentrador."&id_linear=".$p->id_linear."\" class=\"modal-dinamico cursor-clique\" data-toggle=\"modal\" data-dynamic=\"true\">Info"; $string_linearesutilizam = $string_linearesutilizam . " id_linear."\" title=\"Progresso\"> "; if(count($mapa->linearesutilizam)) $string_linearesutilizam = $string_linearesutilizam . "

"; } } $linha_divisora = ($string_projetosutilizam || $string_linearesutilizam) ? "
" : ""; $conteudo = <<

$mapa->nome

$linha_divisora
$string_projetosutilizam $string_linearesutilizam
CONTEUDO; return($conteudo); } function monta_infowindow_dashboard($mapa = null) { GLOBAL $listProjeto, $listContratoPorProjeto, $VAR_sin; //Verifica se o mapa é usado por projetos e quais $string_projetosutilizam = ""; if(count($mapa->projetosutilizam)) { //Em 9/10 Caio pediu pra tirar o indicador de P - PROJETO do mapa. $string_projetosutilizam = ""; //if(count($mapa->projetosutilizam) > 1) $string_projetosutilizam = "

corbg.";\">corbg."; color: ".$VAR_sin['PRJ']->cortxt.";\">".$VAR_sin['PRJ']->letra." ".$VAR_sin['PRJ']->sinp.":

"; foreach($mapa->projetosutilizam as $k => $v) { $p = $listProjeto[$v]; if(count($mapa->projetosutilizam) > 1) $string_projetosutilizam = $string_projetosutilizam . "

".$p->nome; if($p->info && !$listContratoPorProjeto[$v]) $string_projetosutilizam = $string_projetosutilizam . " id_concentrador."&id_projeto=".$p->id_projeto."\" class=\"modal-dinamico cursor-clique\" data-toggle=\"modal\" data-dynamic=\"true\">Info"; //elseif($listContratoPorProjeto[$v]) $string_projetosutilizam = $string_projetosutilizam . " Info"; elseif($listContratoPorProjeto[$v]) $string_projetosutilizam = $string_projetosutilizam . " id_concentrador."&id_contrato=".$listContratoPorProjeto[$v]."\" class=\"modal-dinamico cursor-clique\" data-toggle=\"modal\" data-dynamic=\"true\">Info"; $string_projetosutilizam = $string_projetosutilizam . " id_projeto."\" title=\"Progresso\"> "; if(count($mapa->projetosutilizam) > 1) $string_projetosutilizam = $string_projetosutilizam . "

"; } } $conteudo = <<

$mapa->nome

$linha_divisora
$string_projetosutilizam
CONTEUDO; return($conteudo); } function check_email_address($email) { // First, we check that there's one @ symbol, and that the lengths are right if (!ereg("[^@]{1,64}@[^@]{1,255}", $email)) { // Email invalid because wrong number of characters in one section, or wrong number of @ symbols. return false; } // Split it into sections to make life easier $email_array = explode("@", $email); $local_array = explode(".", $email_array[0]); for ($i = 0; $i < sizeof($local_array); $i++) { if (!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$", $local_array[$i])) { return false; } } if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) { // Check if domain is IP. If not, it should be valid domain name $domain_array = explode(".", $email_array[1]); if (sizeof($domain_array) < 2) { return false; // Not enough parts to domain } for ($i = 0; $i < sizeof($domain_array); $i++) { if (!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$", $domain_array[$i])) { return false; } } } return true; } function isAlphaNumeric($checkThisString){ $result = true; $i=0; while($i47 && $charNum < 58) || ($charNum>64 && $charNum < 91) || ($charNum>96 && $charNum < 123)) ) $result = false; $i++; } return $result; } //PARA USAR - SKEMA DO NEY function base64_unserialize($str){ $ary = unserialize(stripslashes($str)); if (is_array($ary)){ foreach ($ary as $k => $v){ if (is_array(unserialize($v))){ $ritorno[$k]=base64_unserialize($v); }else{ $ritorno[$k]=base64_decode($v); } } }else{ return false; } return $ritorno; } function base64_serialize($ary){ if (is_array($ary)){ foreach ($ary as $k => $v){ if (is_array($v)){ $ritorno[$k]=base64_serialize($v); }else{ $ritorno[$k]=base64_encode($v); } } }else{ return false; } return serialize ($ritorno); } function Encripta($string) { // 64 Chars. $base="u1Astx8CxggMn6OpUt7WyjF4G2cZvb91klthf4RhSiRIIwH3o05mDrEaJdT0B/+0"; //a grande diferenca esta aqui, definimos uma string de 64 caracteres, que pode ser personalizada da maneira que quiserem, desde que sejam sempre 64 caracteres $b64_str=base64_encode($string); $i=0; $j=0; while ($i < strlen($b64_str)) { if ($i==64) break; $k[$i]=$b64_str[$i].$base[$i]; $encoded.=$k[$i]; $i++; } return $encoded; } //o que a funcao fez de especial, foi encriptar em base64 e depois para cada caracter dessa encriptaçao adicion um caracter da nossa cadeia. aumentando o seu tamanho, e a sua dificuldade de perceber qual a encriptaçao feita. (visto que é nossa, é dificil alguem perceber o que fizemos com a string :) function Decripta($string) { $i=0; $j=0; while ($i < strlen($string)) { $k[$i]=$string[$j]; $decoded.=$k[$i]; $i++; $j=$j+2; } $decoded=base64_decode($decoded); return $decoded; } //para desencriptar basta remover os caracteres que acrescentamos à string :) //Simples ahh?? claro que é uma encriptaçao simples, mas que serv de exemplo a inumeras maneiras que podemos fazer... nao precisamos de encriptar os caracteres todos, podemos juntar 2 a 2, 4 a 4, 2 em 2, 4 em 4, e aumentar assim a nossa segurança da string. ?>