/*! * GJframework * model/Site.class.php * v1.0.0 (03/09/2018) * * Created by Guillaume Juncker on 24/08/2018. * Copyright © Guillaume Juncker. All rights reserved. */ /** * Site * Classe de gestion du site */ class Site { public $name = "", $base_path = "", $base_url = "", $in_prod = "", $Finder = NULL, $Email = NULL, $Errors = array(); /*------------------------------------------------------------------------------------------------------------------------------*/ /** * __construct * Contruit un Objet * @return void */ public function __construct() { $this->name = $_SESSION['config']['site']['name']; $this->base_path = dirname(__DIR__); $this->base_url = "http".($_SERVER['HTTPS']== "on" ? "s" : "")."://".$_SERVER['HTTP_HOST'].str_replace($_SERVER['DOCUMENT_ROOT'], "", $this->base_path); $this->in_prod = $_SERVER['SERVER_NAME']!= "localhost"; $this->Email = new Email($_SESSION['config']['email']['settings']); $this->Finder = new Finder($this->base_path."/storage"); $this->initErrors(); } /*------------------------------------------------------------------------------------------------------------------------------*/ /** * initErrors * Définit les erreurs possibles des fonctions de la classe * @return void */ protected function initErrors() { $this->Errors["ACCESS"] = new CustomError("danger", "Vous n'êtes pas autorisé à effectuer cette opération"); $this->Errors["RECAPTCHA"] = new CustomError("warning", "Vous avez été considéré comme un robot, votre message n'a pas été envoyé"); } /*------------------------------------------------------------------------------------------------------------------------------*/ /** * basepath2baseurl * Transforme un chemin absolu en url * @param string $path: le chemin absolu à transformer * @return string: l'url correspondante */ public final function basepath2baseurl(string $path) { return str_replace($this->base_path, $this->base_url, $path); } /** * baseurl2basepath * Transforme une url en chemin absolu * @param string $url: l'url à transformer * @return string: le chemin absolu correspondant */ public final function baseurl2basepath(string $url) { return str_replace($this->base_url, $this->base_path, $url); } /** * br2nl * Convertir les sauts de ligne HTML (
) en saut de ligne texte (\n) * @param string $str: la chaine de caractères à convertir * @return string: la chaine de caractères convertie */ public final function br2nl(string $str) { return preg_replace("#]*>\s*\r*\n*#is", "\n", $str); } /** * stripos * Amélioration de la fonction stripos pour rechercher plusieurs éléments via un tableau * @param string $haystack: la chaîne dans laquelle on effectue la recherche * @param array $needles: le tableau de caractères ou de chaines à rechercher * @param int $offset: si spécifié, la recherche commencera à partir de ce nombre de caractères, compté depuis le début de la chaîne. Si la position est négative, la recherche commencera en utilisant ce nombre de caractères mais en commençant par la fin de la chaîne. * @return int: la position de la première occurrence d'une des recherches dans la chaine de caractères */ public function stripos(string $haystack, array $needles, int $offset = 0) { $stripos = array(); foreach($needles as $needle) { $stripos[] = stripos($haystack, $needle, $offset); } return min($stripos); } /** * substr_nbw * Amélioration de la fonction substr pour ne pas couper dans un mot * @param string $str: la chaîne d'entrée (doit comporter au moins un caractère) * @param int $start: premier caractère du segment à récupérer * @param int $length: nombre minimum de caractères à retourner * @return string: le segment de $str défini par $start et $length suivi de $after */ public final function substr_nbw(string $str, int $start, int $length) { if(($nbw_start = strrpos(substr($str, 0, $start), ". "))!==FALSE) { $nbw_start++;} $nbw_str = substr($str, $nbw_start); if(($nbw_length = strpos($nbw_str, " ", $length))!==FALSE) { return substr($nbw_str, 0, $nbw_length);} return $nbw_str; } /** * strRand * Génère une chaine de caractères aléatoires * @param int $length: la taille de la chaine à générer * [@param bool $alpha: la chaine peut-elle contenir des caractères alphabétiques] * [@param bool $num: la chaine peut-elle contenir des caractères numériques] * [@param bool $caps: la chaine peut-elle contenir des caractères alphabétiques majuscules] * @return string: la chaine de caractères aléatoires */ public final function strRand(int $length, bool $alpha = TRUE, bool $num = TRUE, bool $caps = TRUE) { $alphanum_list = ""; if($alpha) { $chars.= "abcdefghijklmnopqrstuvwxyz";} if($num) { $chars.= "0123456789";} if($caps) { $chars.= "ABCDEFGHIJKLMNOPQRSTUVWXYZ";} $chars_len = strlen($chars); $str_rand = ""; for($i = 0 ; $i < $length ; $i++) { $str_rand.= $chars[rand(0, $chars_len - 1)];} return $str_rand; } /** * stripAccents * Retire les accents des lettres accentuées * @param string $str: la chaine de caractères à désaccentuer * @return string: la chaine de caractères désaccentuée */ public final function stripAccents(string $str) { return str_replace(array('à', 'â', 'ä', 'á', 'ã', 'å', 'î', 'ï', 'ì', 'í', 'ô', 'ö', 'ò', 'ó', 'õ', 'ø', 'ù', 'û', 'ü', 'ú', 'é', 'è', 'ê', 'ë', 'ç', 'ÿ', 'ñ', 'À', 'Â', 'Ä', 'Á', 'Ã', 'Å', 'Î', 'Ï', 'Ì', 'Í', 'Ô', 'Ö', 'Ò', 'Ó', 'Õ', 'Ø', 'Ù', 'Û', 'Ü', 'Ú', 'É', 'È', 'Ê', 'Ë', 'Ç', 'Ÿ', 'Ñ'), array('a', 'a', 'a', 'a', 'a', 'a', 'i', 'i', 'i', 'i', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'e', 'e', 'e', 'e', 'c', 'y', 'n', 'A', 'A', 'A', 'A', 'A', 'A', 'I', 'I', 'I', 'I', 'O', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'E', 'E', 'E', 'E', 'C', 'Y', 'N'), $str); } /** * url * Transforme une chaine de caractères pour qu'elle soit utilisable en tant qu'url * @param string $string: la chaine de caractères * [@param string $replacement: la chaine de caractères par laquelle remplacer les caractères interdits] * @return string: la chaine de caractères sans espace ni accents ni caractères spéciaux */ public function url(string $string, string $replacement = "-") { $string = $this->stripAccents(strtolower(html_entity_decode($string))); $string = preg_replace("#[^A-Za-z0-9-]#", $replacement, $string); $string = preg_replace("#[\$replacement]+#", $replacement, $string); return trim($string, "\$replacement"); } /*------------------------------------------------------------------------------------------------------------------------------*/ /** * reCaptcha * Vérifie la validité d'un reCaptcha * @param string $response: la réponse renvoyé par reCaptcha * @return bool: TRUE si le test est positif, FALSE sinon */ public function reCaptcha($response) { $recaptchaResponse = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$_SESSION['config']['g-recaptcha']['secretkey']."&response=".$response); $recaptchaResult = json_decode($recaptchaResponse, true); return $recaptchaResult['success']== true; } /** * CSRF_secured * Vérifie qu'un fomulaire n'a pas été envoyé via une faille CSRF * @return bool: TRUE si la provenance a été vérifiée, FALSE sinon */ public final function CSRF_secured() { return parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST)== $_SERVER['SERVER_NAME']; // return preg_replace("#www.#", "", parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST))== $_SERVER['SERVER_NAME']; } }