Location: PHPKode > projects > MUSPA > include/util.php
<?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;
}
Return current item: MUSPA