src/Utils/HelperUtil.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\Utils;
  3. use Psr\Log\LoggerInterface;
  4. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  5. use Symfony\Component\Filesystem\Filesystem;
  6. use Symfony\Component\Finder\Finder;
  7. use Symfony\Component\HttpFoundation\RedirectResponse;
  8. use Symfony\Component\HttpFoundation\RequestStack;
  9. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  10. use Symfony\Component\Security\Core\Security;
  11. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  12. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  13. use Symfony\Component\Serializer\Serializer;
  14. class HelperUtil
  15. {
  16.     private $urlGenerator;
  17.     private $requestStack;
  18.     private $logger;
  19.     private $bag;
  20.     private $security;
  21.     private $flashBag;
  22.     public function __construct(UrlGeneratorInterface $ugRequestStack $rqLoggerInterface $lgParameterBagInterface $bagSecurity $sec)
  23.     {
  24.         $this->urlGenerator $ug;
  25.         $this->requestStack $rq;
  26.         $this->logger $lg;
  27.         $this->bag $bag;
  28.         $this->security $sec;
  29.         $this->flashBag $this->requestStack->getSession()->getFlashBag();
  30.     }
  31.     public function checkSessionAndRedirect($defaultRoute$defaultParams = [])
  32.     {
  33.         /**
  34.          * Función para realizar una redirección a una ruta especificada pero antes comprobar si tenemos detallada alguna redirección en sessión pendiente...
  35.          */
  36.         $request $this->requestStack->getCurrentRequest();
  37.         // Si venimos con el parametros POST / GET no_layout, mantener dicho parametros antes de redireccionar..., venimos desde un modal devolver ...
  38.         if ('1' == $request->query->get('no_layout'0) || '1' == $request->request->get('no_layout'0)) {
  39.             $extra = ['no_layout' => 1];
  40.         }
  41.         if ($request && $request->getSession()->get('back_button_route')) {
  42.             $route $request->getSession()->remove('back_button_route');
  43.             $params $request->getSession()->remove('back_button_params');
  44.             $request->getSession()->remove('back_button_text');
  45.             $targetPath $this->urlGenerator->generate($route$params);
  46.         } else {
  47.             $targetPath $this->urlGenerator->generate($defaultRoutearray_merge($defaultParams$extra ?? []));
  48.         }
  49.         return new RedirectResponse($targetPath);
  50.     }
  51.     public function strToArray(string $string): array
  52.     {
  53.         return preg_split('/( |,)/'trim($string));
  54.     }
  55.     public function cleanString(string $name): string
  56.     {
  57.         $name trim(strip_tags($name));
  58.         return transliterator_transliterate('Any-Latin; Latin-ASCII; [^A-Za-z0-9_\\-\\ \\\/] remove;'substr($name0200));
  59.         return preg_replace('/[_|+ ]+/''_'$name);
  60.     }
  61.     public static function replace_spec_char($subject)
  62.     {
  63.         $char_map = [
  64.             'ъ' => '-''ь' => '-''Ъ' => '-''Ь' => '-',
  65.             'А' => 'A''Ă' => 'A''Ǎ' => 'A''Ą' => 'A''À' => 'A''Ã' => 'A''Á' => 'A''Æ' => 'A''Â' => 'A''Å' => 'A''Ǻ' => 'A''Ā' => 'A''א' => 'A',
  66.             'Б' => 'B''ב' => 'B''Þ' => 'B',
  67.             'Ĉ' => 'C''Ć' => 'C''Ç' => 'C''Ц' => 'C''צ' => 'C''Ċ' => 'C''Č' => 'C''©' => 'C''ץ' => 'C',
  68.             'Д' => 'D''Ď' => 'D''Đ' => 'D''ד' => 'D''Ð' => 'D',
  69.             'È' => 'E''Ę' => 'E''É' => 'E''Ë' => 'E''Ê' => 'E''Е' => 'E''Ē' => 'E''Ė' => 'E''Ě' => 'E''Ĕ' => 'E''Є' => 'E''Ə' => 'E''ע' => 'E',
  70.             'Ф' => 'F''Ƒ' => 'F',
  71.             'Ğ' => 'G''Ġ' => 'G''Ģ' => 'G''Ĝ' => 'G''Г' => 'G''ג' => 'G''Ґ' => 'G',
  72.             'ח' => 'H''Ħ' => 'H''Х' => 'H''Ĥ' => 'H''ה' => 'H',
  73.             'I' => 'I''Ï' => 'I''Î' => 'I''Í' => 'I''Ì' => 'I''Į' => 'I''Ĭ' => 'I''I' => 'I''И' => 'I''Ĩ' => 'I''Ǐ' => 'I''י' => 'I''Ї' => 'I''Ī' => 'I''І' => 'I',
  74.             'Й' => 'J''Ĵ' => 'J',
  75.             'ĸ' => 'K''כ' => 'K''Ķ' => 'K''К' => 'K''ך' => 'K',
  76.             'Ł' => 'L''Ŀ' => 'L''Л' => 'L''Ļ' => 'L''Ĺ' => 'L''Ľ' => 'L''ל' => 'L',
  77.             'מ' => 'M''М' => 'M''ם' => 'M',
  78.             'Ñ' => 'N''Ń' => 'N''Н' => 'N''Ņ' => 'N''ן' => 'N''Ŋ' => 'N''נ' => 'N''ʼn' => 'N''Ň' => 'N',
  79.             'Ø' => 'O''Ó' => 'O''Ò' => 'O''Ô' => 'O''Õ' => 'O''О' => 'O''Ő' => 'O''Ŏ' => 'O''Ō' => 'O''Ǿ' => 'O''Ǒ' => 'O''Ơ' => 'O',
  80.             'פ' => 'P''ף' => 'P''П' => 'P',
  81.             'ק' => 'Q',
  82.             'Ŕ' => 'R''Ř' => 'R''Ŗ' => 'R''ר' => 'R''Р' => 'R''®' => 'R',
  83.             'Ş' => 'S''Ś' => 'S''Ș' => 'S''Š' => 'S''С' => 'S''Ŝ' => 'S''ס' => 'S',
  84.             'Т' => 'T''Ț' => 'T''ט' => 'T''Ŧ' => 'T''ת' => 'T''Ť' => 'T''Ţ' => 'T',
  85.             'Ù' => 'U''Û' => 'U''Ú' => 'U''Ū' => 'U''У' => 'U''Ũ' => 'U''Ư' => 'U''Ǔ' => 'U''Ų' => 'U''Ŭ' => 'U''Ů' => 'U''Ű' => 'U''Ǖ' => 'U''Ǜ' => 'U''Ǚ' => 'U''Ǘ' => 'U',
  86.             'В' => 'V''ו' => 'V',
  87.             'Ý' => 'Y''Ы' => 'Y''Ŷ' => 'Y''Ÿ' => 'Y',
  88.             'Ź' => 'Z''Ž' => 'Z''Ż' => 'Z''З' => 'Z''ז' => 'Z',
  89.             'а' => 'a''ă' => 'a''ǎ' => 'a''ą' => 'a''à' => 'a''ã' => 'a''á' => 'a''æ' => 'a''â' => 'a''å' => 'a''ǻ' => 'a''ā' => 'a''א' => 'a',
  90.             'б' => 'b''ב' => 'b''þ' => 'b',
  91.             'ĉ' => 'c''ć' => 'c''ç' => 'c''ц' => 'c''צ' => 'c''ċ' => 'c''č' => 'c''©' => 'c''ץ' => 'c',
  92.             'Ч' => 'ch''ч' => 'ch',
  93.             'д' => 'd''ď' => 'd''đ' => 'd''ד' => 'd''ð' => 'd',
  94.             'è' => 'e''ę' => 'e''é' => 'e''ë' => 'e''ê' => 'e''е' => 'e''ē' => 'e''ė' => 'e''ě' => 'e''ĕ' => 'e''є' => 'e''ə' => 'e''ע' => 'e',
  95.             'ф' => 'f''ƒ' => 'f',
  96.             'ğ' => 'g''ġ' => 'g''ģ' => 'g''ĝ' => 'g''г' => 'g''ג' => 'g''ґ' => 'g',
  97.             'ח' => 'h''ħ' => 'h''х' => 'h''ĥ' => 'h''ה' => 'h',
  98.             'i' => 'i''ï' => 'i''î' => 'i''í' => 'i''ì' => 'i''į' => 'i''ĭ' => 'i''ı' => 'i''и' => 'i''ĩ' => 'i''ǐ' => 'i''י' => 'i''ї' => 'i''ī' => 'i''і' => 'i',
  99.             'й' => 'j''Й' => 'j''Ĵ' => 'j''ĵ' => 'j',
  100.             'ĸ' => 'k''כ' => 'k''ķ' => 'k''к' => 'k''ך' => 'k',
  101.             'ł' => 'l''ŀ' => 'l''л' => 'l''ļ' => 'l''ĺ' => 'l''ľ' => 'l''ל' => 'l',
  102.             'מ' => 'm''м' => 'm''ם' => 'm',
  103.             'ñ' => 'n''ń' => 'n''н' => 'n''ņ' => 'n''ן' => 'n''ŋ' => 'n''נ' => 'n''ʼn' => 'n''ň' => 'n',
  104.             'ø' => 'o''ó' => 'o''ò' => 'o''ô' => 'o''õ' => 'o''о' => 'o''ő' => 'o''ŏ' => 'o''ō' => 'o''ǿ' => 'o''ǒ' => 'o''ơ' => 'o',
  105.             'פ' => 'p''ף' => 'p''п' => 'p',
  106.             'ק' => 'q',
  107.             'ŕ' => 'r''ř' => 'r''ŗ' => 'r''ר' => 'r''р' => 'r''®' => 'r',
  108.             'ş' => 's''ś' => 's''ș' => 's''š' => 's''с' => 's''ŝ' => 's''ס' => 's',
  109.             'т' => 't''ț' => 't''ט' => 't''ŧ' => 't''ת' => 't''ť' => 't''ţ' => 't',
  110.             'ù' => 'u''û' => 'u''ú' => 'u''ū' => 'u''у' => 'u''ũ' => 'u''ư' => 'u''ǔ' => 'u''ų' => 'u''ŭ' => 'u''ů' => 'u''ű' => 'u''ǖ' => 'u''ǜ' => 'u''ǚ' => 'u''ǘ' => 'u',
  111.             'в' => 'v''ו' => 'v',
  112.             'ý' => 'y''ы' => 'y''ŷ' => 'y''ÿ' => 'y',
  113.             'ź' => 'z''ž' => 'z''ż' => 'z''з' => 'z''ז' => 'z''ſ' => 'z',
  114.             '™' => 'tm',
  115.             '@' => 'at',
  116.             'Ä' => 'ae''Ǽ' => 'ae''ä' => 'ae''æ' => 'ae''ǽ' => 'ae',
  117.             'ij' => 'ij''IJ' => 'ij',
  118.             'я' => 'ja''Я' => 'ja',
  119.             'Э' => 'je''э' => 'je',
  120.             'ё' => 'jo''Ё' => 'jo',
  121.             'ю' => 'ju''Ю' => 'ju',
  122.             'œ' => 'oe''Œ' => 'oe''ö' => 'oe''Ö' => 'oe',
  123.             'щ' => 'sch''Щ' => 'sch',
  124.             'ш' => 'sh''Ш' => 'sh',
  125.             'ß' => 'ss',
  126.             'Ü' => 'ue',
  127.             'Ж' => 'zh''ж' => 'zh',
  128.         ];
  129.         return strtr($subject$char_map);
  130.     }
  131.     public function get_memory_limit($return_percent false)
  132.     {
  133.         $limit_string ini_get('memory_limit');
  134.         $unit strtolower(mb_substr($limit_string, -1));
  135.         $bytes intval(mb_substr($limit_string0, -1), 10);
  136.         switch ($unit) {
  137.             case 'k': return $return_percent memory_get_usage(true) * 100 / ($bytes 1024) : $bytes 1024;
  138.             case 'm': return $return_percent memory_get_usage(true) * 100 / ($bytes 1048576) : $bytes 1048576;
  139.             case 'g': return $return_percent memory_get_usage(true) * 100 / ($bytes 1073741824) : $bytes 1073741824;
  140.         }
  141.     }
  142.     public function error(?\Exception $e null$message '')
  143.     {
  144.         if (null !== $e) {
  145.             $log = [
  146.                 'message' => $e->getMessage(),
  147.                 'called' => [
  148.                     'file' => $e->getTrace()[0]['file'],
  149.                     'line' => $e->getTrace()[0]['line'],
  150.                 ],
  151.                 'occurred' => [
  152.                     'file' => $e->getFile(),
  153.                     'line' => $e->getLine(),
  154.                 ],
  155.             ];
  156.             if ($e->getPrevious() instanceof \Exception) {
  157.                 $log += [
  158.                     'previous' => [
  159.                         'message' => $e->getPrevious()->getMessage(),
  160.                         'exception' => get_class($e->getPrevious()),
  161.                         'file' => $e->getPrevious()->getFile(),
  162.                         'line' => $e->getPrevious()->getLine(),
  163.                     ],
  164.                 ];
  165.             }
  166.             if ('' == $message) {
  167.                 $message $e->getMessage();
  168.             }
  169.         } else {
  170.             $log = ['message' => $message];
  171.         }
  172.         if ($this->security->isGranted('ROLE_SYSTEM_INFO')) {
  173.             //Si el usuario actual si existe tiene el role de ver mensajes de error, añadir el flash mensaje con el error...
  174.             $this->flashBag->add('danger'$e->getMessage());
  175.         }
  176.         $this->logger->error($message$log);
  177.     }
  178.     public function renameLibraryDirectoryIfExist(string $oldPathstring $newPath)
  179.     {
  180.         //Renombrar la carpeta dada por otra dada...
  181.         $filesystem = new Filesystem();
  182.         $base $this->bag->get('LIBRARY_PATH_INTERNAL').'/';
  183.         try {
  184.             $filesystem->rename($base.$oldPath$base.$newPath);
  185.         } catch (\Exception $e) {
  186.             $this->error($e);
  187.         }
  188.         return true;
  189.     }
  190.     public function notEmptyLibraryDirectory(string $path//$path tendrá que empezar por / siempre para pasar la validación de rutas absolutas...
  191.     {
  192.         /**
  193.          * Por ahora no se utiliza esta función se deja de manera documentativa...
  194.          */
  195.         $filesystem = new Filesystem();
  196.         if ($filesystem->isAbsolutePath($path)) { //Si es una ruta absoluta comprobar en base a la raiz de la aplicación...
  197.             $directoryPath $this->bag->get('LIBRARY_PATH').$path;
  198.             dd($directoryPath);
  199.             if ($filesystem->exists($directoryPath)) {
  200.                 $finder = new Finder();
  201.                 $finder->in($directoryPath);
  202.                 dd($finder->hasResults());
  203.                 if ($finder->hasResults()) {
  204.                 }
  205.             }
  206.         }
  207.         $this->error(null'Se intenta localizar si existe un archivo mediante una ruta relativa... "'.$path.'"');
  208.         return false;
  209.     }
  210.     public static function random_color_part()
  211.     {
  212.         return str_pad(dechex(random_int(0255)), 2'0'STR_PAD_LEFT);
  213.     }
  214.     
  215.     public static function random_color()
  216.     {
  217.         return '#' self::random_color_part() . self::random_color_part() . self::random_color_part();
  218.     }
  219.     public function getSerializer(): Serializer
  220.     {
  221.         return new Serializer([new ObjectNormalizer()], [new JsonEncoder()]);
  222.     }
  223. }