/Framework/Core/Helper/Utils.php

https://gitlab.com/Erdrix/overviewCompanies · PHP · 296 lines · 184 code · 31 blank · 81 comment · 36 complexity · 724c43617452aa5fbb716584c19013cb MD5 · raw file

  1. <?php
  2. // Permission des dossier
  3. $_folder = null;
  4. /**
  5. * Affiche tous les elements d'un tableau
  6. *
  7. * @param mixed $data : Donnée(s) à afficher
  8. */
  9. function dump($data)
  10. {
  11. echo '<pre>';
  12. $type = gettype($data);
  13. if ('object' === $type && !($data instanceof Closure)) {
  14. $type = get_class($data);
  15. $data = get_object_vars($data);
  16. }
  17. echo '<span style="color:#037dee">' . $type . '</span>';
  18. if (is_array($data)) {
  19. echo '(' . sizeof($data) . ') {';
  20. printArray($data, 1);
  21. echo '<br>}';
  22. } elseif ($data instanceof Closure) {
  23. printFunction($data);
  24. } else {
  25. $length = strlen($data);
  26. if (is_bool($data)) {
  27. $data = $data ? 'true' : 'false';
  28. }
  29. echo '(' . $length . ') "<span style="color:#92b938">' . escape($data) . '</span>"';
  30. }
  31. echo '</pre>';
  32. }
  33. /**
  34. * Parcours récursif d'un tableau
  35. *
  36. * @param array $array : Tableau à parcourir
  37. * @param integer $indent : Nombre d'indentation du texte
  38. */
  39. function printArray($array, $indent)
  40. {
  41. $space = indent($indent);
  42. if (empty($array)) {
  43. echo '<br>' . $space . '<i style="color:rgba(149, 149, 145, 0.64)">empty</i>';
  44. } else {
  45. foreach ($array as $key => $value) {
  46. $type = gettype($value);
  47. if ('object' === $type && !($value instanceof Closure)) {
  48. $type = get_class($value);
  49. $value = get_object_vars($value);
  50. }
  51. echo '<br>' . $space;
  52. echo '["<i style="color:red">' . escape($key) . '</i>"] => <span style="color:#037dee">' . $type .
  53. '</span>';
  54. if (is_array($value)) {
  55. echo '(' . sizeof($value) . ') {';
  56. printArray($value, $indent + 1);
  57. echo '<br>' . $space . '}';
  58. } elseif ($value instanceof Closure) {
  59. printFunction($value);
  60. } else {
  61. $length = strlen($value);
  62. if (is_bool($value)) {
  63. $value = $value ? 'true' : 'false';
  64. }
  65. echo '(' . $length . ') "<span style="color:#92b938">' . escape($value) . '</span>"';
  66. }
  67. }
  68. }
  69. }
  70. /**
  71. * Affiche le constructeur de la fonction
  72. *
  73. * @param Callable $closure : Fonction à afficher
  74. */
  75. function printFunction(Callable $closure)
  76. {
  77. $reflection = new ReflectionFunction($closure);
  78. $arguments = $reflection->getParameters();
  79. $list = [];
  80. foreach ($arguments as $param) {
  81. $list[] = $param->getName();
  82. }
  83. echo '(Closure) ';
  84. if (!empty($list)) {
  85. echo '"<span style="color:orange">$' . implode(', $', $list) . '</span>"';
  86. }
  87. }
  88. /**
  89. * Retourne une chaîne de caractère contenant des espaces
  90. *
  91. * @param integer $indent : Nombre d'indentation du texte
  92. *
  93. * @return string
  94. */
  95. function indent($indent)
  96. {
  97. $space = '';
  98. for ($i = 0; $i < $indent * 4; $i++) {
  99. $space = $space . '&nbsp;';
  100. }
  101. return $space;
  102. }
  103. /**
  104. * Protege contre des inclusions de données
  105. *
  106. * @param string $string : Valeur à échapper
  107. *
  108. * @return string
  109. */
  110. function escape($string)
  111. {
  112. return htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
  113. }
  114. /**
  115. * Protege un tableau contre des inclusions de données
  116. *
  117. * @param mixed $object
  118. *
  119. * @return array
  120. */
  121. function array_escape($object)
  122. {
  123. if (is_array($object)) {
  124. $temp = [];
  125. foreach ($object as $key => $value) {
  126. $type = gettype($value);
  127. if (is_array($value) || $type === 'object') {
  128. $temp[$key] = array_escape($value);
  129. } else {
  130. $temp[$key] = escape($value);
  131. }
  132. }
  133. return $temp;
  134. } else {
  135. $type = gettype($object);
  136. if ($type === 'object') {
  137. $list = get_object_vars($object);
  138. foreach ($list as $key => $value) {
  139. $object->$key = escape($value);
  140. }
  141. return $object;
  142. } else {
  143. return escape($object);
  144. }
  145. }
  146. }
  147. /**
  148. * Retourne un tableau contenant la moyenne des valeurs présent dans les deux tableau
  149. *
  150. * @param array $data : Tableau source
  151. * @param array $new : Tableau contant les nouvelles valeurs
  152. *
  153. * @return array
  154. */
  155. function arrayAverage($data, $new)
  156. {
  157. $temp = [];
  158. foreach ($data as $key => $value) {
  159. if (isset($new[$key])) {
  160. if (is_array($data[$key])) {
  161. if (is_array($new[$key])) {
  162. $temp[$key] = arrayAverage($data[$key], $new[$key]);
  163. } else {
  164. $temp[$key] = $data[$key];
  165. }
  166. } else {
  167. $temp[$key] = ($data[$key] + $new[$key]) / 2;
  168. }
  169. } else {
  170. $temp[$key] = $value;
  171. }
  172. }
  173. return $temp;
  174. }
  175. /**
  176. * Débug la variable et stop le script
  177. *
  178. * @param mixed $data ; Variable à débug
  179. */
  180. function dd($data)
  181. {
  182. echo '<div style="position: absolute; z-index:1000;">';
  183. dump($data);
  184. echo '</div>';
  185. die();
  186. }
  187. /**
  188. * Retourne le dossier temporaire de l'application
  189. *
  190. * @param boolean $folder : Nom du sous-dossier
  191. *
  192. * @return string : Chemin absolue vers le dossier
  193. */
  194. function getTemporary($folder = false)
  195. {
  196. $path = CORE . 'Tmp' . DS;
  197. if ($folder) {
  198. $path .= $folder . DS;
  199. }
  200. if (class_exists('Conf')) {
  201. $folder = Conf::get('global.permission.folders');
  202. } else {
  203. $folder = 774;
  204. }
  205. if (!is_dir($path)) {
  206. mkdir($path, octdec('0' . $folder), true);
  207. }
  208. return $path;
  209. }
  210. /**
  211. * Supprime les antislashes dans un tableau
  212. *
  213. * @param array $value : Tableau à parcourir
  214. *
  215. * @return array
  216. */
  217. function stripSlashesDeep($value)
  218. {
  219. $value = is_array($value) ? array_map([$this, 'strip_slashes_deep'], $value) : stripslashes($value);
  220. return $value;
  221. }
  222. /**
  223. * Flatten un tableau de données
  224. *
  225. * @param array $array : Tableau de valeurs
  226. * @param integer $level : Profondeur d'analyse
  227. *
  228. * @return array
  229. */
  230. function flatten(array $array, $level = 0)
  231. {
  232. $result = [];
  233. foreach ($array as $i => $v) {
  234. if (0 <= $level && is_array($v)) {
  235. $v = flatten($v, $level > 1 ? $level - 1 : 0 - $level);
  236. $result = array_merge($result, $v);
  237. } else {
  238. $result[] = $v;
  239. }
  240. }
  241. return $result;
  242. }
  243. /**
  244. * Flatten un tableau associatif de données
  245. *
  246. * @param array $array : Tableau de valeurs
  247. * @param string $glue : Jointure des clée
  248. *
  249. * @return array
  250. */
  251. function flattenAssoc(array $array, $glue = '.')
  252. {
  253. $result = [];
  254. foreach ($array as $key => $value) {
  255. if (is_array($value)) {
  256. $temp = flattenAssoc($value);
  257. foreach ($temp as $temp_key => $temp_value) {
  258. $result[$key . $glue . $temp_key] = $temp_value;
  259. }
  260. } else {
  261. $result[$key] = $value;
  262. }
  263. }
  264. return $result;
  265. }