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 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 'Mon profil';
if((access::ifAccesss("documents") AND session::getType() == 5) OR session::getType() == 1){ // Membre du bureau ou Admin
$nb = $badge["DOC"] > 0 ? '' . $badge["DOC"] . '' : NULL;
echo 'Vos assignations' . $nb . '';
echo 'Vos règles d\'alertes';
}
echo '';
echo 'Se déconnecter';
echo '';
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;
}
}