PHP Classes

File: lib/functions.inc

Recommend this page to a friend!
  Classes of José Filipe Lopes Santos   Ticket Calendar   lib/functions.inc   Download  
File: lib/functions.inc
Role: Auxiliary script
Content type: text/plain
Description: Misc Functions
Class: Ticket Calendar
View the dates of scheduled tickets on a calendar
Author: By
Last change:
Date: 10 years ago
Size: 16,195 bytes
 

Contents

Class file image Download
<?php /** * Diversificadas funções. * * @author José Filipe Lopes Santos <jfilipe@med.up.pt> * @since 27-04-2010 * @version 2.0 - data da últ. actualização: 05-01-2010 * @package tts * @subpackage libraries */ /** * Obtem os parametros para o to_date(). * * Esta função obtem a data e formato usado na função sql to_date() * * @return array(mensagem de erro,data,formato) * @param array $parts_date array com as partes da data * @param string $predefined_format formato das datas predefinido * @desc Obtem os parametros para o to_date(). */ function getTo_dateParams($parts_date,$predefined_format){ // array com as partes dos formatos $parts_formats = array("DD","MM","YYYY","HH24","MI","SS"); // formatos das datas válidos $valid_formats = array("YYYY","YYYY-MM","MM-YYYY","DD-MM-YYYY","YYYY-MM-DD", "DD-MM-YYYY-HH24","DD-MM-YYYY-HH24-MI","DD-MM-YYYY-HH24-MI-SS"); $date = ""; // data $format = ""; // formato $error_msg = ""; // mensagem em caso de erro // apurar a data e o formato for ($i=0;$i<sizeof($parts_date);$i++){ if ($parts_date[$i] != ""){ // só junta as partes preenchidas $date .= "-".$parts_date[$i]; $format .= "-".$parts_formats[$i]; } } // tirar o 1º '-' if ($date != "") $date = substr($date,1,strlen($date)); if ($format != "") $format = substr($format,1,strlen($format)); // se não tiver data => retorna a data e fornato vazios if ($date == "" || strcmp($date,"--") == 0 || strcmp($date,"0000-00-00") == 0) // não tem data return array($error_msg,"",""); // vericar se o formato da data é válido if (!in_array($format,$valid_formats) && $format != ""){ // formato inválido $error_msg = "O formato ".$format." da data ".$date." é incorrecto !"; return array($error_msg,$date,$format); } else { // se a data e formato estão vazios, o formato fica com o predefinido if ($date == "" && $format == "") $format = $predefined_format; return array($error_msg,$date,$format); } } /** * Obtem os parametros para o str_to_date() em mysql. * * Esta função obtem a data e formato usado na função sql str_to_date() do mysql. * * @return array(mensagem de erro,data,formato) * @param array $parts_date array com as partes da data * @param string $predefined_format formato das datas predefinido */ function getStrToDateParams($parts_date,$predefined_format){ // array com as partes dos formatos $parts_formats = array("%d","%m","%Y","%H","%i","%s"); // formatos das datas válidos $valid_formats = array("%Y","%Y-%m","%m-%Y","%d-%m-%Y","%Y-%m-%d","%d-%m-%Y-%H","%d-%m-%Y-%H-%i","%d-%m-%Y-%H-%i-%s"); $date = ""; // data $format = ""; // formato $error_msg = ""; // mensagem em caso de erro // apurar a data e o formato for ($i=0;$i<sizeof($parts_date);$i++){ if ($parts_date[$i] != "" && !ereg("(^00)",$parts_date[$i])){ // só junta as partes preenchidas $date .= "-".$parts_date[$i]; $format .= "-".$parts_formats[$i]; } } // tirar o 1º '-' if ($date != "") $date = substr($date,1,strlen($date)); if ($format != "") $format = substr($format,1,strlen($format)); // se não tiver data => retorna a data e fornato vazios if ($date == "" || strcmp($date,"--") == 0 || strcmp($date,"0000-00-00") == 0) // não tem data return array($error_msg,"",""); // vericar se o formato da data é válido if (!in_array($format,$valid_formats) && $format != ""){ // formato inválido $error_msg = "O formato ".$format." da data ".$date." é incorrecto !"; return array($error_msg,$date,$format); } else { // se a data e formato estão vazios, o formato fica com o predefinido if ($date == "" && $format == "") $format = $predefined_format; return array($error_msg,$date,$format); } } /** * Verifica se a data é válida. * * Esta função verifica se a data é válida. * * @param string $date data em causa * @param string $delim delimitador * @return true - se a data é válida ou se existem campos vazios, false - caso contrário */ function isValidDate($date,$delim="-"){ $date_parts = array(); $valid = false; // obter as partes da data $date_parts = explode($delim,$date); // verificar se todas as partes estão preenchidas foreach ($date_parts as $date_part){ // para cada parte da data if ($date_part == "") // parte vazia return true; } // se não tiver 3 partes (dia, mês e ano), retorna true if (count($date_parts) < 3) return true; // verificar se a data é válida $valid = checkdate($date_parts[1],$date_parts[0],$date_parts[2]); return $valid; } /** * Obtem o timestamp dessa data. * * Esta função obtem o timestamp de uma dada data. * * @return integer timestamp da respectiva data * @param string $date data em causa * @param string[optional] $delim delimitador */ function getTimestamp($date,$delim="-"){ $date_parts = array(); // canalizar as datas para as variáveis, consoante o nº de partes da data $date_parts = explode($delim,$date); // verificar se existem partes da data vazias for ($i=0;$i<6;$i++) // inicializar com zero if (empty($date_parts[$i])) $date_parts[$i]=0; return mktime($date_parts[3],$date_parts[4],$date_parts[5],$date_parts[1],$date_parts[0],$date_parts[2]); } /** * Normalizar campos e strings. * * Esta função normaliza campos e strings com ou sem acentos, isto é, * converte caracteres especiais na string em caracteres normalizados e, * converte a string resultante para minúsculas * * @return string condição de pesquisa normalizada * @param string $campo campo a normalizar ou não * @param string $string string a normalizar * @param bool $esta_normalizado booleano que indica se o campo já está normalizado * @param string $tipo_comparacao tipo de comparação * @param bool[optional] $exact_phrase booleano que indica se quer pesquisar pela frase exacta ou não * @desc Normalizar campos e strings. */ function getWhereNormalized($campo,$string,$esta_normalizado,$tipo_comparacao,$exact_phrase = true){ $caracteres_especiais = "áéíõùâêîòúãçóûÀÈÌÁÉÕÙÂÊÎÒÚÃÇÓÛ"; // caracteres com acentos $caracteres_norm = "aeiouaeiouacouAEIAEOUAEIOUACOU"; // resp. normalização if ($esta_normalizado) // o campo já está normalizado $campo_normalizado = $campo; else // normaliza o campo $campo_normalizado = "upper(translate(".$campo.",'".$caracteres_especiais."','".$caracteres_norm."'))"; // detectar o prefixo do like $pref_like = ""; if (strncasecmp($string,"+",1) == 0 && strlen($string) > 1) $pref_like = ""; if (strncasecmp($string,"-",1) == 0 && strlen($string) > 1) $pref_like = "not"; else $pref_like = ""; if ((strncasecmp($string,"+",1) == 0 || strncasecmp($string,"-",1) == 0) && strlen($string) > 1) // tem caracteres de comparação no início da string $string = substr($string,1,strlen($string)); // retirar esses caracteres // normalizar a string $string_normalizada = normaliza_string($string); // se não se quiser pesquisar pela frase, tal e qual como está (exacta), // pesquisa-se pelos registos que contenham todas essas palavras pela mesma ordem if (!$exact_phrase){ // se fôr do gênero "a b" if (eregi("[a-z0-9]+[[:space:]][a-z0-9]+",$string_normalizada)) // substitui espaços por '%', para pesquisar tb nos intervalos (ex: "a%b%c") $string_normalizada = ereg_replace("[[:space:]]","%",$string_normalizada); } // retornar a condição de pesquisa, consoante o tipo if (strcmp($tipo_comparacao,"%like%") == 0) // tipo de comparação 'like' por qualquer string return $campo_normalizado." ".$pref_like." like '%".$string_normalizada."%'"; elseif (strcmp($tipo_comparacao,"like%") == 0) // tipo de comparação 'like' só no início da string return $campo_normalizado." ".$pref_like." like '".$string_normalizada."%'"; elseif (strcmp($tipo_comparacao,"=") == 0) // tipe de comparação '=' return $campo_normalizado." = '".$string_normalizada."'"; } /** * Normaliza strings. * * Esta função normaliza strings * * @return string $string_norm string normalizada * @param string $string string a normalizar * @param bool $trim=true booleano que indica se é para retirar espaços em branco * @desc Normaliza strings. */ function normaliza_string($string,$trim = true){ $string_norm = ""; $caracteres_especiais = "áéíõùàâêîòúãçóûÀÈÌÁÉÕÙÂÊÎÒÚÃÇÓÛ"; // caracteres com acentos $caracteres_norm = "aeiouaaeiouacouAEIAEOUAEIOUACOU"; // resp. normalização // tirar espaços em branco, se fôr caso disso if ($trim) $string = trim($string); // substituir os caracteres acentuados, pelos mesmos sem acento $string_norm = strtr($string,$caracteres_especiais,$caracteres_norm); // substituir qualquer outro caracter que não seja letras e nº's por espaços if (!eregi("^([a-z0-9]+)$",$string_norm)) // existem caracteres especiais $string_norm = ereg_replace("[^a-zA-Z0-9]"," ",$string_norm); // converter para maisculas $string_norm = strtoupper($string_norm); return $string_norm; } /** * Substitui a última "," da mensagem por "e", excepto a do fim da mensagem. * * Esta função substitui a última "," da mensagem por "e", excepto a do fim da mensagem, * para que essa mensagem faça sentido e, esteja ortográficamente correcta * * @param string $msg mensagem em caso de erro, apurada nas condições de pesquisa * @param integer $nresultados nº de resultados obtidos * @return string $frase frase completa dado o nº de resultados * @desc Substitui a última "," da mensagem por "e", excepto a do fim da mensagem */ function MensagemCorrecta($msg,$nresultados){ $msg = substr($msg,0,strrpos($msg,",")); // tirar últ. vírgula $msg1 = substr($msg,0,strrpos($msg,",")); // string até à últ. vírgula $msg2 = substr($msg,strrpos($msg,","),strlen($msg)); // o resto da string $msg2 = ereg_replace(","," e",$msg2); // sustituir a últ vírgula por "e" $msg_final = $msg1.$msg2; // juntar as strings // obter a frase correcta consoante o nº de resultados if ($nresultados == 0){ // não existem resultados if ($msg_final != "") $frase = "Não foram encontrados resultados com ".$msg_final; else $frase = "Não foram encontrados resultados"; } else if ($nresultados > 0) // existem resultados $frase = "Foram encontrados $nresultados resultados com ".$msg_final; else if ($nresultados == -1){ // mensagem de erro: campos não numéricos if (strpos($msg_final," e ") != "") // + que 1 campo $frase = $msg_final." têm que ser numéricos"; else // só um campo $frase = $msg_final." tem que ser numérico"; $frase = strtoupper(substr($frase,0,1)).substr($frase,1,strlen($frase)); } return $frase; } /** * Obtem o nome do campo normalizado. * * Esta função pega num campo de um select e, obtem o campo correspondente em minúsculas * sem as funções sql to_char() e to_date(). * * @return string $field campo normalizado * @param string $field campo a normalizar */ function getNormalizedFieldName($field){ // é campo to_char(field,'format') if (strpos($field,",") != ""){ // tirar to_char(, e só fica field,'format' $field = substr($field,strpos($field,"(")+1,strlen($field)); // tirar ,'format' a field,'format' e temos o campo pretendido $field = substr($field,0,strpos($field,",")); } // converter para minúsculas $field = strtolower($field); return $field; } /** * Destaca as palavras encontradas. * * Esta função, do texto indicado, destaca as palavras * que coincidem com as palavras de pesquisa. * * @param string $text texto em causa * @param string $str_search_words string com as palavras de pesquisa * @param string $tag_open tag de início da palavra a destacar * @param string $tag_close tag de fim da palavra a destacar * @return string texto com as palavras destacadas */ function HighlightText($text,$str_search_words,$tag_open,$tag_close){ $highlight_text = ""; // se não estiverem indicadas palavras de pesquisa, retorna o texto como estava if (trim($str_search_words) == "") return $text; // obter as palavras de pesquisa $search_words = explode(" ",trim($str_search_words)); // texto normalizado $text_norm = normaliza_string($text); foreach ($search_words as $word){ // para cada palavra de pesquisa // obter a palavra de pesquisa normalizada $word_norm = normaliza_string($word); if (ereg($word_norm,$text_norm)){ // essa palavra ocorre no texto // se essa palavra não ocorre no texto, salta à frente if (!ereg($word_norm,normaliza_string($text,false))) continue; // determinar as posiçóes de início e de fim da palavra a destacar $pos_ini = strpos(normaliza_string($text,false),$word_norm); $len = strlen($word_norm); $pos_fim = $pos_ini + $len - 1; // se tiver um caracter especial, avança uma posição à frente if (normaliza_string($text[$pos_ini]) == " "){ $pos_ini++; $pos_fim++; } // determinar as partes do texto: texto antes, palavra destacada, texto depois $text_before = substr($text,0,$pos_ini); $word_text = substr($text,$pos_ini,$len); $text = substr($text,$pos_fim+1,strlen($text)); // refazer o texto com a palavra destacada $highlight_text .= $text_before.$tag_open.$word_text.$tag_close; } } if ($text != "") // ainda não terminou o texto $highlight_text .= $text; // junta o resto do texto return $highlight_text; } /** * Obtem uma string a partir dos dados. * * Esta função, obtem uma string a partir dos dados. * * @param array $data dados em causa * @param array $fields array com os campos pretendidos e respectivos separadores * @param string[optional] $global_sep separador global * @return string $str string resultante */ function getDataString($data,$fields,$global_sep = ";"){ $str = ""; foreach ($data as $index=>$info){ // para cada item // juntar o separador global $str .= $global_sep; $n = 0; foreach ($fields as $field=>$sep){ // para cada campo if (!empty($info[$field])){ // existem dados para esse campo // juntar esse dado $str .= $info[$field]; if ($n < sizeof($fields) -1) // não é o último campo // juntar o separador desse campo $str .= $sep; } $n++; } } // retirar o 1º separador global if ($str != "") $str = substr($str,1,strlen($str)); return $str; } /** * Retira os espaços em branco em excesso. * * Esta função retira os espaços em branco em excesso, * cortando todos os espaços em branco no início e no fim da string, * deixando apenas um espaço entre as palavras. * * @return string string sem espaços em branco em excesso * @param string $string string possívelmente com espaços em branco em excesso */ function StripWhiteSpaces($string){ $parts2 = array(); $nparts2 = 0; $parts = explode(" ",trim($string)); foreach ($parts as $part){ // para cada parte if (trim($part) != "") // só se aproveitam as partes não vazias $parts2[$nparts2++] = $part; } return implode(" ",$parts2); } /** * Limita a string. * * Esta função limita uma dada string, dado o nº máximo de caracteres da string. * * @param string $string string em causa * @param integer $max nº máximo de caracteres * @return string $string_limited string limitada */ function LimitString($string,$max){ $string_limited = ""; $more = " ..."; // string que indica que o nome é demasiado grande $limit = $max - strlen($more); // tamanho a partir do qual corta a string if (strlen($string) <= $max) // não ultrapassa o limite $string_limited = $string; // fica igual else // cortar a string $string_limited = substr($string,0,$limit).$more; return $string_limited; } ?>