You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

411 lines
11 KiB
PHTML

2 years ago
<?php
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Str;
use Jenssegers\Agent\Agent;
function human_distance($distance)
{
$distanceText = number_format($distance, 2) . 'm';
if($distance > 1000) $distanceText = number_format(round($distance / 1000, 2), 2) . 'Km';
return $distanceText;
}
function human_filesize($bytes, $decimals = 2)
{
if ($bytes == 0) return $bytes;
$s = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
if ($bytes) {
$e = floor(log($bytes) / log(1024));
return sprintf("%.{$decimals}f ".$s[$e], ($bytes/pow(1024, floor($e))));
} else {
return 0;
}
}
function filesize_mb($bytes)
{
return $bytes / pow(1024, 2);
}
function removeHyphen($phone) {
return trim(str_replace("-", "", $phone));
}
function filterPhone($phone) {
$search = ["-", "#", "+", ".", ",", " ", "(", ")"];
$phone = str_replace($search, "", $phone);
return trim($phone);
}
function trimSignoutText($text) {
$trext = preg_replace("/#[0-9]+/", "", $text);
return trim($trext);
}
function formatPhone($phone) {
$phone = preg_replace("/[^0-9]/", "", $phone);
$length = strlen($phone);
switch($length){
case 11 :
return preg_replace("/([0-9]{3})([0-9]{4})([0-9]{4})/", "$1-$2-$3", $phone);
break;
case 10:
return preg_replace("/([0-9]{3})([0-9]{3})([0-9]{4})/", "$1-$2-$3", $phone);
break;
case 9:
return preg_replace("/([0-9]{2})([0-9]{3})([0-9]{4})/", "$1-$2-$3", $phone);
break;
default :
return $phone;
break;
}
}
/**
* Create a Random String
*
* Useful for generating passwords or hashes.
*
* @param integer number of characters
* @param string type of random string. basic/alpha/alunum/numeric/nozero/unique/md5/encrypt/sha1
* @return string
*/
function randomString($len = 10, $type = 'alnum') {
$str = '';
switch ($type) {
case 'basic' :
$str = mt_rand();
break;
case 'alnum' :
case 'numeric' :
case 'nozero' :
case 'alpha' :
case 'allowernum' :
case 'aluppernum' :
switch ($type) {
case 'alpha' :
$pool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
break;
case 'alnum' :
$pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
break;
case 'allowernum' :
$pool = '0123456789abcdefghijklmnopqrstuvwxyz';
break;
case 'aluppernum' :
$pool = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
break;
case 'numeric' :
$pool = '0123456789';
break;
case 'nozero' :
$pool = '123456789';
break;
}
for ($i = 0; $i < $len; $i++) {
$str .= substr($pool, mt_rand(0, strlen($pool) -1), 1);
}
break;
case 'unique' :
case 'md5' :
$str = md5(uniqid(mt_rand()));
break;
case 'encrypt' :
case 'sha1' :
$str = sha1(uniqid(mt_rand(), true));
break;
default :
$str = mt_rand();
}
return $str;
}
/**
* Calculates the great-circle distance between two points, with
* the Haversine formula.
* @param float $latitudeFrom Latitude of start point in [deg decimal]
* @param float $longitudeFrom Longitude of start point in [deg decimal]
* @param float $latitudeTo Latitude of target point in [deg decimal]
* @param float $longitudeTo Longitude of target point in [deg decimal]
* @param float $earthRadius Mean earth radius in [m]
* @return float Distance between points in [m] (same as earthRadius)
*/
function distance($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371000)
{
// convert from degrees to radians
$latFrom = deg2rad($latitudeFrom);
$lonFrom = deg2rad($longitudeFrom);
$latTo = deg2rad($latitudeTo);
$lonTo = deg2rad($longitudeTo);
$latDelta = $latTo - $latFrom;
$lonDelta = $lonTo - $lonFrom;
$angle = 2 * asin(sqrt(pow(sin($latDelta / 2), 2) +
cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2), 2)));
return $angle * $earthRadius;
}
function dateAgo($time) {
if (!$time) {
return '방금';
}
$stat = ' 전';
if ($time < 0) {
$time *= -1;
$stat = ' 후';
} // $time=abs($time);
$ago = array();
$ct = array(31536000,2592000,604800,86400,3600,60,1); // 대략(년:365일,월:30일 기준)
$tt = array('년','달','주','일','시간','분','초');
foreach ($ct as $k => $v) {
if ($n=floor($time/$v)) {
$ago[] = $n.$tt[$k];
$time-=$n*$v;
}
}
return implode(' ', array_slice($ago,0,2)) . $stat;
}
function getNamespace($model) {
if (!$model) {
return null;
}
$class_name = get_class($model);
$reflection_class = new \ReflectionClass($class_name);
return $reflection_class->getName();
}
/**
* Prepare URL
*
* Simply adds the http:// part if no scheme is included
*
* @param string $url
* @return string
*/
function prepareURL($url = '') {
if (empty($url) || $url == 'http://' || $url == 'https://') {
return '';
}
$urls = parse_url($url);
if (!$urls || !isset($urls['scheme'])) {
$url = 'http://'. $url;
}
return $url;
}
/**
* 한글요일 변환
*
* @param datetime
* @param integer
* @return string
*/
function getWeekName($date, $full = 0) {
$weeks = array('일','월','화','수','목','금','토');
$week = date('w', strtotime($date));
if ($full) {
return $weeks[$week] . '요일';
} else {
return $weeks[$week];
}
}
// 휴대폰번호 마스킹
function maskingPhone($str) {
$str = str_replace('-','',$str);
$len = mb_strlen($str, 'utf-8');
$mValue = "";
switch($len){
case 10:
$mValue = mb_substr($str,0,3)."-".mb_substr($str,3,1)."**"."-*".mb_substr($str,7,3);;
break;
case 11:
$mValue = mb_substr($str,0,3)."-".mb_substr($str,3,2)."**"."-*".mb_substr($str,8,3);
break;
case 0:
break;
}
return $mValue;
}
// ID 마스킹
function maskingID($str) {
$mValue = preg_replace('/.{3}$/', '***', $str);
return $mValue;
}
// 이메일 마스킹
function maskingEmail($str) {
//$str = preg_replace('/(?:^|@).\K|\.[^@]*$(*SKIP)(*F)|.(?=.*?\.)/', '*', $str);
$pattern = '/(\w+)(\w{3})(@.{1})(?=.*?\.)(.+)/i';
$replace = '\1***\3*\5';
//$str = preg_replace('/(\w+)(\w{3})@(\w+)/i','\1***@\3',$str);
$str = preg_replace('/(\w+)(\w{3})(@.{1})([\w*?]+)(.+)/i','\1***\3*\5',$str);
return $str;
}
// IP Address 마스킹
function maskingIP($ip, $pos = 2, $mask = "♡", $admin = false) {
if ($admin !== false) {
return $ip;
}
$arr = explode('.', $ip);
$arr[4 - $pos] = $mask;
return implode('.',array_reverse($arr));
}
// 문자열 마스킹
function strMasking($str) {
$str = str_replace('-','',$str);
$len = mb_strlen($str, 'utf-8');
$mValue = "";
switch($len){
case 2:
$mValue = mb_strcut($str, 0, 3, "UTF-8").'*';
break;
case 3:
$mValue = mb_strcut($str, 0, 3, "UTF-8").'*'.mb_strcut($str, 8, 11, "UTF-8");
break;
default:
$mValue = mb_strcut($str, 0, 3, "UTF-8").'**'.mb_strcut($str, 12, 15, "UTF-8");
break;
}
return $mValue;
}
/**
* 자동 링크 변환 함수
*
* @param string
* @return string
*/
function setAutoLink($str) {
$regex['file'] = "gz|tgz|tar|gzip|zip|rar|mpeg|mpg|exe|rpm|dep|rm|ram|asf|ace|viv|avi|mid|gif|jpg|png|bmp|eps|mov|mp4";
$regex['file'] = "(\.(". $regex['file'] .")\") target=\"_blank\"";
$regex['http'] = "(http|https|ftp|telnet|news|mms):\/\/(([\xA1-\xFEa-z0-9:_\-]+\.[\xA1-\xFEa-z0-9,:;&#=_~%\[\]?\/.,+\-]+)([.]*[\/a-z0-9\[\]]|=[\xA1-\xFE]+))";
$regex['mail'] = "([\xA1-\xFEa-z0-9_.-]+)@([\xA1-\xFEa-z0-9_-]+\.[\xA1-\xFEa-z0-9._-]*[a-z]{2,3}(\?[\xA1-\xFEa-z0-9=&\?]+)*)";
// &lt; 로 시작해서 3줄뒤에 &gt; 가 나올 경우와
// IMG tag 와 A tag 의 경우 링크가 여러줄에 걸쳐 이루어져 있을 경우
// 이를 한줄로 합침 (합치면서 부가 옵션들은 모두 삭제함)
$src[] = "/<([^<>\n]*)\n([^<>\n]+)\n([^<>\n]*)>/i";
$tar[] = "<\\1\\2\\3>";
$src[] = "/<([^<>\n]*)\n([^\n<>]*)>/i";
$tar[] = "<\\1\\2>";
$src[] = "/<(A|IMG)[^>]*(HREF|SRC)[^=]*=[ '\"\n]*(". $regex['http'] ."|mailto:". $regex['mail'] .")[^>]*>/i";
$tar[] = "<\\1 \\2=\"\\3\">";
// email 형식이나 URL 에 포함될 경우 URL 보호를 위해 @ 을 치환
$src[] = "/(http|https|ftp|telnet|news|mms):\/\/([^ \n@]+)@/i";
$tar[] = "\\1://\\2_HTTPAT_\\3";
// 특수 문자를 치환 및 html사용시 link 보호
$src[]= "/&(quot|gt|lt)/i";
$tar[] = "!\\1";
// 3.0.11 에서 추가
$src[] = "/&#034;/i";
$tar[] = "\"";
$src[] = "/&#039;/i";
$tar[] = "'";
$src[] = "/&#125;/";
$tar[] = "}";
$src[] = "/<a([^>]*)href=[\"' ]*(". $regex['http'] .")[\"']*[^>]*>/i";
$tar[] = "<A\\1HREF=\"\\3_orig://\\4\" target=\"_blank\">";
$src[] = "/href=[\"' ]*mailto:(". $regex['mail'] .")[\"']*>/i";
$tar[] = "HREF=\"mailto:\\2#-#\\3\">";
$src[] = "/<([^>]*)(background|codebase|src)[ \n]*=[\n\"' ]*(". $regex['http'] .")[\"']*/i";
$tar[] = "<\\1\\2=\"\\4_orig://\\5\"";
// 링크가 안된 url및 email address 자동링크
$src[] = "/((SRC|HREF|BASE|GROUND)[ ]*=[ ]*|[^=]|^)(". $regex['http'] .")/i";
$tar[] = "\\1<A HREF=\"\\3\" target=\"_blank\">\\3</a>";
$src[] = "/(". $regex['mail'] .")/i";
$tar[] = "<A HREF=\"mailto:\\1\">\\1</a>";
$src[] = "/<A HREF=[^>]+>(<A HREF=[^>]+>)/i";
$tar[] = "\\1";
$src[] = "/<\/A><\/A>/i";
$tar[] = "</A>";
// 보호를 위해 치환한 것들을 복구
$src[] = "/!(quot|gt|lt)/i";
$tar[] = "&\\1";
$src[] = "/(http|https|ftp|telnet|news|mms)_orig/i";
$tar[] = "\\1";
$src[] = "'#-#'";
$tar[] = "@";
$src[] = "/". $regex['file'] ."/i";
$tar[] = "\\1";
// email 주소를 변형한 뒤 URL 속의 @ 을 복구
$src[] = "/_HTTPAT_/";
$tar[] = "@";
// 이미지에 보더값 0 을 삽입
$src[] = "/<(IMG SRC=\"[^\"]+\")>/i";
$tar[] = "<\\1 BORDER=0>";
$str = preg_replace($src,$tar,$str);
return $str;
}
/**
* 검색어 스타일 변환
*
* @param string 검색어
* @param string 원본문자열
* @return string
*/
function setSearchStyle($word = '', $str) {
if (!trim($word)) {
return $str;
}
// 검색어 전체를 공백으로 나눈다
$words = explode(' ', $word);
$pattern = '';
$bar = '';
// "/(검색1|검색2)/i" 와 같은 패턴을 만듬
foreach ($words as $val) {
if (trim($val) == '') continue;
$tmp_str = quotemeta($val);
$tmp_str = str_replace(array("/", "|"), array("\/", "\|"), $tmp_str);
$pattern .= $bar . $tmp_str . "(?![^<]*>)";
$bar = "|";
}
$replace = "<em>\\1</em>";
return preg_replace("/(". $pattern .")/i", $replace, $str);
}
function setDefault($val) {
if ($val === null) {
return '';
}
return $val;
}