getCorePath () .'class'. DIRECTORY_SEPARATOR . $class . '.php';
if (!file_exists ($file))
return FALSE;
require_once $file;
}
spl_autoload_register ('autoload');
function __ ()
{
return Localization::singleton ()->translate (func_get_args ());
}
function month ($mes = NULL)
{
if ($mes == NULL || $mes > 12 || $mes < 1)
$mes = date ('m');
$meses = array ( 1 => 'Janeiro',
2 => 'Fevereiro',
3 => 'Março',
4 => 'Abril',
5 => 'Maio',
6 => 'Junho',
7 => 'Julho',
8 => 'Agosto',
9 => 'Setembro',
10 => 'Outubro',
11 => 'Novembro',
12 => 'Dezembro');
return $meses [(int) $mes];
}
function fileName ($str)
{
$str = substr ($str, 0, 255);
$str = strtolower ($str);
$trade = array ('á'=>'a','à'=>'a','ã'=>'a',
'ä'=>'a','â'=>'a',
'Á'=>'A','À'=>'A','Ã'=>'A',
'Ä'=>'A','Â'=>'A',
'é'=>'e','è'=>'e',
'ë'=>'e','ê'=>'e',
'É'=>'E','È'=>'E',
'Ë'=>'E','Ê'=>'E',
'í'=>'i','ì'=>'i',
'ï'=>'i','î'=>'i',
'Í'=>'I','Ì'=>'I',
'Ï'=>'I','Î'=>'I',
'ó'=>'o','ò'=>'o','õ'=>'o',
'ö'=>'o','ô'=>'o',
'Ó'=>'O','Ò'=>'O','Õ'=>'O',
'Ö'=>'O','Ô'=>'O',
'ú'=>'u','ù'=>'u',
'ü'=>'u','û'=>'u',
'Ú'=>'U','Ù'=>'U',
'Ü'=>'U','Û'=>'U',
'$'=>'_','@'=>'_','!'=>'_',
'#'=>'_','%'=>'_','"'=>'',
'^'=>'_','&'=>'_','*'=>'_',
'('=>'_',')'=>'_',"'"=>'',
'-'=>'_','+'=>'_','='=>'_',
'\\'=>'_','|'=>'_',
'`'=>'_','~'=>'_','/'=>'_',
'\"'=>'_','\''=>'_',
'<'=>'_','>'=>'_','?'=>'_',
','=>'_','ç'=>'c','Ç'=>'C',' '=>'_');
$str = strtr ($str, $trade);
return $str;
}
function removeAccents ($str)
{
$str = htmlentities (html_entity_decode ($str, ENT_NOQUOTES, 'UTF-8'), ENT_NOQUOTES, 'UTF-8');
$str = preg_replace ('/&([a-zA-Z])(uml|acute|grave|circ|tilde|cedil);/', '$1', $str);
return html_entity_decode ($str, ENT_NOQUOTES, 'UTF-8');
}
function resize ($file, $type, $width = 0, $height = 0, $force = FALSE, $bw = FALSE)
{
$buffer = FALSE;
switch ($type)
{
case 'image/jpeg':
case 'image/pjpeg':
$buffer = imagecreatefromjpeg ($file);
break;
case 'image/gif':
$buffer = imagecreatefromgif ($file);
break;
case 'image/png':
$buffer = imagecreatefrompng ($file);
imagealphablending ($buffer, TRUE);
imagesavealpha ($buffer, TRUE);
break;
}
if (!$buffer)
throw new Exception ('MimeType do arquivo inválido ou a imagem não existe!');
if ($bw)
@imagefilter ($buffer, IMG_FILTER_GRAYSCALE);
$vetor = getimagesize ($file);
$atualWidth = $vetor [0];
$atualHeight = $vetor [1];
if(!$force)
{
if (!$width || !$height)
{
if (!$width && !$height)
{
$width = $atualWidth;
$height = $atualHeight;
}
elseif ($width && !$height)
$height = ($atualHeight * $width) / $atualWidth;
else
$width = ($atualWidth * $height) / $atualHeight;
}
if ($atualWidth < $atualHeight && $width > $height)
{
$aux = $width;
$width = $height;
$height = $aux;
}
if ((int) $atualWidth < (int) $width)
{
$width = $atualWidth;
$height = ($atualHeight * $width) / $atualWidth;
}
}
if ($type != 'image/gif')
{
$thumb = imagecreatetruecolor ($width, $height);
$color = imagecolorallocatealpha ($thumb, 255, 255, 255, 75);
imagefill ($thumb, 0, 0, $color);
}
else
$thumb = imagecreate ($width, $height);
$ok = imagecopyresized ($thumb, $buffer, 0, 0, 0, 0, $width, $height, $atualWidth, $atualHeight);
if (!$ok)
throw new Exception ('Impossível redimensionar a imagem!');
header ('Content-Type: '. $type);
switch ($type)
{
case 'image/jpeg':
case 'image/pjpeg':
imagejpeg ($thumb, NULL, 100);
break;
case 'image/gif':
imagegif ($thumb);
break;
case 'image/png':
imagepng ($thumb);
break;
}
imagedestroy ($thumb);
exit ();
}
function getBreadPath ($section, $withLink = TRUE, $setMenu = TRUE)
{
if (!$section)
return '';
$business = Business::singleton ();
$father = $business->getSection ($section->getFather ());
if ($setMenu)
{
global $menuPosition;
$menuPosition [] = $section->getName ();
}
return getBreadPath ($father, $withLink) . ($withLink && !$section->isFake () ? ''. $section->getLabel () .'' : $section->getLabel ()) .' » ';
}
function keyboard ($link = NULL, $color = '999999')
{
static $counter = 0;
if (!$link || empty ($link) || trim ($link) == '')
$link = $_SERVER['PHP_SELF'] .'?'. $_SERVER['QUERY_STRING'];
?>
';
$children = $business->getChildren ($father);
if (!sizeof ($children))
return FALSE;
$user = User::singleton ();
$array = array ();
$output = array ();
ob_start ();
if ($previous === FALSE)
echo '';
else
{
?>
getSection ($father)->isFake () && !$business->getSection ($father)->isHidden ())
{
$icon = $indentation;
if ($business->getSection ($father)->getIcon () != '')
$icon = '
';
if ($user->accessSection ($business->getSection ($father)->getName ()))
$output [] = ''. $icon .'';
elseif (Instance::singleton ()->showAllSections ())
$output [] = ''. $icon .'';
}
foreach ($children as $trash => $section)
{
if (array_key_exists ($father, $menuHeight))
$menuHeight [$father]++;
else
$menuHeight [$father] = 1;
if ($section->isHidden ())
continue;
$icon = $indentation;
if ($section->getIcon () != '')
$icon = '
';
$next = makeMenu ($menuHeight, $father, $section->getName (), $section->getLabel ());
if (is_array ($next))
{
$array = array_merge ($array, $next);
$output [] = ''. $icon .'';
}
elseif ($user->accessSection ($section->getName ()))
$output [] = ''. $icon .'';
elseif (Instance::singleton ()->showAllSections ())
$output [] = ''. $icon .'';
}
if (!sizeof ($output))
return FALSE;
ob_start ();
?>
0)
{
if ($verbose) echo "Copiando...
'$srcfile' » '$dstfile' ";
if (copy($srcfile, $dstfile))
{
touch($dstfile, filemtime($srcfile)); $num++;
if ($verbose) echo '
';
}
else
{
if ($verbose) echo '
';
exit ();
}
}
}
elseif(is_dir($srcfile))
$num += copyDir ($srcfile, $dstfile, $verbose);
}
}
closedir ($curdir);
}
return $num;
}
function removeDir ($path)
{
if (is_dir ($path))
{
foreach (glob ($path .'/*') as $file)
if (is_file ($file))
unlink ($file);
elseif (is_dir ($file))
removeDir ($file);
rmdir ($path);
}
}
function dirSize ($dir)
{
if (!is_dir($dir))
return FALSE;
$dh = opendir($dir);
$size = 0;
while (($file = readdir($dh)) !== false)
if ($file != '.' && $file != '..')
{
$path = $dir .'/'. $file;
if (is_dir ($path))
$size += dirSize ($path);
elseif (is_file($path))
$size += filesize ($path);
}
closedir($dh);
return $size;
}
function randomHash ($size = 32)
{
$hash = '';
while (strlen ($hash) < $size)
$hash .= substr ('0123456789abcdef', mt_rand (0,15), 1);
return $hash;
}
function logPhpError ($errno, $errstr, $errfile, $errline)
{
$errorType = array (E_ERROR => 'ERROR',
E_WARNING => 'WARNING',
E_PARSE => 'PARSING ERROR',
E_NOTICE => 'NOTICE',
E_CORE_ERROR => 'CORE ERROR',
E_CORE_WARNING => 'CORE WARNING',
E_COMPILE_ERROR => 'COMPILE ERROR',
E_COMPILE_WARNING => 'COMPILE WARNING',
E_USER_ERROR => 'USER ERROR',
E_USER_WARNING => 'USER WARNING',
E_USER_NOTICE => 'USER NOTICE',
E_STRICT => 'STRICT NOTICE',
E_RECOVERABLE_ERROR => 'RECOVERABLE ERROR');
$err = array_key_exists ($errno, $errorType) ? $errorType [$errno] : 'CAUGHT EXCEPTION';
toLog ('['. $err .'] '. $errstr .' [File: '. $errfile .'] [Line: '. $errline .']');
return TRUE;
}
function toLog ($message)
{
if (file_exists ('FirePHPCore/FirePHP.class.php'))
@include_once ('FirePHPCore/FirePHP.class.php');
if (class_exists ('FirePHP', FALSE) && !headers_sent ())
{
$firePhp = FirePHP::getInstance (TRUE);
$firePhp->log ($message);
}
$path = Instance::singleton ()->getCachePath () .'log/';
if (!file_exists ($path) && !@mkdir ($path, 0777))
throw new Exception ('Impossible to create folder ['. $path .'].');
if (!file_exists ($path .'.htaccess') && !file_put_contents ($path .'.htaccess', 'deny from all'))
throw new Exception ('Impossible to enhance security for folder ['. $path .'].');
$fd = fopen ($path .'log.'. date ('Ym'), 'a');
if (!$fd)
throw new Exception ('Impossible to open/create LOG file. Verify permissions on folder ['. $path .']!');
if (!fwrite ($fd, date ('d-m-Y H:i:s') ." [". $_SERVER['REMOTE_ADDR'] ."]\n". $message ."\n\n"))
throw new Exception ('Impossible to write in LOG file. Verify permissions on folder and file ['. $path .']!');
fclose ($fd);
}
function apiPhpError ($errno, $errstr, $errfile, $errline)
{
$errorType = array (E_ERROR => 'ERROR',
E_WARNING => 'WARNING',
E_PARSE => 'PARSING ERROR',
E_NOTICE => 'NOTICE',
E_CORE_ERROR => 'CORE ERROR',
E_CORE_WARNING => 'CORE WARNING',
E_COMPILE_ERROR => 'COMPILE ERROR',
E_COMPILE_WARNING => 'COMPILE WARNING',
E_USER_ERROR => 'USER ERROR',
E_USER_WARNING => 'USER WARNING',
E_USER_NOTICE => 'USER NOTICE',
E_STRICT => 'STRICT NOTICE',
E_RECOVERABLE_ERROR => 'RECOVERABLE ERROR');
$err = array_key_exists ($errno, $errorType) ? $errorType [$errno] : 'CAUGHT EXCEPTION';
toLog ('['. $err .'] '. $errstr .' [File: '. $errfile .'] [Line: '. $errline .']');
header ('HTTP/1.1 500 Internal Server Error');
header ('Content-Type: application/json');
$array = array ('ERROR' => 'SYSTEM_ERROR',
'MESSAGE' => 'System error! Please, contact administrator.',
'TECHNICAL' => 'PHP Error: '. $err);
echo json_encode ($array);
exit ();
}
function xmlCache ($file, $array, $path = FALSE)
{
if ($path === FALSE)
$path = Instance::singleton ()->getCachePath () .'parsed/';
if (!file_exists ($path) && !@mkdir ($path, 0777))
throw new Exception ('Impossible to create folder ['. $path .'].');
$content = "
$term)
{
$pos = strpos ($str, $term);
if ($pos === FALSE)
continue;
$positions [$term] = $pos;
}
asort ($positions);
$pieces = array ();
foreach ($positions as $trash => $start)
{
$next = next ($positions);
$end = $start + 200;
while ($next !== FALSE && $next < $end)
{
$end = $next + 200;
$next = next ($positions);
}
prev ($positions);
$start = $start - 50 < 0 ? 0 : $start - 50;
$end = $end - 50;
$start = !$start ? 0 : strrpos (substr ($str, 0, $start), ' ');
if (!is_integer ($start))
$start = 0;
$sub = substr ($str, $start, $end - $start);
$length = strrpos ($sub, ' ');
$length = !$length ? strlen ($sub) - 1 : $length;
$pieces [] = trim (substr ($str, $start, $length));
}
$output = '...'. implode ('...', $pieces) .'...';
foreach ($positions as $term => $trash)
$output = preg_replace ("|($term)|Ui", "$1", $output);
return $output;
}
function translate ($str)
{
$array = explode ('|', $str);
if (sizeof ($array) < 2)
return $str;
$language = Localization::singleton ()->getLanguage ();
foreach ($array as $key => $value)
{
$aux = explode (':', $value);
if (!$key)
$str = sizeof ($aux) > 1 ? $aux [1] : $aux [0];
if ($language != trim ($aux [0]))
continue;
return trim ($aux [1]);
}
return $str;
}
function shortlyHash ($hash)
{
$valid = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxwz_-';
$i = 0;
$short = '';
while ($i < strlen ($hash))
$short .= $valid [hexdec ($hash [$i++] . $hash [$i++] . $hash [$i++] . $hash [$i++]) % 64];
return $short;
}
function retrievePut ()
{
$_POST = array ();
$_FILES = array ();
$raw = file_get_contents ('php://input');
$boundary = substr ($raw, 0, strpos($raw, "\r\n"));
if (empty ($boundary))
{
parse_str ($raw, $_POST);
return;
}
$parts = array_slice (explode ($boundary, $raw), 1);
$data = array ();
foreach ($parts as $part)
{
// If this is the last part, break
if ($part == "--\r\n")
break;
// Separate content from headers
$part = ltrim ($part, "\r\n");
list ($rawHeaders, $body) = explode ("\r\n\r\n", $part, 2);
// Parse the headers list
$rawHeaders = explode ("\r\n", $rawHeaders);
$headers = array ();
foreach ($rawHeaders as $header)
{
list ($name, $value) = explode (':', $header);
$headers [strtolower ($name)] = ltrim ($value, ' ');
}
// Parse the Content-Disposition to get the field name, etc.
if (isset ($headers ['content-disposition']))
{
$filename = NULL;
$tmp_name = NULL;
preg_match ('/^(.+); *name="([^"]+)"(; *filename="([^"]+)")?/', $headers ['content-disposition'], $matches);
list(, $type, $name) = $matches;
//Parse File
if (isset ($matches[4]))
{
//if labeled the same as previous, skip
if (isset ($_FILES [$matches [2]]))
continue;
//get filename
$filename = $matches [4];
//get tmp name
$filename_parts = pathinfo ($filename);
$tmp_name = tempnam (ini_get ('upload_tmp_dir'), $filename_parts ['filename']);
//populate $_FILES with information, size may be off in multibyte situation
$_FILES [$matches [2]] = array (
'error' => 0,
'name' => trim ($filename),
'tmp_name' => $tmp_name,
'size' => strlen ($body),
'type' => trim ($value)
);
//place in temporary directory
file_put_contents ($tmp_name, $body);
}
else
$data [$name] = substr ($body, 0, strlen ($body) - 2);
}
}
$_POST = $data;
}
function convertApiParametersToUtf8 ()
{
require Instance::singleton ()->getCorePath () .'extra/Encoding.php';
array_walk_recursive($_POST, function (&$item, $key)
{
$item = Encoding::toUTF8 ($item);
});
}
if (!function_exists ('apache_request_headers'))
{
function apache_request_headers()
{
$arh = array ();
$rx_http = '/\AHTTP_/';
foreach ($_SERVER as $key => $val)
if (preg_match ($rx_http, $key))
{
$arh_key = preg_replace ($rx_http, '', $key);
$rx_matches = array ();
$rx_matches = explode ('_', $arh_key);
if (count ($rx_matches) > 0 && strlen ($arh_key) > 2)
{
foreach ($rx_matches as $ak_key => $ak_val)
$rx_matches[$ak_key] = ucfirst($ak_val);
$arh_key = implode ('-', $rx_matches);
}
$arh [strtolower ($arh_key)] = $val;
}
return ($arh);
}
}