<?php
/*******************************************************************************
* MUSPA
*
* Copyright (C) 2004 MUSPA Project
*
* Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
* sob os termos da Licença Pública Geral GNU conforme publicada pela Free
* Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
* qualquer versão posterior.
*
* Este programa é distribuído na expectativa de que seja útil, porém, SEM
* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU
* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral do
* GNU para mais detalhes.
*
* Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto com
* este programa; se não, escreva para a Free Software Foundation, Inc., no
* endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
*
*******************************************************************************/
define("FRM_OBRIGATORIO", 1);
define("FRM_OPCIONAL", 0);
define("FRM_DATA", 2);
/**
* Substituto para a função srand, para que seja impossivel chamar srand()
* duas vezes e cagar tudo...
* @return nada
*/
function Mysrand()
{
static $called = false;
if (!$called)
mt_srand((double) microtime() * 1000000);
else
$called = true;
}
/**
* Retorna uma string com IP do nobre cidadão na forma de um
* número decimal único.
* @return IP do cliente.
*/
function GetIp()
{
// Tenta pegar o IP do cidaão de todas as formas possiveis...
$ip = "";
if (getenv('HTTP_CLIENT_IP') && getenv('HTTP_CLIENT_IP') != "127.0.0.1")
$ip = getenv('HTTP_CLIENT_IP');
elseif (getenv('HTTP_X_FORWARDED_FOR') && getenv('HTTP_X_FORWARDED_FOR')!="127.0.0.1")
$ip = getenv('HTTP_X_FORWARDED_FOR');
else
$ip = getenv('REMOTE_ADDR');
// Como a bosta do PHP não tem unsigned int, nem long, temos que deixar o
// numero do IP como uma string...
return sprintf("%u", ip2long($ip));
}
/**
* Dump Vars!
*/
function DumpVar($var, $xray = false)
{
echo "<pre>";
if ($xray)
var_dump($var);
else
print_r($var);
echo "</pre>";
}
/**
* Transforma um tempo em segundos em uma linda frase.
*/
function TimeToString( $time )
{
$time = (int) $time;
$dias = (int)($time / 86400); // dias
$aux = $time % 86400; // o resto...
$horas = (int)($aux/3600); // horas
$aux = $time % 3600; // o resto...
$minutos = (int)($aux/60); // minutos
$segundos = $time % 60;
$str = array();
if ($dias)
$str[] = "$dias dia".($dias > 1 ? 's' : '');
if ($horas)
$str[] = "$horas hora".($horas > 1 ? 's' : '');
if ($minutos && (!$dias || !$horas))
$str[] = "$minutos minuto".($minutos > 1 ? 's' : '');
if ((!$minutos && !$horas && !$dias))
$str[] = "$segundos segundo".($segundos > 1 ? 's' : '');
return implode(" e ", $str);
}
/**
* Checa se os dados do formulario estão seguindo uma regra
*
* Formato da Array $rules
*
* array(
* array( nome do campo no form, nome do campo, FRM_* const, regexp, regexp error msg ),
* ...
* )
*
* ex:
* array(
* array("nome", "nome do cara", FRM_OBRIGATORIO, "/[A-Z]+", "só pode ter chars de A-Z")
* );
*
*/
function CheckForm(&$aData, &$rules)
{
$error = array();
$numeros = 0;
foreach($rules as $rule)
{
if (!isset($aData[$rule[0]]))
$aData[$rule[0]] = false;
if (!$aData[$rule[0]])
{
if ($rule[2] & FRM_OBRIGATORIO)
$error['ERROR'][] = $rule[1]." é obrigatório.";
else
continue;
}
elseif ($rule[2] & FRM_DATA) // é uma data ?
{
$hastime = true;
if (!preg_match("/^[0-9]{2}\/[0-9]{2}\/[0-9]{4} [0-9]{2}:[0-9]{2}$/",
$aData[$rule[0]]))
{
if (!preg_match("/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/", $aData[$rule[0]]))
{
$error['ERROR'][] = $rule[1]." precisa estar no formato dd/mm/aaaa hh:mm.";
$aData[$rule[0].'err'] = ERRORSTYLE;
continue;
}
else
$hastime = false;
}
// Parse data com hora
if ($hastime)
{
list($date, $time) = explode(' ', $aData[$rule[0]], 2 );
list($hora, $minuto) = explode(':', $time);
$hora = (int) $hora;
$minuto = (int) $minuto;
if (($hora > 23) || ($hora < 0) || ($minuto > 59) || ($minuto < 0))
{
$error['ERROR'][] = $rule[1]." percisa ter uma hora válida.";
$aData[$rule[0].'err'] = ERRORSTYLE;
continue;
}
$time = ' '.$time;
}
else
$date = $aData[$rule[0]];
$aDate = explode('/', $date, 3);
if (!CheckDate($aDate[1], $aDate[0], $aDate[2]))
$error['ERROR'][] = $rule[1]." precisa ter uma data válida.";
else
{
$aData['sql_'.$rule[0]] = $aDate[2].'-'.$aDate[1]
.'-'.$aDate[0].$time;
}
}
elseif (isset($rule[3])) // tem regexp?
{
if (!preg_match($rule[3], $aData[$rule[0]]))
{
if (isset($rule[4]))
$error['ERROR'][] = $rule[1]." ".$rule[4];
else
$error['ERROR'][] = $rule[1]." esta em um formato inválido.";
}
}
// Aplica o estilo do erro
if (isset($error['ERROR']))
{
if (count($error['ERROR']) > $numeros)
$aData[$rule[0].'err'] = ERRORSTYLE;
$numeros = count($error['ERROR']);
}
}
if (isset($error['ERROR']))
return $error;
else
return true;
}
/**
* Cria um nome de arquivo único no diretório indicado
* @param Diretório
* @returns $path.$nome_do_arquivo
*/
function UniqFileName($path)
{
Mysrand();
if ($path[strlen($path)-1] != '/')
$path .= '/';
do
{
$name = md5(uniqid(mt_rand()));
}
while(file_exists($path.'/'.$name));
return $path.$name;
}