FunctionsController.php 29 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082
  1. <?php
  2. namespace App\Http\Controllers;
  3. use DateTime;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\Validator;
  6. use Illuminate\Support\Facades\DB;
  7. use Illuminate\Support\Facades\Hash;
  8. use Illuminate\Support\Carbon;
  9. class FunctionsController extends Controller
  10. {
  11. private $responseController;
  12. public function __construct()
  13. {
  14. $this->responseController = new ResponseController();
  15. }
  16. public static function uuidv5($namespace, $name)
  17. {
  18. if (!self::is_valid($namespace)) return false;
  19. // Get hexadecimal components of namespace
  20. $nhex = str_replace(array('-', '{', '}'), '', $namespace);
  21. // Binary Value
  22. $nstr = '';
  23. // Convert Namespace UUID to bits
  24. for ($i = 0; $i < strlen($nhex); $i += 2) {
  25. $nstr .= chr(hexdec($nhex[$i] . $nhex[$i + 1]));
  26. }
  27. // Calculate hash value
  28. $hash = sha1($nstr . $name);
  29. return sprintf(
  30. '%08s-%04s-%04x-%04x-%12s',
  31. // 32 bits for "time_low"
  32. substr($hash, 0, 8),
  33. // 16 bits for "time_mid"
  34. substr($hash, 8, 4),
  35. // 16 bits for "time_hi_and_version",
  36. // four most significant bits holds version number 5
  37. (hexdec(substr($hash, 12, 4)) & 0x0fff) | 0x5000,
  38. // 16 bits, 8 bits for "clk_seq_hi_res",
  39. // 8 bits for "clk_seq_low",
  40. // two most significant bits holds zero and one for variant DCE1.1
  41. (hexdec(substr($hash, 16, 4)) & 0x3fff) | 0x8000,
  42. // 48 bits for "node"
  43. substr($hash, 20, 12)
  44. );
  45. }
  46. public static function is_valid($uuid)
  47. {
  48. return preg_match('/^\{?[0-9a-f]{8}\-?[0-9a-f]{4}\-?[0-9a-f]{4}\-?' .
  49. '[0-9a-f]{4}\-?[0-9a-f]{12}\}?$/i', $uuid) === 1;
  50. }
  51. public function generateID($seed, $timestamp)
  52. {
  53. $string = str_replace(" ", "", $seed) . $timestamp;
  54. $array = [];
  55. for ($i = 0; $i < strlen($string); $i++) {
  56. $array[] = $string[$i];
  57. }
  58. shuffle($array);
  59. $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  60. $ID = '';
  61. foreach ($array as $char) {
  62. $ascii = ord($char);
  63. $s = $ascii / 100;
  64. if ($s >= 1) continue;
  65. $s = $s * strlen($chars);
  66. $s = intval($s);
  67. $l = $chars[$s];
  68. if (strlen($ID) < 20) $ID .= $l;
  69. }
  70. if (strlen($ID) < 20) {
  71. for ($i = strlen($ID); $i < 20; $i++) {
  72. $s = rand(0, strlen($chars) - 1);
  73. $l = $chars[$s];
  74. $ID .= $l;
  75. }
  76. }
  77. return $ID;
  78. }
  79. public function getType($type)
  80. {
  81. switch ($type) {
  82. case "insert":
  83. return "CREATE";
  84. break;
  85. case "update":
  86. return strtoupper($type);
  87. break;
  88. case "select":
  89. return "READ";
  90. break;
  91. case "delete":
  92. return strtoupper($type);
  93. break;
  94. default:
  95. return "UNKNOWN";
  96. break;
  97. }
  98. }
  99. public function registerLog($querys, $user, $date, $idac, $line)
  100. {
  101. foreach ($querys as $query) {
  102. $script = $query['query'];
  103. $params = json_encode($query['bindings']);
  104. DB::table('S002V01TLOMY')->insert([
  105. 'LOMY_NULI' => $line,
  106. 'LOMY_IDAC' => $idac,
  107. 'LOMY_QUER' => $script,
  108. 'LOMY_PARA' => $params,
  109. 'LOMY_FECH' => $date,
  110. 'LOMY_IDUS' => $user,
  111. ]);
  112. }
  113. }
  114. public function registerActivity($line, $module, $function, $screen, $action, $description, $user, $date, $submodule = null, $idobj = null)
  115. {
  116. $id = DB::table('S002V01TACCI')->insertGetId([
  117. 'ACCI_NULI' => $line,
  118. 'ACCI_IDMO' => $module,
  119. 'ACCI_IDSM' => $submodule,
  120. 'ACCI_IDFU' => $function,
  121. 'ACCI_IDPA' => $screen,
  122. 'ACCI_TIAC' => $action,
  123. 'ACCI_DESC' => $description,
  124. 'ACCI_IDUS' => $user,
  125. 'ACCI_FEAC' => $date,
  126. 'ACCI_IDOJ' => $idobj
  127. ]);
  128. DB::table('S002V01TUSUA')->where('USUA_IDUS', '=', $user)->update([
  129. 'USUA_ULAC' => $id
  130. ]);
  131. return $id;
  132. }
  133. public function joinName($name, $fApe, $sApe = null)
  134. {
  135. $fullName = "$name $fApe";
  136. if (!is_null($sApe)) {
  137. $fullName = "$fullName $sApe";
  138. }
  139. return $fullName;
  140. }
  141. public function checkFileSize($ext, $size)
  142. {
  143. $availableFiles = [
  144. 250 => [
  145. "zip",
  146. "tar",
  147. "rar",
  148. "7z",
  149. "mp3",
  150. "mpeg",
  151. "wav",
  152. "ogg",
  153. "opus",
  154. "jpg",
  155. "png",
  156. "gif",
  157. "bmp",
  158. "tiff",
  159. "svg",
  160. "txt",
  161. "webm",
  162. "mp4",
  163. "3gp",
  164. "mov",
  165. "avi",
  166. "wmv",
  167. "flv",
  168. "dwg",
  169. "dxf",
  170. "3ds",
  171. "ai",
  172. "psd",
  173. "xml"
  174. ],
  175. 50 => ["doc", "docx", "vsd", "vsdx", "pdf"],
  176. 75 => ["xls", "xlsx"],
  177. 100 => ["ppt", "pptx"],
  178. ];
  179. $maxFileSizeMB = 0;
  180. foreach ($availableFiles as $k => $v) {
  181. if (in_array($ext, $v)) $maxFileSizeMB = $k;
  182. }
  183. if ($maxFileSizeMB == 0) return false;
  184. $maxFileSize = $maxFileSizeMB * 1048576;
  185. return $size < $maxFileSize;
  186. }
  187. public function checkInvoice($file)
  188. {
  189. try {
  190. $xml = simplexml_load_string($file, 'SimpleXMLElement', LIBXML_NOCDATA);
  191. $ns = $xml->getNamespaces(true);
  192. $xml->registerXPathNamespace('c', $ns['cfdi']);
  193. $xml->registerXPathNamespace('t', $ns['tfd']);
  194. } catch (\Throwable $th) {
  195. return $this->responseController->makeResponse(
  196. true,
  197. "ERR_INVOICE_COMPARE006: Ocurrió un error al obtener la información del documento.",
  198. $th->getMessage(),
  199. 500
  200. );
  201. }
  202. $arrInfoInvoice = ((array) $xml)['@attributes'];
  203. if (
  204. array_key_exists('Version', $arrInfoInvoice) &&
  205. array_key_exists('Serie', $arrInfoInvoice) &&
  206. array_key_exists('Folio', $arrInfoInvoice) &&
  207. array_key_exists('TipoDeComprobante', $arrInfoInvoice) &&
  208. array_key_exists('NoCertificado', $arrInfoInvoice) &&
  209. array_key_exists('Certificado', $arrInfoInvoice) &&
  210. array_key_exists('Sello', $arrInfoInvoice) &&
  211. array_key_exists('FormaPago', $arrInfoInvoice) &&
  212. array_key_exists('MetodoPago', $arrInfoInvoice) &&
  213. array_key_exists('SubTotal', $arrInfoInvoice) &&
  214. array_key_exists('Moneda', $arrInfoInvoice) &&
  215. array_key_exists('TipoCambio', $arrInfoInvoice) &&
  216. array_key_exists('Total', $arrInfoInvoice) &&
  217. array_key_exists('LugarExpedicion', $arrInfoInvoice) &&
  218. array_key_exists('CondicionesDePago', $arrInfoInvoice) &&
  219. array_key_exists('Fecha', $arrInfoInvoice) &&
  220. array_key_exists('Exportacion', $arrInfoInvoice)
  221. ) {
  222. return true;
  223. }
  224. return false;
  225. }
  226. public function now()
  227. {
  228. $completeDate = shell_exec('echo %date%');
  229. $completeDate = trim($completeDate);
  230. $serverDateTime = "";
  231. if (strlen($completeDate) == 14) {
  232. $serverDateTime = shell_exec('echo %date:~10,4%-%date:~4,2%-%date:~7,2% %time:~0,2%:%time:~3,2%:%time:~6,2%');
  233. $serverDateTime = trim($serverDateTime);
  234. } else {
  235. $serverDateTime = shell_exec('echo %date:~6,4%-%date:~3,2%-%date:~0,2% %time:~0,2%:%time:~3,2%:%time:~6,2%');
  236. $serverDateTime = trim($serverDateTime);
  237. }
  238. return new Carbon($serverDateTime);
  239. }
  240. public function validDate($date)
  241. {
  242. if (preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/", $date)) {
  243. return true;
  244. } else {
  245. return false;
  246. }
  247. }
  248. public function floatAdd(...$numbers): float
  249. {
  250. $result = "0.0";
  251. foreach ($numbers as $n) {
  252. $result = bcadd("$result", "$n", 18);
  253. }
  254. return floatval($result);
  255. }
  256. public function floatSub($fn, $sn): float
  257. {
  258. $result = bcsub("$fn", "$sn", 18);
  259. return floatval($result);
  260. }
  261. public function floatDiv($fn, $sn): float
  262. {
  263. $result = bcdiv("$fn", "$sn", 18);
  264. return floatval($result);
  265. }
  266. public function floatMul($n1, $n2): float
  267. {
  268. $result = bcmul("$n1", "$n2", 18);
  269. return floatval($result);
  270. }
  271. public function formatDateTime(string $dateTime): string
  272. {
  273. if (str_contains($dateTime, '0001-01-01')) {
  274. return "-";
  275. }
  276. $MONTHS = [
  277. "01" => "Enero",
  278. "02" => "Febrero",
  279. "03" => "Marzo",
  280. "04" => "Abril",
  281. "05" => "Mayo",
  282. "06" => "Junio",
  283. "07" => "Julio",
  284. "08" => "Agosto",
  285. "09" => "Septiembre",
  286. "10" => "Octubre",
  287. "11" => "Noviembre",
  288. "12" => "Diciembre"
  289. ];
  290. $dateTimeArr = explode(" ", $dateTime);
  291. $dateArr = explode("-", $dateTimeArr[0]);
  292. $month = $MONTHS[$dateArr[1]];
  293. $day = intval($dateArr[2]);
  294. $dateTimeStr = $day . " de " . $month . " del " . $dateArr[0];
  295. $timeArr = explode(":", $dateTimeArr[1]);
  296. $hour = intval($timeArr[0]);
  297. $period = $hour < 12 ? 'AM' : 'PM';
  298. $hour = $hour > 12 ? $hour - 12 : $hour;
  299. $dateTimeStr .= " a las " . $hour . ":" . $timeArr[1] . " " . $period;
  300. return $dateTimeStr;
  301. }
  302. public function buildHumanCurrentDate(string $dateTime): string
  303. {
  304. $DAYS = [
  305. "Mo" => "Lunes",
  306. "Tu" => "Martes",
  307. "We" => "Miércoles",
  308. "Th" => "Jueves",
  309. "Fr" => "Viernes",
  310. "Sa" => "Sábado",
  311. "Su" => "Domingo"
  312. ];
  313. $MONTHS = [
  314. "01" => "Enero",
  315. "02" => "Febrero",
  316. "03" => "Marzo",
  317. "04" => "Abril",
  318. "05" => "Mayo",
  319. "06" => "Junio",
  320. "07" => "Julio",
  321. "08" => "Agosto",
  322. "09" => "Septiembre",
  323. "10" => "Octubre",
  324. "11" => "Noviembre",
  325. "12" => "Diciembre"
  326. ];
  327. $dateTimeArr = explode(" ", $dateTime);
  328. $dateArr = explode("-", $dateTimeArr[0]);
  329. $dateObj = new Carbon($dateTime);
  330. $dayName = $dateObj->format('l');
  331. $dayInd = substr($dayName, 0, 2);
  332. return $DAYS[$dayInd] . ", " . $dateArr[2] . " de " . $MONTHS[$dateArr[1]] . " del " . $dateArr[0];
  333. }
  334. public function buildProjectDate($dateStr): string
  335. {
  336. $MONTHS = [
  337. "01" => "enero",
  338. "02" => "febrero",
  339. "03" => "marzo",
  340. "04" => "abril",
  341. "05" => "mayo",
  342. "06" => "junio",
  343. "07" => "julio",
  344. "08" => "agosto",
  345. "09" => "septiembre",
  346. "10" => "octubre",
  347. "11" => "noviembre",
  348. "12" => "diciembre"
  349. ];
  350. $dateObj = new Carbon($dateStr);
  351. $dateFormatted = $dateObj->toDateTimeString();
  352. $dateTimeArr = explode(" ", $dateFormatted);
  353. $dateArr = explode('-', $dateTimeArr[0]);
  354. $monthName = $MONTHS[$dateArr[1]];
  355. $timeArr = explode(':', $dateTimeArr[1]);
  356. $hour = intval($timeArr[0]);
  357. $period = $hour < 12 ? 'a. m.' : 'p. m.';
  358. $hour = $hour > 12 ? $hour - 12 : $hour;
  359. $hourStr = $hour < 10 ? "0$hour" : "$hour";
  360. return "$dateArr[2] de $monthName $dateArr[0] $hourStr:$timeArr[1] $period";
  361. }
  362. public function getApiURI(): string
  363. {
  364. return "http://git.ittec.mx/";
  365. }
  366. public function getBasePath(): string
  367. {
  368. return "C:\SistemaMantenimiento\sistema-mantenimiento-back";
  369. }
  370. public function validPhoneNumber(string $number): bool
  371. {
  372. if (intval($number) <= 0) return false;
  373. $validChars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
  374. $numberArr = str_split($number);
  375. $validNumber = '';
  376. foreach ($numberArr as $char) {
  377. if (in_array($char, $validChars)) $validNumber .= $char;
  378. }
  379. if (strlen($validNumber) >= 10 && strlen($validNumber) <= 11) {
  380. return true;
  381. } else {
  382. return false;
  383. }
  384. }
  385. public function unaccent(string $value): string
  386. {
  387. $transliteration = array(
  388. 'IJ' => 'I',
  389. 'Ö' => 'O',
  390. 'Œ' => 'O',
  391. 'Ü' => 'U',
  392. 'ä' => 'a',
  393. 'æ' => 'a',
  394. 'ij' => 'i',
  395. 'ö' => 'o',
  396. 'œ' => 'o',
  397. 'ü' => 'u',
  398. 'ß' => 's',
  399. 'ſ' => 's',
  400. 'À' => 'A',
  401. 'Á' => 'A',
  402. 'Â' => 'A',
  403. 'Ã' => 'A',
  404. 'Ä' => 'A',
  405. 'Å' => 'A',
  406. 'Æ' => 'A',
  407. 'Ā' => 'A',
  408. 'Ą' => 'A',
  409. 'Ă' => 'A',
  410. 'Ç' => 'C',
  411. 'Ć' => 'C',
  412. 'Č' => 'C',
  413. 'Ĉ' => 'C',
  414. 'Ċ' => 'C',
  415. 'Ď' => 'D',
  416. 'Đ' => 'D',
  417. 'È' => 'E',
  418. 'É' => 'E',
  419. 'Ê' => 'E',
  420. 'Ë' => 'E',
  421. 'Ē' => 'E',
  422. 'Ę' => 'E',
  423. 'Ě' => 'E',
  424. 'Ĕ' => 'E',
  425. 'Ė' => 'E',
  426. 'Ĝ' => 'G',
  427. 'Ğ' => 'G',
  428. 'Ġ' => 'G',
  429. 'Ģ' => 'G',
  430. 'Ĥ' => 'H',
  431. 'Ħ' => 'H',
  432. 'Ì' => 'I',
  433. 'Í' => 'I',
  434. 'Î' => 'I',
  435. 'Ï' => 'I',
  436. 'Ī' => 'I',
  437. 'Ĩ' => 'I',
  438. 'Ĭ' => 'I',
  439. 'Į' => 'I',
  440. 'İ' => 'I',
  441. 'Ĵ' => 'J',
  442. 'Ķ' => 'K',
  443. 'Ľ' => 'K',
  444. 'Ĺ' => 'K',
  445. 'Ļ' => 'K',
  446. 'Ŀ' => 'K',
  447. 'Ł' => 'L',
  448. 'Ñ' => 'N',
  449. 'Ń' => 'N',
  450. 'Ň' => 'N',
  451. 'Ņ' => 'N',
  452. 'Ŋ' => 'N',
  453. 'Ò' => 'O',
  454. 'Ó' => 'O',
  455. 'Ô' => 'O',
  456. 'Õ' => 'O',
  457. 'Ø' => 'O',
  458. 'Ō' => 'O',
  459. 'Ő' => 'O',
  460. 'Ŏ' => 'O',
  461. 'Ŕ' => 'R',
  462. 'Ř' => 'R',
  463. 'Ŗ' => 'R',
  464. 'Ś' => 'S',
  465. 'Ş' => 'S',
  466. 'Ŝ' => 'S',
  467. 'Ș' => 'S',
  468. 'Š' => 'S',
  469. 'Ť' => 'T',
  470. 'Ţ' => 'T',
  471. 'Ŧ' => 'T',
  472. 'Ț' => 'T',
  473. 'Ù' => 'U',
  474. 'Ú' => 'U',
  475. 'Û' => 'U',
  476. 'Ū' => 'U',
  477. 'Ů' => 'U',
  478. 'Ű' => 'U',
  479. 'Ŭ' => 'U',
  480. 'Ũ' => 'U',
  481. 'Ų' => 'U',
  482. 'Ŵ' => 'W',
  483. 'Ŷ' => 'Y',
  484. 'Ÿ' => 'Y',
  485. 'Ý' => 'Y',
  486. 'Ź' => 'Z',
  487. 'Ż' => 'Z',
  488. 'Ž' => 'Z',
  489. 'à' => 'a',
  490. 'á' => 'a',
  491. 'â' => 'a',
  492. 'ã' => 'a',
  493. 'ā' => 'a',
  494. 'ą' => 'a',
  495. 'ă' => 'a',
  496. 'å' => 'a',
  497. 'ç' => 'c',
  498. 'ć' => 'c',
  499. 'č' => 'c',
  500. 'ĉ' => 'c',
  501. 'ċ' => 'c',
  502. 'ď' => 'd',
  503. 'đ' => 'd',
  504. 'è' => 'e',
  505. 'é' => 'e',
  506. 'ê' => 'e',
  507. 'ë' => 'e',
  508. 'ē' => 'e',
  509. 'ę' => 'e',
  510. 'ě' => 'e',
  511. 'ĕ' => 'e',
  512. 'ė' => 'e',
  513. 'ƒ' => 'f',
  514. 'ĝ' => 'g',
  515. 'ğ' => 'g',
  516. 'ġ' => 'g',
  517. 'ģ' => 'g',
  518. 'ĥ' => 'h',
  519. 'ħ' => 'h',
  520. 'ì' => 'i',
  521. 'í' => 'i',
  522. 'î' => 'i',
  523. 'ï' => 'i',
  524. 'ī' => 'i',
  525. 'ĩ' => 'i',
  526. 'ĭ' => 'i',
  527. 'į' => 'i',
  528. 'ı' => 'i',
  529. 'ĵ' => 'j',
  530. 'ķ' => 'k',
  531. 'ĸ' => 'k',
  532. 'ł' => 'l',
  533. 'ľ' => 'l',
  534. 'ĺ' => 'l',
  535. 'ļ' => 'l',
  536. 'ŀ' => 'l',
  537. 'ñ' => 'n',
  538. 'ń' => 'n',
  539. 'ň' => 'n',
  540. 'ņ' => 'n',
  541. 'ʼn' => 'n',
  542. 'ŋ' => 'n',
  543. 'ò' => 'o',
  544. 'ó' => 'o',
  545. 'ô' => 'o',
  546. 'õ' => 'o',
  547. 'ø' => 'o',
  548. 'ō' => 'o',
  549. 'ő' => 'o',
  550. 'ŏ' => 'o',
  551. 'ŕ' => 'r',
  552. 'ř' => 'r',
  553. 'ŗ' => 'r',
  554. 'ś' => 's',
  555. 'š' => 's',
  556. 'ť' => 't',
  557. 'ù' => 'u',
  558. 'ú' => 'u',
  559. 'û' => 'u',
  560. 'ū' => 'u',
  561. 'ů' => 'u',
  562. 'ű' => 'u',
  563. 'ŭ' => 'u',
  564. 'ũ' => 'u',
  565. 'ų' => 'u',
  566. 'ŵ' => 'w',
  567. 'ÿ' => 'y',
  568. 'ý' => 'y',
  569. 'ŷ' => 'y',
  570. 'ż' => 'z',
  571. 'ź' => 'z',
  572. 'ž' => 'z',
  573. 'Α' => 'A',
  574. 'Ά' => 'A',
  575. 'Ἀ' => 'A',
  576. 'Ἁ' => 'A',
  577. 'Ἂ' => 'A',
  578. 'Ἃ' => 'A',
  579. 'Ἄ' => 'A',
  580. 'Ἅ' => 'A',
  581. 'Ἆ' => 'A',
  582. 'Ἇ' => 'A',
  583. 'ᾈ' => 'A',
  584. 'ᾉ' => 'A',
  585. 'ᾊ' => 'A',
  586. 'ᾋ' => 'A',
  587. 'ᾌ' => 'A',
  588. 'ᾍ' => 'A',
  589. 'ᾎ' => 'A',
  590. 'ᾏ' => 'A',
  591. 'Ᾰ' => 'A',
  592. 'Ᾱ' => 'A',
  593. 'Ὰ' => 'A',
  594. 'ᾼ' => 'A',
  595. 'Β' => 'B',
  596. 'Γ' => 'G',
  597. 'Δ' => 'D',
  598. 'Ε' => 'E',
  599. 'Έ' => 'E',
  600. 'Ἐ' => 'E',
  601. 'Ἑ' => 'E',
  602. 'Ἒ' => 'E',
  603. 'Ἓ' => 'E',
  604. 'Ἔ' => 'E',
  605. 'Ἕ' => 'E',
  606. 'Ὲ' => 'E',
  607. 'Ζ' => 'Z',
  608. 'Η' => 'I',
  609. 'Ή' => 'I',
  610. 'Ἠ' => 'I',
  611. 'Ἡ' => 'I',
  612. 'Ἢ' => 'I',
  613. 'Ἣ' => 'I',
  614. 'Ἤ' => 'I',
  615. 'Ἥ' => 'I',
  616. 'Ἦ' => 'I',
  617. 'Ἧ' => 'I',
  618. 'ᾘ' => 'I',
  619. 'ᾙ' => 'I',
  620. 'ᾚ' => 'I',
  621. 'ᾛ' => 'I',
  622. 'ᾜ' => 'I',
  623. 'ᾝ' => 'I',
  624. 'ᾞ' => 'I',
  625. 'ᾟ' => 'I',
  626. 'Ὴ' => 'I',
  627. 'ῌ' => 'I',
  628. 'Θ' => 'T',
  629. 'Ι' => 'I',
  630. 'Ί' => 'I',
  631. 'Ϊ' => 'I',
  632. 'Ἰ' => 'I',
  633. 'Ἱ' => 'I',
  634. 'Ἲ' => 'I',
  635. 'Ἳ' => 'I',
  636. 'Ἴ' => 'I',
  637. 'Ἵ' => 'I',
  638. 'Ἶ' => 'I',
  639. 'Ἷ' => 'I',
  640. 'Ῐ' => 'I',
  641. 'Ῑ' => 'I',
  642. 'Ὶ' => 'I',
  643. 'Κ' => 'K',
  644. 'Λ' => 'L',
  645. 'Μ' => 'M',
  646. 'Ν' => 'N',
  647. 'Ξ' => 'K',
  648. 'Ο' => 'O',
  649. 'Ό' => 'O',
  650. 'Ὀ' => 'O',
  651. 'Ὁ' => 'O',
  652. 'Ὂ' => 'O',
  653. 'Ὃ' => 'O',
  654. 'Ὄ' => 'O',
  655. 'Ὅ' => 'O',
  656. 'Ὸ' => 'O',
  657. 'Π' => 'P',
  658. 'Ρ' => 'R',
  659. 'Ῥ' => 'R',
  660. 'Σ' => 'S',
  661. 'Τ' => 'T',
  662. 'Υ' => 'Y',
  663. 'Ύ' => 'Y',
  664. 'Ϋ' => 'Y',
  665. 'Ὑ' => 'Y',
  666. 'Ὓ' => 'Y',
  667. 'Ὕ' => 'Y',
  668. 'Ὗ' => 'Y',
  669. 'Ῠ' => 'Y',
  670. 'Ῡ' => 'Y',
  671. 'Ὺ' => 'Y',
  672. 'Φ' => 'F',
  673. 'Χ' => 'X',
  674. 'Ψ' => 'P',
  675. 'Ω' => 'O',
  676. 'Ώ' => 'O',
  677. 'Ὠ' => 'O',
  678. 'Ὡ' => 'O',
  679. 'Ὢ' => 'O',
  680. 'Ὣ' => 'O',
  681. 'Ὤ' => 'O',
  682. 'Ὥ' => 'O',
  683. 'Ὦ' => 'O',
  684. 'Ὧ' => 'O',
  685. 'ᾨ' => 'O',
  686. 'ᾩ' => 'O',
  687. 'ᾪ' => 'O',
  688. 'ᾫ' => 'O',
  689. 'ᾬ' => 'O',
  690. 'ᾭ' => 'O',
  691. 'ᾮ' => 'O',
  692. 'ᾯ' => 'O',
  693. 'Ὼ' => 'O',
  694. 'ῼ' => 'O',
  695. 'α' => 'a',
  696. 'ά' => 'a',
  697. 'ἀ' => 'a',
  698. 'ἁ' => 'a',
  699. 'ἂ' => 'a',
  700. 'ἃ' => 'a',
  701. 'ἄ' => 'a',
  702. 'ἅ' => 'a',
  703. 'ἆ' => 'a',
  704. 'ἇ' => 'a',
  705. 'ᾀ' => 'a',
  706. 'ᾁ' => 'a',
  707. 'ᾂ' => 'a',
  708. 'ᾃ' => 'a',
  709. 'ᾄ' => 'a',
  710. 'ᾅ' => 'a',
  711. 'ᾆ' => 'a',
  712. 'ᾇ' => 'a',
  713. 'ὰ' => 'a',
  714. 'ᾰ' => 'a',
  715. 'ᾱ' => 'a',
  716. 'ᾲ' => 'a',
  717. 'ᾳ' => 'a',
  718. 'ᾴ' => 'a',
  719. 'ᾶ' => 'a',
  720. 'ᾷ' => 'a',
  721. 'β' => 'b',
  722. 'γ' => 'g',
  723. 'δ' => 'd',
  724. 'ε' => 'e',
  725. 'έ' => 'e',
  726. 'ἐ' => 'e',
  727. 'ἑ' => 'e',
  728. 'ἒ' => 'e',
  729. 'ἓ' => 'e',
  730. 'ἔ' => 'e',
  731. 'ἕ' => 'e',
  732. 'ὲ' => 'e',
  733. 'ζ' => 'z',
  734. 'η' => 'i',
  735. 'ή' => 'i',
  736. 'ἠ' => 'i',
  737. 'ἡ' => 'i',
  738. 'ἢ' => 'i',
  739. 'ἣ' => 'i',
  740. 'ἤ' => 'i',
  741. 'ἥ' => 'i',
  742. 'ἦ' => 'i',
  743. 'ἧ' => 'i',
  744. 'ᾐ' => 'i',
  745. 'ᾑ' => 'i',
  746. 'ᾒ' => 'i',
  747. 'ᾓ' => 'i',
  748. 'ᾔ' => 'i',
  749. 'ᾕ' => 'i',
  750. 'ᾖ' => 'i',
  751. 'ᾗ' => 'i',
  752. 'ὴ' => 'i',
  753. 'ῂ' => 'i',
  754. 'ῃ' => 'i',
  755. 'ῄ' => 'i',
  756. 'ῆ' => 'i',
  757. 'ῇ' => 'i',
  758. 'θ' => 't',
  759. 'ι' => 'i',
  760. 'ί' => 'i',
  761. 'ϊ' => 'i',
  762. 'ΐ' => 'i',
  763. 'ἰ' => 'i',
  764. 'ἱ' => 'i',
  765. 'ἲ' => 'i',
  766. 'ἳ' => 'i',
  767. 'ἴ' => 'i',
  768. 'ἵ' => 'i',
  769. 'ἶ' => 'i',
  770. 'ἷ' => 'i',
  771. 'ὶ' => 'i',
  772. 'ῐ' => 'i',
  773. 'ῑ' => 'i',
  774. 'ῒ' => 'i',
  775. 'ῖ' => 'i',
  776. 'ῗ' => 'i',
  777. 'κ' => 'k',
  778. 'λ' => 'l',
  779. 'μ' => 'm',
  780. 'ν' => 'n',
  781. 'ξ' => 'k',
  782. 'ο' => 'o',
  783. 'ό' => 'o',
  784. 'ὀ' => 'o',
  785. 'ὁ' => 'o',
  786. 'ὂ' => 'o',
  787. 'ὃ' => 'o',
  788. 'ὄ' => 'o',
  789. 'ὅ' => 'o',
  790. 'ὸ' => 'o',
  791. 'π' => 'p',
  792. 'ρ' => 'r',
  793. 'ῤ' => 'r',
  794. 'ῥ' => 'r',
  795. 'σ' => 's',
  796. 'ς' => 's',
  797. 'τ' => 't',
  798. 'υ' => 'y',
  799. 'ύ' => 'y',
  800. 'ϋ' => 'y',
  801. 'ΰ' => 'y',
  802. 'ὐ' => 'y',
  803. 'ὑ' => 'y',
  804. 'ὒ' => 'y',
  805. 'ὓ' => 'y',
  806. 'ὔ' => 'y',
  807. 'ὕ' => 'y',
  808. 'ὖ' => 'y',
  809. 'ὗ' => 'y',
  810. 'ὺ' => 'y',
  811. 'ῠ' => 'y',
  812. 'ῡ' => 'y',
  813. 'ῢ' => 'y',
  814. 'ῦ' => 'y',
  815. 'ῧ' => 'y',
  816. 'φ' => 'f',
  817. 'χ' => 'x',
  818. 'ψ' => 'p',
  819. 'ω' => 'o',
  820. 'ώ' => 'o',
  821. 'ὠ' => 'o',
  822. 'ὡ' => 'o',
  823. 'ὢ' => 'o',
  824. 'ὣ' => 'o',
  825. 'ὤ' => 'o',
  826. 'ὥ' => 'o',
  827. 'ὦ' => 'o',
  828. 'ὧ' => 'o',
  829. 'ᾠ' => 'o',
  830. 'ᾡ' => 'o',
  831. 'ᾢ' => 'o',
  832. 'ᾣ' => 'o',
  833. 'ᾤ' => 'o',
  834. 'ᾥ' => 'o',
  835. 'ᾦ' => 'o',
  836. 'ᾧ' => 'o',
  837. 'ὼ' => 'o',
  838. 'ῲ' => 'o',
  839. 'ῳ' => 'o',
  840. 'ῴ' => 'o',
  841. 'ῶ' => 'o',
  842. 'ῷ' => 'o',
  843. 'А' => 'A',
  844. 'Б' => 'B',
  845. 'В' => 'V',
  846. 'Г' => 'G',
  847. 'Д' => 'D',
  848. 'Е' => 'E',
  849. 'Ё' => 'E',
  850. 'Ж' => 'Z',
  851. 'З' => 'Z',
  852. 'И' => 'I',
  853. 'Й' => 'I',
  854. 'К' => 'K',
  855. 'Л' => 'L',
  856. 'М' => 'M',
  857. 'Н' => 'N',
  858. 'О' => 'O',
  859. 'П' => 'P',
  860. 'Р' => 'R',
  861. 'С' => 'S',
  862. 'Т' => 'T',
  863. 'У' => 'U',
  864. 'Ф' => 'F',
  865. 'Х' => 'K',
  866. 'Ц' => 'T',
  867. 'Ч' => 'C',
  868. 'Ш' => 'S',
  869. 'Щ' => 'S',
  870. 'Ы' => 'Y',
  871. 'Э' => 'E',
  872. 'Ю' => 'Y',
  873. 'Я' => 'Y',
  874. 'а' => 'A',
  875. 'б' => 'B',
  876. 'в' => 'V',
  877. 'г' => 'G',
  878. 'д' => 'D',
  879. 'е' => 'E',
  880. 'ё' => 'E',
  881. 'ж' => 'Z',
  882. 'з' => 'Z',
  883. 'и' => 'I',
  884. 'й' => 'I',
  885. 'к' => 'K',
  886. 'л' => 'L',
  887. 'м' => 'M',
  888. 'н' => 'N',
  889. 'о' => 'O',
  890. 'п' => 'P',
  891. 'р' => 'R',
  892. 'с' => 'S',
  893. 'т' => 'T',
  894. 'у' => 'U',
  895. 'ф' => 'F',
  896. 'х' => 'K',
  897. 'ц' => 'T',
  898. 'ч' => 'C',
  899. 'ш' => 'S',
  900. 'щ' => 'S',
  901. 'ы' => 'Y',
  902. 'э' => 'E',
  903. 'ю' => 'Y',
  904. 'я' => 'Y',
  905. 'ð' => 'd',
  906. 'Ð' => 'D',
  907. 'þ' => 't',
  908. 'Þ' => 'T',
  909. 'ა' => 'a',
  910. 'ბ' => 'b',
  911. 'გ' => 'g',
  912. 'დ' => 'd',
  913. 'ე' => 'e',
  914. 'ვ' => 'v',
  915. 'ზ' => 'z',
  916. 'თ' => 't',
  917. 'ი' => 'i',
  918. 'კ' => 'k',
  919. 'ლ' => 'l',
  920. 'მ' => 'm',
  921. 'ნ' => 'n',
  922. 'ო' => 'o',
  923. 'პ' => 'p',
  924. 'ჟ' => 'z',
  925. 'რ' => 'r',
  926. 'ს' => 's',
  927. 'ტ' => 't',
  928. 'უ' => 'u',
  929. 'ფ' => 'p',
  930. 'ქ' => 'k',
  931. 'ღ' => 'g',
  932. 'ყ' => 'q',
  933. 'შ' => 's',
  934. 'ჩ' => 'c',
  935. 'ც' => 't',
  936. 'ძ' => 'd',
  937. 'წ' => 't',
  938. 'ჭ' => 'c',
  939. 'ხ' => 'k',
  940. 'ჯ' => 'j',
  941. 'ჰ' => 'h'
  942. );
  943. $str = str_replace(array_keys($transliteration), array_values($transliteration), $value);
  944. return $str;
  945. }
  946. public function validateDate($date, $format = 'Y-m-d H:i:s'): bool
  947. {
  948. $d = DateTime::createFromFormat($format, $date);
  949. return $d && $d->format($format) == $date;
  950. }
  951. public function getDatesDifference($startDate, $endDate)
  952. {
  953. $startDateObj = new Carbon($startDate);
  954. $endDateObj = new Carbon($endDate);
  955. $startDateNum = $startDateObj->timestamp;
  956. $endDateNum = $endDateObj->timestamp;
  957. $differenceStr = "";
  958. $diffInSecs = $this->floatSub($endDateNum, $startDateNum);
  959. $diffInMins = intval($this->floatDiv($diffInSecs, 60));
  960. if ($diffInMins <= 0) {
  961. $differenceStr = "$diffInSecs segundos.";
  962. return $differenceStr;
  963. } else {
  964. $seconds = $diffInSecs - ($diffInMins * 60);
  965. $differenceStr = "$seconds segundos.";
  966. }
  967. $diffInHours = intval($this->floatDiv($diffInMins, 60));
  968. if ($diffInHours <= 0) {
  969. $differenceStr = "$diffInMins minutos.";
  970. return $differenceStr;
  971. } else {
  972. $minutes = $diffInMins - ($diffInHours * 60);
  973. $differenceStr = "$minutes minutos, $differenceStr";
  974. }
  975. $diffInDays = intval($this->floatDiv($diffInHours, 24));
  976. if ($diffInDays <= 0) {
  977. $differenceStr = "$diffInHours horas.";
  978. return $differenceStr;
  979. } else {
  980. $hours = $diffInHours - ($diffInDays * 24);
  981. $differenceStr = "$hours horas, $differenceStr";
  982. }
  983. return "$diffInDays días, $differenceStr";
  984. }
  985. public function validNumber(string $number, bool $decimal): bool
  986. {
  987. if ($number == '' || is_null($number)) return false;
  988. $validChars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
  989. $numberArr = str_split($number, 1);
  990. $pointsCount = 0;
  991. $cointainsInvalidChars = false;
  992. foreach ($numberArr as $char) {
  993. if ($decimal) {
  994. if ($char == '.') {
  995. $pointsCount++;
  996. } else {
  997. if (!in_array($char, $validChars)) $cointainsInvalidChars = true;
  998. }
  999. } else {
  1000. if (!in_array($char, $validChars)) $cointainsInvalidChars = true;
  1001. }
  1002. }
  1003. if ($decimal && $pointsCount > 1) return false;
  1004. if ($cointainsInvalidChars) return false;
  1005. return true;
  1006. }
  1007. }