0) { return TRUE; } else { return FALSE; } } } /** * Récupère une variable GET. * * @param string|null $_string Le nom de la variable GET (optionnel). * @return mixed La valeur de la variable GET ou NULL si non définie. */ public static function getGet(?string $_string = NULL) { if ($_string == NULL) { return $_GET; } else { if (isset($_GET[$_string])) { return $_GET[$_string]; } else { return NULL; } } } /** * Récupère une variable POST. * * @param string|null $_string Le nom de la variable POST (optionnel). * @return mixed La valeur de la variable POST ou NULL si non définie. */ public static function getPost(?string $_string = NULL) { if ($_string == NULL) { return $_POST; } else { if (isset($_POST[$_string])) { return $_POST[$_string]; } else { return NULL; } } } /** * Récupère une variable FILES. * * @param string|null $_string Le nom de la variable FILES (optionnel). * @return mixed La valeur de la variable FILES ou NULL si non définie. */ public static function getFiles(?string $_string = NULL) { if ($_string == NULL) { return $_FILES; } else { if (isset($_FILES[$_string])) { return $_FILES[$_string]; } else { return NULL; } } } /** * Vérifie si une chaîne est présente dans un tableau. * * @param array $_array Le tableau à vérifier. * @param string $_string La chaîne à rechercher. * @param int|null $_exact Indique si la correspondance doit être exacte (1 pour oui, NULL pour non). * @return bool TRUE si la chaîne est trouvée, FALSE sinon. */ public static function isInArrayString(array $_array, string $_string, ?int $_exact = NULL) { foreach ($_array as $value) { if (strripos($_string, $value) !== FALSE and $_exact == NULL) { return TRUE; } elseif ($_string == $value and $_exact == 1) { return TRUE; } } return FALSE; } /** * Génère un attribut "checked" pour une case à cocher. * * @param bool $_val Indique si la case doit être cochée. * @param int $_echo Indique si le résultat doit être affiché (1) ou retourné (0). * @return string|null L'attribut "checked" ou NULL. */ public static function checkboxSelecter(bool $_val, $_echo = 1) { $tmp = ($_val == TRUE) ? "checked" : ""; if($_echo == 1){ echo $tmp; } else { return $tmp; } } /** * Récupère toutes les configurations de l'application. * * @return array|bool Les configurations ou FALSE en cas d'erreur. */ public static function getAllConfig() { db::query("SELECT " . "" . DB_T_CONFIG . ".name, " . "" . DB_T_CONFIG . ".value " . "FROM " . DB_T_CONFIG); return db::resultset(); } /** * Récupère une configuration spécifique de l'application. * * @param string $_name Le nom de la configuration. * @return mixed La valeur de la configuration. */ public static function getConfig(string $_name) { db::query("SELECT value FROM " . DB_T_CONFIG . " WHERE name = :name"); db::bind(':name', $_name); return db::single()["value"]; } /** * Met à jour une configuration de l'application. * * @param string $_name Le nom de la configuration. * @param string $_value La nouvelle valeur de la configuration. * @return bool TRUE si la mise à jour a réussi, FALSE sinon. */ public static function updateConfig(string $_name, string $_value) { db::query("UPDATE " . DB_T_CONFIG . " SET " . "value = :value " . "WHERE name = :name"); db::bind(':value', $_value); db::bind(':name', $_name); try { db::execute(); return TRUE; } catch (Exception $ex) { return FALSE; } } /** * Supprime les accents d'une chaîne de caractères. * * @param string $_data La chaîne à traiter. * @return string La chaîne sans accents. */ public static function cleanAccent(string $_data) { $search = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'à', 'á', 'â', 'ã', 'ä', 'å', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ò', 'ó', 'ô', 'õ', 'ö', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ'); $replace = array('A', 'A', 'A', 'A', 'A', 'A', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 'a', 'a', 'a', 'a', 'a', 'a', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y'); $return = str_replace($search, $replace, $_data); return strtoupper($return); } /** * Convertit une date MySQL en format français. * * @param string $_datetime La date au format MySQL. * @param bool $_hour Indique si l'heure doit être incluse. * @return string La date au format français. */ public static function convertDate(string $_datetime, bool $_hour = TRUE) { $pieces = explode(" ", $_datetime); if ($_hour == TRUE) { $pieces3 = explode(":", $pieces[1]); } $pieces2 = explode("-", $pieces[0]); if ($_hour == TRUE) { return $pieces2[2] . "/" . $pieces2[1] . "/" . $pieces2[0] . " à " . $pieces3[0] . ":" . $pieces3[1]; } else { return $pieces2[2] . "/" . $pieces2[1] . "/" . $pieces2[0]; } } /** * Retourne la date actuelle au format français. * * @param string|null $_timestampMysql Le timestamp MySQL (optionnel). * @return string|DateTime La date au format français ou un objet DateTime. */ public static function dateFr(?string $_timestampMysql = NULL) { if ($_timestampMysql == NULL) { $Now = new DateTime('now', new DateTimeZone(TIME_ZONE)); return $Now->format("d/m/Y H:i:s"); } else { return DateTime::createFromFormat("d/m/Y H:i:s", $_timestampMysql); } } /** * Convertit un timestamp en date. * * @param int|null $_timestamp Le timestamp à convertir (optionnel). * @return string|null La date au format MySQL ou NULL si aucun timestamp n'est fourni. */ public static function dateFromTimestamp(?int $_timestamp = NULL) { if ($_timestamp == NULL) { return NULL; } else { return date("Y-m-d H:i:s", $_timestamp); } } /** * Extrait la date sans l'heure d'une chaîne datetime. * * @param string $_datetime La chaîne datetime. * @return string La date sans l'heure. */ public static function dateWhithoutHours(string $_datetime) { return explode(" ", $_datetime)[0]; } /** * Formate une taille de fichier en unités lisibles. * * @param float $_size La taille en octets. * @param int $_decimalplaces Le nombre de décimales à inclure. * @return string La taille formatée. */ public static function formatFileSize(float $_size, int $_decimalplaces = 0) { $sizes = array('O', 'Ko', 'Mo', 'Go', 'To'); for ($i = 0; $_size > 1024 && $i < count($sizes) - 1; $i++) { $_size /= 1024; } return round($_size, $_decimalplaces) . ' ' . $sizes[$i]; } /** * Formate un montant en euros. * * @param float $_amount Le montant à formater. * @return string Le montant formaté en euros. */ public static function formatEuro($_amount) { $amount = (float)$_amount; $formattedAmount = number_format($amount, 2, ',', ' '); return $formattedAmount . ' €'; } /** * Vérifie si une chaîne ne contient que des caractères alphabétiques. * * @param string $_string La chaîne à vérifier. * @return bool TRUE si la chaîne contient uniquement des lettres, FALSE sinon. */ public static function checkStringOnly(string $_string) { if (!ctype_alpha($_string)) { return TRUE; } else { return FALSE; } } /** * Génère un élément de menu. * * @param string $_id L'identifiant de l'élément de menu. * @param string $_href L'URL de destination. * @param string $_titre Le titre de l'élément de menu. * @param string|null $_style Le style CSS à appliquer (optionnel). * @param string|null $_icon L'icône à afficher (optionnel). * @return void */ public static function elementMenu(string $_id, string $_href, string $_titre, ?string $_style = NULL, ?string $_icon = NULL) { if (access::ifAccesss($_id)) { ($_style != NULL) ? $_style = ' style="' . $_style . '"' : NULL; echo ''; } } /** * Génère un élément de menu avec un lien. * * @param string $_id L'identifiant de l'élément de menu. * @param string $_href L'URL de destination. * @param string $_titre Le titre de l'élément de menu. * @param string|null $_style Le style CSS à appliquer (optionnel). * @param string $_target La cible du lien (par défaut "_blank"). * @return void */ public static function elementMenuLink(string $_id, string $_href, string $_titre, ?string $_style = NULL, string $_target = "_blank") { if (access::ifAccesss($_id)) { ($_style != NULL) ? $_style = ' style="' . $_style . '"' : NULL; echo ''; } } /** * Génère un en-tête de section. * * @param string $_id L'identifiant de l'en-tête. * @param string $_titre Le titre de l'en-tête. * @param string|null $_style Le style CSS à appliquer (optionnel). * @param string|null $_collapse L'identifiant de la section à réduire/étendre (optionnel). * @return void */ public static function elementMenuH6(string $_id, string $_titre, ?string $_style = NULL, ?string $_collapse = NULL) { if (access::ifAccesss($_id)) { ($_style != NULL) ? $_style = $_style : NULL; echo ''; } } /** * Génère une fil d'Ariane (breadcrumb). * * @param array $_arbo Les éléments de la fil d'Ariane. * @return string Le code HTML de la fil d'Ariane. */ public static function filAriane(array $_arbo) { $return = ''; if(isset($_arbo["refresh-json"])){ $return .= ""; } return $return; } /** * Calcule un pourcentage. * * @param int|null $_nombre Le nombre partiel. * @param int|null $_total Le nombre total. * @param int $_pourcentage Le pourcentage à calculer (par défaut 100). * @return int Le pourcentage calculé. */ public static function caculPourcentage(?int $_nombre, ?int $_total, int $_pourcentage = 100) { if ($_nombre == NULL) return 0; $resultat = ($_nombre / $_total) * $_pourcentage; return round($resultat); } /** * Encode une chaîne en UTF-8. * * @param string $_data La chaîne à encoder. * @return string La chaîne encodée en UTF-8. */ public static function encodeUTF8(string $_data) { return (mb_detect_encoding($_data) != "UTF-8") ? mb_convert_encoding($_data, 'UTF-8', mb_list_encodings()) : $_data; } /** * Vérifie la connexion à Internet. * * @return bool TRUE si connecté, FALSE sinon. */ public static function testConnexionInternet() { $hosts = ['1.1.1.1', '1.0.0.1', '8.8.8.8', '8.8.4.4']; foreach ($hosts as $host) { if ($connected = @fsockopen($host, 443)) { fclose($connected); return TRUE; } } return FALSE; } /** * Retourne la date et l'heure actuelles au format texte. * * @return string La date et l'heure au format texte. */ public static function printDateTxt() { $date = new IntlDateFormatter('fr_FR', IntlDateFormatter::LONG, IntlDateFormatter::NONE); return $date->format(time()) . " à " . date("H:i:s"); } /** * Réinitialise les données dans la base de données. * * @return void */ public static function resetDatas() { db::query("TRUNCATE " . DB_T_TEMP_SALARIES); db::execute(); json::delete("tmp_salaries"); db::query("TRUNCATE " . DB_T_SALARIES); db::execute(); json::delete("salaries"); db::query("TRUNCATE " . DB_T_FILES); db::execute(); file::cleanAllFiles(DIR_DATAS_FILES); db::query("TRUNCATE " . DB_T_EXCEL); db::execute(); json::delete("excel"); db::query("TRUNCATE " . DB_T_SALARIES_PROWEB); db::execute(); json::delete("salaries-proweb"); db::query("TRUNCATE " . DB_T_EVENTS_INSCRITS); db::execute(); db::query("TRUNCATE " . DB_T_EVENTS); db::execute(); json::delete("events"); db::query("TRUNCATE " . DB_T_EXCEL_PROWEB); db::execute(); json::delete("excel-proweb"); file::cleanAllFiles(SFTP_LOCAL); } /** * Encode une chaîne en base64 pour une utilisation dans une URL. * * @param string $val La chaîne à encoder. * @return string La chaîne encodée en base64. */ public static function base64_url_encode(string $val) { return strtr(base64_encode($val), '+/=', '-_,'); } /** * Décode une chaîne base64 encodée pour une utilisation dans une URL. * * @param string $val La chaîne à décoder. * @return string La chaîne décodée. */ public static function base64_url_decode(string $val) { return base64_decode(strtr($val, '-_,', '+/=')); } /** * Convertit un texte en UTF-8 si nécessaire. * * @param string $_texte Le texte à convertir. * @return string Le texte converti en UTF-8. */ public static function convertirEnUtf8(string $_texte) { if (!mb_detect_encoding($_texte, 'UTF-8', TRUE)) { return mb_convert_encoding($_texte, 'UTF-8', 'auto'); } else { return $_texte; } } /** * Imprime une option sélectionnée dans un formulaire. * * @param string|null $_string La valeur de l'option. * @param mixed $_value La valeur à comparer. * @return void */ public static function printFormSelectOption(?string $_string = NULL, $_value) { if ($_string != NULL and $_string == $_value) { echo " selected"; } } /** * Récupère la valeur d'un formulaire. * * @param string|null $_string La valeur à récupérer. * @return string|null La valeur récupérée ou NULL. */ public static function getFormValue(?string $_string = NULL) { if ($_string != NULL) { return $_string; } } /** * Imprime la valeur d'un formulaire. * * @param string|null $_string La valeur à imprimer. * @return void */ public static function printFormValue(?string $_string = NULL) { if ($_string != NULL) { echo $_string; } } /** * Convertit des octets entre différentes unités. * * @param float $val La valeur à convertir. * @param string $type_val L'unité d'origine. * @param string $type_wanted L'unité cible. * @param bool $_float Indique si le résultat doit être un flottant. * @return string La valeur convertie avec l'unité cible. */ public static function convertBytes(float $val, string $type_val = "o", string $type_wanted = "Mo", bool $_float = FALSE) { $tab_val = array("o", "ko", "Mo", "Go", "To", "Po", "Eo"); if (!(in_array($type_val, $tab_val) && in_array($type_wanted, $tab_val))) return 0; $tab = array_flip($tab_val); $diff = $tab[$type_val] - $tab[$type_wanted]; $type_wanted_print = $_float == FALSE ? $type_wanted : NULL; if ($diff > 0) return round(($val * pow(1024, $diff)), 2) . $type_wanted_print; if ($diff < 0) return round(($val / pow(1024, -$diff)), 2) . $type_wanted_print; return round(($val), 2) . $type_wanted_print; } /** * Récupère la taille de la base de données. * * @return array Les informations sur la taille de la base de données. */ public static function getSizeDataBase(){ db::query("SELECT table_schema AS nameDB, ROUND(SUM( data_length + index_length ) / 1024 / 1024, 2) AS moDB FROM information_schema.TABLES WHERE TABLE_SCHEMA = '".DB_NAME."'"); return db::single(); } /** * Génère une barre de progression avec des avertissements. * * @param float $_num La valeur actuelle. * @param float $_max La valeur maximale. * @param string $_label L'étiquette de la barre de progression. * @param string $_icon L'icône à afficher. * @return void */ public static function progressBarWarning(float $_num, float $_max, string $_label, string $_icon){ $changeUnit = 1073741824; $valueUnitNum = $_num >= $changeUnit ? "Go" : "Mo"; $valueUnitMax = $_max >= $changeUnit ? "Go" : "Mo"; $pourcentage = number_format(($_num / $_max) * 100, 2); if($pourcentage < 50){ $infos = ["color" => "bg-success"]; } elseif($pourcentage < 75){ $infos = ["color" => "bg-warning"]; } else { $infos = ["color" => "bg-danger"]; } echo '
'.$pourcentage.'%
'; } /** * Génère un badge d'alerte si nécessaire. * * @param bool $_alerte Indique si l'alerte doit être affichée. * @return string|null Le code HTML du badge ou NULL. */ static public function printBadgeGeneral(bool $_alerte){ return $_alerte == TRUE ? '' : NULL; } /** * Vérifie les alertes pour les documents. * * @return array Les informations sur les alertes. */ static public function ifbadge() { $return = []; $return["DOC"] = document::badgeAlert(); if ($return["DOC"] != NULL) { $return["ALERTE"] = TRUE; } else { $return["ALERTE"] = FALSE; } return $return; } /** * Génère un menu de navigation. * * @param array $_navInfos Les informations de navigation. * @return void */ static public function menu(array $_navInfos){ $badge = self::ifbadge(); echo '' . $_navInfos["title"] . '' . debug::getBadges(); echo ''; echo ''; echo ''; } /** * Récupère l'adresse IP de l'utilisateur. * * @return string L'adresse IP de l'utilisateur. */ static public function getUserIP() { $ip = 'Inconnue'; if (!empty($_SERVER['HTTP_CLIENT_IP'])) { // IP partagée par un proxy $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { // IP du client derrière un proxy $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { // IP du client directement connectée au serveur $ip = $_SERVER['REMOTE_ADDR']; } // Nettoyage des IPs multiples dans le cas de 'HTTP_X_FORWARDED_FOR' if (strpos($ip, ',') !== false) { $ip = explode(',', $ip)[0]; } return $ip; } /** * Aplatit un tableau multidimensionnel. * * @param array|null $_array Le tableau à aplatir (optionnel). * @return array|null Le tableau aplati ou NULL. */ static public function extractArrayInArray(?array $_array = NULL){ if($_array != NULL){ foreach ($_array as $item) { foreach ($item as $key => $value) { $flattened[$key] = $value; } } } else { $flattened = NULL; } return $flattened; } }