, mysqli_ pas activé sur 8.2 sinon pas grand chose en local, mais quelques incompatibilités ! (get_magic_quotes_gpc() ; erreur si mysqli_query() est faux ; read_exif_data => exif_read_data ; déclaration de fonction n'accepte pas de valeur par défaut avant variable sans valeur par défaut ; variable alphanumerique > 0 ! ;) stats et légendes conservation (et présence sur pays) sur list.php IOC 2021 mysqli (rapide) utf-8 (galère) php 7 (facile mais un peu laborieux) IOC/Clements (à réorganiser, base séparée pour correspondances ioc/aves/clements facile à mettre à jour ?) urls insensible à la casse (sauf répertoires Apache) page.php accepte ss-espèces et familles de Clements/IOC (même problème que ci-dessus, base séparée ?) */ function mysqli_result($result, $row, $field = 0) { if ($result === false) return false; if ($row >= @mysqli_num_rows($result)) return false; if (is_string($field) && !(strpos($field,".") === false)) { $t_field = explode(".", $field); $field = -1; $t_fields = mysqli_fetch_fields($result); for ($id = 0; $id < mysqli_num_fields($result); $id++) { if ($t_fields[$id]->table == $t_field[0] && $t_fields[$id]->name == $t_field[1]) { $field = $id; break; } } if ($field == -1) return false; } mysqli_data_seek($result, $row); $line = mysqli_fetch_array($result); if (isset($line[$field])) return $line[$field]; else return false; } /////////////////////////////////////////////////////// // fonctions //// ALL //// connect() ////////////////// /////////////////////////////////////////////////////// function connect() { global $link, $time_start, $nb_queries, $robot_addr; securite(); // connexion mysql $time_start = getmicrotime(); // mysqli if ($link = mysqli_connect($GLOBALS['mysql_server'], $GLOBALS['mysql_user'], $GLOBALS['mysql_password'], $GLOBALS['mysql_db'])) { mysqli_set_charset($link, "utf8"); $nb_queries = 0; access(); } else { $goto = "index_db_hs.html"; $err = "
Connexion impossible

Le serveur mysql semble hors-service

Réessayez plus tard
"; redirect_url($goto, $err, $goto_2 = "", $time = 10); exit; } } // 23:02 17.12.2013 function securite() { global $robot_addr; $date = date("Y-m-d G-i-s"); $REMOTE_ADDR = $_SERVER['REMOTE_ADDR']; // 1. test si URL enregistrées sur fichier "ban" (x = 5) pas d'accès, sortie script $show_ban = file_get_contents ($GLOBALS['file_path_f'].$GLOBALS['admin_path'].'show_ban.txt'); $url_ban = $GLOBALS['file_path_f'].$GLOBALS['ban']; if ($show_ban != 1 AND $file = fopen("$url_ban", "r")) { $fcontents = file( "$url_ban" ); foreach( $fcontents as $numero_ligne => $ligne) { $ligne = preg_replace("/([#]{1}.*)$/", "", $ligne); $ligne = preg_replace("/([[:space:]]+)/", "", $ligne); if ($ligne != '' AND preg_match('#'.$ligne.'#i', $REMOTE_ADDR) /*OR preg_match('#'.$ligne.'#i', $_SERVER['HTTP_USER_AGENT'])*/) { fclose($file); $url_att = $GLOBALS['file_path_f'].$GLOBALS['att']; $current = $REMOTE_ADDR." ".$date." IP/agent interdit ".$_SERVER['HTTP_USER_AGENT']." ".$_SERVER['REQUEST_URI']."\r\n"; file_put_contents($url_att, $current, FILE_APPEND); exit; } } fclose($file); } else { // enregistrement des ip interdites ou impossible d'ouvrir le fichier ban.txt echo "Impossible d'ouvrir fichier interdictions"; } // 2. test si visiteur semble être un robot/SE (x=7) $url_bot = $GLOBALS['file_path_f'].$GLOBALS['bots']; if ($file = fopen("$url_bot", "r")) { $robot_addr = FALSE; $i = 0; $fcontents = file( "$url_bot" ); foreach( $fcontents as $numero_ligne => $ligne) { $i++; $ligne = preg_replace("/([#]{1}.*)$/", "", $ligne); $ligne = preg_replace("/([[:space:]]+)/", "", $ligne); $ligne = preg_replace('!/\*.*?\*/!s', '', $ligne); $ligne = preg_replace("/£/", " ", $ligne); if (preg_match('#'.$ligne.'#i', $REMOTE_ADDR) OR preg_match('#'.$ligne.'#i', $_SERVER['HTTP_USER_AGENT']) OR $ligne == $_SERVER['HTTP_USER_AGENT']) { $robot_addr = TRUE; BREAK; } } fclose($file); } else echo "Impossible d'ouvrir fichier moteurs de recherches"; // 3. test si pattern indésirables dans REQUEST_URI $req_2 = str_replace($GLOBALS['server_path'], "", $_SERVER['REQUEST_URI']); if (preg_match('#(.*?http.*?|.*?ftp.*?|.?www\..?|_\/_\/|_manager|\.7z|\.env|\.git|&sa\=U&ei\=|admin_area|administrator/index\.php|ajax_create_folder|app-ads\.txt|att\.txt|attaques\.txt|bitrix|blogrobots\.txt|com_fabrik|com_jce|com_redmystic|components/com_|contact\.php|configuration|cPath\=|curltest\.php|dedecms\.css|dir\=|execute|fckeditor|FileZilla\.xml|file=|filemanager|ftp|\/images\/stories|imp\/test.php|include|index\.php\?opt=1|index\.php\?opt=2|index\.php\?opt=3|index\.php\?opt=4|index\.php\?opt=5|index\.php\?opt=6|index\.php\?opt=7|index\.php\?opt=8|index\.php\?opt=9|ipn_log|lib\.php|login\.php|logx\.txt|luph|magic\.php|member\/profile|metri\.php|netdefender|nimda_|nyet\.gif|gf_page=upload|password|phpMyAdmin|phpThumb|phpRPC|readme\.txt|recky|redirect|\/register|scripts|sellers\.json|setup|signup|source_dir|src\=|sUx\.php|ThisPageDoesNotExistsMan|\/up\.php|upload|update\/|wp|xmlrpc|zboard)#i', $req_2, $prob) OR $_SERVER['HTTP_USER_AGENT'] == 'Mozilla/5.0 (Android; Mobile; rv:13.0) G') { if ($robot_addr == FALSE) { $current = $REMOTE_ADDR."\r\n"; file_put_contents($url_ban, $current, FILE_APPEND); } $url_att = $GLOBALS['file_path_f'].$GLOBALS['att']; $current = $REMOTE_ADDR." ".$date." ".$req_2." ".$_SERVER['HTTP_USER_AGENT']."\r\n"; file_put_contents($url_att, $current, FILE_APPEND); EXIT; } // problème avec url étranges de google bot ou encore des liens bidons, type http://www.aerien.ch/articles/11/Tourisme_nature_ornithologie.php]Detedritinciaw ou ...Result: chosen if (isset($_GET['string']) AND preg_match("/Ã|Â|®|ionEurope/", $_GET['string']) OR preg_match('#\.php[^?.]+$#', urldecode($_SERVER['REQUEST_URI']))) { EXIT; } } ////////////////////////////////////////////////////////// // fonctions //// nav.php //// access() /// 6.11.2012 //// ////////////////////////////////////////////////////////// function access() { global $robot_addr, $session_auth, $droits, $user, $visites_jour; $date = date("Y-m-d G-i-s"); $REMOTE_ADDR = $_SERVER['REMOTE_ADDR']; // trop lent !!! $REMOTE_HOST = @getHostByAddr($REMOTE_ADDR); // 4. test si utilisateur authentifié : si pas de cookie, pas d'admin $session_auth = false; if (!isset($_COOKIE["session"])) { $droits = ""; if (isset($_REQUEST['opt']) AND $_REQUEST['opt'] != '') $opt = $_REQUEST['opt']; else $opt = ''; if (preg_match("*".$GLOBALS['admin_path']."*", $_SERVER['PHP_SELF']) OR ($GLOBALS['pub'] == FALSE AND $opt != 'auth')) { redirect_url("index.php?opt=auth", "", "", 0); exit; } } else { $session_cookie = $_COOKIE['session']; $res_access = mysqli_query($GLOBALS['link'], "SELECT user, last, droits FROM util_connect, utilisateurs WHERE session = '$session_cookie' AND user = username"); $GLOBALS['nb_queries']++; if (mysqli_num_rows($res_access) == 1) { $user = mysqli_result($res_access, 0, "user"); $last = mysqli_result($res_access, 0, "last"); $droits = mysqli_result($res_access, 0, "droits"); // définition des droits du visiteur : $session_auth; $session_level; $session_user if ($droits != "") { $session_auth = true; $session_level = $droits; $session_user = $user; ini_set("display_errors", 1); error_reporting(E_ALL); } } } $adresse_corr = $REMOTE_ADDR; // 5. test si nb visites journalières et dernières secondes pas trop nombreuses /* $ip = $_SERVER['REMOTE_ADDR'] ?? ''; $key = "rate_limit_" . $ip; // Increment IP count in RAM by 1. If it doesn't exist, start at 1 and expire in 60 seconds. $visites = apcu_inc($key, 1, $fail, 60); if ($request_count > 100) { // If they hit > 100 pages in one minute http_response_code(429); exit("Too many requests."); // Block them before MySQL ever hears about it } $visites_60sec = 100; */ $v = mysqli_query($GLOBALS['link'], "SELECT count(address) FROM stat WHERE date >= NOW() - INTERVAL 1 DAY AND address = '".$adresse_corr."'"); $GLOBALS['nb_queries']++; $v2 = mysqli_query($GLOBALS['link'], "SELECT count(address) FROM stat WHERE date >= NOW() - INTERVAL 10 SECOND AND address = '".$adresse_corr."'"); $GLOBALS['nb_queries']++; $visites_jour = mysqli_result($v, 0); $visites_10sec = mysqli_result($v2, 0); $url = $GLOBALS['file_path_f'].$GLOBALS['ban']; $visites_jour_max = 150; $visites_10sec_max = 4; if (($visites_jour > $visites_jour_max - 2 OR $visites_10sec > $visites_10sec_max - 2) AND $GLOBALS['robot_addr'] == FALSE AND $session_auth == false) // if (($visites > $visites_60sec_max) AND $GLOBALS['robot_addr'] == FALSE AND $session_auth == false) { echo "

Page views are limited !

If you are a BOT, please identify yourself as such !



Thanks in advance for your comprehension.

"; if (($visites_jour > $visites_jour_max OR $visites_10sec > $visites_10sec_max) AND $GLOBALS['robot_addr'] == FALSE) { $url_ban = $GLOBALS['file_path_f'].$GLOBALS['ban']; $current = $adresse_corr."\r\n"; file_put_contents($url_ban, $current, FILE_APPEND | LOCK_EX); } EXIT; } } /////////////////////////////////////////////////////// // fonctions //// foot.php //// stat_enreg() ////////// /////////////////////////////////////////////////////// function stat_enreg() { global $robot_addr, $QUERY_STRING, $REMOTE_ADDR, $REMOTE_USER, $HTTP_REFERER, $HTTP_USER_AGENT, $site_path, $server_path, $nb_queries, $stat_request; // sorti $To pour foot()... $To = $_SERVER['REQUEST_URI']; $maxl = 80; $site_path_stat = "/".$GLOBALS['site_path']."/"; $To = str_replace($GLOBALS['site_path'], "", $To) ; // SEULEMENT POUR URL_REWRITE = 1 !!!! if (preg_match("/page.php/i", $_SERVER['PHP_SELF']) AND isset($_GET['espece'])) $To = "o=".str_replace("_", " ", $_GET['espece']); elseif (preg_match("/index.php/i", $_SERVER['PHP_SELF']) AND isset($_GET['tit'])) $To = "a=".$_GET['tit']; $To = str_replace("/","",$To) ; if (preg_match("/list.php/i", $_SERVER['PHP_SELF']) AND isset($_POST['string'])) $To = "string=".mot_recherche(); elseif (preg_match("/list.php/i", $_SERVER['PHP_SELF']) AND preg_match("@^([a-zA-Zàéèüöäüêûôâç ]+)[/]*listes[/]*[a-zA-Z\/_]*.php@i", $To, $reg)) {$To = "string=".$reg[1];} elseif (preg_match("/list.php/i", $_SERVER['PHP_SELF']) AND preg_match("@[/]*articles[/]*([a-zA-Z_]*).php@i", $To, $reg)) {$To = "string=".$reg[1];} else $To = mb_convert_encoding(urldecode(urldecode($To)), 'UTF-8', 'ISO-8859-1'); // else{$To = $_SERVER['PHP_SELF'].$QUERY_STRING; $To = urldecode(str_replace($GLOBALS['site_path'],"",$To)); $To = substr($To, 0, $maxl); if (($show_stats = file_get_contents ($GLOBALS['file_path_f'].$GLOBALS['admin_path'].'show_stat.txt') AND $show_stats === "1") AND ($GLOBALS['robot_addr'] == FALSE OR ($show_robots = file_get_contents ($GLOBALS['file_path_f'].$GLOBALS['admin_path'].'show_robots.txt') AND $show_robots === "1") OR preg_match("/admin/", $_SERVER['REQUEST_URI'])) AND (preg_match("$.php$", $_SERVER['REQUEST_URI']) OR preg_match("$/$", $_SERVER['REQUEST_URI']))) { $logdate = date("Y-m-d G-i-s"); if (isset($_SERVER['HTTP_USER_AGENT'])) $agent = substr($_SERVER['HTTP_USER_AGENT'], 0, 120); else $agent = "-"; if (isset($_SERVER['HTTP_REFERER'])) $referer = $_REFERER = $_SERVER['HTTP_REFERER']; else $referer = $_REFERER = ''; //$_SERVER['REQUEST_URI']; $referer = str_replace($GLOBALS['server_path'].$GLOBALS['site_path'], "", urldecode(urldecode($referer))); // extraire termes de recherche des referer avec moteur de recherche $url_se = $GLOBALS['file_path_f'].$GLOBALS['se']; if ($file = fopen("$url_se", "r")) { $i = 0; $string_se = ""; $fcontents = file( "$url_se" ); foreach( $fcontents as $numero_ligne => $ligne) { $ligne = preg_replace("/([[:space:]]+)/", "", $ligne); $ligne = preg_replace('!/\*.*?\*/!s', '', $ligne); if ($i != 0) $string_se .= "|"; $string_se .= $ligne; $i++; } } // extraire termes de recherche si moteur de recherche if (isset($_GET['tit'])) $tit = $_GET['tit']; else $tit = $GLOBALS['id_page_accueil']; $mots_clefs = ''; /* debug local $referer = $GLOBALS['server_path'].$GLOBALS['site_path'].$referer; */ if(preg_match("/[\.\/](".$string_se.")[\/]*/i", $referer, $search_engine)) { if (!empty($referer)) { $query_var = array ("q", "qs", "p", "oq", "kw", "inputBox", "s", "searchfor", "text", "query", "wd"); $i = 0; $j = count($query_var); while ( $i < $j ) { $mask = "/[&|?]".$query_var[$i]."=(.*?)([&].*)*$/"; if (preg_match($mask, $referer, $keywords)) { if ($keywords[1] != '') { $referer = $mots_clefs = $keywords[1]; $referer = str_replace("[keyword]", "", $referer); $referer = str_replace("(", "", $referer); $referer = str_replace(")", "", $referer); $referer = preg_replace("/\'|’|\/|\"|\´|\`|\?|,|\.|\:|;|-/", " ", $referer); $ref = preg_split("/[\s]+/u", $referer); } foreach($ref as $k => $v) { if(preg_match('/[\pL]*/u', $v) AND strlen($v) > 3 AND !preg_match('/^[0-9]$/', $v)) { // si mot dans mots interdits searchwords_ban ne pas enregistrer/incrémenter $sql_ban = "SELECT count(*) FROM searchwords_ban WHERE mot = '$v'"; $res_ban = mysqli_query($GLOBALS['link'], $sql_ban); $GLOBALS['nb_queries']++; if (mysqli_result($res_ban, 0) == 0) { $sql = "SELECT nb FROM searchwords WHERE mot = '".$v."' AND id_article = '".$tit."'"; $res = mysqli_query($GLOBALS['link'], $sql); $GLOBALS['nb_queries']++; if(mysqli_num_rows($res) < 1) { if (substr($v, -1) == "s") /* et adjectifs? et -es? OR substr($v, -1) == "e" */ { $v = substr($v, 0, -1); $sql = "SELECT nb FROM searchwords WHERE mot = '".$v."' AND id_article = '".$tit."'"; $res = mysqli_query($GLOBALS['link'], $sql); $GLOBALS['nb_queries']++; if(mysqli_num_rows($res) == 1) { $nb = mysqli_result($res, 0, 'nb') + 1; $sql = "UPDATE searchwords SET nb = '$nb' WHERE mot = '$v' AND id_article = '".$tit."'"; $res = mysqli_query($GLOBALS['link'], $sql); $GLOBALS['nb_queries']++; } } // test si majuscule => on laisse seulement la 1ère letter en majuscule else { $code = ord(substr ($v, 0, 1)); if (($code >= 65) && ($code <= 90)) $v = mb_ucfirst(strtolower($v)); $sql = "INSERT INTO searchwords_new (mot, id_article, nb) VALUES ('".$v."', '".$tit."', '1')"; $res = mysqli_query($GLOBALS['link'], $sql); $GLOBALS['nb_queries']++; } } else { $nb = mysqli_result($res, 0, 'nb') + 1; $mot = mysqli_result($res, 0, 'mot'); $sql = "UPDATE searchwords SET nb = '$nb' WHERE mot = '$v' AND id_article = '".$tit."'"; $res = mysqli_query($GLOBALS['link'], $sql); $GLOBALS['nb_queries']++; } } } } } $i++; } } } $referer = substr(addslashes($referer), 0, $maxl); $res = mysqli_query($GLOBALS['link'], "INSERT INTO stat (request, address, agent, date, referer) VALUES ('".$To."', '".$_SERVER['REMOTE_ADDR']."', '".$agent."', '".$logdate."', '".$referer."')"); $GLOBALS['nb_queries']++; } $stat_request = $To; // pour foot() } /////////////////////////////////////////////////////// // fonctions //// *.php //////// robots() ///////////// /////////////////////////////////////////////////////// function htmlsce($string) { // return htmlentities($string, ENT_QUOTES | ENT_IGNORE, $GLOBALS['encodage']); // return iconv("iso-8859-1", $GLOBALS['encodage'], $string); return $string; } /////////////////////////////////////////////////////// // fonctions //// *.php //////// robots() ///////////// /////////////////////////////////////////////////////// function robots() { global $robots_content, $canonical_flag, $canonical_href; // ATTENTION ! ne marche pas si $url_rewite = 0 !!! // règle actuelle: ne pas indexer pages de navigation ou de recherche if ($canonical_href AND preg_match("*".$_SERVER['REQUEST_URI']."*", $GLOBALS['canonical_href'])) { $canonical_flag = TRUE; } if (preg_match("/©|%|®|Ã|&/", $_SERVER['REQUEST_URI']) OR (isset($_REQUEST['string']) AND $_REQUEST['string'] != '') OR preg_match("/error404.php/", $_SERVER['PHP_SELF'])) $robots_content = 'NOINDEX, NOFOLLOW, NOARCHIVE'; elseif (preg_match("/page.php/", $_SERVER['PHP_SELF'])/* OR preg_match("£oiseaux\/£", $_SERVER['REQUEST_URI'])*/) { if ($canonical_flag == TRUE) { $robots_content = 'INDEX, FOLLOW, NOARCHIVE'; } else $robots_content = 'FOLLOW, NOARCHIVE'; } elseif (preg_match("/list\.php/", $_SERVER['PHP_SELF']) AND isset($_REQUEST['region']) AND mb_ucfirst(strtolower($_REQUEST['region'])) == "Tous" AND !isset($_REQUEST['string']) AND isset($_REQUEST['ordre']) AND $_REQUEST['ordre'] != "" OR (preg_match("/index.php/", $_SERVER['PHP_SELF']) AND preg_match("/actu/", $_SERVER['REQUEST_URI']) AND (isset($_GET['id']) OR isset($_GET['an']))))/* OR preg_match("£oiseaux\/£", $_SERVER['REQUEST_URI'])*/ { $robots_content = 'INDEX, FOLLOW, NOARCHIVE'; } elseif (preg_match("/index.php/", $_SERVER['PHP_SELF']) AND ((!preg_match("/articles/", $_SERVER['REQUEST_URI']) AND $GLOBALS['id_page_accueil'] != $GLOBALS['tit_index']) OR preg_match('/string/', $_SERVER['QUERY_STRING']) OR preg_match("/region=/", $_SERVER['REQUEST_URI']) OR !isset($GLOBALS['canonical_href']) /*OR !preg_match("£".$_SERVER['REQUEST_URI']."£", $GLOBALS['canonical_href'])*/)) $robots_content = 'NOINDEX, NOFOLLOW, NOARCHIVE'; else $robots_content = 'INDEX, FOLLOW, NOARCHIVE'; } /////////////////////////////////////////////////////// // fonctions //// *.php //////// mise_en_page() /////// /////////////////////////////////////////////////////// function mise_en_page($champ) { if (!$champ) return; $champ = fich_img($champ); if (!preg_match("/\\0", $champ); else $champ = preg_replace("@(^| )(www([-]*[.]?[a-zA-Z0-9_\\+/?&%-])*)@", " \\2", $champ); } $champ = str_replace("\011", '    ', str_replace(' ', '  ', $champ)); $champ = preg_replace("*
((\015\012)|(\015)|(\012))*", '

', $champ); $pat_table = '~~usi'; if (preg_match($pat_table, $champ, $reg)) { /*echo htmlentities($reg[0]); $champ = preg_replace_callback($pat_table, "replace_tbl_lf", $champ);*/ WHILE (preg_match('~(  )+(  )+
', $champ); $champ = preg_replace("*((\015\012)|(\015)|(\012)){3}*", '


', $champ); $champ = demi_interligne($champ); $champ = preg_replace("*\[d\]*", '', $champ); // ne devrait pas exister $champ = str_replace("\'", "'", $champ); $champ = str_replace('\"', '"', $champ); $champ = preg_replace("/\r/","",$champ); $champ = preg_replace("/\n/","",$champ); // espace fixe avant double ponctuation $nbsp = ' '; $dbl_ponct = array('< ', ' >', ' !', ' ?', ' ;', ' :'); $dbl_ponct_rempl = array('«'.$nbsp, $nbsp.'»', $nbsp.'!', $nbsp.'?', $nbsp.';', $nbsp.':'); $champ = str_replace($dbl_ponct, $dbl_ponct_rempl, $champ); // 10 m. 10 mètres 100 cm... $champ = preg_replace("/([0-9]+)[\s]{0,1}\b(km|m|cm|mm|s|sec|seconde|secondes|kilomètre|kilomètres|mètre|mètres|centimètre|centimètres|millimètre|millimètres)\b(?!([^<]+)?>)/", "\\1 \\2", $champ); /* indices sup (?!([^<]+)?>) pour ne pas toucher aux balises et texte entre balises comme les liens*/ $champ = preg_replace("/\b([1I]{1})(ères|ère|ers|er)\b(?!([^<]+)?>)/", "\\1\\2", $champ); $champ = preg_replace("/\b([0-9XLVI',]{1,6})(èmes|ème|è)\b(?!([^<]+)?>)/", "\\1\\2", $champ); $champ = preg_replace("/\b([0-9',]{1,8}[ ]{0,1}(?: ){0,1})(èmes|ème|è|m|mm|cm|m\.|mm\.|cm\.)\/(s|s\.|sec|sec\.|seconde)\b(?!([^<]+)?>)/", "\\1\\2/\\3", $champ); $champ = preg_replace("/\b([2]{1})(nde|nd)\b(?!([^<]+)?>)/", "\\1\\2", $champ); $champ = preg_replace("/\b(cm|km|ha|m)(2|3)\b(?!([^<]+)?>)/", "\\1\\2", $champ); $pat_art = '/index.php\?tit=([0-9]{1,5})/'; // trouver mieux ou supprimer news (copier dans actu) if (preg_match($pat_art, $champ) AND !preg_match("/&art=/", $champ)) { WHILE (preg_match($pat_art, $champ, $reg)) { $sql = "SELECT titre FROM articles WHERE id = ".$reg[1]; $res = mysqli_query($GLOBALS['link'], $sql); $GLOBALS['nb_queries']++; $tit_fr = mysqli_result($res, 0, 'titre'); $champ = preg_replace("/index.php\?tit=".$reg[1]."/", url_rewrite("index.php?tit=".$reg[1]."&tit_fr=".url_fr($tit_fr)), $champ); } } // galerie $pat_gal = '//'; if (preg_match($pat_gal, $champ)) { WHILE (preg_match($pat_gal, $champ, $reg)) { $champ = preg_replace('//', galList($reg[1], 0), $champ); } } $pat_pub = '//'; if (is_mobile() AND preg_match($pat_pub, $champ)) { if (preg_match($pat_pub, $champ)) { WHILE (preg_match($pat_pub, $champ, $reg)) { $champ = preg_replace('//', '
'.annonces('ad_google_mobile.txt', FALSE, FALSE), $champ); } } } elseif (preg_match($pat_pub, $champ)) { WHILE (preg_match($pat_pub, $champ, $reg)) { $champ = preg_replace('//', '', $champ); } } $champ = preg_replace('/img src=("|\')/', 'img loading="lazy" src=$1', $champ); // utilisation des liens pour espèce... simplifier en supprimant urllink et url_espece ? $champ = preg_replace_callback('~([^<]+|[^<]*[^<]*[^<]*)~', "sp_url", $champ); // rajout d'une icone pour rendre les liens plus visibles dans le texte $champ = preg_replace_callback('~<(a\s[^>]+)>(.*)~isU', "icone_lien", $champ); return $champ; } function demi_interligne($text) { return preg_replace('/(
)+|\R+/iu', '

', $text); } function sp_url ($match) { list($original, $lien, $id, $espece) = $match; $sql = "SELECT espece FROM especes WHERE especes.id = ".$id; $res = mysqli_query($GLOBALS['link'], $sql); $GLOBALS['nb_queries']++; $sp = mysqli_result($res, 0, 'espece'); $url_espece = url_rewrite("page.php?espece=".$sp); $new_url = "".$espece.""; if ($url_espece != '') return $new_url; // "".$sp.""; } function icone_lien($match) { list($original, $tag, $text) = $match; // regex match groups if (preg_match('/class=|name=|title="modifier"/i', $tag) OR preg_match("*".$_SERVER['REQUEST_URI']."#*i", $tag) OR preg_match("/\.pdf/i", $tag) OR preg_match("/'.$text.''; else return '<'.$tag.' class="lnk_ext">'.$text.''; } elseif(!strpos($tag, "target=")) return '<'.$tag.' target="_blank">'.$text.''; } else { if (!strpos($text, "img")) return '<'.$tag.' class="lnk_int">'.$text.''; else return $original; } } function icone_edit() { return 'modifier'; } /////////////////////////////////////////////////////// // fonctions //// *.php ///////// tronque() /////////// /////////////////////////////////////////////////////// function tronque($chaine, $longueur = 120) { if (empty ($chaine)) { return ""; } elseif (strlen ($chaine) < $longueur) { return $chaine; } elseif (preg_match ("/(.{1,$longueur})\s./ms", $chaine, $match)) { return $match [1] . "..."; } else { return substr ($chaine, 0, $longueur) . "..."; } } /////////////////////////////////////////////////////// // fonctions //// *.php ///////// date_fr() /////////// /////////////////////////////////////////////////////// function date_fra($dat, $sep = "") { $DF = explode($sep, $dat); $date = $DF[0]." ".mois_fr($DF[1]); return $date; } /////////////////////////////////////////////////////// // fonctions // (observations) /// date_fr() ////////// /////////////////////////////////////////////////////// function date_fr($d, $sep = "-", $heure = TRUE) { $months = array("janv.", "fév.", "mars", "avril", "mai", "juin", "juil.", "août", "sept.", "oct.", "nov.", "déc."); preg_match('/([0-9]{0,4})'.$sep.'*([0-9]{0,2})'.$sep.'*([0-9]{0,2})[ ]*(.*)/', $d, $dat); // si pas de jour ne pas afficher 0 if (substr($dat[3], 0, 1) == '0') $dat[3] = substr($dat[3], -1); if ($dat[3] != '' AND ($dat[3] > 31 OR $dat[3] < 0)) { $text = "Lost in time... Please stop wasting mother earth's resources !-)

"; EXIT; error_404($text);} elseif ($dat[3] >= 1) $dat[3] = $dat[3]; else $dat[3] = ''; if ($dat[3] != '' AND ($dat[2] > 12 OR $dat[2] < 0)) { $text = "Lost in time... Please stop wasting mother earth's resources !-)

"; EXIT; error_404($text);} elseif ($dat[2] >= 1) $dat[2] = $dat[2]; else $dat[2] = ''; $d = $dat[3]." "; if ($dat[2] != "") $d .= $months[$dat[2]-1]; if ($heure == TRUE) $d .=" ".$dat[1]." ".$dat[4]; else $d .= " ".$dat[1]; return $d; } function mois_fr($m) { $mois_fr = array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"); if ($m > 0 AND $m < 13) $m = $mois_fr[$m-1]; else $m = "0"; return $m; } function date_difference($date_1, $date_2) { // an-mois-jour $diff = abs(strtotime($date_2) - strtotime($date_1)); $ans = floor($diff / (365*60*60*24)); $mois = floor(($diff - $ans * 365*60*60*24) / (30*60*60*24)); $jours = floor(($diff - $ans * 365*60*60*24 - $mois*30*60*60*24)/ (60*60*24)); $date_diff = array('ans' => $ans, 'mois' => $mois, 'jours' => $jours); return $date_diff; } function gps_distance($lat1, $lon1, $lat2, $lon2, $unit = 'K') { $theta = $lon1 - $lon2; $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); $dist = acos($dist); $dist = rad2deg($dist); $miles = $dist * 60 * 1.1515; $unit = strtoupper($unit); if ($unit == "K") return ($miles * 1.609344); else if ($unit == "N") return ($miles * 0.8684); else return $miles; } // calcule centre lat/lon d'un vecteur composé d'un ou plusieurs vecteurs (lat, lon) function gps_center($coordonnees_gps) { if (count($coordonnees_gps) == 1) { $gps_center = array('lat' => $coordonnees_gps[0][0], 'long' => $coordonnees_gps[0][1]); return $gps_center; } $x = $y = $z = 0; foreach ($coordonnees_gps as $gps) { $lat = $gps[0]; $long = $gps[1]; $latitude = $lat * pi() / 180; $longitude = $long * pi() / 180; $x = $x + cos($latitude) * cos($longitude); $y = $y + cos($latitude) * sin($longitude); $z = $z + sin($latitude); } $total = count($coordonnees_gps); $x = $x / $total; $y = $y / $total; $z = $z / $total; $centralLongitude = atan2($y, $x); $centralSquareRoot = sqrt($x * $x + $y * $y); $centralLatitude = atan2($z, $centralSquareRoot); $gps_center = array('lat' => $centralLatitude * 180 / pi(), 'long' => $centralLongitude * 180 / pi()); return $gps_center; } /////////////////////////////////////////////////////// // fonctions //// *.php ///////// highlight() ///////// /////////////////////////////////////////////////////// function highlight($word, $string, $anc = 0) { if (isset($word) AND $word != '') { $w = $word; $word = preg_replace("/(\|{1}[\w]{1,2}\|{1})+/", "|", $word); $word = preg_replace("/^[\w]{1,2}\|{1}/", "", $word); $word = preg_replace("/\|{1}[\w]{1,2}$/", "", $word); $word = preg_replace("/(\|{1}[\w]{1,2}\|{1})+/", "|", $word); $word = regexAccents($word); if (preg_match("/^[\w]{1,2}\|/iu", $word) OR preg_match("/\|[\w]{1,2}$/iu", $word) OR preg_match("/\|[\w]{1,2}\|/iu", $word)) $word = preg_replace("/^[\w]{1,2}\||\|[\w]{1,2}\||\|[\w]{1,2}$/iu", "", $word); $word_r = $word; // Problème avec textes des liens $text_pieces highlight avec casse le lien !!! $text_pieces = preg_split("'(<.+?>)'", $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); $i = $y = 0; $new_text_pieces = array(); foreach ($text_pieces as $piece) { if (strpos($piece, '<') === FALSE AND strlen($word) > 2) { if ($y == 0 AND preg_match("'($word)'iu", $piece) AND $anc == 1) {$piece = preg_replace( "'($word)'iu" , "\\1" , $piece); $y++;} else $piece = preg_replace( "'($word)'iu" , "\\1" , $piece); } $new_text_pieces[$i] = $piece;$i++; } if (count($new_text_pieces) > 0 ) $string = implode('', $new_text_pieces); else $string = ""; return $string; } else return $string; } /////////////////////////////////////////////////////// // fonctions //// w1.php ///////// img_page() ///////// /////////////////////////////////////////////////////// function sup_mots_2($word) { if (preg_match("/\||, |; | /", $word, $reg)) { $temp = array(); $word_array = preg_split("/\||, |; | /", $word); foreach($word_array as $key => $mot) { if(strlen($mot) > 2) $temp[] = $mot; } if (count($temp) >= 1) { $word = implode($reg[0], $temp); } } return $word; } /////////////////////////////////////////////////////// // fonctions //// *.php ///////// sans_accent() /////// /////////////////////////////////////////////////////// function sans_accent($str, $encoding = 'UTF-8') { $str = htmlentities($str, ENT_NOQUOTES, $encoding); $table = array( 'Š'=>'S', 'š'=>'s', 'Đ'=>'Dj', 'đ'=>'dj', 'Ž'=>'Z', 'ž'=>'z', 'Č'=>'C', 'č'=>'c', 'Ć'=>'C', 'ć'=>'c', 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E', 'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss', 'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y', 'Ŕ'=>'R', 'ŕ'=>'r', ); $str = strtr($str, $table); $str = preg_replace('#&([A-za-z])(?:acute|grave|cedil|circ|orn|ring|slash|th|tilde|uml);#', '\1', $str); $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); $str = preg_replace('#&[^;]+;#', '', $str); return $str; } /////////////////////////////////////////////////////// // fonctions // index.php; page.php // url_page() //// /////////////////////////////////////////////////////// function url_page() { global $url_page; $url_page = htmlspecialchars($_SERVER['REQUEST_URI']); return $url_page;// } /////////////////////////////////////////////////////// // fonctions //// nav.php //// getmicrotime() ///////// /////////////////////////////////////////////////////// function getmicrotime() { list($usec, $sec) = explode(" ",microtime()); return ((float)$usec + (float)$sec); } /////////////////////////////////////////////////////// // fonctions // content() //index, page, list.php ///// /////////////////////////////////////////////////////// /*09.30.2008 19:45*/ function content() { global $index_cont, $base, $titre_site, $reg; $admin = "@".$GLOBALS['admin_path']."@"; if (preg_match("/index.php/i",$_SERVER['PHP_SELF'])) { echo $GLOBALS['index_cont']; if (isset($_GET['tit'])) $tit = clean_var($_GET['tit']); else $tit = ""; index_sup($tit); } elseif(preg_match("/page.php/",$_SERVER['PHP_SELF'])) { if (preg_match($admin,$_SERVER['PHP_SELF'])) { admin_page(); } else { page_cont(); } } elseif(preg_match("/list.php/i",$_SERVER['PHP_SELF'])) { if (isset($_POST['radiobutton'])) $base = htmlentities($_POST['radiobutton']); if ((isset($GLOBALS['base']) AND $GLOBALS['base'] == 'especes') OR (isset($_GET['base']) AND $_GET['base'] == "especes") OR (!isset($GLOBALS['base']) AND !isset($_GET['base']))) { if(isset($GLOBALS['im']) AND $GLOBALS['im']==1) list_images(); else { if (function_exists('list_barre_etat')) { list_barre_etat(); list_content(); } else { list_articles_barre_etat(''); list_articles_content(''); } } $base = "especes"; } else { if ($GLOBALS['session_auth'] == true AND $GLOBALS['base'] == "agenda" OR (isset($_GET['base']) AND $_GET['base'] == "agenda")) { $titre_site = 'Agendas contenant '.$GLOBALS['string']; $base = 'agenda'; } elseif ($GLOBALS['base'] == "actu" OR (isset($_GET['base']) AND $_GET['base'] == "actu")) { $titre_site = 'Actualités contenant '.$GLOBALS['string']; $base = 'actu'; } elseif ($GLOBALS['base'] == "urls" OR (isset($_GET['base']) AND $_GET['base'] == "urls")) { $titre_site = 'Liens externes contenant '.$GLOBALS['string']; $base = 'urls'; } elseif ($GLOBALS['base'] == "articles" OR (isset($_GET['base']) AND $_GET['base'] == "articles")) { $titre_site = 'Articles contenant '.$GLOBALS['string']; $base = 'articles'; } list_articles_barre_etat($base); list_articles_content($base); } } elseif(preg_match("/liens.php/i",$_SERVER['PHP_SELF'])) { if (preg_match($admin,$_SERVER['PHP_SELF'])) { admin_liens(); } else { echo $GLOBALS['liens_content']; } } elseif(preg_match("/biblio.php/",$_SERVER['PHP_SELF'])) { if (preg_match($admin,$_SERVER['PHP_SELF'])) { admin_biblio(); } else { echo $GLOBALS['biblio_content']; include 'sondage.php'; message(); } } elseif(preg_match("/message.php/i",$_SERVER['PHP_SELF']) AND !preg_match($admin,$_SERVER['PHP_SELF'])) { message_content(); } elseif(preg_match("/messages.php/i",$_SERVER['PHP_SELF'])) { admin_messages(); } elseif(preg_match("/dev.php/i",$_SERVER['PHP_SELF'])) { if (isset($_GET['opt'])) dev_content(clean_var($_GET['opt'])); else dev_content(); } elseif(preg_match("/observ.php/i",$_SERVER['PHP_SELF'])) { observ(); /*observ_content();*/ } elseif(preg_match("/change.php/i",$_SERVER['PHP_SELF'])) { admin_change(); } } function references ($texte, $opt = '') { global $art, $tit, $titre_page, $keywords; $pattern_ref = '`([A-Za-z0-9_\.,\:;\'\"\?!\(\)àéèüùöäÀÉÈÜÖÄâôûêîíñç&%ø/ -]{3,})`i'; $pattern_anc = '`([A-Za-z0-9_.,\:;\'\"\?!\(\)/àéèüùöäÀÉÈÜÖÄâôûêîç&%ø \/ -]{3,})`i'; $pattern_news = '`([A-Za-z0-9_.,\:;\'\"\?!àéèüöäÀÉÈÜÖÄâôûêîç&% -]{3,})`i'; $pattern_bib = '``i'; $pattern_pub = '``i'; if (isset($opt)) $p = $opt; else $opt = ''; $url_page = url_page(); if (preg_match($pattern_news, $texte)) { $n = 0; $news = $month_news = ""; if ($art != '') $an_news = str_replace("OrnithoNews ", "", $GLOBALS['titre_site']); while (preg_match($pattern_news, $texte, $ref)) { $n = $n+1; $n_ref = $n; if ($n == 1) $reg = $ref[1]; $ref_texte = (''.$ref[10].''); $ref_n = ''; $MyMonths = array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"); $DF = explode('/',$ref[1]); $date = $DF[0]." ".$MyMonths[$DF[1]-1]; if ($n == 1) $news.= "
    "; if ($art == '') { if ($MyMonths[$DF[1]-1] != $month_news) { if ($month_news == "") {$month_news = $MyMonths[$DF[1]-1];} else { $news.= "
    "; $month_news = $MyMonths[$DF[1]-1]; } $news.= "
    ".$month_news."
    "; } $news.= "
  1. $ref[10]
  2. "; } if ($art != '' AND $art != str_replace("/", "_", $ref[1])) { $DA = explode('_',$art); if ($DA[1]-1 <= $DF[1] AND $DA[1]+1 >= $DF[1]) { if ($MyMonths[$DF[1]-1] != $month_news) { if ($month_news == "") $month_news = $MyMonths[$DF[1]-1]; else { $news.= "
    "; $month_news = $MyMonths[$DF[1]-1]; } $news.= "
    ".$month_news."
    "; } $news.= "
  3. $ref[10]
  4. "; } else $autres++; } elseif ($art == str_replace("/", "_", $ref[1])) { $pattern_art = '([A-Za-z0-9_.,\:;\'\"\?!àéèüöäÀÉÈÜÖÄÏâôûêîïç&% -]{3,})'; $pattern_art_text = $pattern_art.'([A-Za-z0-9_.,\:;\'\"\?!\(\)/\\\°àäéèëïüùöäÀÉÈÜÖÄÏâôûêîïç&\%\$«»<>²³™©®ø€¼½¾[:space:] -]{30,}|.+|.*$ref[9] | $date $an_news

    "; elseif(!$ref[2]) $ref_article = "

    $ref[9] | $date $an_news

    "; $texte_article = $ref_article.$texte_article; $titre_page = $ref[10]; $key = preg_split("/[\s,;:-]+/", $ref[10]); $c = 0; foreach($key as $k => $w) { if (strlen($w) > 3) {$keyword = $keyword.$w;$keyword = $keyword.", ";} $c++; } $keywords = $keyword; } } if ($ref[2]) $ref_n.= "

    $ref[10] | $ref[9] | $date

    "; elseif(!$ref[2]) $ref_n.= "

    $ref[10] | $ref[9] | $date

    "; $texte = str_replace($ref_texte, $ref_n, $texte); } if (!$art) $texte = "".$news."
"; else { $texte = $texte_article."

Autres articles trimestre :
".$news.""; if ($autres >= 1) $texte.= "
Tous les titres $an_news"; } } if (preg_match($pattern_ref, $texte)) { $references = ''; $n = 0; while (preg_match($pattern_ref, $texte, $ref)) { $n = $n+1; $n_ref = $n; $ref_abs[$n] = $ref[1]; $ref_tex[$n] = $ref[8]; for ($i = 1; $i < $n; $i++) { if (($ref_abs[$i] == $ref[1]) AND ($ref_tex[$i] == $ref[8])) $n_ref = $i; } $ref_texte = (''.$ref[8].''); $ref_sup = '['.$n_ref.']'; $texte = str_replace($ref_texte, $ref_sup, $texte); if (isset($href[0]) AND !preg_match("$(http|https)://$", $href[0])) { $href[0] = "http://".$href[0]; } if (($ref[1]) AND ($n_ref == $n)) {$references.= '

'.$n.'. '.$ref[8].'

';} elseif ((!$ref[1]) AND ($n_ref == $n)) {$references.= '

'.$n.'. '.$ref[8].'

';} } if ($n > 0) {$references = "

Références :
".$references."
";} $texte.= $references; } if (preg_match($pattern_anc, $texte)) { $n = 0; $ancres = ""; while (preg_match($pattern_anc, $texte, $ref)) { $n = $n+1; $n_ref = $n; if ($n == 1) $reg = $ref[1]; $ref_texte = (''.$ref[2].''); // $ref_a = ''; $ref_a = ''; if (preg_match("/2/", $reg)) $ref_a = '

'.$ref[2].'

'; elseif(preg_match("/3/", $reg)) $ref_a = '

'.$ref[2].'

'; if (preg_match("/r/", $reg)) $ref_a .= "
"; elseif (preg_match("/n/", $reg)) $ref_a .= ''; elseif (!preg_match("/[vrn23]/", $reg)) $ref_a .= ''.$ref[2].''; $texte = str_replace($ref_texte, $ref_a, $texte); if (preg_match("/v/", $reg)) $ancres.= "
  • "; elseif($n > 1 AND !preg_match("/v/", $reg)) $ancres.= " - "; $url_page_lien = $_SERVER['REQUEST_URI'].'#a'.$n; // if (($ref[2]) /*AND ($ref[1])*/) { $ancres.= ''.$ref[2].''; } if (preg_match("/v/", $reg)) $ancres.= "
  • "; } if ($n > 0 AND preg_match("/v/", $reg)) { if ($n >= 3) $class = ' class="cols_b"'; else $class = ' class="col"'; $ancres = "".$ancres.""; } elseif ($n > 0 AND !preg_match("/v/", $reg)) { $ancres = "
    ".$ancres."

    "; } $texte = $ancres."
    ".$texte; // IL SERAIT PLUS LOGIQUE DE REPRENDRE LA STRUCTURE biblio_especes ?? } if (preg_match($pattern_bib, $texte)) { $biblio = '

    Bibliographie

    '; $n = 0; while (preg_match($pattern_bib, $texte, $bib)) { $n = $n+1; $n_bib = $n; $bib_id[$n] = $bib[1]; $bib_texte = (''); // site_path & server_path non GLOBAL & lien incomplet : supprimer tout avant # ??? $bib_sup = ' [biblio '.$n_bib.']'; $texte = str_replace($bib_texte, $bib_sup, $texte); $sql_bib = "SELECT titre, aut, date, edit FROM biblio WHERE id = ".$bib_id[$n]; $res_bib = mysqli_query($GLOBALS['link'], $sql_bib); $GLOBALS['nb_queries']++; $tit = mysqli_result($res_bib, 0, 'titre'); $aut = mysqli_result($res_bib, 0, 'aut'); $ed = mysqli_result($res_bib, 0, 'edit'); $an = mysqli_result($res_bib, 0, 'date'); $tit_bib = "".$tit." - ".$aut." - ".$ed.", ".$an; if ($tit != '') {$biblio.= ''.$n.'. '.$tit_bib.'
    ';} } $texte.= $biblio."
    "; } if (preg_match($pattern_pub, $texte)) { $n = 0; while (preg_match($pattern_pub, $texte, $pub)) { $n = $n+1; $n_pub = $n; $pub_id[$n] = $pub[1]; $pub_texte = (''); $pub_sup = annonces($pub[1], FALSE, FALSE); $texte = str_replace($pub_texte, '
    '.$pub_sup.'
    ', $texte); } } return $texte; } ////10.11.2012 21:08/////////////////////////////////////////////////// // fonctions //// index.php //// actu_titres() ///////// /////////////////////////////////////////////////////// function actu_titres ($texte) { $sql_news_count = "SELECT count(*) as c FROM actu WHERE 1"; $res_total = mysqli_query($GLOBALS['link'], $sql_news_count); $GLOBALS['nb_queries']++; $num = mysqli_fetch_array($res_total); $num_rows_total = $num["c"]; if ($num_rows_total >= 1) { $an = date("Y"); $date_news = "OrnithoNews ".$an; $news= ''; $sql_news = 'SELECT titre, date, id FROM actu WHERE 1 ORDER BY date DESC, id DESC LIMIT 1, 5'; $result = mysqli_query($GLOBALS['link'], $sql_news); $GLOBALS['nb_queries']++; $nb_result = mysqli_num_rows($result); // affichage derniers 0, 10 titres $actu = ""; $titre_actu = $texte_actu = $liste_actu = ''; $i = 0; if ($nb_result >= 1) { $liste_actu = "Autres actualités récentes
    "; while (list($tit_actu, $date_actu, $id_actu) = mysqli_fetch_row($result)) { $url = $GLOBALS['server_path'].$GLOBALS['site_path']."index.php?opt=actu&id=".$id_actu."&tit_fr=".url_fr(strip_tags($tit_actu)); $url = url_rewrite($url); $actu .= '
  • '.$tit_actu.' | '.date_fr($date_actu).'
  • '; } $liste_actu .= "
      ".$actu."
    "; } // news tiree selon jour, texte affiché sur page accueil $sql_news_last = 'SELECT titre, texte, date, id FROM actu WHERE 1 ORDER BY date DESC, id DESC LIMIT 0,1'; $result_last = mysqli_query($GLOBALS['link'], $sql_news_last); $GLOBALS['nb_queries']++; if (mysqli_num_rows($result_last)) { $titre_asel = mysqli_result($result_last,0,"titre"); $texte_asel = references(mysqli_result($result_last,0,"texte")); $date_asel = mysqli_result($result_last,0,"date"); $id_asel = mysqli_result($result_last,0,"id"); } $titre_actu = "Actualité : ".$titre_asel." | ".date_fr($date_asel)."

    "; if (strlen($texte_asel) > 1200) { if (preg_match('/^.{1,1200}\b/s', $texte_asel, $match)) $texte_asel = $match[0]; $url_suite = $GLOBALS['server_path'].$GLOBALS['site_path']."index.php?opt=actu&id=".$id_asel."&tit_fr=".url_fr($titre_asel); $url_suite = url_rewrite($url_suite); $texte_asel .= ' ... Lire la suite'; } $texte_actu .= $texte_asel = mise_en_page($texte_asel)."

    "; // si plus de 10 news, option pour affichage page news année en cours $url = "index.php?opt=actu&act=".$date_news."&an=".$an; $url = url_rewrite($url); // affichage annes precedentes comportant des news $liens_actu = actu_ans_liens(); $texte = $titre_actu.$texte_actu.$liste_actu."
    ".$liens_actu."

    ".$texte."
    "; } return $texte; } /////////////////////////////////////////////////////// // fonctions / index.php / actu_ans_lien() / 24.03.2010 /////////////////////////////////////////////////////// function actu_ans_liens() { $an = date("Y"); $date_news_prec = $an."-%"; $link_news = ""; $sql_news = 'SELECT distinct year(date) as y FROM actu WHERE 1 ORDER BY y ASC'; $result_news = mysqli_query($GLOBALS['link'], $sql_news); $GLOBALS['nb_queries']++; while (list($year) = mysqli_fetch_row($result_news)) { $url = $GLOBALS['server_path'].$GLOBALS['site_path']."index.php?opt=actu&an=".$year; $url = url_rewrite($url); $link_news .= " $year"; } if ($link_news != "") $texte_news = "Actualités années : ".$link_news."
    "; return $texte_news; } ///////////////////////////////////////////////////////// // fonctions // index.php // actu_page() // 6.11.2012 // ///////////////////////////////////////////////////////// function actu_page() { global $index_cont, $titre_page, $keywords, $description, $canonical_href; $description = "Quelques actualités pour le site ".$GLOBALS['TITRE_SITE']; $titre_page = htmlsce("Actualités ".$GLOBALS['TITRE_SITE']); $keywords = htmlsce("Actualités"); $texte_actu = ''; // affichage liste toutes actu du mois-année if (isset($_GET['mois'])) { if (!isset($_GET['an'])) $an = date("Y"); else $an = $_GET['an']; $mois = $_GET['mois'];if (strlen($mois)<2)$mois = "0".$mois; $date = date_fr($an."-".$mois."-"); $titre_page .= " ".$date; $titre_page = htmlsce($titre_page); $keywords .= ", ".htmlsce($date); $description = htmlsce($description." : ".$date); $sql_news = 'SELECT titre, date, id FROM actu WHERE date LIKE "'.$an.'-'.$mois.'%" ORDER BY date DESC LIMIT 0, 10'; $result = mysqli_query($GLOBALS['link'], $sql_news); $GLOBALS['nb_queries']++; $nb_result = mysqli_num_rows($result); if ($nb_result >= 1) { $texte_actu = '
    Actualité du mois de '.$date.'
      '; $actu = ''; while (list($titre_actu, $date_actu, $id_actu) = mysqli_fetch_row($result)) { $url = "index.php?opt=actu&id=".$id_actu."&tit_fr=".url_fr($titre_actu); $url = url_rewrite($url); $actu .= "
    1. ".$titre_actu." | ".$date_actu."
    2. "; // if ($n > 365) BREAK; } $texte_actu .= $actu."
    "; $texte_actu .= actu_ans_liens(); } else $texte_actu = '
    Pas d\'Actualité pour le mois de '.date_fr($an."-".$mois."-").''; } // affichage liste de toutes les actu de l'année, par mois elseif (isset($_GET['an'])) { $an = $_GET['an']; $titre_page .= " ".$an." ".$GLOBALS['TITRE_SITE']; $titre_page = htmlsce($titre_page); $keywords .= ", ".$an; $description = htmlsce($description." : ".$an); $sql_news = 'SELECT titre, date, id FROM actu WHERE date LIKE "'.$an.'-%" ORDER BY date ASC'; $result = mysqli_query($GLOBALS['link'], $sql_news); $GLOBALS['nb_queries']++; $nb_result = mysqli_num_rows($result); if ($nb_result >= 1) { $texte_actu = '
    Actualité de l\'année '.$an.'
      '; $actu = ''; $mois_prec = ''; while (list($titre_actu, $date_actu, $id_actu) = mysqli_fetch_row($result)) { $url = "index.php?opt=actu&id=".$id_actu."&tit_fr=".url_fr(strip_tags($titre_actu)); $url = url_rewrite($url); preg_match("/[0-9]{4}-([0-9]{2})-[0-9]{2}/", $date_actu, $mois_courant); $mois_courant = $mois_courant[1]; if ($mois_courant != $mois_prec) $actu .= '
    '.mois_fr($mois_courant).'
      '; $actu .= "
    1. ".$titre_actu." | ".date_fr($date_actu)."
    2. "; $mois_prec = $mois_courant;} $texte_actu .= $actu."

    "; $href = "?opt=actu&an=".$an; $texte_actu .= actu_ans_liens(); } else $texte_actu = '
    Pas d\'Actualité pour l\'année '.$an.''; } elseif(isset($_GET['id'])) { $sql_news_last = 'SELECT titre, texte, date, source, url, id FROM actu WHERE id = "'.$_GET['id'].'"'; $result_last = mysqli_query($GLOBALS['link'], $sql_news_last); $GLOBALS['nb_queries']++; if (mysqli_num_rows($result_last) == 1) { $titre_asel = mysqli_result($result_last, 0, "titre"); $texte_asel = references(mise_en_page(mysqli_result($result_last, 0, "texte"))); $date_asel = mysqli_result($result_last, 0, "date"); $source_asel = mysqli_result($result_last, 0, "source"); $url_asel = mysqli_result($result_last, 0, "url"); $titre_page = strip_tags($titre_asel." : ").mb_strtolower($titre_page, "UTF-8"); $keywords .= ", ".preg_replace("/(^([a-zA-Z]){0,2}, | ([a-zA-Z]){0,2},)/", "", preg_replace("/( |, |, ,|, ([a-zA-Z]){0,2}, )/", ", ", htmlsce(url_fr($titre_asel, ", ", TRUE)))); $description = htmlsce($titre_asel." ".$description); $canonical_href = url_rewrite("index.php?opt=actu&id=".$_GET['id']."&tit_fr=".url_fr($titre_asel)); $id_asel = mysqli_result($result_last, 0, "id"); } else {$titre_asel = 'Désolé, cette page n\'est plus disponible.';} if ($GLOBALS['session_auth'] == true) { $primary_key = "id+=+".$id_asel; $link_p = ''; $link_s = ''; $mod = $link_p.icone_edit().$link_s; $pub = $share = ''; } else { $goto = $GLOBALS['server_path'].$_SERVER['REQUEST_URI']; $share = share_icons($goto, sans_accent($titre_asel)); $mod = ''; $pub = '
    '.annonces('ad_google_mobile.txt', FALSE, FALSE); } if ($url_asel != '') $source = "".$source_asel.""; else $source = $source_asel; $news_texte = "

    ".$titre_asel."

    | ".date_fr($date_asel)." | ".$source.$mod."
    "; $news_texte = $news_texte.$texte_asel."

    ".$share."
    ".$pub; // affichage liste liens actu preg_match("/([0-9]{4})-([0-9]{2})-[0-9]{2}/", $date_asel, $reg); $mois_courant = $reg[2]; $an_courant = $reg[1]; if (1* $mois_courant <= 2) $mois_trimestre = "01"; elseif (1* $mois_courant >= 11) $mois_trimestre = "10"; else $mois_trimestre = 1 * $mois_courant - 1; $mois_trimestre_fin = $mois_trimestre + 2; if (strlen($mois_trimestre)<2)$mois_trimestre = "0".$mois_trimestre; if (strlen($mois_trimestre_fin)<2)$mois_trimestre_fin = "0".$mois_trimestre_fin; $sql_news = 'SELECT titre, date, id FROM actu WHERE month(date) between '.$mois_trimestre.' and '.$mois_trimestre_fin.' and year(date) = '.$an_courant.' ORDER BY date ASC'; $result = mysqli_query($GLOBALS['link'], $sql_news); $GLOBALS['nb_queries']++; if ($result) $nb_result = mysqli_num_rows($result); if ($nb_result >= 2) { $texte_actu = '
    Autres actualités du trimestre
      '; $actu = ''; $mois_prec = ''; while (list($titre_actu, $date_actu, $id_actu) = mysqli_fetch_row($result)) { $url = "index.php?opt=actu&id=".$id_actu."&tit_fr=".url_fr($titre_actu); $url = url_rewrite($url); if ($_GET['id'] != $id_actu) $actu .= "
    1. ".$titre_actu." | ".date_fr($date_actu)."
    2. "; } $texte_actu .= $actu."

    "; } else $texte_actu .= 'Pas d\'Actualité pour le trimestre en cours

    '; $texte_actu .= actu_ans_liens(); // affichage lien page news année en cours $url = "index.php?opt=actu&an=".$an_courant; $url = url_rewrite($url); $texte_actu = $news_texte.$texte_actu; } else { // affichage standard, dernière actu, années avec news $texte_actu = actu_titres(''); } $index_cont = $texte_actu; return $index_cont; } /////////////////////////////////////////////////////// // fonctions //// foot.php //// current_users() ////// /////////////////////////////////////////////////////// function current_users($laps) { global $ip, $pages; $date = date("Y-m-d H:i:s", strtotime("-$laps minutes")); $date_act = date("Y-m-d H:i:s"); $sql = "SELECT DISTINCT count(DISTINCT address), count(*) FROM stat WHERE date BETWEEN '$date' AND '$date_act'"; $res = mysqli_query($GLOBALS['link'], $sql); $GLOBALS['nb_queries']++; if ($res) { list($ip, $pages) = mysqli_fetch_row($res); return $ip; return $pages; } } /////////////////////////////////////////////////////// // fonctions //// list.php; page.php //// goto() ///// /////////////////////////////////////////////////////// function _goto() { global $goto; $goto = $_SERVER['REQUEST_URI']; $goto = str_replace("//", "/", $goto); return $goto; } /////////////////////////////////////////////////////// // fonctions //// nav.php //// ...tmpl.php /////////// /////////////////////////////////////////////////////// function nav() { // mod: supprimer icones, mettres liens à gauche ou à droite ? if ($GLOBALS['session_auth'] == true) { echo '
    '.$GLOBALS["user"].''; if (isset($_COOKIE['last'])) { echo htmlsce(" ".date_fr(date("Y-n-j", $_COOKIE["last"]))." à ".date("G:i:s", $_COOKIE["last"])); } echo htmlsce(" "); echo "
    "; } else echo "
    "; } function control_opt ($opt) { $opts = array("auth", "inscr", "actu", "aide", "agenda", "obs", "pays", "message"); if (in_array($opt, $opts)) RETURN TRUE; else { $text = "Stop wasting time and Mother Earth's resources with fake urls !-)"; error_404($text); } } // 00:13 20.10.2014 function nav_liens() { $base_path = $GLOBALS['server_path'].$GLOBALS['site_path']; $nav_liens = array( "Accueil" => url_rewrite($base_path), "Articles" => url_rewrite($base_path."liens.php"), "Listes espèces" => url_rewrite($base_path."list.php"), "Biblio" => url_rewrite($base_path."biblio.php"), "Admin" => $GLOBALS['server_path'].$GLOBALS['site_path'].$GLOBALS['admin_path']."dev.php", "Contact" => $base_path."index.php?opt=message", "Conditions" => $base_path."articles/692/Conditions__Contact__Copyright.php", // problème avec url_rewrite off, autres séparateurs que "_"... "Aide" => $base_path."aide.php"); if ($GLOBALS['session_auth'] == False) unset($nav_liens['Admin']); else unset($nav_liens['Contact']); $pattern = "*".preg_quote($_SERVER['REQUEST_URI']).'$*'; if (isset($GLOBALS['base'])) $base = $GLOBALS['base']; elseif (isset($_REQUEST['base'])) $base = $_REQUEST['base']; else $base = ""; if (isset($_REQUEST['opt'])) { control_opt($_REQUEST['opt']); $opt = $_REQUEST['opt']; } else $opt = ""; echo '
    '; echo "
    "; } /////////////////////////////////////////////////////// // fonctions //// nav.php //// form_recherche_1() ///// /////////////////////////////////////////////////////// function form_recherche() { global $ordre, $famille, $region, $region_url, $pays, $continent, $string, $go, $g, $var, $var_m, $s, $prio, $base, $titre, $num_rows; /*$var = vars(); */ $go = $GLOBALS['server_path'].$GLOBALS['site_path'].'list.php'; if (isset($_REQUEST['base'])) $request_base = clean_var($_REQUEST['base']); if (isset($_REQUEST['famille'])) $request_famille = strtoupper(clean_var($_REQUEST['famille'])); if (isset($_REQUEST['ordre'])) $request_ordre = strtoupper(clean_var($_REQUEST['ordre'])); if (isset($_REQUEST['region'])) $request_region = mb_ucfirst(strtolower(clean_var($_REQUEST['region']))); elseif (isset($continent)) $request_region = mb_ucfirst(strtolower(clean_var($continent))); if (isset($GLOBALS['base'])) $base = $GLOBALS['base']; elseif (isset($_REQUEST['base'])) $base = $request_base; if(preg_match("/observ.php/i", $_SERVER['PHP_SELF'])) { $go = $GLOBALS['site_path'].$GLOBALS['admin_path'].'observ.php'; $base = "especes"; } elseif (preg_match("/page.php/i", $_SERVER['PHP_SELF'])) { $go = $GLOBALS['server_path'].$GLOBALS['site_path'].'list.php'; $tit = "Listes"; $base = "especes"; } /* elseif (preg_match("/listes.php/i", $_SERVER['PHP_SELF'])) { if (!isset($base) OR $base == '') $base = "especes"; if (preg_match("@".$GLOBALS['admin_path']."@i", $_SERVER['PHP_SELF'])) { $go = $GLOBALS['site_path'].$GLOBALS['admin_path'].'listes.php'; $g = $GLOBALS['server_path'].$GLOBALS['site_path'].'list.php'; } else { $go = $GLOBALS['server_path'].$GLOBALS['site_path'].'listes.php'; $g = $GLOBALS['server_path'].$GLOBALS['site_path'].'list.php'; } $tit_list = "Listes"; }*/ elseif (preg_match("/list.php/i", $_SERVER['PHP_SELF'])) { if (!isset($base) OR $base == '') $base = "especes"; if (preg_match("@".$GLOBALS['admin_path']."@i", $_SERVER['PHP_SELF'])) { $go = $GLOBALS['site_path'].$GLOBALS['admin_path'].'list.php'; $g = $GLOBALS['server_path'].$GLOBALS['site_path'].'listes.php'; } else { $go = $GLOBALS['server_path'].$GLOBALS['site_path'].'list.php'; $g = $GLOBALS['server_path'].$GLOBALS['site_path'].'listes.php'; } $tit_list = "Listes CSV"; } elseif (preg_match("/index.php/i", $_SERVER['PHP_SELF']) OR preg_match("/index_site.php/i", $_SERVER['PHP_SELF'])) { $go = $GLOBALS['server_path'].$GLOBALS['site_path'].'list.php'; if (preg_match("/actu/i", $_SERVER['REQUEST_URI'])) $base = "actu"; elseif (isset($_REQUEST['opt']) AND $_REQUEST['opt'] == 'agenda') $base = 'agenda'; else $base = "articles"; } elseif (preg_match("/aide.php/i", $_SERVER['PHP_SELF']) OR preg_match("/biblio.php/i", $_SERVER['PHP_SELF']) OR preg_match("/liens.php/i", $_SERVER['PHP_SELF'])) $base = "articles"; $go = url_rewrite($go); if (isset($_GET['opt'])) { $display = "none"; $diffim = "ouvre.png"; } else { $display = "block"; $diffim = "ferme.png"; } echo '
    '; echo ''; } function bouton_recherche($type) { $bouton = 'obs_page();} elseif($_GET['opt'] == "pays") {$index_cont = pays();} /* probleme avec content() et _head()... soit sortir tous $opt de index() sur content() ? pour rester cohérent elseif ($_GET['opt'] == "liens") liens_content();*/ } else { if (isset($_REQUEST['tit'])) {$id_titre = clean_var($_REQUEST['tit']);}else $id_titre = $tit_index; if (!isset($p)) $p = 0; $sql = "SELECT titre, action, keywords, description, creat, modif, opt, lang, prio, id_article from articles where id = '".$id_titre."'"; $result = mysqli_query($GLOBALS['link'], $sql); $GLOBALS['nb_queries']++; if (mysqli_num_rows($result)!=1) {error_404();exit;} $titre_page_aff = $titre_page_aff_init = mysqli_result($result, 0, 'titre'); $titre_page = htmlsce($titre_page_aff_init); $tit_fr = url_fr($titre_page); // Trop compliqué à enlever si problème d'accents et encodage ? if (preg_match("/articles/", $_SERVER['REQUEST_URI']) AND !preg_match("/".strtolower(url_fr(htmlsce(sans_accent($titre_page_aff)))).".php/", strtolower($_SERVER['REQUEST_URI']))) { error_404(); exit;} $keywords = htmlsce(mysqli_result($result, 0, 'keywords')); $description = htmlsce(mysqli_result($result, 0, 'description')); $texte_p = $texte_init = mysqli_result($result, 0, 'action'); $cre = mysqli_result($result, 0, 'creat'); $modif = mysqli_result($result, 0, 'modif'); $prio = mysqli_result($result, 0, 'prio'); $lang = mysqli_result($result, 0, 'lang'); $opt_sup = mysqli_result($result, 0, 'opt'); $id_article = mysqli_result($result, 0, 'id_article'); $texte_p = references($texte_p); $texte_p = mise_en_page($texte_p); if ($id_titre == $GLOBALS['id_page_accueil']) { if (preg_match("/actu/", $opt_sup)) $texte_p = actu_titres($texte_p); if (preg_match("/agenda/", $opt_sup))$texte_p = agenda().$texte_p; } if (isset($_REQUEST['string'])) { $string = str_replace("_", "|", $_REQUEST['string']); $titre_page_aff = highlight($string, $titre_page_aff_init); $texte_p = highlight($string, $texte_p, 1); } $goto = $GLOBALS['server_path'].$_SERVER['REQUEST_URI']; if ($goto == $GLOBALS['site_path'])$goto = $GLOBALS['server_path'].$GLOBALS['site_path']; if ($prio >= 2 AND $GLOBALS['session_auth'] == false) { if ($prio == 2 AND !preg_match("/admin|articles|lecture/", $GLOBALS['droits'])) $texte_p = substr($texte_p, 0, 1000); $texte_p = $texte_p."
    ..."; $texte_p = $texte_p."

    Désolé ce contenu est désormais protégé, contactez-nous pour plus d'informations si vous êtes intéressé.
    "; if ($prio >= 3) redirect_url($GLOBALS['server_path'].$GLOBALS['site_path']."index.php?opt=auth", "

    Contenu protégé!

    "); } // URL page /////////////////////////////////////////////// $url_page = $GLOBALS['REQUEST_PROTOCOL']."://".$GLOBALS['server'].$_SERVER['REQUEST_URI']; $num_page = "index.php?tit=".$tit_index."&tit_fr=".url_fr($titre_page_aff_init); $canonical_href = $GLOBALS['server_path'].$GLOBALS['site_path']; if (isset($_GET['tit']) AND $_GET['tit'] != $GLOBALS['id_page_accueil']) $canonical_href = url_rewrite($canonical_href.$num_page); // version imprimable ///////////////////////////////////// if (isset($_GET['p']) AND ($_GET['p'] == 1 OR $_GET['p'] == 2)) { $page = '
    '; $text = '
    Url : '.$canonical_href.'

    '; $text.= ''.$titre_page.'

    '.$texte_p.'

    '; $page = $page.$text.'
    '; if ($_GET['p'] == 1) { print $page; $page = $page.$text.''; } // version pdf if ($_GET['p'] == 2) { require_once(dirname(__FILE__).'/html2pdf/html2pdf.class.php'); $html2pdf = new HTML2PDF('P','A4','fr', false, $GLOBALS['encodage']); $html2pdf->WriteHTML(htmlspecialchars_decode(htmlentities($text, ENT_NOQUOTES, $GLOBALS['encodage']))); $html2pdf->Output('exemple.pdf'); } stat_enreg(); exit; } // contenu page ///////////////////////////////////////// $primary_key = "id = $id_titre"; $primary_key = urlencode($primary_key); // mod: ajouter condition pour serveur public !!! if ($GLOBALS['droits'] AND (preg_match("/admin/", $GLOBALS['droits']) OR preg_match("/articles/", $GLOBALS['droits']))) { $pdf_pre = $titre_page_aff; $pdf_html = $texte_p; $link_p = ''; $link_p_bottom = ''; $link_s = ''; $mod = $link_p.icone_edit().$link_s; $mod_bottom = $link_p_bottom.icone_edit().$link_s; $css = $GLOBALS['file_path_f'].'iq.css'; $pdf = pdf_button($pdf_html, $css, $pdf_pre, '', '', 'image'); // $pdf = 'version pdf'; $imp = 'version pdf'; $nb_char_reste = 65535 - strlen($texte_init); $tit_chars = ' title="caractères restants : '.$nb_char_reste.'"'; } else { //share_icons($goto, sans_accent($titre_page_aff_init)); // prend trop de place si long titre ? $mod = $pdf = $imp = $tit_chars = ''; } // étudier solution de lien url_rewrite utilisées pour impr, pdf, etc $index_cont .= '
    '.$titre_page_aff.''.$mod.''.$imp.''.$pdf.'
    '.$texte_p.'
    '; // annonce if (preg_match("/don/", $GLOBALS['opt_sup'])) { $url = $GLOBALS['file_path_f'].'dons.txt'; if (file_exists($url) AND $handle = fopen($url,'a')) { $i = 0; $lignes = ''; $fcontents = file($url); foreach ($fcontents as $numero_ligne => $ligne) { $i++; $lignes .= $ligne; } $index_cont .= mise_en_page($lignes); } } $index_cont .= '
    '; // url - date de création, de modification ////////////////////////////// if ($GLOBALS['session_auth'] == true) $comp = $mod_bottom; else $comp = share_icons($canonical_href, sans_accent($titre_page_aff)); $index_cont .= 'Url : '.$canonical_href.'

    Créé : '.date_fr($cre, "-", FALSE).' - Modifié : '.date_fr($modif, "-", FALSE).'

    '.$comp.'

    '; if ($texte_p == ""){error_404();} } $index_cont = htmlsce($index_cont); if ($GLOBALS['session_auth'] == true AND isset($texte_p)) $index_cont .= pdf_button(urlencode($texte_p), $GLOBALS['file_path_f'].'iq.css'); } /////////////////////////////////////////////////////// // fonctions //// index.php //// index_sup() ////////// /////////////////////////////////////////////////////// function index_sup($tit_sup) { global $id_article, $server_path, $site_path, $opt, $articles_id, $tit_fr; $texte_sup = ''; // sondage ou liens ///////////////////////////////////// $texte_sup .= fichiers_article(); url_page(); if ($tit_sup != $GLOBALS['id_page_accueil'] AND $tit_sup != '' AND $tit_sup >= 0 AND !isset($_GET['opt'])) { // pub mobile remplacé ad_amazon_animalerie_mobile.txt par ad_google_mobile.txt if (is_mobile() == TRUE AND $GLOBALS['session_auth'] == FALSE AND preg_match("/pub/", $GLOBALS['opt_sup']) AND ($_GET['tit'] == '1354' OR $_GET['tit'] == '1318' OR $_GET['tit'] == '1326' OR $_GET['tit'] == '2' OR $_GET['tit'] == '4')) { $texte_sup .= '
    '.annonces('ad_google_mobile.txt', FALSE, FALSE).'
    ';} // liens internes sql un peu boiteux avec 1314 (pages supplémentaires) $texte_sup .= ""; $i = 0; if ($result_articles = mysqli_query($GLOBALS['link'], "SELECT titre, description, id FROM articles WHERE prio <= 2 AND ((id = '".$id_article."' AND id <> '".$id_article."') OR (id_article = '".$id_article."') OR (id_article = '".$id_article."' AND id <> '".$id_article."' AND id_article <> '1314'))")) { $GLOBALS['nb_queries']++; $texte_sup .= '
    Liens internes : liens internes

      '; while (list($articles_titre, $articles_des, $articles_id) = mysqli_fetch_row($result_articles)) { $i++; // mod: $articles_id reste toujours dans $url ??? $tit_fr = url_fr($articles_titre); $url = $GLOBALS['server_path'].$GLOBALS['site_path'].'index.php?tit='.$articles_id.'&tit_fr='.$tit_fr; $url = url_rewrite($url); $texte_sup .= '
    1. '.$articles_titre.' - '.$articles_des; $texte_sup .= "
    2. "; } $texte_sup .= "

    "; } // liens externes if ($result_urls = mysqli_query($GLOBALS['link'], "SELECT titre, url, com, id from urls WHERE id_article = '".$tit_sup."'")) { $GLOBALS['nb_queries']++; if ($i == 0) $texte_sup .= '
    '; $texte_sup .= 'Liens externes : liens externes

      '; $y=1; while (list($url_titre, $url, $url_com, $url_id) = mysqli_fetch_row($result_urls)) { if (preg_match("*".$GLOBALS['server_path']."*", $url)) $url = preg_replace("*/files/([a-zA-Z0-9_ \.-]{5,})*i", "/files/rd.php?lk=\\1", $url); $texte_sup .= '
    1. '.$url_titre.' - '.$url_com.'
    2. '; $y++; } $texte_sup .= '

    Merci de nous signaler tout lien non-valide ! liens invalides


    '; } // pub mobile /* if (is_mobile() == TRUE AND $GLOBALS['session_auth'] == FALSE AND preg_match("*pub*", $GLOBALS['opt_sup'])) { $texte_sup .= '
    '.annonces('ad_google_mobile.txt', FALSE, FALSE).'
    '; }*/ } // trouver mieux (= pas d'OPT = page article normale) elseif (!isset($_GET['opt'])) { if (file_exists('stat.txt')) include 'stat.txt'; } echo htmlsce($texte_sup); if ($GLOBALS['opt_sup'] AND preg_match("*messages*", $GLOBALS['opt_sup'])) { message(); echo $GLOBALS['index_cont'];} } /////////////////////////////////////////////////////// // fonctions //// index.php //// inscription() //////// /////////////////////////////////////////////////////// function inscription() { global $index_cont; // url_page(); $index_cont = "
    "; if ($_POST['act'] == "verif") { // traitement des données ! if (!isset($_POST['nom'])) $nom = 'anonyme'; else $nom = htmlspecialchars(preg_replace( "/(script|embed|object)/i", " c o d e ", $_POST['nom'])); if (isset($_POST['email'])) $email = htmlspecialchars(preg_replace( "/(script|embed|object)/i", " c o d e ", $_POST['email'])); if (isset($_POST['username'])) $username = htmlspecialchars(preg_replace( "/(script|embed|object)/i", " c o d e ", $_POST['username'])); if (isset($_POST['adresse'])) $adresse = htmlspecialchars(preg_replace( "/(script|embed|object)/i", " c o d e ", $_POST['adresse'])); if (isset($_POST['prenom'])) $prenom = htmlspecialchars(preg_replace( "/(script|embed|object)/i", " c o d e ", $_POST['prenom'])); if (isset($_POST['droits'])) { foreach ($_POST['droits'] as $k => $v) { $droits .= $v.","; } } if ($_POST['password'] != $_POST['password_bis'] OR $_POST['rand'] != md5($_POST['rand_key'])) { $index_cont .= "
    Le password ne correspond pas !

    "; $index_cont .= "
    Revenir en arrière
    "; } elseif ($_POST['password'] == $_POST['password_bis'] AND $_POST['rand'] == md5($_POST['rand_key'])) { $index_cont .= "
    "; $index_cont .= "
    Vérifiez vos données
    "; $index_cont .= "
    Nom d'utilisateur
    ".$username."
    "; $index_cont .= "
    Prénom, Nom
    ".$prenom." ".$nom."
    "; $index_cont .= "
    Droits
    ".$droits."
    "; $index_cont .= "
    Adresse
    ".$adresse."
    "; $index_cont .= ""; if ($_POST['password'] != $_POST['password_bis']) { $index_cont .= "
    Le Mot de passe ne correspond pas ?

    "; $index_cont .= "
    Mot de Passe
    "; $index_cont .= "
    Confirmer Mot de passe
    "; } if (check_mail($_POST['email']) != 1) { $index_cont .= "
    Adresse email invalide

    "; $index_cont .= "
    Email
    "; } if ($_POST['rand'] != md5($_POST['rand_key'])) { $index_cont .= "
    Le Code Anti-Spam ne correspond pas !

    "; anti_spam(); $index_cont .= "
    code
    copier le code de l'image de gauche
    "; } $index_cont .= "
    Vérification
    acceptée
    "; $index_cont .= ""; $index_cont .= "
    Bienvenue ".$username." !
    Note : cette inscription n'est pas encore validée,
    l'administrateur vous avertira dès qu'elle sera acceptée.
    "; } $index_cont .= "
     

    "; $index_cont .= "
    "; } elseif (!isset($_GET['act'])) { anti_spam(); $index_cont .= "
    "; $index_cont .= "
    Inscription

    "; $index_cont .= "
    Nom
    "; $index_cont .= "
    Prénom
    "; $index_cont .= "
    Nom utilisateur
    "; $index_cont .= "
    Adresse
    "; $index_cont .= "
    Mot de Passe
    "; $index_cont .= "
    Confirmer Passe
    "; $index_cont .= "
    Email
    "; $index_cont .= "
    Domaine(s) qui vous intéresse(nt)
    "; $index_cont .= "
    Rédaction articles
    articles et actualités liés à l'ornithologie et aux oiseaux en général
    "; $index_cont .= "
    Rédaction fiches oiseaux
    fiches sur les espèces d'oiseaux (surtout Afrique, Amérique, Asie)
    "; $index_cont .= "
    Gérer photos/observations
    entrer des observation et/ou des photos dans la base de données
    "; $index_cont .= "
    copier le code de l'image de gauche
    "; $index_cont .= "
     
    "; $index_cont .= "
    "; } elseif ($_GET['act'] == "enreg") { if (isset($_POST['nom'])) $nom = $_POST['nom']; if (isset($_POST['prenom'])) $prenom = $_POST['prenom']; if (isset($_POST['username'])) $username = $_POST['username']; if (isset($_POST['email'])) $email = $_POST['email']; if (isset($_POST['adresse'])) $adresse = $_POST['adresse']; if (isset($_POST['adresse'])) $adresse = $_POST['adresse']; if (isset($_POST['nom'])) $user = $_POST['nom']; if (isset($_POST['password'])) $password = $_POST['password']; if (isset($_POST['droits'])) $droits = $_POST['droits']; $query = "INSERT INTO utilisateurs (nom, pre, user, ad, mail, code, droits, actif, date) VALUES ('".$nom."', '".$prenom."', '".$username."', '".$adresse."', '".$email."', '".MD5($user.$password)."', '".$droits."', 0, NOW())"; if ($db = mysqli_query($GLOBALS['link'], $query)) $mess = "Données enregistrées, nous vous recontacterons dès que possible!"; else $mess = "Erreur : ".mysqli_error($GLOBALS['link']); $GLOBALS['nb_queries']++; redirect_url($GLOBALS['server_path'].$GLOBALS['site_path'], $mess, "", 7); /* mail donnée et message de patience */ } $index_cont .= "
    "; } /////////////////////////////////////////////////////// // fonctions //// index.php //// auth() ///8.11.2012/// /////////////////////////////////////////////////////// function auth() { global $index_cont; $message = ''; $auth = false; // Assume user is not authenticated // deconnexion if (isset($_GET['act']) AND $_GET['act'] == "quit") { $time = time() - 3600; $query = "DELETE FROM util_connect WHERE session = '".$_COOKIE['session']."'"; mysqli_query($GLOBALS['link'], $query); $GLOBALS['nb_queries']++; setcookie ("session", "", $time); setcookie ("last", "", $time); $user = ""; if (!preg_match("@".$GLOBALS['admin_path']."@i", $_SERVER['HTTP_REFERER'])) $goto = $_SERVER['HTTP_REFERER']; else $goto = ""; redirect_url($goto, "

    Déconnexion ".$GLOBALS['user']."



    ", "", 2); } // verification si nom => mot de passe dans BD utilisateurs else { if (isset($_POST['user'])) { $res_code = mysqli_query($GLOBALS['link'], "SELECT code, droits, actif FROM utilisateurs WHERE username = '".$_POST['user']."'"); $GLOBALS['nb_queries']++; while (list($code, $droits, $actif) = mysqli_fetch_row($res_code)) { if ($code == md5($_POST['user'].$_POST['passw']) AND $actif == 1) { $auth = true; //break; if (preg_match("/admin/", $droits) AND isset($_POST['goto']) AND preg_match("*".$GLOBALS['server_path']."*", $_POST['goto'])) { $goto = $_POST['goto']; } else $goto = ""; // améliorer messages si besoin $message = ""; if (preg_match("/admin/", $droits)) $message .= "

    Accès admin

    "; if (preg_match("/photos/", $droits)) $message .= " photos"; if (preg_match("/aves/", $droits)) $message .= ", aves"; if (preg_match("/articles/", $droits)) $message .= ", rédaction"; $message .= " autorisé

    "; } elseif ($code == md5($_POST['user'].$_POST['passw']) AND actif != 1) $message = '
    Compte pas encore activé !
    '; else $message = '
    Mauvaise combinaison utilisateur/mot de passe ! pour '.$_POST['user'].'.
    '; } } // si pas d'authentification impression formulaire de connexion if ($auth == false) { if (isset($_POST['user'])) $user = $_POST['user']; else $user = ''; $index_cont .= "
    ".$message."

    Entrez votre nom d'utilisateur/mot de passe



    "; $index_cont .= "
    "; $index_cont .= "
    Nom
    "; $index_cont .= "
    Mot de Passe
    "; $index_cont .= "
     
    "; if (isset($_REQUEST['goto']) AND preg_match("$".$GLOBALS['server_path']."$", $_REQUEST['goto'])) $goto = $_REQUEST['goto']; else $goto = $GLOBALS['server_path'].$GLOBALS['site_path']; $index_cont .= "
    "; } // utilisateur connecté else { // verifier si derniere connexion et enregistrer valeurs dans BD util_connexion $res_visite = mysqli_query($GLOBALS['link'], "SELECT count(*) FROM util_connect WHERE user = '".$_POST['user']."'"); $GLOBALS['nb_queries']++; $visite = mysqli_result($res_visite, 0); $session_val = MD5($_SERVER['HTTP_USER_AGENT'].$_POST['user']); $time = time() + (60 *60 * 8); setcookie("session", $session_val, 0, "", false, false); $cookie_val = time(); setcookie("last", $time, 0, "", false, false); if ($visite >= 1) { $query = "UPDATE util_connect SET ip = '".$_SERVER['REMOTE_ADDR']."', last = '".$time."', session = '".$session_val."' WHERE user = '".$_POST['user']."'"; $res = mysqli_query($GLOBALS['link'], $query); $GLOBALS['nb_queries']++; } else { $query = "INSERT INTO util_connect (user, session, ip, last) VALUES ('".$_POST['user']."', '".$session_val ."', '".$_SERVER['REMOTE_ADDR']."', '".$time."')"; $res = mysqli_query($GLOBALS['link'], $query); $GLOBALS['nb_queries']++; } if(!$res) { $error = mysqli_error($GLOBALS['link']); print(mysqli_affected_rows($GLOBALS['link'])); echo $error." query = ".$query; mysqli_die($error); print "L'espèce n'existe peut-être pas !"; } // else $message = "

    Bienvenue ".$_POST['user']."



    Redirection vers: ".$goto."

    "; redirect_url($goto, $message, "", 4); } } } /////////////////////////////////////////////////////// // fonctions //// liste.php //// liste() ////////////// /////////////////////////////////////////////////////// /*09.30.2008 19:44*/ /*04.04.2025 fonctions de aves dans partie IQ... */ function liste() { global $titre_page, $titre, $keywords, $description, $canonical_href, $ordre, $reg, $region, $region_url, $regions_db, $region_texte, $code, $pays_select, $continents, $continent, $famille, $base, $string; $reg = $continents = array(); $region_db = $region_url = $region_texte = ''; if (function_exists('regions')) { $reg = regions(); if (count($reg) > 1) { $region_db = $reg['region_db']; $region_url = $reg['region_url']; $region_texte = $reg['region_texte']; } verif_var_aves(); $code = $div_pays = ''; if (function_exists('pays_codes_continents')) $continents = pays_codes_continents(); if (isset($_REQUEST['region']) AND strlen($_REQUEST['region']) <> 2 AND !isset($_REQUEST['code'])) { $region = $continent = clean_var($_REQUEST['region']); $region_texte = $regions_db[$continent]; } elseif (isset($_REQUEST['code']) OR (isset($_REQUEST['region']) AND strlen($_REQUEST['region']) == 2)) { if (strlen($_REQUEST['region']) == 2) $code = clean_var($_REQUEST['region']); else $code = clean_var($_REQUEST['code']); foreach($continents as $continent => $pays) { if (in_array($code, $pays)) { $region = $continent; $region_texte = $regions_db[$continent]; $pays_select = array_search($code, $pays); BREAK; } } } } if (isset($_POST['radiobutton'])) $base = htmlentities($_POST['radiobutton']); elseif (isset($_POST['base'])) $base = htmlentities($_POST['base']); $string = mot_recherche(); if ((!isset($GLOBALS['base']) OR $GLOBALS['base'] == 'especes') AND (!isset($_REQUEST['base']) OR $_REQUEST['base'] == 'especes') AND function_exists('regions')) { $GLOBALS['base'] = 'especes'; if (isset($_REQUEST['im']) AND $_GET['im'] != 0){$imf=1;}else{$imf=0;} if (!isset($_REQUEST['ordre'])){$ordre_a = ''; $ordre = '';}else{ $ordre = ordre($_REQUEST['ordre']); $ordre_a = '';} if (!isset($_REQUEST['famille'])){$famille = '';}else{$famille = famille($_REQUEST['famille']);} if ($famille) $ordre_titre = mb_ucfirst(strtolower($famille)); elseif ($ordre) $ordre_titre = mb_ucfirst(strtolower($ordre)); else $ordre_titre = "Oiseaux"; if (isset($region) AND mb_ucfirst(strtolower($region)) == "Tous") $region_titre = ""; else { if (isset($pays_select)) $region_titre = $pays_select." > "; else $region_titre = $region_texte." > "; } $titre_page = $region_titre.$ordre_titre; if (isset($string) AND $string != '') $titre_page .= " :: ".$string; if (!isset($im)) $im = '0'; if($im == 1) $robots_content = "NOINDEX, NOFOLLOW"; else $robots_content = "NOINDEX, NOFOLLOW"; $keywords = str_replace(' > ', ', ', $region_titre).$ordre_titre.", oiseaux, listes"; $description = $region_titre.$ordre_titre.", liste d'oiseaux"; if ($famille != '' AND mb_ucfirst(strtolower($region)) == "Tous") $canonical_href = url_rewrite($GLOBALS['server_path'].$GLOBALS['site_path'].'list.php?base=especes®ion=Tous&ordre='.$ordre.'&famille='.$famille); } elseif (!isset($GLOBALS['base']) OR (isset($GLOBALS['base']) AND $GLOBALS['base'] == "articles") OR (isset($_REQUEST['base']) AND $_REQUEST['base'] == "articles")) { $base = 'articles'; $titre = 'Articles contenant '.$string; $titre_page = "Articles ornithologie :: ".$string; $keywords = $string.", ornithologie, oiseaux"; $description = $titre." - site ornithologie"; } elseif ((isset($GLOBALS['base']) AND $GLOBALS['base'] == "actu") OR (isset($_REQUEST['base']) AND $_REQUEST['base'] == "actu")) { $base = 'actu'; $titre = 'Actualités contenant '.$string; $titre_page = "Actualités ornithologie :: ".$string; $keywords = $string.", ornithologie, oiseaux"; $description = $titre." - site ornithologie"; } elseif ((isset($GLOBALS['base']) AND $GLOBALS['base'] == "urls") OR (isset($_REQUEST['base']) AND $_REQUEST['base'] == "urls")) { $base = 'urls'; $titre = 'Liens externes contenant '.$string; $titre_page = "Liens ornithologie :: ".$string; $keywords = $string.", ornithologie, oiseaux"; $description = $titre." - site ornithologie"; } elseif ((isset($GLOBALS['base']) AND $GLOBALS['base'] == "agenda") OR (isset($_REQUEST['base']) AND $_REQUEST['base'] == "agenda")) { $base = 'agenda'; $titre = 'Agenda contenant '.$string; $titre_page = "Agenda :: ".$string; $keywords = $string.", agenda"; $description = $titre." - ".$GLOBALS['TITRE_SITE']; } else { if (isset($_REQUEST['im']) AND $_GET['im'] != 0){$imf=1;}else{$imf=0;} if (!isset($_REQUEST['ordre'])){$ordre_a = ''; $ordre = '';}else{ $ordre = ordre($_REQUEST['ordre']); $ordre_a = '';} if (!isset($_REQUEST['famille'])){$famille = '';}else{$famille = famille($_REQUEST['famille']);} if ($famille) $ordre_titre = mb_ucfirst(strtolower($famille)); elseif ($ordre) $ordre_titre = mb_ucfirst(strtolower($ordre)); else $ordre_titre = "Oiseaux"; if (isset($region) AND mb_ucfirst(strtolower($region)) == "Tous") $region_titre = ""; else { if (isset($pays_select)) $region_titre = $pays_select." > "; else $region_titre = $region_texte." > "; } $titre_page = $region_titre.$ordre_titre; if (isset($string) AND $string != '') $titre_page .= " :: ".$string; if (!isset($im)) $im = '0'; if($im == 1) $robots_content = "NOINDEX, NOFOLLOW"; else $robots_content = "NOINDEX, NOFOLLOW"; $keywords = str_replace(' > ', ', ', $region_titre).$ordre_titre.", oiseaux, listes"; $description = $region_titre.$ordre_titre.", liste d'oiseaux"; if ($famille != '' AND mb_ucfirst(strtolower($region)) == "Tous") $canonical_href = url_rewrite($GLOBALS['server_path'].$GLOBALS['site_path'].'list.php?base=especes®ion=Tous&ordre='.$ordre.'&famille='.$famille); } $titre = htmlsce($titre); $titre_page = htmlsce($titre_page); $keywords = htmlsce($keywords); $description = htmlsce($description); } //18:54 12.05.2014////////////////////////////////////////// // fonctions /// list.php /// list_articles_barre_etat() // /////////////////////////////////////////////////////// function list_articles_barre_etat($base) { global $mysql_db, $result, $result_temps, $prio, $string, $num_rows, $num_rows_total, $site_path, $base; $string = mot_recherche(); $string = urldecode($string); if (function_exists('vars')) { $var = vars(); } if (!$string) {$string_a = '-';} else {$string_a = $string;} require 'sql.articles.list.php'; if ($num_rows == 0 OR $num_rows == '') $att = err_im('Attention !')." "; else $att = ""; if (isset($_REQUEST['base']) AND preg_match("/articles|urls|actu|agenda/", $_REQUEST['base'])) $t_base = $_REQUEST['base']; elseif ($GLOBALS['base'] == "articles") $t_base = "Articles"; elseif ($GLOBALS['base'] == "urls") $t_base = "Liens"; elseif($GLOBALS['base'] == "actu") $t_base = "Actualités"; elseif($GLOBALS['base'] == "agenda") $t_base = "Agenda"; else $t_base = ''; // erreur, list.php entré manuellement $GLOBALS['titre_page'] = $t_base; $barre_etat = '
    '.$t_base.' trouvés pour : '.$string_a.' '.$att.'
    '; $barre_etat .= '
    < '.$num_rows.' / '.$num_rows_total.' >
    '; if($GLOBALS['base'] == "agenda") $barre_etat .= list_agenda(); echo htmlsce($barre_etat); } /////////////////////////////////////////////////////// // fonctions //// list.php //// list_articles_content() /// /////////////////////////////////////////////////////// function list_articles_content($base) { global $string, $string1, $result, $result_temps, $region, $pays, $num_rows, $num_rows_total, $prio, $var, $server_path, $site_path, $base, $nb_queries; $string = preg_replace("/ /", "|", $GLOBALS['string']); $string = preg_replace("/\|{1}[a-z]{1,2}\|{1}/", "|", $string); $string = preg_replace("/^[a-z]{1,2}\|{1}/", "", $string); $string = preg_replace("/\|{1}[a-z]{1,2}$/", "", $string); if ($string != '') $rel = ' rel="nofollow"'; else $rel = ''; $li_res_0 = $li_res_1 = $li_res_2 = $prio = ""; $i = 0; $temp = array(); $list_texte = '
    '; if (isset($_REQUEST['checkbox'])) { $list_cont = list_admin_articles_content(); } elseif ($result) { $string_array = preg_split("/\|/", $string); foreach($string_array as $key => $mot) { if(strlen($mot) > 2) $temp[] = $mot; } if (count($temp) >= 1) { $string_recherche = implode("|", $temp); } else $string_recherche = $string; $string_recherche = regexAccents($string_recherche); if ($base == "articles") { while (list($titre, $key, $des, $prio, $id) = mysqli_fetch_row($result)) { $r2 = $key; $r1 = $des; $r0 = $titre; if ($string) { $titre_aff = highlight($string, $titre); $sql_string = "SELECT action FROM articles WHERE id = $id"; $result_string = mysqli_query($GLOBALS['link'], $sql_string); $GLOBALS['nb_queries']++; $action = mysqli_result($result_string, 0, 'action'); } $url = ("index.php?tit=$id&tit_fr=".url_fr($titre)."&string=".implode("_", $temp)); $url = url_rewrite($url); // extrait de phrase contenant mot string if ($titre AND preg_match('/'.$string.'/ui', sans_accent($titre))) $y++; if (preg_match('/(\w+[^\w+]){0,26}.{0,25}('.$string_recherche.').{0,25}(\w+[^\w+]){2,26}/iu', rip_tags($action), $req)) { $des = $req[0]; $des = $des." ..."; $des = highlight($string, $des); } $handle1 = '
    '.$titre_aff.''; if ($prio >= 2) $handle1 .= '
    admin
    '; $handle2 = '
    '.$des.'
    '; $li_res_0 .= $handle1.$handle2; $i++; } elseif (preg_match('/(\w+[^\w+]){0,26}.{0,25}('.$string_recherche.').{0,25}(\w+[^\w+]){2,26}/iu', rip_tags($action), $req)) { $des = $req[0]." ..."; $des = highlight($string, $des); $url .= "#".$string; $handle1 = '
    '.$titre_aff.''; if ($prio >= 2) $handle1 .= '
    admin
    '; $handle2 = '
    '.$des.'
    '; $li_res_1 .= $handle1.$handle2; $i++; } else { $handle1 = '
    '.$titre_aff.''; if ($prio >= 2) $handle1 .= '
    admin
    '; $handle2 = ('
    '.$des.'
    '); $li_res_2 .= $handle1.$handle2; } } $list_texte .= $li_res_0.$li_res_1; if ($li_res_2 != "") $list_texte .= '

    Résultats avec '.implode(", ", $temp).' uniquement dans les liens ou tags html

    '.$li_res_2; mysqli_free_result($result); } elseif ($base == "actu" OR ($base == "agenda" AND $GLOBALS['session_auth'] == TRUE)) // un peu spécial... { $goto = preg_replace("@list.php@", $base."/list.php", $_SERVER['REQUEST_URI']); if ($base == "agenda" AND $GLOBALS['session_auth'] == TRUE) { $url_form = $GLOBALS['server_path'].$GLOBALS['site_path']."list.php"; $url_form = url_rewrite($url_form); $list_texte .= '
    '; } while (list($titre, $des, $prio, $id) = mysqli_fetch_row($result)) { $primary_key = "id=".$id; $r0 = $titre; $titre_aff = highlight($string, $titre); if (!$des) $des = ' - '; if ($base == "actu") { $url = url_rewrite("index.php?opt=".$base."&id=".$id."&tit_fr=".url_fr($titre)."&string=".implode("_", $temp)); $check = ''; $prio = ''; } elseif ($base == "agenda") { $url = $GLOBALS['admin_path']."change.php?primary_key=".$primary_key."&table=".$base."&goto=".$goto; $check = list_agenda_checkbox($id); $prio = '
    '; } // extrait de phrase contenant mot string if ($string != '' AND preg_match('/'.$string.'/iu', sans_accent($titre))) { if (preg_match('/(\w+[^\w+]){0,16}+.{0,25}('.$string_recherche.').{0,15}(\w+[^\w+]){2,16}/iu', rip_tags($des), $req)) { $des = $req[0]." ..."; $des = highlight($string, $des); } else { if (preg_match('/(\w+[^\w]){0,26}/iu', substr(rip_tags($des), 200), $req)) $des = substr(rip_tags($des), 0, 200).$req[0]." ..."; /* hum... */ elseif(preg_match('/(\w+[^\w]){0,26}/iu', substr(rip_tags($des), 50), $req)) $des = substr(rip_tags($des), 0, 200).$req[0]." ..."; else $des = '...'; } $handle1 = '
    '.$prio.$check.''.$titre_aff.''; $handle2 = ('
    '.$des.'
    '); $li_res_0 .= $handle1.list_add_date($base, $id).$handle2; $i++; } elseif ($string AND preg_match('/(\w+[^\w+]){0,16}+.{0,25}('.$string_recherche.').{0,15}(\w+[^\w+]){2,16}/iu', rip_tags($des), $req)) { $des = $req[0]." ..."; $des = highlight($string, $des); $handle1 = '
    '.$prio.$check.''.$titre_aff.''; $handle2 = '
    '.$des.'
    '; $li_res_1 .= $handle1.list_add_date($base, $id).$handle2; $i++; } else { $handle1 = '
    '.$prio.$check.''.$titre_aff.''; $handle2 = '
    '.substr(rip_tags($des), 0, 200).'...
    '; $li_res_2 .= $handle1.list_add_date($base, $id).$handle2; } } $list_texte .= $li_res_0.$li_res_1; if ($li_res_2 != '' AND $string != '') $list_texte .= '

    Résultats avec '.implode(", ", $temp).' uniquement dans les liens ou tags html

    '.$li_res_2; elseif ($li_res_2 != '') $list_texte .= '

    Toutes entrées !

    '.$li_res_2; if ($base == 'agenda' AND $GLOBALS['session_auth'] == TRUE) { if ($duree = @mysqli_result($result_temps, 0, 'duree')) $list_texte .= '
    Durée totale : '.$duree; // copie de list espèces... $page = url_page(); $tbl = 'liste'; $list_texte .= '
    '.select_all($tbl, $page, $strgo = 'Supprimer').'

    '; $list_texte .= list_agenda_select(); $list_texte .= "
    "; // manque un
    pas compris pourquoi } mysqli_free_result($result); } elseif ($base == "urls") { while (list($url, $titre, $com, $id) = mysqli_fetch_row($result)) { $url_titre = highlight($string, $titre); $url_com = highlight($string, $com); $url_domain = parse_url($url)['host']; $handle2 = ('
    '.$url_titre.'
    '.$url_domain .'

    '); $handle3 = $url_com.'
    '; $list_texte .= $handle2.$handle3.""; $i++; } mysqli_free_result($result); } else $list_texte .= "
    Problème inattendu.
    "; } $list_texte .= ''; echo htmlsce($list_texte); noselection($string); } function list_agenda_checkbox($id, $checkall = '') { $list = ""; if ($GLOBALS['session_auth'] == true) { if (isset($checkall) AND $checkall > 0) $checked = 'checked'; else $checked = ''; $check = ''; $list = '
    '.$check.'
    '; } return $list; } function list_agenda_select() { $list_texte = '
    Cocher l\'action sélectionnée : '; if ($select_mode_date != "depuis" AND $select_mode_date != "jusque" AND $select_mode_date != "periode") $select_mode_date = "jusque"; $list_a .= '
    "; } $title = "

    Espèces du genre ".$genres[$y]."".$nb_text[$y].""; // $texte .= $text[$y]; $y++; while ($y < count($genres)) { $genre = $genres[$y]; $title .= " | ".$genres[$y]." ".$nb_text[$y].""; $texte .= $text[$y]; $y++; } $title .= $title_end; $texte = '
    '.$texte.'
    '; return $title."
    " .$texte; } } function genre_list($genre, $genre_init, $nb, $res, $tit) { global $string; $rep_init = substr($genre_init, 0, 1).". (".$genre.") "; if ($genre_init != $genre) $rep = $rep_init; else $rep = $genre_init." "; if ($nb > 1) { $i = 0; $texte = "
      "; // id='".$tit."' while (list($sp, $nom, $c) = mysqli_fetch_row($res)) { $texte .= "
    • "; $i++; $url = "page.php?espece=".str_replace("(", "", str_replace(")", "", $sp)); $url = url_rewrite($url); $sp_rep = genre_list_sp($genre, $genre_init, $rep, $sp); $texte .= "".highlight($string, $nom).", ".highlight($string, $sp_rep).""; $texte .= "
    • "; } $texte .= "
    "; } elseif($nb == 1) { while (list($sp, $nom, $c) = mysqli_fetch_row($res)) { $url = "page.php?espece=".str_replace("(", "", str_replace(")", "", $sp)); $url = url_rewrite($url); $sp_rep = genre_list_sp($genre, $genre_init, $rep, $sp); $texte = ""; // id='".$tit."' } } else $texte = "
    • Erreur : pas de résultat.
    "; return $texte; } function genre_sup_sql ($genre) { $sql = "SELECT * FROM (SELECT espece, nom, a.id FROM especes AS a WHERE espece like '$genre %' UNION ALL SELECT espece, nom, a.id FROM especes AS a, ".$GLOBALS['clements_table']." AS b WHERE scientific_name like '$genre %' AND a.id = b.id_aves AND category = 'species' UNION ALL SELECT espece, nom, a.id FROM especes AS a, taxo_ioc AS c WHERE scientific_name like '$genre %' AND a.id = c.id_aves AND category = 'species' UNION ALL SELECT espece, nom, d.id FROM especes AS d WHERE des REGEXP '[\[]{1}.*$genre [a-z]+<.*[\]]{1}') abcd GROUP BY id ORDER by nom ASC"; return $sql; } function genre_list_sp ($genre, $genre_init, $rep, $sp) { if (preg_match("/^".$genre_init." /i", $sp)) $sp_rep = str_replace($genre_init, $rep, $sp); elseif(!preg_match("/^".$genre." /i", $sp)) { $ge = explode(" ", $sp); reset($ge); $g = $ge[0]; $rep_cur = substr($g, 0, 1).". (".$genre.") "; $sp_rep = str_replace($g, $rep_cur, $sp); } else $sp_rep = $sp; return $sp_rep; } function regions() { global $regions_url, $regions_db, $regions_texte, $region_url, $region_db, $region_texte, $continent, $pays_select; $regions_url = array("Afrique" => "Afrique", "Amérique" => "Amerique", "Antarctique" => "Antarctique", "Arctique" => "Arctique", "Asie" => "Asie", "Europe" => "Europe", "Océanie" => "Oceanie", "Toutes Régions" => "Tous"/*, "Région indéterminée" => "World"*/); $regions_db = array("Afrique" => "Afrique", "Amerique" => "Amérique", "Antarctique" => "Antarctique", "Arctique" => "Arctique", "Asie" => "Asie", "Europe" => "Europe", "Oceanie" => "Océanie", "Tous" => "%"/*, "World" => "World"*/); if (!isset($_REQUEST['region'])) { if (isset($GLOBALS['regi']) AND $GLOBALS['regi'] != '')/*preg_match("/page.php/", $_SERVER['PHP_SELF'])*/ { // $regi = mysqli_result($result,0,"region"); if (preg_match("/,/", $GLOBALS['regi'])) { $virg_pos = strpos($GLOBALS['regi'], ","); $region = substr($GLOBALS['regi'], 0, $virg_pos); } else $region = $GLOBALS['regi']; $region_url = $regions_url[$region]; $region_texte = $region; $region_db = $regions_db[$region_url]; } elseif (isset($GLOBALS['region_texte']) AND clean_var($GLOBALS['region_texte']) != '') { if (preg_match("/,/", $GLOBALS['region_texte'])) { $virg_pos = strpos($GLOBALS['region_texte'], ","); $region = substr($GLOBALS['region_texte'], 0, $virg_pos); } else $region = $GLOBALS['region_texte']; $region_url = $regions_url[$region]; $region_texte = $region; $region_db = $regions_db[$region_url]; } else { $region_url = "Europe"; $region_texte = "Europe"; $region_db = "Europe"; } } else { $region_url = $_REQUEST['region']; if (!in_array($region_url, $regions_url)) { if ($continent = continent_from_code($region_url)) { $region_url = $continent['continent']; $region_texte = $regions_db[$region_url]; $pays_select = $continent['pays']; } else redirect_url($GLOBALS['server_path'].$GLOBALS['site_path'], "
    URL non conforme...

    La région ".$_REQUEST['region']." n'est pas répertoriée sur ce site.

    Redirection vers la page d'accueil !", "", 3); } else { $region_texte = array_search(mb_ucfirst(strtolower($_REQUEST['region'])), $GLOBALS['regions_url']); $region_db = $regions_db[$region_url]; $region_url = $region_url; //echo "region_db : ".$region_db."region_texte : ".$region_texte." region_url : ".$region_url; } } $regions['region_url'] = $region_url; $regions['region_db'] = $region_db; $regions['region_texte'] = $region_texte; return $regions; } function ordre($var) { $sql = "SELECT DISTINCT ordres FROM familles"; $res = mysqli_query($GLOBALS['link'], $sql); $GLOBALS['nb_queries']++; while ($row = mysqli_fetch_assoc($res)) { $result[] = $row['ordres']; } if (in_array(strtoupper($var), $result)) return strtoupper($var); else return ""; } function famille($var) { $sql = "SELECT DISTINCT familles FROM familles"; $res = mysqli_query($GLOBALS['link'], $sql); $GLOBALS['nb_queries']++; while ($row = mysqli_fetch_assoc($res)) { $result[] = $row['familles']; } if (in_array(strtoupper($var), $result)) return strtoupper($var); else return ""; } function sp_mp3s($sp) { /*ini_set('error_reporting', 'E_ALL');*/ $path = $GLOBALS['chants_path_f']."mp3".$GLOBALS['slash']; $liste_photos = array(); $results = array(); $handler = opendir($path); $mask = "/".str_replace(" ", "_", $sp)."/ui"; while ($file = readdir($handler)) { if (preg_match($mask, $file, $req)) { $mp3_url = $GLOBALS['chants_path']."mp3/".$file; $mp3 = $path.$file; //The mp3 file. $filesize = filesize($mp3); if ($filesize > 0) { $file_mp3 = fopen($mp3, "r"); fseek($file_mp3, -128, SEEK_END); // It reads the $tag = fread($file_mp3, 300); if ($tag == "TAG") { $titre = trim(fread($file_mp3, 30)); if ($titre != '' ) $data["titre"] = $titre; $artiste = trim(fread($file_mp3, 30)); if ($artiste != '' ) $data["artiste"] = $artiste; $album = trim(fread($file_mp3, 30)); if ($album != '' ) $data["album"] = $album; $annee = trim(fread($file_mp3, 4)); if ($annee != '' ) $data["année"] = $annee; $comment = trim(fread($file_mp3, 30)); if ($comment != '' ) $data["comment"] = $comment; $data_text = ""; if (isset($data)) { foreach($data as $key => $value) { $data_text .= "$key: $value - "; } } } else $data_text = ""; fclose($file_mp3); array_push($results, array('file' => $mp3_url, 'size' => $filesize, 'data' => $data_text, 'name' => $file)); } } } return $results; } /////////////////////////////////////////////////////// // fonctions //// nav.php //// nav_obs() ////////////// /////////////////////////////////////////////////////// class Observations { public $content; public $titre_page; public $keywords; public $description; public $lats = array('min' => 0, 'max' => 0); public $longs = array('min' => 0, 'max' => 0); public $date_min; public $date_max; public $gps = array(); public $gps_centre = array(); public function __construct () { // test si 1. données photo 2. submit images 3. submit form 4. pas d'espèce définie 5. afficher obs if (isset($_REQUEST['opt']) AND $_REQUEST['opt'] == 'obs' OR preg_match('$obs.php$', $_SERVER['PHP_SELF'])) { if ((isset($_REQUEST['id_obs']) OR isset($_REQUEST['id'])OR (isset($_REQUEST['im']) AND $_REQUEST['im'] != '')) /* sinon sauve 3 x ! obs_page appelé dans index() */ AND (isset($_REQUEST['save']) AND $_REQUEST['save'] < 2)) { // ajouter photos ? Observations::obs_page(); } } } public function obs_nav() { // test si opt = obs 0 => afficher titre if ($GLOBALS['session_auth'] == true AND preg_match('/photos/', $GLOBALS['droits'])) { $base_path = $GLOBALS['server_path'].$GLOBALS['site_path']; $content = ''; /*if (isset($_GET['tit']) AND mysqli_result(mysqli_query($GLOBALS['link'], "SELECT prio FROM articles WHERE id = ".$_GET['tit']), 0, "prio") <= 3 OR isset($_GET['dom'])) $display = "yes"; else*/ $display = "none"; if (!isset($_REQUEST['opt']) OR $_REQUEST['opt'] != 'obs') $content .= '
    '; else $display = "block"; $content .= ''; return ($content); } } public function obs_page() { global $description, $keywords, $titre_page, $nom, $espece, $id_sp; if (!isset($_REQUEST['id']) AND !isset($_REQUEST['id_obs'])) { $content = '
    Chercher espèce :
    '.Observations::obs_nav().'
    '; } elseif (isset($_REQUEST['id_obs'])) { $content = Observations::obs_display(); $nom = $GLOBALS['nom']; $espece = $GLOBALS['espece']; $id_sp = $GLOBALS['id_sp']; $content = Observations::obs_titre().$content; } else { $content = Observations::obs_titre(); $content .= Observations::obs_form_add_images_save(); $content .= Observations::obs_form_save(); $content .= Observations::obs_delete(); $content .= Observations::obs_form_add_images_comments(); $content .= Observations::obs_form_add_images(); $content .= Observations::obs_form(); $content .= Observations::obs_list_obs_espece(); } if (isset($nom)) { $titre_page = htmlsce("Observations ".$nom." ".$espece); $keywords = str_replace(",,", ",",str_replace(" ", ", ",$titre_page)); $description = "Observations pour : ".$titre_page; } else $titre_page = $keywords = $description = "Observations"; return $content; } public function obs_titre() { global $nom, $espece, $id_sp; if (isset($_REQUEST['id_sp'])) $id_sp = $_REQUEST['id_sp']; elseif (isset($GLOBALS['id_sp'])) $id_sp = $GLOBALS['id_sp']; else $id_sp = $_REQUEST['id']; $content = ""; $result0 = mysqli_query($GLOBALS['link'], "SELECT nom, espece, familles.familles, region, ordres FROM especes, familles WHERE especes.id = '".$id_sp."' AND especes.famille = familles.familles"); $GLOBALS['nb_queries']++; $num_rows0 = @mysqli_num_rows($result0); $nom = mysqli_result($result0, 0, "nom"); $espece = mysqli_result($result0, 0, "espece"); $regions = mysqli_result($result0, 0, 'region'); $ordre = mysqli_result($result0, 0, 'ordres'); $famille = mysqli_result($result0, 0, 'familles'); $lien_espece = url_espece($espece); if (isset($_REQUEST['id'])) $content = '
    Entrer observation pour '.$nom.' '.$espece.'

    '; elseif (isset($_REQUEST['id_obs'])) $content = '
    Observation ponctuelle '.$GLOBALS['nom'].' '.$GLOBALS['espece'].'

    '; return $content; // test si espece } public function obs_form() { $js = 'gmapi.js'; $obs_aff = ''; $obs_aff.= '
    '; // ajouter inputs avec éventuels filename (images) avec commentaires // lire données postées exif : date et gps $creat = date("Y-m-d H:i:s", time()); $id_sp = $_REQUEST['id']; if(isset($GLOBALS['user'])) $user = $GLOBALS['user']; else $user = $_SERVER['REMOTE_USER']; $user = get_current_user().'/'.$user; if (isset($GLOBALS['date_min_tt'])) { preg_match("/([0-9]*):([0-9]*):([0-9]*) ([0-9]*):([0-9]*):([0-9]*)/", $GLOBALS['date_min_tt'], $req); $heure = $req[4]*1; $min = $req[5]*1; $mois = $req[2]*1; $an = $req[1]*1; $jour = $req[3]*1; } else { if (isset($_REQUEST['h'])) $heure = 1 * $_REQUEST['h']; else $heure = 1 * date("H"); if (isset($_REQUEST['m'])) $min = 1 * $_REQUEST['m']; else $min = 1 * date("i"); if (isset($_REQUEST['mois'])) $mois = 1 * $_REQUEST['mois']; else $mois = 1 * date("m"); if (isset($_REQUEST['an'])) $an = 1 * $_REQUEST['an']; else $an = 1 * date("Y"); if (isset($_REQUEST['jour'])) $jour = 1 * $_REQUEST['jour']; else $jour = 1 * date("d"); } if (isset($_REQUEST['gps'])) { $gps = $_REQUEST['gps']; $lat = $gps['lat']; $lon = $gps['long']; } elseif (isset($this->gps_centre[0])) { $lat = $this->gps_centre[0]; $lon = $this->gps_centre[1]; } else {$lat = $lon = NULL;} $obs_aff.= '
    nombre - priorité
    -
    remarques
    meteo
    code Atlas
    '; // rajouter ajax pour chercher lieux déjà enregistrés $obs_aff .= '
    lieu
    code postal - pays
    -
    latitude - longitude
    -
    '; $obs_aff.= '
    heure/min. - jour/mois/an
    '; $obs_aff.= ' -
    '; $obs_aff.= '
    Durée
    '; // voir si problème avec SSL comme sur page.php ? $kml_f = $GLOBALS['server_path'].$GLOBALS['site_path']."files/kmz/kml/".preg_replace("/ /", "_", $GLOBALS['espece']).".kml"; $ch = curl_init($kml_f); curl_setopt($ch, CURLOPT_NOBODY, true); curl_exec($ch); $retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); // $retcode >= 400 -> not found, $retcode = 200, found. curl_close($ch); // problème avec google maps : fichier doit être accessible sur le net => marche pas en local // if (file_exists($kml_f)) $kml = $kml_f; else $kml = ''; if ($retcode == 200) $kml = $kml_f; else $kml = ''; $obs_aff.= '
    '; $obs_aff.= ' '; if ($retcode == 200) $obs_aff.= ''; $obs_aff.= ''; // div pour google maps api $obs_aff.= ''; // ?/* html5 only ! async defer '; //
    Cliquer sur la carte pour situer l\'observation.
    Vous pouvez ensuite préciser les coordonnées en en entrant la latitude et la longitude dans les champs du formulaire, ou déplacer le marker rouge.
    Double-clic pour supprimer le merker.
    Les markers verts sont des observations précédentes.
    return $obs_aff; } public function obs_code_atlas() { $code_atlas = array(1 => "Observation de l'espèce pendant la période de nidification", 2 => "Observation de l'espèce pendant la période de nidification dans un biotope adéquat", 3 => "Mâle chanteur présent en période de nidification, cris nuptiaux / tambourinage entendus ou mâle vu en parade", 40 => "Nidification probable", 4 => "Couple pendant la période de nidification dans un biotope adéquat", 5 => "Comportement territorial d'un couple (chant, querelles avec des voisins, etc.), au moins 2 jours dans le même territoire", 6 => "Comportement nuptial (mâle et femelle observés)", 7 => "Visite d'un site de nidification probable", 8 => "Cris d'alarme ou de crainte des adultes ou autre comportement agité suggérant la présence d'un nid ou de jeunes aux alentours", 9 => "Plaque incubatrice d'une femelle capturée", 10 => "Transport de matériel, construction de nid ou forage d'une cavité", 50 => "Nidification certaine", 11 => "Oiseau simulant une blessure ou détournant l'attention", 12 => "Découverte d'un nid ayant été utilisé pendant la saison en cours", 13 => "Jeunes venant de s'envoler (nidicoles) ou poussins en duvet (nidifuges)", 14 => "Adultes gagnant ou quittant un site de nid, comportement révélateur d'un nid occupé dont le contenu ne peut être vérifié (trop haut ou dans une cavité)", 15 => "Adulte transportant des fientes", 16 => "Adulte transportant de la nourriture pour les jeunes", 17 => "Coquilles d'œufs éclos", 18 => "Nid avec adulte vu couvant", 19 => "Nid avec œufs ou jeunes"); return $code_atlas; } public function obs_form_save() { // controle data : si vide... // test si images sinon bs_form_add_images () if (isset($_REQUEST['save']) AND $_REQUEST['save'] == 2 AND $_SERVER['REQUEST_METHOD'] == 'POST') { $met = addslashes($_POST['met']); $rem = addslashes($_POST['rem']); $lieu = addslashes($_POST['lieu']); $user = addslashes($_POST['user']); // this is really really messed up ! encoding of the php file ??? $met = htmlspecialchars($met,ENT_QUOTES,"iso-8859-1"); $lieu = htmlspecialchars($lieu,ENT_QUOTES,"iso-8859-1"); /* $met = htmlsce($met); $rem = htmlsce($rem); $lieu = htmlsce($lieu);*/ // process form ; $atlas = $_POST['atlas']; $lat = $_POST['lat']; if ($lat == '') $lat = "NULL"; $lon = $_POST['lon']; if ($lon == '') $lon = "NULL"; $zip = $_POST['zip']; $pays = $_POST['pays']; $date = $_POST['an']."-".$_POST['mois']."-".$_POST['jour']; $time = $_POST['heure'].":".$_POST['min'].":00"; $creat = $_POST['creat']; $prio = $_POST['prio']; $nb = $_POST['nb']; $id_sp = $_POST['id']; $duree = $_POST['duree_unite'] * $_POST['duree']; if(isset($GLOBALS['user'])) { $user = $GLOBALS['user']; $sql_user_id = "SELECT id FROM utilisateurs WHERE username = '".$user."'"; $result_user_id = mysqli_query($GLOBALS['link'], $sql_user_id); $GLOBALS['nb_queries']++; $user_id = mysqli_result($result_user_id, 0, "id"); } else { } // Vérifier... if (!isset($id_lieu)) $id_lieu = ''; if (!isset($id_liste)) $id_liste = ''; if (!isset($public)) $public = '1'; if (!isset($type)) $type = ''; $sql = "INSERT INTO obs (nb, rem, met, atlas, lieu, lat, lon, zip, pays, date, time, duree, creat, prio, user, id_sp) VALUES ('$nb','$rem','$met','$atlas','$lieu', '$lat', '$lon', '$zip', '$pays', '$date','$time','$duree','$creat','$prio','$user','$id_sp')"; // lieux et coordonnées pas encore activé ni géré... $sql_coord = "INSERT INTO obs_coordonnees (lat, lon, zip, pays, id_user) VALUES ('$lat', '$lon', '$zip', '$pays', '$user_id')"; $sql_lieux = "INSERT INTO obs_lieux (lieu, type, public, creat, id_user, id_lieu_parent) VALUES ('$lieu','$type','$public','$creat','$user_id','$id_lieu')"; // echo $titre, $action, $jour1, $mois, $an, $prio, $users, $REMOTE_USER, $creat, $debut, $fin, $next, $heure, $min, $recurr, $id_dom, $id_todo, $id_ad; $result_s = mysqli_query($GLOBALS['link'], $sql); $GLOBALS['nb_queries']++; $saved_rows = @mysqli_affected_rows($GLOBALS['link']); $id_obs = mysqli_insert_id($GLOBALS['link']); $message = mysqli_error($GLOBALS['link']); if ($message != '') $obs_aff = '
    '.$message.'
    '.$sql.'
    '; else $obs_aff = '
    '.$saved_rows.' observation enregistrée

    '; } elseif (isset($_REQUEST['save']) AND $_REQUEST['save'] == 2 AND $_SERVER['REQUEST_METHOD'] != 'POST') $obs_aff = '
    Pas de données...

    '; else $obs_aff = ''; return $obs_aff; } public function obs_delete() { if (isset($_REQUEST['save']) AND $_REQUEST['save'] < 0) { if (isset($_REQUEST['checkbox'])) { reset($_REQUEST['checkbox']); $table = "obs"; $i = 0; $error = ''; $obs_aff = ''; foreach ($_REQUEST['checkbox'] as $k => $v) { $obs_aff .= "$k $v"; $v = urldecode($v); $sql_del = "DELETE FROM $table where id = '$v'"; $result = mysqli_query($GLOBALS['link'], $sql_del); $i = $i + mysqli_affected_rows($GLOBALS['link']); if (mysqli_affected_rows($GLOBALS['link']) == 0) $error .= mysqli_error(); if (mysqli_affected_rows($GLOBALS['link']) == 0) $error .= mysqli_error(); } if ($error != '') $error = "Problème avec l'effacement d'observations : ".$error."

    "; if ($i >= 1) $message = $i." observations effacées"; else $message = ''; $text = '
    '.$error.$message.'
    '; return $text; } } } public function obs_list_obs_espece() { // prevoir limites si public (dernières) option pour obs user only etc if(isset($_REQUEST['id'])) $id_sp = $_REQUEST['id']; else $id_sp = ''; if(isset($_REQUEST['checked'])) $checked = $_REQUEST['checked']; else $checked = ''; $result = mysqli_query($GLOBALS['link'], "SELECT * FROM obs WHERE id_sp = '".$id_sp."' ORDER BY date DESC"); $GLOBALS['nb_queries']++; $num_rows = @mysqli_num_rows($result); $result0 = mysqli_query($GLOBALS['link'], "SELECT nom, espece FROM especes WHERE id = '".$id_sp."'"); $GLOBALS['nb_queries']++; $num_rows0 = @mysqli_num_rows($result0); $nom = mysqli_result($result0,0,"nom"); $espece = mysqli_result($result0,0,"espece"); $obs_aff = '
    Observations pour '.$nom.' | '.$espece.'
    '; if ($num_rows > 0) { $obs_aff.= ""; $goto = urlencode($_SERVER['PHP_SELF']."?id=".$id_sp); $bgcolor1 = "#C5D6CE"; $bgcolor2 = "#E6EEED"; $obs_aff.= ''; for($i = 0; $i < $num_rows;) { $bgcolor = $bgcolor1; $i % 2 ? 0: $bgcolor = $bgcolor2; $id0 = mysqli_result($result, $i,"id"); $primary_key = ("id = ".$id0); $primary_key = urlencode($primary_key); $check = ''; $href2 = ($GLOBALS['server_path'].$GLOBALS['site_path'].$GLOBALS['admin_path']."change.php?primary_key=$primary_key&server=1&db=".$GLOBALS['mysql_db']."&table=obs&id=$id0&goto=$goto"); $nb = mysqli_result($result, $i,"nb"); $date = date_fr(mysqli_result($result, $i,"date")); $href1 = ($_SERVER['PHP_SELF']."?opt=obs&id_obs=$id0&id_sp=$id_sp"); $edit = ''.icone_edit().''; $handle = ("'; $i++; } $obs_aff.= '
    "); $sp = chr(32); $cr = chr(10); $obs_aff.= $handle.'
    $check $nb $date $edit
    '; $obs_aff.= ''; } return $obs_aff; } public function obs_form_add_images() { if (!isset ($_FILES['img']['name']) AND !isset($_REQUEST['im'])) { $content = '
    '; $content .= '
    Si vous disposez de photos avec données Exif, date et/ou GPS, commencez par les enregistrer :

    '; $content .= '
    '; $content .= '
    '; $content .= '
    Sinon passez directement au formulaire :

    '; return $content; } } public function obs_form_add_images_comments() { global $date_max_tt, $date_min_tt; // test si images non sauvées => pourquoi // lire données images exif // test si heures et GPS sont proches, sinon checkbox pour confirmer if (isset ($_FILES['img']['name']) AND isset ($_GET['save']) AND $_REQUEST['save'] == 0) { $save = 0; $date = array(); $gps = array(); $date_min = array(); $date_max = array();$date_min_t = array();$date_max_t = array(); $form = '
    '; $ids_images = array(); foreach($_FILES['img']['name'] as $index=>$name) { $filename = $name; // echo GLOBALS['img_path_f'] ."upload".DIRECTORY_SEPARATOR.$filename; $return = Observations::create_row_image($_FILES["img"]["tmp_name"][$index], $filename, $_REQUEST['id'], $date_min_tt, $date_max_tt); $form .= $return['text']; $date_min = $return['date_min']; $date_max = $return['date_max']; $date_min_t = $return['date_min_t']; // echo $return['date_min_t']." date_min_t
    "; $date_max_t = $return['date_max_t']; // echo $return['date_max_t']." date_max_t
    "; } $mostRecent= 0; foreach($date_min_t as $date) { $curDate = strtotime($date); if ($curDate < $mostRecent) { $date_min_tt = $curDate; } } $mostOld= 0; foreach($date_max_t as $date) { $curDate = strtotime($date); if ($curDate < $mostOld) { $date_max_tt = $curDate; } } // echo " min ".$this->date_min." < max ".$this->date_max; $date_diff = date_difference(str_replace(":", "-", $this->date_min), str_replace(":", "-", $this->date_max)); // echo $date_diff['ans']." ".$date_diff['mois']." ".$date_diff['jours']; if ($date_diff['ans'] >= 1 OR $date_diff['mois'] >= 1 OR $date_diff['jours'] >= 2) { if ($date_diff['ans'] >= 1) { $diff_temps_text = $date_diff['ans'].' an'; if ($date_diff['ans'] >= 2) $diff_temps_text = $diff_temps_text."s"; $diff_temps_text = $date_diff['ans'].', '; } else $diff_temps_text = ''; if ($date_diff['mois'] >= 1) $diff_temps_text .= $date_diff['mois'].' mois, '; if ($date_diff['jours'] >= 1) { $diff_temps_text .= $date_diff['jours'].' jour'; if ($date_diff['ans'] >= 2) $diff_temps_text = $diff_temps_text."s"; } $form = '
    différence de '.$diff_temps_text.' entre les données Exif de ces différentes photos... s\'agit t\'il bien de la même observation ?

    '.$form; } if ($date_min != "0000:00:00") {$form .= '';} // distance max entre points GPS $gps_dist = gps_distance($this->lats['min'], $this->lons['min'], $this->lats['min'], $this->lons['max'], 'K'); if ($gps_dist >= 25) $form = '
    différence de '.round($gps_dist, 2).' kilomètres entre les coordonnées GPS de ces différentes photos... s\'agit t\'il bien de la même observation ?

    '.$form; if (count($this->gps) >= 1) { $this->gps_centre = gps_center($this->gps); $form .= ''; } // var_dump($this->gps_centre); $form .= '


    '; // pas d'id pour sauver img_obs... } elseif(isset($_REQUEST['im'])) { $filename = $_REQUEST['im']; // echo GLOBALS['img_path_f'] ."upload".DIRECTORY_SEPARATOR.$filename; $return = Observations::create_row_image('', $filename, $_REQUEST['id']); $form = $return['text']; $date_min_t = $return['date_min_t']; $date_max_t = $return['date_max_t']; } else $form = ''; $form_images = $form; return $form_images; } public function obs_form_add_images_save() { // sauver images, et conserver id_image's dans vecteur à charger dans input de obs_form ! $form = ''; if (isset($_REQUEST['save']) AND $_REQUEST['save'] == 1) { $i = 0; $id_images = array(); if (isset($_REQUEST['com'])) { // reset($_REQUEST['com']); While ($i < count($_REQUEST['com'])) { $sql_images = "INSERT INTO images (path, com, id_espece) VALUES ('".$_REQUEST['filename'][$i]."', '".$_REQUEST['com'][$i]."', '".$_REQUEST['id']."')"; // $sql_obs_images = "INSERT INTO obs_images (id_obs, id_images) VALUES ('".$_REQUEST['filename'][$i]."', '".$_REQUEST['com'][$i]."', '".$_REQUEST['id']."')";$i++; echo $sql; $id_images[] = mysqli_insert_id($GLOBALS['link']); $i++; } $i = 0; // print_r($id_obs_images); $form .= ''; $form .= ''; return $form; } } } public function obs_dates_extremes() { // } public function create_row_image($temp_name, $filename, $id_sp, $date_min_t = '', $date_max_t = '') { if($temp_name != '' AND !file_exists($GLOBALS['img_path_f'] ."upload".DIRECTORY_SEPARATOR.$filename)) { if(move_uploaded_file($temp_name, $GLOBALS['img_path_f'] ."upload".DIRECTORY_SEPARATOR.$filename)) { $form = ''; // crééer miniature si taille plus grande que 525 ? 800 ? // img_resize($GLOBALS['img_path_f'] ."upload".DIRECTORY_SEPARATOR, $filename, '', 525, 400); // sauver dans table ... obs_img => aussi implémenter dans admin.php $sql_images = "INSERT INTO images (path, id_espece, com) VALUES ('$filename', '$id_sp', '')"; // $result_images = mysqli_query($GLOBALS['link'], $sql); // $id_image = mysqli_insert_id($GLOBALS['link']); $ids_images = $id_image; $sql_obs_im = "INSERT INTO obs_images (id_obs, id_images) VALUES ('$id_obs','$id_image')"; // $result_obs_im = mysqli_query($GLOBALS['link'], $sql); // traiter date et GPS pour assurer qu'il s'agit bien de la même observations lecture exifs // chercher date max et min $date[] = $camera = exif($GLOBALS['img_path_f']."upload/".$filename); if ($camera['date'] == '') $camera['date'] = "non disponible"; else { $date_1 = explode(" ", $camera['date']); if ($date_min_t == "") {$this->date_min = $date_1[0]; $date_min_t = $camera['date'];} if (strtotime(str_replace(":", "-", $date_1[0])) > strtotime(str_replace(":", "-", $this->date_max))) { $this->date_max = $date_1[0]; $date_max_t = $camera['date']; } if (strtotime(str_replace(":", "-", $date_1[0])) < strtotime(str_replace(":", "-", $this->date_min))) { $this->date_min = $date_1[0]; $date_min_t = $camera['date']; } //echo $filename." < ".$camera['date']."
    "; $date_2 = explode(":", $date_1[0]); $an = trim($date_2[0]); $mois = $date_2[1]; $jour = $date_2[2]; $time_1 = explode(":", $date_1[1]); $h = $time_1[0]; $m = $time_1[1]; } // gps_distance($lat1, $lon1, $lat2, $lon2, $unit = 'K') // étudier format sur sortie fonction... $gps = readGPSinfoEXIF($GLOBALS['img_path_f']."upload/".$filename); if ($gps[0] === NULL) { $gp_texts = "non disponible"; $this->lats['max'] = $this->lats['min'] = $this->lons['max'] = $this->lons['min'] = NULL; } else { $gps_lat = $gps[0]; $gps_lon = $gps[1]; $this->gps[] = array($gps_lat, $gps_lon); $gps_lat = $gps[0]; $gps_lon = $gps[1]; $gps_text = "lat : ".round($gps_lat, 4)."; long : ".round($gps_lon, 4);// implode("; ",$gps); if ($this->lats['min'] == 0 OR $this->lats['min'] >= $gps_lat) $this->lats['min'] = $gps_lat; if ($this->lats['max'] == 0 OR $this->lats['max'] <= $gps_lat) $this->lats['max'] = $gps_lat; if ($this->lons['min'] == 0 OR $this->lons['min'] >= $gps_lon) $this->lons['min'] = $gps_lon; if ($this->lons['max'] == 0 OR $this->lons['max'] <= $gps_lon) $this->lons['max'] = $gps_lon; } // copier miniature depuis admin files ligne 4446 séparer fonction, à placer dans aves.php ? if ($image = exif_thumbnail($GLOBALS['img_path_f']."upload/".$filename, $width, $height, $type)) { $image_lien = preg_replace("/_min\./", ".", $GLOBALS['server_path'].$GLOBALS['site_path'].$GLOBALS['img_path']."upload/".$filename); $img = "
    "; } else { $image_lien = preg_replace("/_min\./", ".", $GLOBALS['server_path'].$GLOBALS['site_path'].$GLOBALS['img_path']."upload/".$filename); $img = "".image_redim($filename, 126, '', $GLOBALS['server_path'].$GLOBALS['site_path'].$GLOBALS['img_path']."upload/", $GLOBALS['img_path_f']."upload".DIRECTORY_SEPARATOR).""; } $form .= "
    ".$img."
    "; // Champ de commentaire pour images $form .= '
    Commentaire :

    Date Exif : '.$camera['date'].'

    GPS Exif : '.$gps_text.'
    '; } else $form = ' Impossible d\'enregistrer '.$filename; } // image déjà sauvée sous files/images/ elseif ($temp_name == '') { $form = ''; // crééer miniature si taille plus grande que 525 ? 800 ? // img_resize($GLOBALS['img_path_f'] ."upload".DIRECTORY_SEPARATOR, $filename, '', 525, 400); // à implémenter ! // sauver dans table obs_img => aussi implémenter dans admin.php /* $sql_images = "INSERT INTO images (path, id_espece, com) VALUES ('$filename', '$id_sp', '')"; $result_images = mysqli_query($GLOBALS['link'], $sql); $id_image = mysqli_insert_id($GLOBALS['link']); $ids_images = $id_image; $sql_obs_im = "INSERT INTO obs_images (id_obs, id_images) VALUES ('$id_obs','$id_image')"; $result_obs_im = mysqli_query($GLOBALS['link'], $sql); */ $id_image = "pas activé"; // chercher date max et min $date[] = $camera = exif($GLOBALS['img_path_f'].$filename); if ($camera['date'] == '') $camera['date'] = "non disponible"; else { $date_1 = explode(" ", $camera['date']); $date_min = $date_max = $date_1[0]; $date_min_t = $date_max_t = $camera['date']; // echo $date_1[0]." < ".$date_min." < ".$date_max."
    "; $date_2 = explode(":", $date_1[0]); $an = trim($date_2[0]); $mois = $date_2[1]; $jour = $date_2[2]; $time_1 = explode(":", $date_1[1]); $h = $time_1[0]; $m = $time_1[1]; } // traiter date et GPS pour assurer qu'il s'agit bien de la même observations lecture exifs // gps_distance($lat1, $lon1, $lat2, $lon2, $unit = 'K') // étudier format sur sortie fonction... $gps = readGPSinfoEXIF($GLOBALS['img_path_f'].$filename); if ($gps[0] === NULL) { $gps_text = "non disponible"; $lats['max'] = NULL; $lats['min'] = NULL; $lons['max'] = NULL; $lons['min'] = NULL; } else { $gps_lat = $gps[0]; $gps_lon = $gps[1]; $this->gps[] = array($gps_lat, $gps_lon); $gps_lat = $gps[0]; $gps_lon = $gps[1]; $gps_text = "lat : ".round($gps_lat, 4)."; long : ".round($gps_lon, 4);// implode("; ",$gps); if ($this->lats['min'] == 0 OR $this->lats['min'] >= $gps_lat) $this->lats['min'] = $gps_lat; if ($this->lats['max'] == 0 OR $this->lats['max'] <= $gps_lat) $this->lats['max'] = $gps_lat; if ($this->lons['min'] == 0 OR $this->lons['min'] >= $gps_lon) $this->lons['min'] = $gps_lon; if ($this->lons['max'] == 0 OR $this->lons['max'] <= $gps_lon) $this->lons['max'] = $gps_lon; } // copier miniature depuis admin files ligne 4446 séparer fonction, à placer dans aves.php ? if ($image = exif_thumbnail($GLOBALS['img_path_f'].$filename, $width, $height, $type)) { $image_lien = preg_replace("/_min\./", ".", $GLOBALS['server_path'].$GLOBALS['site_path'].$GLOBALS['img_path'].$filename); $img = ""; } else { $image_lien = preg_replace("/_min\./", ".", $GLOBALS['server_path'].$GLOBALS['site_path'].$GLOBALS['img_path'].$filename); $img = "".image_redim($filename, 126, '', $GLOBALS['server_path'].$GLOBALS['site_path'].$GLOBALS['img_path']."upload/", $GLOBALS['img_path_f']).""; } $form .= "
    ".$img."
    "; // Chercher si commentaire dans images $form .= '
    Commentaire :

    Date Exif : '.$camera['date'].'

    GPS Exif : '.$gps_text.'
    '; } else $form .= ' L\'image '.$filename.' est déjà enregistrée
    '; // corriger temps ! // echo "$filename : date_min = ".$date_min."date_min_t = ".$date_min_t."
    "; $ret = ['text' => $form, 'date_min' => $date_min, 'date_max' => $date_max, 'date_min_t' => $date_min_t, 'date_max_t' => $date_max_t, 'lats_min' => $lats['min']]; return $ret; } public function obs_display() { global $nom, $espece, $id_sp; $id_obs = $_GET['id_obs']; $sql = "SELECT prio, date, time, duree, atlas, id_sp, met, rem, lieu, lat, lon, nb, creat FROM obs WHERE id = $id_obs"; $res = mysqli_query($GLOBALS['link'], $sql); $GLOBALS['nb_queries']++; $message = mysqli_error($GLOBALS['link']); $prio = mysqli_result($res ,0, "prio"); $date = mysqli_result($res, 0, "date"); $time = mysqli_result($res, 0, "time"); $duree = mysqli_result($res, 0, "duree"); $atlas = mysqli_result($res, 0, "atlas"); $id_sp = mysqli_result($res, 0, "id_sp"); $met = mysqli_result($res, 0, "met"); $rem = mysqli_result($res, 0, "rem"); $lieu = mysqli_result($res, 0, "lieu"); $lat = mysqli_result($res, 0, "lat"); $lon = mysqli_result($res, 0, "lon"); $nb = mysqli_result($res, 0, "nb"); $creat = mysqli_result($res, 0, "creat"); if (isset ($lat) AND isset ($lat)) { if (1*$lat > 0) $lat_aff = round(1*$lat, 4)."° N"; else $lat_aff = round(1*$lat, 4)."° S"; if (1*$lon > 0) $lon_aff = round(1*$lon, 4)."° E"; else $lon_aff = round(1*$lon, 4)."° O"; } if ($duree <= 31622399) // années { if ($duree <= 2635199) // mois { if ($duree <= 86399) // jours { if ($duree <= 3599) // heures { if ($duree >= 1) // minutes { $duree_val = intval($duree / 60); $duree_aff = " - Durée : ".$duree_val." minutes"; if ($duree_val == 1) $duree_aff = str_replace("minutes", "minute", $duree_aff); } else $duree_aff = ''; } else { $duree_val = intval($duree / 3600); $duree_aff = " - Durée : ".$duree_val." heures"; $minutes = ($duree % 3600) / 60; if ($minutes >= 1) $duree_aff .= " ".$minutes." minutes"; if ($duree_val == 1) $duree_aff = str_replace("jours", "jour", $duree_aff); if ($minutes == 1) $duree_aff = str_replace("minutes", "minute", $duree_aff); } } else { $duree_val = intval($duree / 86400); $duree_aff = " - Durée : ".$duree_val." jours"; $heures = ($duree % 86400) / 3600; if ($heures >= 1) $duree_aff .= " ".$heures." heures"; if ($duree_val == 1) $duree_aff = str_replace("jours", "jour", $duree_aff); if ($heures == 1) $duree_aff = str_replace("heures", "heure", $duree_aff); } } else { $duree_val = intval($duree / 263520); $duree_aff = " - Durée : ".$duree_val." mois"; $jours = ($duree % 263520) / 86400; if ($jours >= 1) $duree_aff .= " ".$jours." jours"; if ($jours == 1) $duree_aff = str_replace("jours", "jour", $duree_aff); } } else { $duree_val = intval($duree / 31622400); $duree_aff = " - Durée : ".$duree_val." années"; $mois = ($duree % 31622400) / 263520; if ($mois >= 1) $duree_aff .= " ".$mois." mois"; if ($duree_val == 1) $duree_aff = str_replace("années", "an", $duree_aff); } $date = date_fr($date); $time = preg_replace('/([0-9]{2}):([0-9]{0,2}):[0-9]{0,2}/','\\1h \\2', $time); if ($prio == 1) $prio = 'exceptionnel'; elseif ($prio == 2) $prio = 'rare'; elseif ($prio == 3) $prio = 'peu commun'; elseif ($prio == 4) $prio = 'commun'; elseif ($prio == 5) $prio = 'abondant'; if ($atlas != '' AND $atlas >= 1) { $code_atlas = Observations::obs_code_atlas(); $atlas_aff = ' - Code Atlas : '.$code_atlas[$atlas]; } else $atlas_aff = ''; $sql_sp = "SELECT nom, espece from especes WHERE id = $id_sp"; $res_sp = mysqli_query($GLOBALS['link'], $sql_sp); $GLOBALS['nb_queries']++; $nom = mysqli_result($res_sp, 0, "nom"); $espece = mysqli_result($res_sp, 0, "espece"); $message .= " ".mysqli_error($GLOBALS['link']); if ($message != ' ') $message = '
    '.$message.'
    '.$sql.'
    '; else $message = ""; $save = 0; $link_p = ''; $link_s = ''; $edit = $link_p.icone_edit().$link_s; $obs_aff = $message.'
    '; $obs_aff .= '
    Date : '.$date.', '.$time.' '.$duree_aff.'
    '; $obs_aff .= 'Nombre : '.$nb.' - Importance : '.$prio.''.$atlas_aff.'
    '; $obs_aff .= '
    Observations : '.$rem.'

    '; ; $obs_aff .= 'Lieu : '.$lieu.'

    '; $obs_aff .= 'Coordonnées : '.$lat_aff.', '.$lon_aff.'

    '; $obs_aff .= 'Météo : '.$met.'

    '; // ??? h = ? if (isset($h) AND $h == 1)$obs_aff.= 'Fermer'; else $obs_aff .= 'Retour'.$edit.'
    '; $obs_aff .= '

    '; $obs_aff .= '
    '; $obs_aff .= ''; return $obs_aff; } } function nav_obs() { if ($GLOBALS['session_auth'] == true AND preg_match('/photos/', $GLOBALS['droits'])) { $base_path = $GLOBALS['server_path'].$GLOBALS['site_path']; /*if (isset($_GET['tit']) AND mysqli_result(mysqli_query($GLOBALS['link'], "SELECT prio FROM articles WHERE id = ".$_GET['tit']), 0, "prio") <= 3 OR isset($_GET['dom'])) $display = "yes"; else*/ $display = "none"; echo '
    '; echo''); } } function espece_from_image($image) { $espece = preg_replace("/\.(jpg|JPG)/", "", $image); $espece = preg_replace("/(_[0-9])*/", "", $espece); $espece = preg_replace("/(_min)$/", "", $espece); if (preg_match("/([a-zA-Z]+_[a-zA-Z]+)(.*)/", $espece, $reg)) { $espece = $reg[1]; } $espece = trim(preg_replace("/_/", " ", $espece)); return $espece; } // 28.12.2016 function cons_from_espece($espece, $espece_clements = '', $espece_ioc = '', $des = '') { GLOBAL $sp_altern, $espece_clements, $espece_ioc; if (is_numeric($espece)) $sql_conservation = "SELECT rlcabb, poptrend FROM conservation WHERE conservation.id_aves = ".$espece; else $sql_conservation = "SELECT rlcabb, poptrend FROM conservation WHERE conservation.espece = '".$espece."'"; $result = mysqli_query($GLOBALS['link'], $sql_conservation); $num_rows = @mysqli_num_rows($result); $cons = FALSE; if ($num_rows == 1) {$sp_altern = $espece; $cons = TRUE; } else { if ($espece_clements != '') { $cons_array = cons_sql($espece_clements); if ($cons_array[0] == FALSE AND $espece_ioc != '') $cons_array = cons_sql($espece_ioc); } elseif ($espece_ioc != '') { // echo $espece, $espece_clements, $espece_ioc; $cons_array = cons_sql($espece_ioc); } if (isset($cons_array) AND $cons_array[0] == TRUE) { $cons = $cons_array[0]; $sp_altern = $cons_array[1]; } if ($cons == FALSE) { if (substr($espece, -1) == 'a') $espece_alt = preg_replace("/^(.*)a$/", "$1us", $espece); elseif(substr($espece, -2) == 'us') $espece_alt = preg_replace("/^(.*)us$/", "$1a", $espece); if (isset($espece_alt)) { $cons_array = cons_sql($espece_alt); if ($cons_array[0] == TRUE) { $cons = $cons_array[0]; $sp_altern = $cons_array[1]; } } if ($cons == FALSE) { if ($des == '') { $result_des = mysqli_query($GLOBALS['link'], "SELECT des FROM especes WHERE espece = '".$espece."'"); $GLOBALS['nb_queries']++; $des = mysqli_result($result_des,0,"des"); } $masque_sp = "/\[[^\]]*([A-Za-z ]*)<[^\]]*\]/"; if (preg_match($masque_sp, $des)) { // rajouter table avec taxonomie Clements ou tous noms synonymes à la place de notes dans le champ especes.des $n = 1; $t = 0; while (preg_match($masque_sp, $des, $ref)) { $alternate_sp = $ref[ $n ]; $cons_array = cons_sql($alternate_sp); if ($cons_array[0] == TRUE) { $cons = $cons_array[0]; $sp_altern = $cons_array[1]; BREAK; } $des = str_replace(''.$ref[ $n ].'', '', $des); $t++; // facteur 4 choisi aléatoirement pour éviter boucle if ($t > 4) { $cons = FALSE; BREAK;} } } } } } if ($cons == TRUE) { if (is_numeric($espece)) $sql_conservation = "SELECT rlcabb, poptrend FROM conservation WHERE conservation.id_aves = ".$espece; else $sql_conservation = "SELECT rlcabb, poptrend FROM conservation WHERE conservation.espece = '".$sp_altern."'"; $result_conserv = mysqli_query($GLOBALS['link'], $sql_conservation); $GLOBALS['nb_queries']++; $rlcabb = iucn_codes(); $poptrend = array( "" => "", "Decreasing" => "population en baisse", "Increasing" => "population en hausse", "Stable" => " population stable", "Unknown" => " tendance incertaine"); $code = mysqli_result($result_conserv, 0, "rlcabb"); if (isset($code) AND trim($code) != '') { $rlc = $rlcabb[$code]; $pop = $poptrend[mysqli_result($result_conserv,0,"poptrend")]; $conservation = $code.", ".$rlc; $conservation .= ", ".$pop; } else $conservation = ''; } else $conservation = ""; return $conservation; } function iucn_codes() { $codes = array("LC" => "Non-critique", "NT" => "Quasi menacé", "VU" => "Vulnérable", "EN" => "En danger", "CR" => "Danger critique", "EW" => "Survit en captivité", "EX" => "Éteint", "DD" => "Données lacunaires", "NE" => "Non évalué", "IN" => "Non répertorié"); // espèces non incluses dans taxonomie /IUCN ITIS par exemple return $codes; } function iucn_colors() { $codes = array("EX" => "black", "EW" => "purple", "CR" => "red", "EN" => "orange", "VU" => "yellow", "NT" => "olive", "LC" => "green", "DD" => "slategrey", "NE" => "white", "IN" => "lightgrey"); return $codes; } function cons_sql($esp_test) { $sql_conservation = "SELECT rlcabb, poptrend FROM conservation WHERE conservation.espece = '".$esp_test."'"; // un masque serait plus approprié si espece_clents = ' ' ? $result = mysqli_query($GLOBALS['link'], $sql_conservation); $num_rows = @mysqli_num_rows($result); $cons = FALSE; if ($num_rows == 1) {$sp_altern = $esp_test; $cons = TRUE; } else $sp_altern = ''; return array($cons, $sp_altern); } function cons_code($conservation) { if (preg_match("/Survit uniquement en captivité|Danger critique|En danger|Espèce en danger/iu", $conservation)) $conserv = 1; elseif (preg_match("/vulnérable|Espèce presque menacée/iu",$conservation)) $conserv = 2; elseif (preg_match("/population en baisse/iu",$conservation)) $conserv = 3; elseif (preg_match("/Espèce éteinte/",$conservation)) $conserv = 5; else $conserv = 4; return $conserv; } function cons_symbole($code, $conservation) { $conservation = preg_replace("/[A-Z]{2}, /", "", preg_replace("/^(.*), $/", "$1", $conservation)); if ($code == 1) $c = "
    "; elseif ($code == 2) $c = "
    "; elseif ($code == 3) $c = "
    "; elseif ($code == 5) $c = "
    "; else $c = ""; return $c; } // 19:30 20.03.2018 accepte id ou espece comme seul argument ... function url_espece($espece, $id = 0, $ordre = '', $famille = '', $regions = '') { $goto = $GLOBALS['server_path'].$GLOBALS['site_path']; if ($ordre == '' OR $famille == '' OR $regions == '') { if ($espece == '' OR $id > 0 OR is_numeric($espece)) { if (is_numeric($espece) AND $id == 0) $id = $espece; $sql = "SELECT nom, espece, especes.id, familles.familles, region, ordres FROM especes, familles WHERE especes.id = '".$id."' AND especes.famille = familles.familles"; } elseif ($espece != '') { $sql = "SELECT nom, espece, especes.id, familles.familles, region, ordres FROM especes, familles WHERE especes.espece = '".$espece."' AND especes.famille = familles.familles"; } else { // pas de données suffisantes } $result0 = mysqli_query($GLOBALS['link'], $sql); $GLOBALS['nb_queries']++; if (@mysqli_num_rows($result0) >= 0) { $nom_sql = mysqli_result($result0, 0, "nom"); $id_sql = mysqli_result($result0, 0, "id"); $regions_sql = mysqli_result($result0, 0, 'region'); $ordre_sql = mysqli_result($result0, 0, 'ordres'); $famille_sql = mysqli_result($result0, 0, 'familles'); } else { // pas de résultat pour es références espèces } } else { if ($ordre != '') $ordre_sql = $ordre; if ($famille != '') $famille_sql = $famille; if ($regions != '') $regions_sql = $regions; } $goto .= 'page.php?pos='.$id.'&espece='.url_fr($espece); if (preg_match("/ ,/", $regions_sql)) $regs = explode(", ",$regions); else $regs = explode(",",$regions); $region_canonical = sans_accent($regs[0]); // plus de données que id ou espece, url complet, sinon minimum if ($ordre != '' OR $famille != '' OR $regions != '') $canonical_href = url_rewrite($goto."®ion=".$region_canonical."&ordre=".$ordre_sql."&famille=".$famille_sql); else $canonical_href = url_rewrite($goto); return $canonical_href; } function verif_var_aves () { GLOBAL $espece, $nom_en; $exit = FALSE; if (isset($_REQUEST['region'])) { // echo" request region : ".$_REQUEST['region']; $regions_url = array("Afrique", "Amerique", "Antarctique", "Arctique", "Asie", "Europe", "Oceanie", "Tous"); $codes_url = pays_codes(); if ($_REQUEST['region'] != clean_var($_REQUEST['region']) OR (!in_array(mb_ucfirst(strtolower($_REQUEST['region'])), $regions_url) AND !in_array(strtoupper($_REQUEST['region']), $codes_url))) {error_404(); EXIT;} } if (isset($_REQUEST['ordre'])) { // echo" request ordre : ".$_REQUEST['ordre']; $ordre = strtoupper(clean_var($_REQUEST['ordre'])); if ($ordre != strtoupper($_REQUEST['ordre'])) EXIT; $sql_ordre = "SELECT ordres FROM familles WHERE ordres = '".$ordre."'"; $res_ordre = mysqli_query($GLOBALS['link'], $sql_ordre); $GLOBALS['nb_queries']++; // echo $_REQUEST['famille']."::ordre; ".$_REQUEST['ordre']; if (@mysqli_num_rows($res_ordre) <= 0) { if (isset($_GET['espece'])) // ou preg_match page.php ? { if (isset($_GET['famille'])) $f = clean_var($_GET['famille']); else $f = ''; if ($taxo_sp_fam = page_cont_taxo_sp_fam(clean_var($_GET['espece']), $nom_en, clean_var($_GET['ordre']), $f, $des = '', $url = TRUE) AND ($taxo_sp_fam['clements'] == TRUE AND strtoupper($taxo_sp_fam['ordre_clements']) == strtoupper(clean_var($_GET['ordre'])))) { $exit = FALSE; $_GET['ordre'] = $GLOBALS['ordre']; $_REQUEST['ordre'] = $GLOBALS['ordre']; } else $exit = TRUE; } else $exit = TRUE; } if (isset($_REQUEST['famille'])) { // echo" request famille : ".$_REQUEST['famille']; $famille = strtoupper(clean_var($_REQUEST['famille'])); if ($famille != strtoupper($_REQUEST['famille'])) EXIT; $sql_famille = "SELECT ordres FROM familles WHERE familles = '".$famille."'"; $res_famille = mysqli_query($GLOBALS['link'], $sql_famille); $GLOBALS['nb_queries']++; // echo $_REQUEST['famille']."::ordre; ".$_REQUEST['ordre']; if (@mysqli_num_rows($res_famille) <= 0) { if (!isset($taxo_sp_fam) AND isset($_REQUEST['espece'])) $taxo_sp_fam = page_cont_taxo_sp_fam(clean_var($_REQUEST['espece']), $nom_en, clean_var($_GET['ordre']), clean_var($_REQUEST['famille']), $des = '', $url = TRUE); if ((isset($taxo_sp_fam['clements']) OR isset ($taxo_sp_fam['ioc'])) AND ($taxo_sp_fam['clements'] == 1 OR $taxo_sp_fam['ioc'] == 1) AND (strtoupper($taxo_sp_fam['famille_clements']) == strtoupper(clean_var($_GET['famille'])) OR strtoupper($taxo_sp_fam['famille_ioc']) == strtoupper(clean_var($_GET['famille'])))) { $exit = FALSE; $_GET['famille'] = $GLOBALS['famille']; $_REQUEST['famille'] = $GLOBALS['famille']; } else $exit = TRUE; } } if ($exit == TRUE) { error_404(); EXIT; } } elseif (isset($_REQUEST['famille'])) {error_404(); EXIT;} } function page_cont_taxo_sp_fam($espece, $anglais = '%', $ordre = '', $famille = '', $des = '', $url = FALSE, $id = '') { // problème, la fonction fait 3 choses à la fois : lire les variations de nom d'espèce et de famille/ordre d'une espèce, valider les urls, et former l'étiquette avec les différentes versions de noms et familles... // autre problème, répétition des mêmes structures après différents tests > sortir tout ça sous forme de fonction, ou composer classe ? GLOBAL $clements, $espece_clements, $espece_ioc, $ioc; $espece_clements = $espece_ioc = $texte_clements = $texte_ioc = $tit_clements = $tit_ioc = $famille_clements = $famille_ioc = ''; $clements = FALSE; $ioc = FALSE; if ($url == TRUE) $return_array = $return_array_clements = $return_array_ioc = array(); $ord = mb_ucfirst(strtolower($ordre)); $fam = mb_ucfirst(strtolower($famille)); $ordre_aves = $GLOBALS['ordre']; $famille_aves = $GLOBALS['famille']; $sp = $sp_init = preg_replace("/[a-zA-Z]+[\(\)a-z]*( [a-z])+/", "\\1", $espece); $masque_sp = "/\[[^\]]*([A-Za-z ]*)<[^\]]*\]/"; if (is_numeric($id) AND $id >= 1) { $sql_clements = "SELECT `scientific_name`, `English_name`, `family`, `order` FROM `".$GLOBALS['clements_table']."` WHERE `id_aves` = ".$id." AND category = 'species'"; $result_clements = mysqli_query($GLOBALS['link'], $sql_clements); $GLOBALS['nb_queries']++; if (@mysqli_num_rows($result_clements) == 1) { $clements = TRUE; $espece_clements = mysqli_result($result_clements, 0, "scientific_name"); $famille_clements = mysqli_result($result_clements, 0, "family"); $famille_clements = trim(preg_replace("/([A-Za-z])*\([ A-Za-z,'-]*\)/", "\\1", $famille_clements)); $ordre_clements = mysqli_result($result_clements, 0, "order"); $ordre_clements = trim($ordre_clements); } $sql_ioc = "SELECT `scientific_name`, `family`, `order` FROM `".$GLOBALS['ioc_table']."` WHERE `id_aves` = ".$id." AND category = 'species'"; $result_ioc = mysqli_query($GLOBALS['link'], $sql_ioc); $GLOBALS['nb_queries']++; if (@mysqli_num_rows($result_ioc) == 1) { $ioc = TRUE; $espece_ioc = mysqli_result($result_ioc, 0, "scientific_name"); $famille_ioc = mysqli_result($result_ioc, 0, "family"); $ordre_ioc = mysqli_result($result_ioc, 0, "order"); if ($url == TRUE) $return_array_ioc = array('ioc' => 1, 'espece_ioc' => $espece_ioc, 'famille_ioc' => $famille_ioc, 'ordre_ioc' => $ordre_ioc); $comment_ioc = table_comment($GLOBALS['ioc_table']); if ($comment_ioc != '') $tit_ioc = $comment_ioc; else $tit_ioc = "IOC"; } } if ($espece_clements == '' OR $espece_ioc == '') { // très holé holé... if (strlen($sp) > 9) { $sp = substr($sp, 0, -3); $sp_gen = substr($espece, 0, -3); } else { $sp = substr($sp, 0, -1); $sp_gen = substr($espece, 0, -1); } } if ($espece_clements == '') { $sql_clements = "SELECT `scientific_name`, `English_name`, `family`, `order` FROM `".$GLOBALS['clements_table']."` WHERE `scientific_name` = '".$espece."'"; $result_clements = mysqli_query($GLOBALS['link'], $sql_clements); $GLOBALS['nb_queries']++; if (@mysqli_num_rows($result_clements) == 1) { $clements = TRUE; } else { $anglais = preg_replace("/[^\w]/", "%", $anglais); $sql_clements = "SELECT `scientific_name`, `English_name`, `family`, `order` FROM `".$GLOBALS['clements_table']."` WHERE ((`English_name` LIKE '".$anglais."' AND `scientific_name` LIKE '%".$sp."%') OR `scientific_name` LIKE '".$sp_gen."%') AND (category = 'species' AND (`order` = '".$ord."' OR `family` LIKE '".$fam." %'))";/**/ $result_clements = mysqli_query($GLOBALS['link'], $sql_clements); $GLOBALS['nb_queries']++; if (@mysqli_num_rows($result_clements) == 1 AND (abs(strlen(preg_replace("/[a-zA-Z]+ ([a-z]+)/", "\\1", mysqli_result($result_clements, 0, "scientific_name"))) - strlen($sp_init))) <= 2) { $clements = TRUE; } else { if ($des == '') { $result_des = mysqli_query($GLOBALS['link'], "SELECT des FROM especes WHERE espece = '".$espece."'"); $GLOBALS['nb_queries']++; $des = mysqli_result($result_des, 0, "des"); } if (preg_match($masque_sp, $des)) { // rajouter table avec taxonomie Clements ou tous noms synonymes à la place de notes dans le champ especes.des $n = 1; $t = 0; $des_rep = $des; while (preg_match($masque_sp, $des_rep, $ref)) { $alternate_sp = $ref[ $n ]; // pas besoin si espece correspond exactement ? /*`English_name` = '".addslashes($anglais)."' AND*//*AND `order` = '".$ord."' */ $sql_clements = "SELECT `scientific_name`, `English_name`, `family`, `order` FROM `".$GLOBALS['clements_table']."` WHERE `scientific_name` = '".$alternate_sp."'"; $result_clements = mysqli_query($GLOBALS['link'], $sql_clements); $num_rows_clements = @mysqli_num_rows($result_clements); if ($num_rows_clements == 1) { $sp_altern = $alternate_sp; $clements = TRUE; BREAK;} $des_rep = str_replace(''.$ref[ $n ].'', '', $des_rep); $t++; // facteur 4 choisi aléatoirement pour éviter boucle if ($t > 4) { $clements = FALSE; BREAK;} } } } } } if ($clements == TRUE) { // définitivement un problème avec noms Clements dans données IOC ! /* OR `clements_name` = '".$espece."'*/ if ($ioc == FALSE) { $sql_ioc = "SELECT `scientific_name`, `family`, `order` FROM `".$GLOBALS['ioc_table']."` WHERE (`scientific_name` = '".$espece."' OR `scientific_name` = '".mysqli_result($result_clements, 0, "scientific_name")."' OR `clements_name` = '".mysqli_result($result_clements, 0, "scientific_name")."') AND category = 'species' LIMIT 0,1"; $result_ioc = mysqli_query($GLOBALS['link'], $sql_ioc); $GLOBALS['nb_queries']++; if (@mysqli_num_rows($result_ioc) == 1) { $ioc = TRUE; $espece_ioc = mysqli_result($result_ioc, 0, "scientific_name"); $famille_ioc = mysqli_result($result_ioc, 0, "family"); $ordre_ioc = mysqli_result($result_ioc, 0, "order"); if ($url == TRUE) $return_array_ioc = array('ioc' => 1, 'espece_ioc' => $espece_ioc, 'famille_ioc' => $famille_ioc, 'ordre_ioc' => $ordre_ioc); $comment_ioc = table_comment($GLOBALS['ioc_table']); if ($comment_ioc != '') $tit_ioc = $comment_ioc; else $tit_ioc = "IOC"; } } if ($espece_clements == '') { $espece_clements = mysqli_result($result_clements, 0, "scientific_name"); $famille_clements = mysqli_result($result_clements, 0, "family"); $famille_clements = trim(preg_replace("/([A-Za-z])*\([ A-Za-z,'-]*\)/", "\\1", $famille_clements)); $ordre_clements = mysqli_result($result_clements, 0, "order"); $ordre_clements = trim($ordre_clements); } if ($url == TRUE) $return_array_clements = array('clements' => 1, 'espece_clements' => $espece_clements, 'famille_clements' => $famille_clements, 'ordre_clements' => $ordre_clements); $comment = table_comment($GLOBALS['clements_table']); if ($comment != '') $tit_clements = $comment; else $tit_clements = "Clements"; //$famille_clements." > ".$espece_clements; if ($espece != $espece_clements) $texte_clements .= "
    ".$espece_clements.""; if (mb_ucfirst(strtolower($famille)) != $famille_clements) { $texte_clements .= "
    famille : ".$famille_clements; } if (mb_ucfirst(strtolower($ordre)) != $ordre_clements) $texte_clements .= "
    ordre : ".$ordre_clements; } else $ordre_clements = ''; // rajouter conditions pour variations -us <=> -um ; -a => -um etc... if (substr($espece, -1) == 'a') $alt_sp = " OR `scientific_name` = '".preg_replace("/^(.*)a$/", "$1us", $espece)."'"; elseif(substr($espece, -2) == 'is') $alt_sp = " OR `scientific_name` = '".preg_replace("/^(.*)is$/", "$1e", $espece)."'"; elseif (substr($espece, -2) == 'um') $alt_sp = " OR `scientific_name` = '".preg_replace("/^(.*)um$/", "$1a", $espece)."'"; elseif(substr($espece, -2) == 'us') $alt_sp = " OR `scientific_name` = '".preg_replace("/^(.*)us$/", "$1um", $espece)."'"; else $alt_sp = ''; if ($espece_ioc == '') { $sql_ioc = "SELECT `scientific_name`, `family`, `order` FROM `".$GLOBALS['ioc_table']."` WHERE (`scientific_name` = '".$espece."'".$alt_sp.") OR (`scientific_name` LIKE '".$sp_gen."%' AND `family` = '".$fam."') AND category = 'species'"; $result_ioc = mysqli_query($GLOBALS['link'], $sql_ioc); $GLOBALS['nb_queries']++; if ($espece_ioc == '' AND @mysqli_num_rows($result_ioc) == 1) { $ioc = TRUE; $espece_ioc = mysqli_result($result_ioc, 0, "scientific_name"); $famille_ioc = mysqli_result($result_ioc, 0, "family"); $ordre_ioc = mysqli_result($result_ioc, 0, "order"); if ($url == TRUE) $return_array_ioc = array('ioc' => 1, 'espece_ioc' => $espece_ioc, 'famille_ioc' => $famille_ioc, 'ordre_ioc' => $ordre_ioc); $comment_ioc = table_comment($GLOBALS['ioc_table']); if ($comment_ioc != '') $tit_ioc = $comment_ioc; else $tit_ioc = "IOC"; // fausse données dans IOC ? 'Conirostrum binghami' => 'Conirostrum fraseri' ?? /* if ($clements == FALSE) { $sql_ioc_clements = "SELECT `".$GLOBALS['clements_table']."`.`scientific_name`, `".$GLOBALS['clements_table']."`.`family`, `".$GLOBALS['clements_table']."`.`order` FROM `".$GLOBALS['ioc_table']."`, `".$GLOBALS['clements_table']."` WHERE `".$GLOBALS['ioc_table']."`.`scientific_name` = '".mysqli_result($result_ioc, 0, "scientific_name")."' AND `".$GLOBALS['ioc_table']."`.`category` = 'species' AND `".$GLOBALS['ioc_table']."`.`clements_name` = `".$GLOBALS['clements_table']."`.`scientific_name`"; $result_ioc_clements = mysqli_query($GLOBALS['link'], $sql_ioc_clements); $GLOBALS['nb_queries']++; if (@mysqli_num_rows($result_ioc_clements) == 1) { $espece_clements = mysqli_result($result_ioc_clements, 0, "scientific_name"); $famille_clements = mysqli_result($result_ioc_clements, 0, "family"); $famille_clements = trim(preg_replace("/([A-Za-z])*\([ A-Za-z,'-]*\)/", "\\1", $famille_clements)); $ordre_clements = mysqli_result($result_ioc_clements, 0, "order"); $ordre_clements = trim($ordre_clements); $clements = TRUE; if ($url == TRUE) $return_array_clements = array('clements' => 1, 'espece_clements' => $espece_clements, 'famille_clements' => $famille_clements, 'ordre_clements' => $ordre_clements); $comment = table_comment($GLOBALS['clements_table']); if ($comment != '') $tit_clements = $comment; else $tit_clements = "Clements"; } }*/ } elseif ($des != '' AND preg_match($masque_sp, $des)) { // rajouter table avec taxonomie ioc ou tous noms synonymes à la place de notes dans le champ especes.des $n = 1; $t = 0; while (preg_match($masque_sp, $des, $ref)) { $alternate_sp = $ref[ $n ]; // pas besoin si espece correspond exactement ? /*`English_name` = '".addslashes($anglais)."' AND*//*AND `order` = '".$ord."' */ $sql_ioc = "SELECT `scientific_name`, `family`, `order` FROM `".$GLOBALS['ioc_table']."` WHERE `scientific_name` = '".$alternate_sp."'"; $result_ioc = mysqli_query($GLOBALS['link'], $sql_ioc); $num_rows_ioc = @mysqli_num_rows($result_ioc); if ($num_rows_ioc == 1) { $sp_altern = $alternate_sp; $ioc = TRUE; BREAK;} $des = str_replace(''.$ref[ $n ].'', '', $des); $t++; // facteur 4 choisi aléatoirement pour éviter boucle if ($t > 4) { $ioc = FALSE; BREAK;} } } // si j'enlève le AND $clements == FALSE $ESPECE_IOC NON DéFINIE plus loin ???? if ($ioc == TRUE/* AND $clements == FALSE*/) { $espece_ioc = mysqli_result($result_ioc, 0, "scientific_name"); $famille_ioc = mysqli_result($result_ioc, 0, "family"); $ordre_ioc = mysqli_result($result_ioc, 0, "order"); if ($url == TRUE) $return_array_ioc = array('ioc' => 1, 'espece_ioc' => $espece_ioc, 'famille_ioc' => $famille_ioc, 'ordre_ioc' => $ordre_ioc); $comment_ioc = table_comment($GLOBALS['ioc_table']); if ($comment_ioc != '') $tit_ioc = $comment_ioc; else $tit_ioc = "IOC"; } } // vérifier que espèce ioc/clements différentes de aves n'existe pas dans aves... // !!! faire ça plus haut !!! if ($espece_clements != $espece) { $sql_aves_clements = "SELECT count(espece) as c FROM especes WHERE espece = '".$espece_clements."'"; $result_aves_clements = mysqli_query($GLOBALS['link'], $sql_aves_clements); $nb_espece_aves_clements = mysqli_result($result_aves_clements, 0, "c"); if ($nb_espece_aves_clements != 0) { $clements = FALSE; $espece_clements = $texte_clements = $tit_clements = $famille_clements = ''; } } if ($espece_ioc != $espece) { $sql_aves_ioc = "SELECT count(espece) as c FROM especes WHERE espece = '".$espece_ioc."'"; $result_aves_ioc = mysqli_query($GLOBALS['link'], $sql_aves_ioc); $nb_espece_aves_ioc = mysqli_result($result_aves_ioc, 0, "c"); if ($nb_espece_aves_ioc != 0) { $ioc = FALSE; $espece_ioc = $texte_ioc = $tit_ioc = $famille_ioc = ''; } } if ($ioc == FALSE) $espece_ioc = $famille_ioc = $ordre_ioc = ''; // titres séparés pour clements et ioc if ($clements == TRUE OR $ioc == TRUE) { if ($url == TRUE) { $return_array = array_merge($return_array_clements, $return_array_ioc); return $return_array; } else { // composer étiquette avec informations taxo espèce, famille, ordre pour IOC et Clements... // espece clement et espece ioc different de name if ($espece_clements != '' AND $espece_ioc != '' AND $espece_clements != $espece AND $espece_ioc != $espece) { // > espece clements == espece ioc => titre = $tit_clements & $tit_ioc if ($espece_clements == $espece_ioc) { $tit_leg = $tit_clements." & ".$tit_ioc." :
    ".$espece_clements.""; } // > espece clement différent de espece ioc => $tit_clements.$texte_clements + $tit_ioc.$texte_ioc else { $tit_leg = $tit_clements." :
    ".$espece_clements."
    ".$tit_ioc." :
    ".$espece_ioc.""; } } // seul espece clements different de name => $tit_clements.$texte_clements elseif ($espece_clements != '' AND $espece_clements != $espece) { $tit_leg = $tit_clements." :
    ".$espece_clements.""; } // espece IOC different de name > $tit_ioc.$texte_ioc elseif ($espece_ioc != '' AND $espece_ioc != $espece) { $tit_leg = $tit_ioc." :
    ".$espece_ioc.""; } // aucune différence de name => '' else $tit_leg = ''; if ($tit_leg != '') $br = "
    "; else $br = ''; // famille clements et famille ioc différent de famille if ($famille_clements != '' AND $famille_ioc != '' AND $famille_clements != mb_ucfirst(strtolower($famille)) AND $famille_ioc != mb_ucfirst(strtolower($famille))) { // > famille clements == famille ioc => titre = $tit_clements & $tit_ioc if ($famille_clements == $famille_ioc) { if (($espece_clements == $espece_ioc AND $espece_clements == $espece) OR ($espece_clements != $espece_ioc)) $tit_leg .= $br.$tit_clements." & ".$tit_ioc." :
    famille : ".$famille_clements; else $tit_leg .= $br."famille : ".$famille_clements; } else { $tit_leg .= $br.$tit_clements." :
    famille : ".$famille_clements."
    ".$tit_ioc." :
    famille : ".$famille_ioc; } } // seul famille clements different de name => $tit_clements.$texte_clements elseif ($famille_clements != '' AND $famille_clements != mb_ucfirst(strtolower($famille))) { $tit_leg .= $br.$tit_clements." :
    famille : ".$famille_clements; } // famille IOC different de name > $tit_ioc.$texte_ioc elseif ($famille_ioc != '' AND $famille_ioc != mb_ucfirst(strtolower($famille))) { $tit_leg .= $br.$tit_ioc." :
    famille : ".$famille_ioc; } else $tit_leg .= ''; if ($tit_leg != '') $br = "
    "; else $br = ''; // ordre clements et ordre ioc différent de ordre if ($ordre_clements != '' AND $ordre_ioc != '' AND strtoupper($ordre_clements) != $ordre AND $ordre_ioc != $ordre) { // > ordre clements == ordre ioc => titre = $tit_clements & $tit_ioc if (strtoupper($ordre_clements) == $ordre_ioc) { if (($famille_clements == $famille_ioc AND $famille_clements == mb_ucfirst(strtolower($famille))) AND (($espece_clements == $espece_ioc AND $espece_clements == $espece) OR ($espece_clements != $espece_ioc))) $tit_leg .= $br.$tit_clements." & ".$tit_ioc." :
    ordre : ".$ordre_clements; else $tit_leg .= $br."ordre : ".$ordre_clements; } else { $tit_leg .= $br.$tit_clements." :
    ordre : ".mb_ucfirst(strtolower($ordre_clements))."
    ".$tit_ioc." :
    ordre : ".mb_ucfirst(strtolower($ordre_ioc)); } } // seul ordre clements different de name => $tit_clements.$texte_clements elseif ($ordre_clements != '' AND strtoupper($ordre_clements) != $ordre) { if (($famille_clements == $famille_ioc AND $famille_clements == mb_ucfirst(strtolower($famille))) AND ($espece_clements == $espece_ioc AND $espece_clements == $espece)) $tit_leg .= $br.$tit_clements." :
    ordre : ".$ordre_clements; elseif($tit_leg == '') $tit_leg .= $tit_clements."
    ordre : ".$ordre_clements; else $tit_leg .= "
    ordre : ".$ordre_clements; } // ordre IOC different de name > $tit_ioc.$texte_ioc elseif ($ordre_ioc != '' AND $ordre_ioc != $ordre) { $tit_leg .= $br.$tit_ioc." :
    ordre : ".mb_ucfirst(strtolower($ordre_ioc)); } else $tit_leg .= ''; if ($tit_leg != '') $texte_taxo = '*'.$tit_leg.''; else $texte_taxo = ''; } } else $texte_taxo = ''; return $texte_taxo; } function especes_from_des ($des) { $alternate_sp = array(); $masque_sp = "/\[[^\]]*([A-Za-z]+ [a-z]+)<[^\]]*\]/"; if (preg_match($masque_sp, $des)) { $n = 1; $t = 0; $des_rep = $des; while (preg_match($masque_sp, $des_rep, $ref)) { $alternate_sp[] = $ref[ $n ]; $des_rep = str_replace(''.$ref[ $n ].'', '', $des_rep); $t++; if ($t > 20) BREAK; // bug si ... ... } } return $alternate_sp; } function page_cont_taxo_ss_sp($espece, $espece_2 = '') { GLOBAL $nb_ssp_clem, $espece_ioc, $nb_ssp_ioc, $string; // $nb de clements pour savoir si éventuelle répart de clements doit quand même être affichée si $nb = 0 mais ss_sp de IOC != 0; $ssp_list = ''; $sql_clements = "SELECT `scientific_name`, `range_fr` FROM `".$GLOBALS['clements_table']."` WHERE `scientific_name` LIKE '".$espece." %' AND (`category` = 'subspecies' OR `category` = 'group (monotypic)') ORDER BY `scientific_name` ASC"; $result_clements = mysqli_query($GLOBALS['link'], $sql_clements); $GLOBALS['nb_queries']++; $nb = $nb_ssp_clem = @mysqli_num_rows($result_clements); $array_clements = array(); $array_ioc_loc = array(); $sql_ioc = "SELECT `scientific_name`, `range_fr` FROM `".$GLOBALS['ioc_table']."` WHERE (`scientific_name` LIKE '".$espece_ioc." %' OR `scientific_name` LIKE '".$espece." %' OR `scientific_name` LIKE '".$espece_2." %' ) AND `category` = 'ssp' ORDER BY `scientific_name` ASC";/*OR `clements_name` LIKE '".$espece." %'*/ $result_ioc = mysqli_query($GLOBALS['link'], $sql_ioc); $GLOBALS['nb_queries']++; $nb_ioc = $nb_ssp_ioc = @mysqli_num_rows($result_ioc); // echo $sql_ioc; $array_ioc = array(); if (preg_match("/([A-Za-z]*) ([a-z]*)/", $espece, $req)) { $init = $req[1]." ".$req[2]; $init_replace = substr($req[1], 0, 1).". ".substr($req[2], 0, 1)."."; } else $init = $init_replace = ''; if (preg_match("/([A-Za-z]*) ([a-z]*)/", $espece_ioc, $req_ioc)) { $init_ioc = $req_ioc[1]." ".$req_ioc[2]; $init_replace_ioc = substr($req_ioc[1], 0, 1).". ".substr($req_ioc[2], 0, 1)."."; } else $init_ioc = $init_replace_ioc = ''; // si différences d'especes entre ioc et clements... -us vs -a, autres différences plus difficiles à gérer... if (isset($req[2]) AND isset($req_ioc[2]) AND $req[2] != $req_ioc[2]) { $sp_ioc = $req_ioc[2]; $sp_clem = $req[2]; } else $sp_ioc = $sp_clem = ''; if ($nb >= 1) { $n = 1; while (list($ssp, $repart) = mysqli_fetch_row($result_clements)) { $array_clements[] = preg_replace("/[\w]+ [\w]+ (.+)/", "$1", $ssp); $array_clements_loc[preg_replace("/[\w]+ [\w]+ (.+)/", "$1", $ssp)] = $repart; } } if ($nb_ioc >= 1) { while (list($ssp, $repart) = mysqli_fetch_row($result_ioc)) { $array_ioc[] = preg_replace("/[\w]+ [\w]+ (.+)/", "$1", $ssp); $array_ioc_loc[preg_replace("/[\w]+ [\w]+ (.+)/", "$1", $ssp)] = $repart; } } $array_commun = array(); $array_commun_init = array_intersect($array_clements, $array_ioc); foreach ($array_commun_init as $key_init => $value_init) {$array_commun[] = array($value_init, $value_init);} $array_ioc_uniq = array_values(array_diff($array_ioc, $array_clements)); $array_clements_uniq = array_values(array_diff($array_clements, $array_ioc)); foreach ($array_clements_uniq as $key_clements => $value_clements) { $cur_clements = $value_clements; foreach ($array_ioc_uniq as $key_ioc => $value_ioc) { $cur_ioc = $value_ioc; // manque -us <=> -um ; -a => -um if (substr($cur_clements, -1) == 'a') $cur_clements_ = preg_replace("/^([\w]+)a$/", "$1us", $cur_clements); elseif (substr($cur_clements, -2) == 'is') $cur_clements_ = preg_replace("/^([\w]+)is$/", "$1e", $cur_clements); elseif (substr($cur_clements, -2) == 'um') $cur_clements_ = preg_replace("/^([\w]+)um$/", "$1a", $cur_clements); elseif (substr($cur_clements, -2) == 'us') $cur_clements_ = preg_replace("/^([\w]+)us$/", "$1a", $cur_clements); else $cur_clements_ = $cur_clements; if (substr($cur_ioc, -1) == 'a') $cur_ioc_ = preg_replace("/^([\w]+)a$/", "$1us", $cur_ioc); elseif (substr($cur_ioc, -2) == 'is') $cur_ioc_ = preg_replace("/^([\w]+)is$/", "$1e", $cur_ioc); elseif (substr($cur_ioc, -2) == 'um') $cur_ioc_ = preg_replace("/^([\w]+)um$/", "$1a", $cur_ioc); elseif (substr($cur_ioc, -2) == 'us') $cur_ioc_ = preg_replace("/^([\w]+)us$/", "$1a", $cur_ioc); else $cur_ioc_ = $cur_ioc; $s_t = similar_text($cur_ioc, $cur_clements, $perc); // echo " ioc ".$cur_ioc." ioc_ ".$cur_ioc_." clem ".$cur_clements." clem_ ".$cur_clements_."
    "; // similar text entre sous-espèces > 90 % ... encore une approximation ! if ($cur_clements_ == $cur_ioc OR $cur_ioc_ == $cur_clements OR $perc > 85) { $array_commun[] = array($cur_clements, $cur_ioc); unset($array_ioc_uniq[$key_ioc]); unset($array_clements_uniq[$key_clements]); } } } if (count($array_ioc_loc) > 0) { sort($array_commun); } $ssp_list_commun_clements = $ssp_list_commun_ioc = ""; foreach ($array_commun as $key_commun => $values_commun) { $ssp_list_commun_clements .= "
    ".$init_replace." ".highlight($string, $values_commun[0])." : ".highlight($string, abbreviations($array_clements_loc[$values_commun[0]]))." ;
    "; // si espece ioc != espece clements, -a vs -us par exemple if ($values_commun[0] == $sp_clem AND $sp_clem != $sp_ioc) $values_commun[0] = $sp_ioc; // echo $value_commun; if (isset($array_ioc_loc[$values_commun[1]]) AND $array_ioc_loc[$values_commun[1]] != '') { $ssp_list_commun_ioc .= "
    ".$init_replace_ioc." ".highlight($string, $values_commun[1])." : ".highlight($string, abbreviations($array_ioc_loc[$values_commun[1]]))." ;
    "; } } if ( $ssp_list_commun_clements != '' AND count($array_ioc_uniq) == 0 AND count($array_clements_uniq) == 0) $ssp_list_commun_clements = preg_replace("/^(.+) ;(<\/div>)*$/", "$1.$2", $ssp_list_commun_clements); // ou mettre pour tous, pas seulement connecté ? if (count($array_ioc_loc) > 0) { $ssp_list .= "
    ".$ssp_list_commun_clements."
    "; } elseif ($ssp_list_commun_clements != '') { if ($array_ioc_loc[$value_commun] != '') $ssp_list .= $ssp_list_commun_clements; } foreach ($array_clements_uniq as $key_clements_uniq => $value_clements_uniq) { $ssp_list .= "
    ".$init_replace." ".highlight($string, $value_clements_uniq)." : ".highlight($string, abbreviations($array_clements_loc[$value_clements_uniq]))." ;
    "; } // print_r($array_clements_uniq); foreach ($array_ioc_uniq as $key_ioc_uniq => $value_ioc_uniq) { $ssp_list .= "
    ".$init_replace_ioc." ".highlight($string, $value_ioc_uniq)." : ".highlight($string, abbreviations($array_ioc_loc[$value_ioc_uniq]))." ;
    "; } $ssp_list = preg_replace("/^(.+) ;((<\/div>)*)$/", "$1.$2", $ssp_list); $com_clements = table_comment($GLOBALS['clements_table']); if ($com_clements == '') $com_clements = 'Clements'; $com_ioc = table_comment($GLOBALS['ioc_table']); if ($com_ioc == '') $com_ioc = 'IOC'; if (count($array_commun) > 0 AND (count($array_ioc_uniq) == 0 AND count($array_clements_uniq) == 0)) $com_taxo = "".$com_clements." & ".$com_ioc.""; elseif (count($array_commun) > 0 AND (count($array_ioc_uniq) == 0 AND count($array_clements_uniq) > 0)) $com_taxo = "".$com_clements." & ".$com_ioc." ; ".$com_clements.""; elseif (count($array_commun) > 0 AND (count($array_ioc_uniq) > 0 AND count($array_clements_uniq) == 0)) $com_taxo = "".$com_clements." & ".$com_ioc." ; ".$com_ioc.""; elseif (count($array_commun) > 0 AND (count($array_ioc_uniq) > 0 AND count($array_clements_uniq) > 0)) $com_taxo = "".$com_clements." & ".$com_ioc." ; ".$com_clements." ; ".$com_ioc.""; elseif (count($array_commun) == 0 AND (count($array_ioc_uniq) > 0 AND count($array_clements_uniq) == 0)) $com_taxo = "".$com_ioc.""; elseif (count($array_commun) == 0 AND (count($array_ioc_uniq) == 0 AND count($array_clements_uniq) > 0)) $com_taxo = "".$com_clements.""; else $com_taxo = ''; $texte_taxo = ' *selon : '.$com_taxo.''; if ($GLOBALS['session_auth'] == true) { $nb_ssp = count($array_commun) + count($array_ioc_uniq) + count($array_clements_uniq); $texte_taxo = '
    ('.$nb_ssp.')'.$texte_taxo; } if ($nb >= 1 OR $nb_ioc >= 1) $ssp_list = '
    Sous-espèces'.$texte_taxo.' :
    '.$ssp_list.'
    '; return $ssp_list; } function page_cont_taxo_ss_sp_itis($espece, $sp_altern) { $ssp_list = ''; $sql_bird = "SELECT `espece` FROM `itis` WHERE (`espece` LIKE '".$espece." %' OR `espece` LIKE '".$sp_altern." %') ORDER BY `espece` ASC";/*OR `clements_name` LIKE '".$espece." %'*/ $result_bird = mysqli_query($GLOBALS['link'], $sql_bird); $GLOBALS['nb_queries']++; $nb_bird = @mysqli_num_rows($result_bird); $texte_taxo = ' *selon : ITIS'; if ($GLOBALS['session_auth'] == true) { $texte_taxo = '
    ('.$nb_bird.')'.$texte_taxo; } while (list($ssp) = mysqli_fetch_row($result_bird)) { preg_match("/([A-Za-z]*) ([a-z]*) ([a-z]*)/", $ssp, $req_bird); $ssp_list .= "
    ".substr($req_bird[1], 0, 1).". ".substr($req_bird[2], 0, 1).". ".$req_bird[3]." ;
    "; } if ($nb_bird >= 1) $ssp_list = '
    Sous-espèces'.$texte_taxo.' :
    '.$ssp_list.'
    '; return $ssp_list; } function page_cont_taxo_repart($espece, $repart = '') { GLOBAL $espece_ioc, $string; $sql_clements = "SELECT `range_fr` FROM `".$GLOBALS['clements_table']."` WHERE `scientific_name` = '".$espece."' AND (`category` = 'species')"; $result_clements = mysqli_query($GLOBALS['link'], $sql_clements); $GLOBALS['nb_queries']++; $rep_clements = mysqli_result($result_clements, 0, "range_fr"); if ($rep_clements != '') $repart_clements = highlight($string, mb_ucfirst(abbreviations($rep_clements))).'.'; $sql_ioc = "SELECT `range_fr` FROM `".$GLOBALS['ioc_table']."` WHERE `scientific_name` = '".$espece_ioc."' AND (`category` = 'species')"; $result_ioc = mysqli_query($GLOBALS['link'], $sql_ioc); $GLOBALS['nb_queries']++; $rep_ioc = mysqli_result($result_ioc, 0, "range_fr"); if ($rep_ioc != '') $repart_ioc = highlight($string, mb_ucfirst(abbreviations($rep_ioc))).'.'; if ($repart != '' AND $rep_clements != '') $repart = '
    Répartition : '.$repart.''; elseif ($repart != '' AND $rep_clements == '' AND $rep_ioc != '') $repart = '
    Répartition : '.$repart.''; elseif ($rep_ioc != '' AND $rep_clements != '' AND $rep_ioc != $rep_clements) $repart = '
    Répartition : '.$repart_clements.''; elseif ($rep_ioc != '' AND $rep_clements == '') $repart = '
    Répartition : '.$repart_ioc.''; elseif ($rep_ioc == '' AND $rep_clements != '' OR $rep_ioc == $rep_clements) $repart = '
    Répartition : '.$repart_clements.''; else $repart = ''; return $repart; } function table_comment($table) { $sql_comment = "SELECT table_comment FROM INFORMATION_SCHEMA.TABLES WHERE table_name = '".$table."' AND table_schema = '".$GLOBALS['mysql_db']."'"; $res_com = @mysqli_query($GLOBALS['link'], $sql_comment); $GLOBALS['nb_queries']++; $comment = mysqli_result($res_com, 0, 'table_comment'); return $comment; } function clements_hybrides($espece, $espece_clements, $anglais, $ord, $fam) { global $nom; $nom_init = $nom; $hybrides_texte = ''; preg_match("/([A-Za-z]+) ([a-z]+)/", $espece_clements, $req_clements); $genre_clements = $req_clements[1]; $sp_clements = $req_clements[2]; preg_match("/([A-Za-z]+) ([a-z]+)/", $espece, $req); $genre = $req[1]; $sp = $req[2]; $sql_hyb = "SELECT `scientific_name` FROM `".$GLOBALS['clements_table']."` WHERE `category` = 'hybrid' AND (`scientific_name` LIKE '".$espece_clements." x %' OR `scientific_name` LIKE '".$genre_clements." % x ".$sp_clements."' OR `scientific_name` LIKE '% x ".$espece_clements."') AND (`family` LIKE '".mb_ucfirst(strtolower($fam))." %' OR `order` = '".mb_ucfirst(strtolower($ord))."') AND `scientific_name` NOT LIKE '%/%'"; // echo $sql_hyb; $res_hyb = @mysqli_query($GLOBALS['link'], $sql_hyb); $GLOBALS['nb_queries']++; while (list($hyb) = mysqli_fetch_row($res_hyb)) { $hyb = str_replace(" x ", "", str_replace($sp_clements, "", str_replace($espece_clements, "", $hyb))); if (!preg_match("/[A-Z]+| /", $hyb)) $hyb = $genre_clements." ".$hyb; // echo $hyb." ; "; $sql_aves = "SELECT `nom`, `id_aves` FROM `especes`, `".$GLOBALS['clements_table']."` WHERE `scientific_name` = '".$hyb."' AND especes.id = id_aves"; $result_aves = mysqli_query($GLOBALS['link'], $sql_aves); $GLOBALS['nb_queries']++; if (@mysqli_num_rows($result_aves) == 1) { $aves = TRUE; $nom_hyb = mysqli_result($result_aves, 0, "nom"); $id = mysqli_result($result_aves, 0, "id_aves"); $hybrides_texte .= ' '.url_rewrite(mise_en_page(urllink(''.$nom_hyb.''))).' ;'; } else { preg_match("/([A-Za-z]+) ([a-z]+)/", $hyb, $req_hyb); $genre_hyb = $req_hyb[1]; $sp_hyb = $req_hyb[2]; if($genre_hyb != $genre) $g = $genre; else $g = $genre_hyb; $sp_aves = $g." ".$sp_hyb; $sql_aves = "SELECT `nom`, `id` FROM `especes` WHERE `espece` = '".$sp_aves."'"; $result_aves = mysqli_query($GLOBALS['link'], $sql_aves); $GLOBALS['nb_queries']++; if (@mysqli_num_rows($result_aves) == 1) { $aves = TRUE; $nom_hyb = mysqli_result($result_aves, 0, "nom"); $id_hyb = mysqli_result($result_aves, 0, "id"); $hybrides_texte .= ' '.url_rewrite(mise_en_page(urllink(''.$nom_hyb.''))).' ;'; } else { if (strlen($sp_aves) > 9) { $sp = substr($sp_hyb, 0, -3); $sp_gen = substr($g, 0, -3); } else { $sp = substr($sp_hyb, 0, -2); $sp_gen = substr($g, 0, -2); } $anglais = preg_replace("/[^\w]/", "%", $anglais); $sql_aves = "SELECT espece, `nom`, especes.id FROM `especes`, `familles` WHERE `espece` LIKE '% ".$sp."%' AND (`ordre` = '".$ord."' OR (especes.famille = '".$fam."' AND familles.familles = especes.famille))";/**/ // echo $sql_aves; $result_aves = mysqli_query($GLOBALS['link'], $sql_aves); $GLOBALS['nb_queries']++; if (@mysqli_num_rows($result_aves) == 1) { $aves = TRUE; $espece_hyb = mysqli_result($result_aves, 0, "espece"); $nom_hyb = mysqli_result($result_aves, 0, "nom"); $id_hyb = mysqli_result($result_aves, 0, "id"); $hybrides_texte .= ' '.url_rewrite(mise_en_page(urllink(''.$nom_hyb.''))).' ;'; } else $hybrides_texte .= ' '.$hyb.' ! ;'; } } } if ($hybrides_texte != '') $hybrides_texte = '
    Hybrides : '.$nom_init.' x '.$hybrides_texte.'.'; $hybrides_texte = str_replace (" ;.", ".", $hybrides_texte); return $hybrides_texte; } function page_cont_extr_ssp($com) { GLOBAL $sous_especes; $sous_especes = ''; if (preg_match("/\R{0,1}Sous-espèces([^:]*):([^<]*)((
      |
    • |)+((?!<\/ul>).)*)((<\/ul>)(.*))*/", $com, $req)) { if (isset($req[0]) AND $req[0] != '') { $com = str_replace($req[0], "", $com); // apparemment str_replace enlève les retours de lignes ? $com = preg_replace('`[\r\n]{3,}`',"\n\n", $com); // $com = mise_en_page($com); // enlever doubles interlignes $sous_especes = '
      Sous-espèces : '.$req[1].$req[2].''.trim($req[3]);// if (isset($req[7])) $re_7 = trim($req[7]); else $re_7 = ''; if (isset($req[8])) $re_8 = trim($req[8]); else $re_8 = ''; $sous_especes .= $re_7.''.$re_8.''; } } return $com; } function extract_repart ($com) { GLOBAL $repartition; $repartition = ''; $filter = "/\b(nord|sud|ouest|archipel|désert|déserts|endémique|embouchure|hiverne|migration|migrations|migrateur|migratrice|Migratrice|nomade|nomadisme|péninsule|sédentaire|Sédentaire|Europe|Amérique|Arabie|Asie|Caraïbes|Atlantique|océan|Terre de Feu|mer rouge|mer blanche|mer noire|AltaÏ|Caucase|Afrique|Sibérie|Altaï|Himalaya|Océanie|Australasie|Paléarctique|Antarctique|Méditerranée|Afghanistan|du Sud|Akrotiri|Alaska|Albanie|Algérie|Allemagne|Andorre|Angola|Anguilla|Antarctique|Antigua-et-Barbuda|Arabie saoudite|Arctique|Argentine|Arménie|Aruba|Ashmore|Cartier|Islands|Atlantic|Ocean|Australie|Autriche|Azerbaïdjan|Bahamas|Bahreïn|Bangladesh|Barbade|Belau|Belgique|Belize|Bénin|Bermudes|Bhoutan|Biélorussie|Birmanie|Bolivie|Bosnie-Herzégovine|Botswana|Brésil|Brunei|Bulgarie|Burkina Faso|Burundi|Cambodge|Cameroun|Canada|Cap-Vert|Chili|Chine|Chypre|Clipperton|Colombie|Comores|Congo|Coral Sea|du Nord|Corée|Costa Rica|Côte|Ivoire|Croatie|Cuba|Curacao|Danemark|Dhekelia|Djibouti|Dominique|Égypte|U.A.E.|R.C.A.|R.D.C.|Émirats arabes unis|Équateur|Érythrée|Espagne|Estonie|États-Unis|Éthiopie|yougoslav|Macédoine|Finlande|France|Gabon|Gambie|Gaza Strip|Géorgie|Ghana|Gibraltar|Grèce|Grenade|Groenland|Guadeloupe|Guam|Guatemala|Guernsey|Guinée| équatoriale|Bissao|Bissau|Guyana|Haïti|Honduras|Hong Kong|Hongrie|Bouvet|Christmas|Norfolk|Iles|Cayman|Cook|des Cocos|Keeling|Falkland|Féroé|Fidji|Sandwich|Heard et McDonald|Marshall|Pitcairn|Salomon|Svalbard|Mayen|Turks|Caicos|américain|Vierges|britannique|Inde|Indian|Indonésie|Iran|Iraq|Irlande|Islande|Palestine|Israël|Italie|Jamaïque|Mayen|Japon|Jersey|Jordanie|Kazakhstan|Kenya|Kirghizistan|Kiribati|Kosovo|Koweït|Laos|Lesotho|Lettonie|Liban|Liberia|Libye|Liechtenstein|Lituanie|Luxembourg|Macao|Madagascar|Malaisie|Malawi|Maldives|Mali|Malte|Isle|Mariannes|Maroc|Maurice|Mauritanie|Mexique|Micronésie|Moldavie|Monaco|Monde|Mongolie|Monténégro|Montserrat|Moyen-Orient|Mozambique|Namibie|Nauru|Navassa|Népal|Nicaragua|Niger|Nigeria|Nioué|Norvège|Calédonie|Zélande|Oman|Ouganda|Ouzbékistan|Pacific|Pacifique|Pakistan|Panama|Papouasie|Paracel|Paraguay|Pays-Bas|Pérou|Philippines|Pologne|Polynésie française|Porto Rico|Portugal|Qatar|République|centrafricain|démocratique|Congo|dominicaine|tchèque|Roumanie|Royaume-Uni|Russie|Rwanda|Sahara|occidental|Saint-Barthélemy|Saint-Christophe|Niévès|Sainte-Hélène|Sainte-Lucie|Saint-Marin|Saint-Martin|Saint-Pierre-et-Miquelon|Saint-Siège|Saint-Vincent|Grenadines|Salvador|Samoa|Sao Tomé|Principe|Sénégal|Serbie|Seychelles|Sierra|Leone|Singapour|Maarten|Slovaquie|Slovénie|Somalie|Soudan|Soudan|Southern|Spratly|Lanka|Suède|Suisse|Suriname|Swaziland|Syrie|Tadjikistan|Taïwan|Tanzanie|Tchad|Terres|australes|françaises|britannique|Océan|Indien|Thaïlande|Timor|Oriental|Togo|Tokélaou|Tonga|Trinitad|Tobago|Tunisie|Turkménistan|Turquie|Tuvalu|Ukraine|Union|européenne|Uruguay|Vanuatu|Venezuela|Vietnam|Wake|Wallis-et-Futuna|West|Bank|Yémen|Zambie|Zimbabwe)\b/i"; $not = "/\b(\aboiement|aboiements|appel|appels|bisyllabique|bisyllabiques|bruit|bruits|bruyant|bruyants|chant|chants|claironnant|cri|cris|crie|crient|cliquetis|duo|duos|écho|émet|entendre|étouffé|gargouillis|gémissement|gémissements|grognement|grognements|hululement|hululements|miaulés|miaulement|miaulements|note|notes|roucoulement|sifflement|sifflements|tintement|tintements|sons|vocal|voix|blanc|bleu|brun|clair|clairs|claire|claires|comportement|gris|habitudes|plumage|plumes|crête|vert|corps|bec|pattes|noir|manteau|marron|dessous|ailes|couronne|tête|ventre|ardoise|chamois|chant|pâle|pâles|sous-espèce|rouge|roux|tarses)\b/i"; // $list_para = explode(PHP_EOL, $com); ne marche pas avec les données importées du serveur linux sur mon serveur windows.... $list_para = preg_split( '/\r\n|\r|\n|
      /', $com ); $repart = ''; $i = 0; foreach($list_para as $para) { $n_des = preg_match_all($filter, preg_replace("/[<]{1}[^<]*<\/a>/", "", $para), $re0); $n_not = preg_match_all($not, preg_replace("/[<]{1}[^<]*<\/a>/", "", $para), $re0); if (!preg_match("/\[d\]/i", $para) AND $n_repart = preg_match_all($filter, preg_replace("/[<]{1}[^<]*<\/a>/", "", $para), $re1) AND (!preg_match($not, preg_replace("/[<]{1}[^<]*<\/a>/", "", $para), $re2) OR (preg_match($not, preg_replace("/[<]{1}[^<]*<\/a>/", "", $para), $re2) AND $n_repart > ($n_not + 1))) OR preg_match("/\[r\]/i", $para)) { if ($i >= 1 ) $repart .= "
      "; $repart .= $para; $i++; $com = str_replace($para, '
      ', $com); } } //$com = str_replace($repart, '', $com); if ($repart != '') { $com = preg_replace("/(\r\n|\r|\n|
      ){2,}/", "$1", preg_replace("/^(\r\n|\r|\n|
      )*(.*)/", "$2", trim($com))); $repartition = str_replace("[r]", "", $repart); } else $repartition = ''; $repartition = preg_replace('/(
      ){1}/', '

      ', $repartition); return $com; } function extract_chant ($com) { GLOBAL $chants; $chants = ''; $filter = "/\[c\]|\b(aboiement|aboiements|appel|appels|bail|babillage|bisyllabique|bisyllabiques|bruit|bruits|bruyant|bruyants|caquètement|caquètements|chant|chante|chants|choeur|claironnant|cri|cris|crie|crient|croassement|croassements|cliquetis|duo|duos|écho|émet|émis|entendre|étouffé|gargouillis|gémissement|gémissements|grognement|grognements|hululement|hululements|mélodieux|miaulés|miaulement|miaulements|note|notes|roucoulement|sifflement|sifflements|sonore|sonores|tambourinage|tambourinages|tintement|tintements|sons|vocal|vocalisation|vocalisations|voix)\b/ui"; $list_para = preg_split( '/\r\n|\r|\n|
      /', $com ); $chant = ''; $i = 0; foreach($list_para as $para) { if (!preg_match("/\[d\]/i", $para) AND $n = preg_match_all($filter, preg_replace("/[<]{1}[^<]*<\/a>/", "", $para), $re1)) { // print_r($re1[1]); if ($i >= 1 ) $chant .= "
      "; $chant .= str_replace('[c]', '', $para); $i++; $com = str_replace($para, '', $com); } } if ($chant != '') { $com = preg_replace("/(\r\n|\r|\n|
      ){2,}/", "$1", preg_replace("/^(\r\n|\r|\n|
      )*(.*)/", "$2", trim($com))); $chants = '
      Chants : '.$chant.''; } else $chants = ''; return $com; } function page_cont_extr_taxo ($com, $nom, array $noms_et, $nom_de, $nom_en) { GLOBAL $taxo, $espece_clements, $espece, $string; $filter = "/^([ ]*\[([^\]]{10,})\])/"; if (!isset($taxo)) $taxo = ''; if (preg_match($filter, $com, $req)) { $taxo = $req[2]; $taxo = str_replace("?.", "?", $taxo); $taxo = str_replace(" ", " ", $taxo); $com = trim(str_replace($req[1], "", $com)); } // echo levenshtein($noms_et['fr'], $nom).$nom." > ".$noms_et['fr']." ; ".$nom_en." > ".$noms_et['en']." ; ".$nom_de." > ".$noms_et['de']."
      "; if (($noms_et['fr'] != '' AND levenshtein($noms_et['fr'], $nom) >= 3 AND !preg_match("/".$noms_et['fr']."/iu", $taxo)) OR ($noms_et['en'] != '' AND levenshtein($noms_et['en'], $nom_en) >= 3 AND (!preg_match("/".$noms_et['en']."/iu", $taxo))) OR ($noms_et['de'] != '' AND levenshtein($noms_et['de'], $nom_de) >= 3 AND !preg_match("/".$noms_et['de']."/iu", $taxo))) { $taxo_init = $taxo; if (!preg_match("/^(aussi|parfois|ou) /iu", $taxo, $reqq)) $taxo = "aussi "; if ($noms_et['fr'] != '' AND levenshtein($noms_et['fr'], $nom) >= 3 AND !preg_match("/".$noms_et['fr']."/iu", $taxo_init)) { $taxo = preg_replace ("/aussi/iu", "aussi ".$noms_et['fr'].", ", $taxo); } if ($noms_et['en'] != '' AND levenshtein($noms_et['en'], $nom_en) >= 3 AND !preg_match("/".$noms_et['en']."/iu", $taxo_init)) { if (preg_match("/ \(en\)/iu", $taxo_init) AND !preg_match("/préc[.\w ,]+\(de\)/iu", $taxo_init)) $taxo_init = preg_replace("/ \(en\)/iu", ", ".$noms_et['en']." (en)", $taxo_init); else $taxo = preg_replace ("/^aussi ([^,]*[, ]*)/iu", "aussi $1".$noms_et['en']." (en), ", $taxo); } if ($noms_et['de'] != '' AND levenshtein($noms_et['de'], $nom_de) >= 3 AND !preg_match("/".$noms_et['de']."/iu", $taxo_init)) { if (preg_match("/ \(de\)/iu", $taxo_init) AND !preg_match("/préc[.\w ,]+\(de\)/iu", $taxo_init)) $taxo_init = preg_replace("/ \(de\)/iu", ", ".$noms_et['de']." (de), ", $taxo_init); else $taxo = preg_replace ("/aussi ([^,]*[, ]*)/iu", "aussi $1".$noms_et['de']." (de), ", $taxo); } $taxo = preg_replace ("/^(.*),[ ]*$/ui", "$1", $taxo); if (preg_match("/^[[:space:]]*(aussi|parfois|ou) ([^<]+<\/i>(, )*)+([ ;]*)(.*)$/iu", $taxo_init, $reqq)) { if (preg_match("/^[[:space:]]*(aussi|parfois|ou) ([^;]*)\(en\)|\(de\).*$/iu", $reqq[4])) $taxo = $reqq[1].$reqq[2].preg_replace("/^[[:space:]]*(aussi|parfois|ou) (.*)$/iu", ", $2", $reqq[4]); $taxo = preg_replace("/^[[:space:]]*(aussi|parfois|ou) (([A-Za-z ]+<\/i>(, )*)*)([ ;]*)(.*)/iu", "$1 $2 ; ".$taxo." ; $6", $taxo_init); } elseif (preg_match("/^[[:space:]]*(aussi|parfois|ou) ([^;]*)\(en\)|\(de\).*$/iu", $taxo_init)) $taxo .= preg_replace("/^[[:space:]]*(aussi|parfois|ou) (.*)$/iu", ", $2", $taxo_init); else $taxo = $taxo." ; ".$taxo_init; $taxo = str_replace("; ,", "; ", $taxo); $taxo = str_replace(", ,", ", ", $taxo); $taxo = str_replace(" ", " ", $taxo); $taxo = preg_replace ("/^(.*) ; $/ui", "$1", $taxo); } // echo $taxo; if ($taxo != '') $taxo = '
      Note : '.highlight($string, trim(mise_en_page(urllink($taxo)))).'.
      '; return $com; } function carte_espece_page() { $map = preg_replace("/[^\.a-zA-Z0-9_-]/", "", $_GET['i']); $sql = "SELECT espece FROM especes WHERE id = (SELECT id_espece FROM cartes WHERE nom = '".$map."')"; $result = mysqli_query($GLOBALS['link'], $sql); $GLOBALS['nb_queries']++; $espece = mysqli_result($result, 0); if (@mysqli_num_rows($result) == 1) { $url = url_rewrite("page.php?espece=".$espece)."#cartes"; redirect_url($url); } else error_404(); EXIT; } function abbreviations ($repart) { $cardinal_init = array('/\bS\b/u','/\bE\b/u','/\bO\b/u','/\bN\b/u','/\bNE\b/','/\bNO\b/','/\bSE\b/','/\bSO\b/'); $cardinal_fin = array('sud','est','ouest','nord','nord-est','nord-ouest','sud-est','sud-ouest'); $repart = preg_replace($cardinal_init, $cardinal_fin, $repart); $abbrev_init = array('/R\.D\.C\./', '/R\.C\.A\./', '/\bNSW\b/','/\bUSA\b/', '/\bnéritique\b/', '/\bintertidale\b/', '/\bEn hivernage\b/', '/\bEn nidification et hivernage\b/', '/\bPaléarctique\b/'); $abbrev_fin = array('R.D.C.', 'R.C.A.', 'NSW', 'USA', 'néritique', 'intertidale', 'En hivernage', 'En nidification et hivernage', 'Paléarctique'); return preg_replace($abbrev_init, $abbrev_fin, $repart); } function habitat_iucn ($sp, $espece = '') { $habitat = $habitat_sedentaire = $habitat_nidification = $habitat_hivernage = $habitat_commun = $habitat_passage = $value_prec = ''; $sedentaire = $nidification = $hivernage = $passage = array(); $habitats = array ("1.1" => "forêt - boréale", // "Forest - Boreal" "1.2" => "forêt - subarctique (ou alpine)", // "Forest - Subarctic" "1.3" => "forêt - subantarctique", // "Forest - Subantarctic" "1.4" => "forêt - tempérée", // "Forest - Temperate" "1.5" => "forêt - tropicale et subtropicale sèche", // "Forest - Subtropical/Tropical Dry" "1.6" => "forêt - tropicale et subtropicale humide de plaine", // "Forest - Subtropical/Tropical Moist Lowland" "1.7" => "forêt - tropicale et subtropicale de mangrove", // "Forest - Subtropical/Tropical Mangrove Vegetation Above High Tide Level" "1.8" => "forêt - tropicale et subtropicale marécageuse", // "Forest - Subtropical/Tropical Swamp" "1.9" => "forêt - tropicale et subtropicale humide de montagne", // "Forest - Subtropical/Tropical Moist Montane" "10.1" => "marin océanique pélagique - de faible profondeur", // "Marine Oceanic - Epipelagic (0-200m)" "10.2" => "marin océanique pélagique - de profondeur modérée", // "Marine Oceanic - Mesopelagic (200-1000m)" "10.3" => "marin océanique pélagique - de forte profondeur", // "Marine Oceanic - Bathypelagic (1000-4000m)" "10.4" => "marin océanique pélagique - de très forte profondeur", // "Marine Oceanic - Abyssopelagic (4000-6000m)" "12.1" => "zone intertidale de côtes avec - rochers", // "Marine Intertidal - Rocky Shoreline" "12.2" => "zone intertidale de côtes avec - sable", // "Marine Intertidal - Sandy Shoreline and/or Beaches, Sand Bars, Spits, Etc" "12.3" => "zone intertidale de côtes avec - gravier", // "Marine Intertidal - Shingle and/or Pebble Shoreline and/or Beaches" "12.4" => "zone intertidale de côtes avec - surfaces de vase ou salières", // "Marine Intertidal - Mud Flats and Salt Flats" "12.5" => "zone intertidale de côtes avec - marais salants avec végétation émergente", // "Marine Intertidal - Salt Marshes (Emergent Grasses)" "12.6" => "zone intertidale de côtes avec - étangs de marée", // "Marine Intertidal - Tidepools" "12.7" => "zone intertidale de côtes avec - racines submergées", // "Marine Intertidal - Mangrove Submerged Roots" "13.1" => "côtes marines avec - falaises et îles rocheuses", // "Marine Coastal/Supratidal - Sea Cliffs and Rocky Offshore Islands" "13.2" => "côtes marines avec - grottes", // "Marine Coastal/supratidal - Coastal Caves/Karst" "13.3" => "côtes marines avec - dunes de sable", // "Marine Coastal/Supratidal - Coastal Sand Dunes" "13.4" => "côtes marines avec - lagons saumâtres", // "Marine Coastal/Supratidal - Coastal Brackish/Saline Lagoons/Marine Lakes" "13.5" => "côtes marines avec - lacs d'eau douce", // "Marine Coastal/Supratidal - Coastal Freshwater Lakes" "14.1" => "zones de - cultures agricoles", // "Artificial/Terrestrial - Arable Land" "14.2" => "zones de - pâturages agricoles", // "Artificial/Terrestrial - Pastureland" "14.3" => "zones de - plantations", // "Artificial/Terrestrial - Plantations" "14.4" => "zones de - jardins ruraux", // "Artificial/Terrestrial - Rural Gardens" "14.5" => "zones de - constructions urbaines", // "Artificial/Terrestrial - Urban Areas" "14.6" => "zones de - forêts tropicales et subtropicales fortement dégradées", // "Artificial/Terrestrial - Subtropical/Tropical Heavily Degraded Former Forest" "15" => "zones aquatiques artificielles", // "Artificial/Aquatic & Marine" "15.1" => "zones aquatiques artificielles - avec retenues de plus de 8 ha", // "Artificial/Aquatic - Water Storage Areas (over 8ha)" "15.11" => "zones aquatiques artificielles - avec structures construites", // "Artificial/Marine - Marine Anthropogenic Structures" "15.2" => "zones aquatiques artificielles - avec retenues de moins de 8 ha", // "Artificial/Aquatic - Ponds (below 8ha)" "15.3" => "zones aquatiques artificielles - avec réservoirs pour aquaculture", // "Artificial/Aquatic - Aquaculture Ponds" "15.4" => "zones aquatiques artificielles - d'exploitation du sel", // "Artificial/Aquatic - Salt Exploitation Sites" "15.5" => "zones aquatiques artificielles - avec excavations", // "Artificial/Aquatic - Excavations (open)" "15.6" => "zones aquatiques artificielles - de traitement des eaux usées", // "Artificial/Aquatic - Wastewater Treatment Areas" "15.7" => "zones aquatiques artificielles - de cultures irriguées et canaux d'alimentation", // "Artificial/Aquatic - Irrigated Land (includes irrigation channels)" "15.8" => "zones aquatiques artificielles - avec cultures inondées saisonnièrement", // "Artificial/Aquatic - Seasonally Flooded Agricultural Land" "15.9" => "zones aquatiques artificielles - de canaux et digues", // "Artificial/Aquatic - Canals and Drainage Channels, Ditches" "16" => "végétation introduite", // "Introduced vegetation" "17" => "autre", // "Other" "18" => "inconnu", // "Unknown" "2.1" => "savane - sèche", // "Savanna - Dry" "2.2" => "savane - humide", // "Savanna - Moist" "3.1" => "zones arbustives - subarctiques (ou alpines)", // "Shrubland - Subarctic" "3.2" => "zones arbustives - subantarctiques", // "Shrubland - Subantarctic" "3.3" => "zones arbustives - boréales", // "Shrubland - Boreal" "3.4" => "zones arbustives - tempérées", // "Shrubland - Temperate" "3.5" => "zones arbustives - tropicales ou subtropicales sèches", // "Shrubland - Subtropical/Tropical Dry" "3.6" => "zones arbustives - tropicales ou subtropicales humides", // "Shrubland - Subtropical/Tropical Moist" "3.7" => "zones arbustives - tropicales ou subtropicales de haute altitude", // "Shrubland - Subtropical/Tropical High Altitude" "3.8" => "zones arbustives - de type maquis méditerranéen", // "Shrubland - Mediterranean-type Shrubby Vegetation" "4.1" => "prairies - type toundra", // "Grassland - Tundra" "4.2" => "prairies - subarctiques (ou alpines)", // "Grassland - Subarctic" "4.3" => "prairies - type subantarctique", // "Grassland - Subantarctic" "4.4" => "prairies - tempérées", // "Grassland - Temperate" "4.5" => "prairies - tropicales ou subtropicales sèches", // "Grassland - Subtropical/Tropical Dry" "4.6" => "prairies - tropicales ou subtropicales saisonnièrement inondées", // "Grassland - Subtropical/Tropical Seasonally Wet/Flooded" "4.7" => "prairies - tropicales ou subtropicales de haute altitude", // "Grassland - Subtropical/Tropical High Altitude" "5.1" => "milieux humides - avec cours d'eau ou criques", // "Wetlands (inland) - Permanent Rivers/Streams/Creeks (includes waterfalls)" "5.11" => "milieux humides - avec marécages alpins", // "Wetlands (inland) - Alpine Wetlands (includes temporary waters from snowmelt)" "5.12" => "milieux humides - avec sources géothermales", // "Wetlands (inland) - Geothermal Wetlands" "5.13" => "milieux humides - avec deltas intérieurs", // "Wetlands (inland) - Permanent Inland Deltas" "5.14" => "milieux humides - avec lacs salins ou saumâtres permanents", // "Wetlands (inland) - Permanent Saline, Brackish or Alkaline Lakes" "5.15" => "milieux humides - avec lacs ou surfaces salines ou saumâtres non permanents", // "Wetlands (inland) - Seasonal/Intermittent Saline, Brackish or Alkaline Lakes and Flats" "5.16" => "milieux humides - avec marais ou étangs saumâtres permanents", // "Wetlands (inland) - Permanent Saline, Brackish or Alkaline Marshes/Pools" "5.17" => "milieux humides - avec marais ou étangs saumâtres non permanents", // "Wetlands (inland) - Seasonal/Intermittent Saline, Brackish or Alkaline Marshes/Pools" "5.2" => "milieux humides - avec cours d'eau non permanents", // "Wetlands (inland) - Seasonal/Intermittent/Irregular Rivers/Streams/Creeks" "5.3" => "milieux humides - arbustifs", // "Wetlands (inland) - Shrub Dominated Wetlands" "5.4" => "milieux humides - avec marécages, tourbières, mares", // "Wetlands (inland) - Bogs, Marshes, Swamps, Fens, Peatlands" "5.5" => "milieux humides - avec lacs d'eau douce permanents de plus de 8 ha", // "Wetlands (inland) - Permanent Freshwater Lakes (over 8ha)" "5.6" => "milieux humides - avec lacs d'eau douce non permanents de plus de 8 ha", // "Wetlands (inland) - Seasonal/Intermittent Freshwater Lakes (over 8ha)" "5.7" => "milieux humides - avec marais ou étangs permanents de moins de 8 ha", // "Wetlands (inland) - Permanent Freshwater Marshes/Pools (under 8ha)" "5.8" => "milieux humides - avec marais ou étangs saisonniers de moins de 8 ha", // "Wetlands (inland) - Seasonal/Intermittent Freshwater Marshes/Pools (under 8ha)" "5.9" => "milieux humides - type sources ou oasis", // "Wetlands (inland) - Freshwater Springs and Oases" "6" => "zones rocheuses terrestres", // "Rocky areas (eg. inland cliffs, mountain peaks)" "7.1" => "grottes terrestres", // "Caves and Subterranean Habitats (non-aquatic) - Caves" "7.2" => "autres milieux sous-terrains", // "Caves and Subterranean Habitats (non-aquatic) - Other Subterranean Habitats" "8.1" => "désert - en climat chaud", // "Desert - Hot" "8.2" => "désert - tempéré", // "Desert - Temperate" "8.3" => "désert - climat froid", // "Desert - Cold" "9.1" => "milieu marin néritique - avec estuaires", // "Marine Neritic - Estuaries" "9.2" => "milieu marin néritique - avec récifs et rochers", // "Marine Neritic - Subtidal Rock and Rocky Reefs" "9.3" => "milieu marin néritique - avec graviers et cailloux", // "Marine Neritic - Subtidal Loose Rock/pebble/gravel" "9.4" => "milieu marin néritique - sableux", // "Marine Neritic - Subtidal Sandy" "9.5" => "milieu marin néritique - vaseux", // "Marine Neritic - Subtidal Sandy-Mud" "9.7" => "milieu marin néritique - avec végétation immergée d'algues et kelp", // "Marine Neritic - Macroalgal/Kelp" "9.8" => "milieu marin néritique - avec récifs coralliens", // "Marine Neritic - Coral Reef" "9.8.1" => "récifs côté extérieur", // "Outer Reef Channel" "9.8.2" => "versant intérieur de récifs", // "Back Slope" "9.8.3" => "versant extérieur de récifs", // "Foreslope (Outer Reef Slope)" "9.8.4" => "lagons", // "Lagoon" "9.8.5" => "substrat mou entre récifs", // "Inter-Reef Soft Substrate" "9.8.6" => "zones de gravats entre récifs", // "Inter-Reef Rubble Substrate" "9.9" => "milieu marin néritique - avec plantes aquatiques" // "Marine Neritic - Seagrass (Submerged)" ); $sql = "SELECT code, season, suitability, majorImportance FROM especes_habitats WHERE scientificName = '".$sp."' ORDER BY season DESC, suitability DESC, code ASC"; $result = mysqli_query($GLOBALS['link'], $sql); $GLOBALS['nb_queries']++; if (mysqli_num_rows($result) == 0) { $sql = "SELECT code, season, suitability, majorImportance FROM especes_habitats WHERE scientificName = '".$espece."' ORDER BY season DESC, suitability DESC, code ASC"; $result = mysqli_query($GLOBALS['link'], $sql); $GLOBALS['nb_queries']++; } while (list($code, $season, $suitability, $importance) = mysqli_fetch_row($result)) { // if ($GLOBALS['session_auth'] == TRUE AND $GLOBALS['site_local'] == TRUE) echo $code." ".$season." ".$habitats[$code]." ".$suitability." ".$importance."
      "; if ($suitability == 'Marginal') $hab = "parfois ".$habitats[$code]; elseif ($importance == 'Yes') $hab = '&'.$habitats[$code].'@'; else $hab = $habitats[$code]; if ($season == 'resident' or $season == '' OR $season == 'unknown') $sedentaire[] = $hab; if ($season == 'breeding') $nidification[] = $hab; if ($season == 'non-breeding') $hivernage[] = $hab; if ($season == 'passage') $passage[] = $hab; } $commun = array_intersect($nidification, $hivernage); $nidification_uniq = array_values(array_diff($nidification, $hivernage)); $hivernage_uniq = array_values(array_diff($hivernage, $nidification)); $habitat_sedentaire = habit($sedentaire); $habitat_commun = habit($commun); $habitat_hivernage = habit($hivernage_uniq); $habitat_passage = habit($passage); $habitat_nidification = habit($nidification_uniq); if ($habitat_sedentaire != '') { $habitat_sedentaire = str_replace(" - ", " ", $habitat_sedentaire); $habitat = $habitat_sedentaire."."; } if ($habitat_commun != '') $habitat .= " En nidification et hors nidification : ".str_replace(" - ", " ", $habitat_commun)."."; if ($habitat_nidification == $habitat_hivernage AND $habitat_nidification != '') $habitat .= " En nidification et hors nidification : ".str_replace(" - ", " ", $habitat_nidification).". "; else { if ($habitat_nidification != '') $habitat .= " En nidification : ".str_replace(" - ", " ", $habitat_nidification).". "; if ($habitat_hivernage != '') $habitat .= " Hors nidification : ".str_replace(" - ", " ", $habitat_hivernage)."."; } if ($habitat_passage != '') $habitat .= " En migration : ".str_replace(" - ", " ", $habitat_passage)."."; if (preg_match("/forêt/ui", $habitat)) { $habitat = preg_replace("/forêt boréale([@]{0,1})(, | ou | ; )([&]{0,1})forêt tempérée([@]{0,1})/ui", "&forêt$1$4 &boréale$1 ou $3tempérée$4", $habitat); $habitat = preg_replace("/forêt tropicale et subtropicale sèche([@]{0,1})(, | ou )([&]{0,1})tropicale et subtropicale humide de plaine([@]{0,1})(, | ou )([&]{0,1})tropicale et subtropicale de mangrove([@]{0,1})/ui", "&forêt tropicale et subtropicale$1$4$7 &sèche$1 ou $3humide de plaine$4, ou $6de mangrove$7", $habitat); $habitat = preg_replace("/forêt tropicale et subtropicale sèche([@]{0,1})(, | ou )([&]{0,1})tropicale et subtropicale humide de plaine([@]{0,1})/u", "&forêt tropicale et subtropicale$1$4 &sèche$1 ou $3humide de plaine$4", $habitat); $habitat = preg_replace("/forêt tropicale et subtropicale humide de plaine([@]{0,1})(, | ou | ; )([&]{0,1})tropicale et subtropicale marécageuse([@]{0,1})/ui", "&forêt tropicale et subtropicale$1$4 &humide de plaine$1 ou $3marécageuse$4", $habitat); $habitat = preg_replace("/forêt tropicale et subtropicale humide de plaine([@]{0,1})(, | ou | ; )([&]{0,1})tropicale et subtropicale humide de montagne([@]{0,1})/ui", "&forêt tropicale et subtropicale humide$1$4 &de plaine$1 ou $3de montagne$4", $habitat); $habitat = preg_replace("/forêt tempérée([@]{0,1})(, | ou | ; )([&]{0,1})tropicale et subtropicale humide de plaine([@]{0,1})(, | ou | ; )([&]{0,1})tropicale et subtropicale marécageuse([@]{0,1})/ui", "&forêt$1$4$7 &tempérée$1, $3$6tropicale et subtropicale$4$7 $3de plaine$4, ou $6marécageuse$7", $habitat); $habitat = preg_replace("/forêt tempérée([@]{0,1})(, | ou | ; )([&]{0,1})tropicale et subtropicale humide de plaine([@]{0,1})(, | ou | ; )([&]{0,1})tropicale et subtropicale de mangrove([@]{0,1})/ui", "&forêt$1$4$7 &tempérée$1, $3$6tropicale et subtropicale$7 $3humide de plaine$4 ou $6de mangrove$7", $habitat); $habitat = preg_replace("/forêt tempérée([@]{0,1})(, | ou | ; )([&]{0,1})tropicale et subtropicale humide de plaine([@]{0,1})(, | ou | ; )([&]{0,1})tropicale et subtropicale humide de montagne([@]{0,1})/ui", "&forêt$1$4$7 &tempérée$1, $3$6tropicale et subtropicale$7 $3humide de plaine$4 ou $6de montagne$7", $habitat); $habitat = preg_replace("/forêt tropicale et subtropicale humide de plaine([@]{0,1})(, | ou | ; )([&]{0,1})tropicale et subtropicale de mangrove([@]{0,1})(, | ou | ; )([&]{0,1})tropicale et subtropicale humide de montagne([@]{0,1})/ui", "&forêt tropicale et subtropicale$1$4$7 &humide$1$7 &de plaine$1, $6de montagne$7 ou $3de mangrove$4", $habitat); $habitat = preg_replace("/forêt tropicale et subtropicale sèche([@]{0,1})(, | ou )([&]{0,1})tropicale et subtropicale humide de plaine([@]{0,1})(, | ou )([&]{0,1})tropicale et subtropicale humide de montagne([@]{0,1})/ui", "&forêt tropicale et subtropicale$1$4$7 &sèche$1 ou $3humide de plaine$4, ou $6humide de montagne$7", $habitat); $habitat = preg_replace("/forêt tropicale et subtropicale sèche([@]{0,1})(, | ou )([&]{0,1})tropicale et subtropicale humide de plaine([@]{0,1})/ui", "&forêt tropicale et subtropicale$1$4 &sèche$1 ou $3humide de plaine$4", $habitat); $habitat = preg_replace("/forêt tropicale et subtropicale sèche([@]{0,1})(, | ou )([&]{0,1})tropicale et subtropicale humide de montagne([@]{0,1})/ui", "&forêt tropicale et subtropicale$1$4 &sèche$1 ou $3humide de montagne$4", $habitat); $habitat = preg_replace("/forêt tropicale et subtropicale humide de montagne([@]{0,1})(, | ou )([&]{0,1})tropicale et subtropicale humide de plaine([@]{0,1})/ui", "&forêt tropicale et subtropicale humide$1$4 &de montagne$1 ou $3de plaine$4", $habitat); $habitat = preg_replace("/forêt tropicale et subtropicale sèche([@]{0,1})(, | ou )([&]{0,1})tropicale et subtropicale de mangrove([@]{0,1})/ui", "&forêt tropicale et subtropicale$1$4 &sèche$1 ou $3de mangrove$4", $habitat); $habitat = preg_replace("/forêt tropicale et subtropicale([@]{0,1})( |, | ou | ; )([&]{0,1})humide de plaine([@]{0,1})(, | ou | ; )([&]{0,1})marécageuse([@]{0,2})(, | ou | ; )([&]{0,2})tropicale et subtropicale humide de montagne([@]{0,2})/ui", "&forêt tropicale et subtropicale$1$4$7 &humide$4$10 &de plaine$4, &de montagne$10, ou $6marécageuse$7", $habitat); } if (preg_match("/avec lacs/ui", $habitat)) { $habitat = preg_replace("/avec lacs d'eau douce permanents ou temporaires de plus de 8 ha([@]{0,1})(, | ou )([&]{0,1})avec marais ou étangs permanents ou temporaires de moins de 8 ha([@]{0,1})/ui", "avec &lacs d'eau douce$1, $3marais ou étangs$4 &permanents ou temporaires$1$4 &de$1$4 &plus$1 ou $3moins$4 &de 8ha$1$4", $habitat); $habitat = preg_replace("/avec lacs d'eau douce permanents de plus de 8 ha([@]{0,1})(, | ou | ; )([&]{0,1})avec lacs d'eau douce non permanents de plus de 8 ha([@]{0,1})/ui", "avec &lacs d'eau douce$4 &permanents$1 ou $3temporaires$4 &de plus de 8 ha$1$4", $habitat); $habitat = preg_replace("/avec lacs d'eau douce permanents de plus de 8 ha([@]{0,1})(, | ou )([&]{0,1})avec marais ou étangs permanents de moins de 8 ha([@]{0,1})/ui", "avec &lacs d'eau douce$1, $3marais ou étangs permanents ou temporaires$4 &de$1$4 &plus$1 ou $3moins$4 &de 8 ha$1$4", $habitat); $habitat = preg_replace("/avec lacs d'eau douce permanents ou temporaires de plus de 8 ha([@]{0,1})(, | ou )([&]{0,1})avec marais ou étangs saisonniers de moins de de 8 ha([@]{0,1})/ui", "avec &lacs d'eau douce$1, $3marais ou étangs$4 &permanents ou temporaires$1$4 &de$1$4 &plus$1 ou $3moins$4 &de 8 ha$1$4", $habitat); } if (preg_match("/arbustives/ui", $habitat)) { $habitat = preg_replace("/zones arbustives tropicales ou subtropicales sèches([@]{0,1})(, | ou )([&]{0,1})tropicales ou subtropicales humides([@]{0,1})(, | ou )([&]{0,1})tropicales ou subtropicales de haute altitude([@]{0,1})/ui", "&zones arbustives tropicales ou subtropicales$1$4$7 &sèches$1, $3humides$4, ou $6de haute altitude$7", $habitat); $habitat = preg_replace("/zones arbustives tempérées([@]{0,1})(, | ou )([&]{0,1})tropicales ou subtropicales sèches([@]{0,1})(, | ou )([&]{0,1})tropicales ou subtropicales humides([@]{0,1})/ui", "&zones arbustives$1$4$7 &tempérées$1, $3$6tropicales ou subtropicales$4$7 $3sèches$4 ou $6humides$7", $habitat); $habitat = preg_replace("/zones arbustives tropicales ou subtropicales sèches([@]{0,1})(, | ou )([&]{0,1})tropicales ou subtropicales humides([@]{0,1})/ui", "&zones arbustives tropicales ou subtropicales$1$4 &sèches$1 ou $3humides$4", $habitat); $habitat = preg_replace("/zones arbustives tropicales ou subtropicales humides([@]{0,1})(, | ou )([&]{0,1})tropicales ou subtropicales de haute altitude([@]{0,1})/ui", "&zones arbustives tropicales ou subtropicales$1$4 &humides$1 ou $3de haute altitude$4", $habitat); $habitat = preg_replace("/zones arbustives tropicales ou subtropicales sèches([@]{0,1})(, | ou )([&]{0,1})tropicales ou subtropicales de haute altitude([@]{0,1})/ui", "&zones arbustives tropicales ou subtropicales$1$4 &sèches$1 ou $3de haute altitude$4", $habitat); } $habitat = preg_replace("/avec marais ou étangs permanents de moins de 8 ha([@]{0,1})(, | ou )([&]{0,1})avec marais ou étangs saisonniers de moins de 8 ha([@]{0,1})/ui", "&avec marais ou étangs$1$4 &permanents$1 ou &saisonniers$4 &de moins de 8ha$1$4", $habitat); $habitat = preg_replace("/zones aquatiques artificielles avec retenues de plus de 8 ha([@]{0,1})(, | ou | ; )([&]{0,1})avec retenues de moins de 8 ha([@]{0,1})/ui", "&zones aquatiques artificielles avec retenues$1$4 &de$1$4 &plus$1 ou $3moins$4 &de 8ha$1$4", $habitat); $habitat = preg_replace("/zones aquatiques artificielles de cultures irriguées et canaux d'alimentation([@]{0,1})(, | ou | ; )([&]{0,1})avec cultures inondées saisonnièrement([@]{0,1})/ui", "&zones aquatiques artificielles$1$4 &de cultures irriguées et canaux d'alimentation$1, ou $3avec cultures inondées saisonnièrement$4", $habitat); $habitat = preg_replace("/zones de cultures agricoles([@]{0,1})(, | ou | ; )([&]{0,1})pâturages agricoles([@]{0,1})/ui", "&zones de$1$4 &cultures$1 ou $3pâturages agricoles$4", $habitat); $habitat = preg_replace("/prairies tropicales ou subtropicales sèches([@]{0,1})(, | ou | ; )([&]{0,1})tropicales ou subtropicales saisonnièrement inondées([@]{0,1})(, | ou | ; )([&]{0,1})tropicales ou subtropicales de haute altitude([@]{0,1})/ui", "&prairies tropicales ou subtropicales$1$4$7 &sèches$1 ou $3saisonnièrement inondées$4, ou $6de haute altitude$7", $habitat); $habitat = preg_replace("/prairies tropicales ou subtropicales sèches([@]{0,1})(, | ou | ; )([&]{0,1})tropicales ou subtropicales saisonnièrement inondées([@]{0,1})/ui", "&prairies tropicales ou subtropicales$1$4 &sèches$1 ou $3saisonnièrement inondées$4", $habitat); $habitat = preg_replace("/prairies tropicales ou subtropicales sèches([@]{0,1})(, | ou | ; )([&]{0,1})tropicales ou subtropicales de haute altitude([@]{0,1})/ui", "&prairies tropicales ou subtropicales$1$4 &sèches$1 ou $3de haute altitude$4", $habitat); $habitat = preg_replace("/avec marais ou étangs permanents de moins de 8 ha([@]{0,1})(, | ou | ; )([&]{0,1})avec marais ou étangs saisonniers de moins de de 8 ha([@]{0,1})/ui", "avec &marais ou étangs$1$4 &permanents$1 ou $3saisonniers$4 &de moins de 8 ha$1$4", $habitat); $habitat = preg_replace("/avec marais ou étangs saumâtres permanents([@]{0,1})(, | ou )([&]{0,1})avec marais ou étangs saumâtres non permanents([@]{0,1})/ui", "&avec marais ou étangs saumâtres$1$4 &permanents$1 ou $3temporaires$4", $habitat); $habitat = preg_replace("/zone intertidale de côtes avec rochers([@]{0,1})(, | ou | ; )([&]{0,1})sable([@]{0,1})(, | ou | ; )([&]{0,1})gravier([@]{0,1})/ui", "&zone intertidale$1$4$7 &avec rochers$1, $3sable$4, $6gravier$7", $habitat); $habitat = preg_replace("/versant intérieur de récifs([@]{0,1})(, | ou | ; )([&]{0,1})versant extérieur de récifs([@]{0,1})/ui", "&versants$1$4 &intérieur$1 ou $3extérieur$4 &de récifs$1$4", $habitat); $habitat = preg_replace("/substrat mou entre récifs([@]{0,1})(, | ou | ; )([&]{0,1})zones de gravats entre récifs([@]{0,1})/ui", "&zones de substrat$1$4 &mou$1 ou $3de gravats$4 &entre récifs$1$4", $habitat); $habitat = preg_replace("/milieu marin néritique avec (.*)([@]{0,1})(, | ou | ; )([&]{0,1})milieu marin néritique avec plantes aquatiques([@]{0,1})/ui", "&milieu marin néritique avec &$1$2 ou $4plantes aquatiques$5", $habitat); if (preg_match("/milieux humides [^;]*[@]+.*/ui", $habitat)) $habitat = preg_replace("/milieux humides (.*)/ui", "&milieux humides@ $1", $habitat); if (preg_match("/forêt [^;^.]*[&]+[^;^.]+[@]+.*/ui", $habitat)) $habitat = preg_replace("/forêt (.*)/ui", "&forêt@ $1", $habitat); if (preg_match("/^&/", $habitat)) $habitat = "&".mb_ucfirst(preg_replace("/^(&){1,}/", "", $habitat)); else $habitat = mb_ucfirst($habitat); if (preg_match("/&|@/ui", $habitat)) { $habitat = str_replace("&&", "&", $habitat); $habitat = str_replace("&&", "&", $habitat); $habitat = str_replace("@@", "@", $habitat); $habitat = str_replace("@@", "@", $habitat); if(preg_match("/@/", $habitat)) { $soulignement = ''; $habitat = preg_replace("/&([^&]*)@/iu", "$soulignement$1", $habitat); // cleaning, ne devrait pas être nécessaire si mieux fait... $habitat = str_replace($soulignement.$soulignement, $soulignement, $habitat); $habitat = preg_replace("/(<\/u>)(^()/iu", '$2$3', $habitat); $habitat = str_replace(' '.$soulignement, ' ', $habitat); } $habitat = str_replace("&", "", $habitat); $habitat = str_replace("@", "", $habitat); } $habitat = preg_replace("/ ; ([^,]+), ([^,]+)$/u", " ; $1 ou $2", $habitat); // rajouté (?!ou) $habitat = preg_replace("/[,]{1} ([^,]+), ([^,]+)$/u", ", $1 ou $2", $habitat); // triste... $habitat = preg_replace("/ ou ou /u", ", ou $1", $habitat); $habitat = preg_replace("/^Parfois ([^\.]*)\. (.*)\.$/ui", "$2. Parfois $1.", trim($habitat)); $habitat = abbreviations(trim(str_replace(" ", " ", $habitat))); return $habitat; } function habit ($hab_array) { $value_prec = $habitat = ''; foreach ($hab_array as $key => $value) { if (preg_match("/@/", $value) AND substr($value, 0, 1) != "&") $value = preg_replace("/^(forêt|marin océanique pélagique|côtes marines avec|zones de|zones aquatiques artificielles|prairies|côtes marines avec|zone intertidale de côtes avec|zones arbustives|milieux humides|désert|milieu marin néritique)(.*)$/ui", "&$1@$2", $value); if ((strtok(preg_replace("/&|@/", "", $value_prec), " ") != strtok(preg_replace("/&|@/", "", $value), " ")) OR (preg_match("/(.*) - (.*)/", $value) AND (preg_replace("/(.*) - (.*)/", "$1", preg_replace("/&|@/", "", $value)) != preg_replace("/(.*) - (.*)/", "$1", preg_replace("/&|@/", "", $value_prec))))) { if ($habitat != '') $habitat .= " ; ".$value; else $habitat = $value; } else $habitat .= ", ".preg_replace("/([&]{0,1})(.*) - (.*)/", "$1$3", $value); $value_prec = $value; } return $habitat; } function page_cont_pays_espece ($espece, $sp, $region) { $string_pays = ''; if ($espece == '') $espece = $sp; $origines = array('Native' => 'endémique', 'Vagrant' => 'nomadisme', 'Origin Uncertain' => 'origine incertaine', 'Introduced' => 'introduit', 'Reintroduced' => 'réintroduit'); $presences = array('Extant' => 'présent', 'Extinct Post-1500' => 'disparu', 'Possibly Extinct' => 'possiblement disparu', 'Presence Uncertain' => 'présence incertaine', 'Possibly Extant' => 'présence possible'); $sql = "SELECT nom, origin, seasonality, presence, code FROM pays, pays_trad WHERE scientificName = '".$espece."' AND nom_en = name ORDER BY nom ASC"; $result = mysqli_query($GLOBALS['link'], $sql); $nb = mysqli_num_rows($result); while (list($pays, $origine, $saison, $presence, $code) = mysqli_fetch_row($result)) { $note = ''; if ($origines[$origine] != '') $note = trim($origines[$origine]); else $note = 'pas d\'information'; $saisons = trim(saisons($saison)); if ($saisons != '') $note .= ", ".$saisons; if ($presences[$presence] != 'présent' AND $presences[$presence] != '') $note .= ", ".trim($presences[$presence]); /*if ($GLOBALS['session_auth'] == TRUE) */ $pays = ''.abbreviations($pays).''; /*else $pays = abbreviations($pays);*/ $string_pays .= "
    • ".$pays.' : '.$note.' ;
    • '; $pays = $origine = $saison = $presence = ''; } $string_pays = preg_replace("/^((.+) <\/i>);((<\/li>)*)$/", "$1.$3", $string_pays); if ($GLOBALS['espece_clements'] != '' OR $GLOBALS['espece_ioc'] != '') $av = '
      selon : IUCN (taxonomie Birdlife) ; différences géographiques possibles avec données publiées sous "répartition", "sous-espèces" ou "cartes" en cas de variations taxonomiques avec Clements/IOC/Aves)'; else $av = ''; if ($string_pays != '') $string_pays = ''; else $string_pays = $region; return $string_pays; } function saisons($saison) { $saisons = array('' => 'à préciser', '["Resident"]' => 'sédentaire', '["Passage"]' => 'en migration', '["Breeding Season"]' => 'nidification', '["Non-Breeding Season"]' => 'hors nidification', '["Resident", "Passage"]' => 'sédentaire & en migration', '["Passage", "Resident"]' => 'en migration & sédentaire', '["Resident", "Breeding Season"]' => 'sédentaire & nidification', '["Breeding Season", "Resident"]' => 'nidification & sédentaire', '["Breeding Season", "Passage"]' => 'nidification & en migration', '["Passage", "Breeding Season"]' => 'en migration & nidification', '["Seasonal Occurrence Uncertain"]' => 'période de présence incertaine', '["Resident", "Non-Breeding Season"]' => 'sédentaire & hors nidification', '["Non-Breeding Season", "Resident"]' => 'hors nidification & sédentaire', '["Passage", "Non-Breeding Season"]' => 'en migration & hors nidification', '["Non-Breeding Season", "Passage"]' => 'hors nidification & en migration', '["Breeding Season", "Non-Breeding Season"]' => 'nidification & hors nidification', '["Non-Breeding Season", "Breeding Season"]' => 'hors nidification & nidification', '["Resident", "Passage", "Breeding Season"]' => 'sédentaire & en migration & nidification', '["Breeding Season", "Passage", "Resident"]' => 'nidification & en migration & sédentaire', '["Breeding Season", "Resident", "Passage"]' => 'nidification & sédentaire & en migration', '["Resident", "Breeding Season", "Passage"]' => 'sédentaire & nidification & en migration', '["Passage", "Resident", "Breeding Season"]' => 'en migration & sédentaire & nidification', '["Passage", "Breeding Season", "Resident"]' => 'en migration & nidification & sédentaire', '["Resident", "Seasonal Occurrence Uncertain"]' => 'sédentaire & période de présence incertaine', '["Seasonal Occurrence Uncertain", "Resident"]' => 'période de présence incertaine & sédentaire', '["Passage", "Seasonal Occurrence Uncertain"]' => 'en migration & saison de présence incertaine', '["Passage", "Resident", "Non-Breeding Season"]' => 'en migration & sédentaire & hors nidification', '["Resident", "Non-Breeding Season", "Passage"]' => 'sédentaire & hors nidification & en migration', '["Resident", "Passage", "Non-Breeding Season"]' => 'sédentaire & en migration & hors nidification', '["Breeding Season", "Seasonal Occurrence Uncertain"]' => 'nidification & période de présence incertaine', '["Seasonal Occurrence Uncertain", "Breeding Season"]' => 'période de présence incertaine & nidification', '["Resident", "Breeding Season", "Non-Breeding Season"]' => 'sédentaire & nidification & hors nidification', '["Resident", "Non-Breeding Season", "Breeding Season"]' => 'sédentaire & hors nidification & nidification', '["Non-Breeding Season", "Breeding Season", "Resident"]' => 'hors nidification & nidification & sédentaire', '["Non-Breeding Season", "Resident", "Breeding Season"]' => 'hors nidification & sédentaire & nidification', '["Breeding Season", "Non-Breeding Season", "Resident"]' => 'nidification & hors nidification & sédentaire', '["Breeding Season", "Resident", "Non-Breeding Season"]' => 'nidification & sédentaire & hors nidification', '["Breeding Season", "Non-Breeding Season", "Passage"]' => 'nidification & hors nidification & en migration', '["Passage", "Non-Breeding Season", "Breeding Season"]' => 'en migration & hors nidification & nidification', '["Passage", "Breeding Season", "Non-Breeding Season"]' => 'en migration & nidification & hors nidification', '["Breeding Season", "Non-Breeding Season", "Passage"]' => 'nidification & hors nidification & en migration', '["Breeding Season", "Passage", "Non-Breeding Seaso,"]' => 'nidification & en migration & hors nidification', '["Non-Breeding Season", "Passage", "Breeding Season"]' => 'hors nidification & en migration & nidification', '["Non-Breeding Season", "Breeding Season", "Passage"]' => 'hors nidification & nidification & en migration', '["Seasonal Occurrence Uncertain", "Non-Breeding Season"]' => 'saison de présence incertaine & hors nidification', '["Non-Breeding Season", "Seasonal Occurrence Uncertain"]' => 'hors nidification & saison de présence incertaine'); $s = $saisons[$saison]; return $s; } function pays_codes_continents() { $codes = array("Europe" => array("Andorre" => "AD", "Albanie" => "AL", "Arménie" => "AM", "Autriche" => "AT", "Bosnie Herzégovine" => "BA", "Belgique" => "BE", "Bulgarie" => "BG", "Biélorussie" => "BY", "Suisse" => "CH", "Chypre" => "CY", "République Tchèque" => "CZ", "Allemagne" => "DE", "Danemark" => "DK", "Estonie" => "EE", "Espagne" => "ES", "Finlande" => "FI", "Îles Féroé" => "FO", "France" => "FR", "Royaume-Uni" => "GB", "Gibraltar" => "GI", "Groenland" => "GL", "Grèce" => "GR", "Croatie" => "HR", "Hongrie" => "HU", "Irlande" => "IE", "Islande" => "IS", "Italie" => "IT", "Liechtenstein" => "LI", "Lithuanie" => "LT", "Luxembourg" => "LU", "Lettonie" => "LV", "Monaco" => "MC", "Moldavie" => "MD", "Monténégro" => "ME", "Macédonie" => "MK", "Malte" => "MT", "Pays-Bas" => "NL", "Norvège" => "NO", "Pologne" => "PL", "Portugal" => "PT", "Roumanie" => "RO", "Serbie" => "RS", "Fédération de Russie" => "RU", "Suède" => "SE", "Slovénie" => "SI", "Svalbard et Jan Mayen" => "SJ", "Slovaquie" => "SK", "Saint-Marin" => "SM", "Ukraine" => "UA", "Saint-Siège" => "VA" ), "Asie" => array( "Émirats Arabes Unis" => "AE", "Afghanistan" => "AF", "Azerbaïdjian" => "AZ", "Bangladesh" => "BD", "Bahreïn" => "BH", "Brunei Darussalam" => "BN", "Bouthan" => "BT", "Chine" => "CN", "Géorgie" => "GE", "Hong-Kong" => "HK", "Indonésie" => "ID", "Israël" => "IL", "Inde" => "IN", "Irak" => "IQ", "Iran" => "IR", "Jordanie" => "JO", "Japon" => "JP", "Kirghizistan" => "KG", "Cambodge" => "KH", "Corée du Nord" => "KP", "Corée du Sud" => "KR", "Koweït" => "KW", "Kazakhstan" => "KZ", "Laos" => "LA", "Liban" => "LB", "Sri Lanka" => "LK", "Myanmar" => "MM", "Mongolie" => "MN", "Macao" => "MO", "Malaisie" => "MY", "Oman" => "OM", "Philippines" => "PH", "Pakistan" => "PK", "Fédération de Russie" => "RU", "Népal" => "NP", "Palestine" => "PS", "Qatar" => "QA", "Arabie Saoudite" => "SA", "Singapour" => "SG", "Syrie" => "SY", "Thaïlande" => "TH", "Tadjikistan" => "TJ", "Timor-Leste" => "TL", "Turkménistan" => "TM", "Turquie" => "TR", "Taïwan" => "TW", "Ouzbékistan" => "UZ", "Vietnam" => "VN", "Yémen" => "YE" ), "Amerique" => array( "Antigua-et-Barbuda" => "AG", "Anguilla" => "AI", "Argentine" => "AR", "Aruba" => "AW", "Barbade" => "BB", "Saint Barthélemy" => "BL", "Bermudes" => "BM", "Bolivie" => "BO", "Bonaire, Saint Eustache et Saba" => "BQ", "Brésil" => "BR", "Bahamas" => "BS", "Bélize" => "BZ", "Canada" => "CA", "Chili" => "CL", "Colombie" => "CO", "Costa Rica" => "CR", "Cuba" => "CU", "Curaçao" => "CW", "Dominique" => "DM", "République Dominicaine" => "DO", "Équateur" => "EC", "Îles Falkland" => "FK", "Grenade" => "GD", "Guyane Française" => "GF", "Guadeloupe" => "GP", "Guatemala" => "GT", "Guyana" => "GY", "Honduras" => "HN", "Haïti" => "HT", "Jamaïque" => "JM", "Saint-Kitts et Nevis" => "KN", "Îles Cayman" => "KY", "Sainte-Lucie" => "LC", "Saint-Martin français" => "MF", "Martinique" => "MQ", "Montserrat" => "MS", "Mexique" => "MX", "Nicaragua" => "NI", "Panama" => "PA", "Pérou" => "PE", "Saint-Pierre et Miquelon" => "PM", "Porto Rico" => "PR", "Paraguay" => "PY", "Surinam" => "SR", "El Salvador" => "SV", "Saint-Martin néerlandais" => "SX", "Îles Turques-et-Caïques" => "TC", "Trinidad et Tobago" => "TT", "Îles mineures éloignées des États-Unis" => "UM", "États-Unis" => "US", "Uruguay" => "UY", "Saint Vincent et les Grenadines" => "VC", "Venezuela" => "VE", "Îles Vierges UK" => "VG", "Îles Vierges US" => "VI" ), "Afrique" => array( "Afrique du Sud" => "ZA", "Algérie" => "DZ", "Angola" => "AO", "Burkina Faso" => "BF", "Burundi" => "BI", "Bénin" => "BJ", "Botswana" => "BW", "Congo" => "CG", "Côte d'Ivoire" => "CI", "Cameroun" => "CM", "Cap-Vert" => "CV", "Djibouti" => "DJ", "Comores" => "KM", "Égypte" => "EG", "Érythrée" => "ER", "Éthiopie" => "ET", "Gabon" => "GA", "Ghana" => "GH", "Gambie" => "GM", "Guinée" => "GN", "Guinée Équatoriale" => "GQ", "Guinée Bissau" => "GW", "Territoire britannique de l'océan Indien" => "IO", "Kenya" => "KE", "Liberia" => "LR", "Lesotho" => "LS", "Libye" => "LY", "Madagascar" => "MG", "Malawi" => "MW", "Mali" => "ML", "Maroc" => "MA", "Mauritanie" => "MR", "Maurice" => "MU", "Mayotte" => "YT", "Mozambique" => "MZ", "Namibie" => "NA", "Niger" => "NE", "Nigeria" => "NG", "R.C.A." => "CF", "R.D.C." => "CD", "Réunion" => "RE", "Rwanda" => "RW", "Sahara Occidental" => "EH", "Seychelles" => "SC", "Sierra Leone" => "SL", "Soudan" => "SD", "Sainte-Hélène, Ascension et Tristan da Cunha" => "SH", "Sénégal" => "SN", "Somalie" => "SO", "Soudan du Sud" => "SS", "Sao Tomé et Principe" => "ST", "Swaziland" => "SZ", "Tchad" => "TD", "Togo" => "TG", "Tunisie" => "TN", "Tanzanie" => "TZ", "Ouganda" => "UG", "Zambie" => "ZM", "Zimbabwe" => "ZW" ), "Antarctique" => array( "Antarctique" => "AQ", "Île Bouvet" => "BV", "Géorgie du Sud-et-les îles Sandwich du Sud" => "GS", "Îles Heard et McDonald" => "HM", "Pitcairn" => "PN", "Terres australes et antarctiques françaises" => "TF" ), "Oceanie" => array( "Samoa américaines" => "AS", "Australie" => "AU", "Îles Cocos" => "CC", "Îles Cook" => "CK", "Île Christmas" => "CX", "Fidji" => "FJ", "Micronésie" => "FM", "Guam" => "GU", "Indonésie" => "ID", "Kiribati" => "KI", "Îles Marshall" => "MH", "Îles Mariannes" => "MP", "Maldives" => "MV", "Nouvelle-Calédonie" => "NC", "Île Norfolk" => "NF", "Nauru" => "NR", "Niue" => "NU", "Nouvelle-Zélande" => "NZ", "Polynésie française" => "PF", "Papouasie Nouvelle-Guinée" => "PG", "Philippines" => "PH", "Palau" => "PW", "Îles Salomon" => "SB", "Tokelau" => "TK", "Tonga" => "TO", "Tuvalu" => "TV", "Vanuatu" => "VU", "Wallis et Futuna" => "WF", "Samoa" => "WS" ), ); return $codes; } function pays_codes() { return array("AD", "AE", "AF", "AG", "AI", "AL", "AM", "AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BL", "BM", "BN", "BO", "BQ", "BR", "BS", "BT", "BV", "BW", "BY", "BZ", "CA", "CC", "CD", "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", "CU", "CV", "CW", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG", "EH", "ER", "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", "GA", "GB", "GD", "GE", "GF", "GH", "GI", "GL", "GM", "GN", "GP", "GQ", "GR", "GS", "GT", "GU", "GW", "GY", "HK", "HM", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IN", "IO", "IQ", "IR", "IS", "IT", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", "LV", "LY", "MA", "MC", "MD", "ME", "MF", "MG", "MH", "MK", "ML", "MM", "MN", "MO", "MP", "MQ", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA", "NC", "NE", "NF", "NG", "NI", "NL", "NO", "NP", "NR", "NU", "NZ", "OM", "PA", "PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PS", "PT", "PW", "PY", "QA", "RE", "RO", "RS", "RU", "RW", "SA", "SB", "SC", "SD", "SE", "SG", "SH", "SI", "SJ", "SK", "SL", "SM", "SN", "SO", "SR", "SS", "ST", "SV", "SX", "SY", "SZ", "TC", "TD", "TF", "TG", "TH", "TJ", "TK", "TL", "TM", "TN", "TO", "TR", "TT", "TV", "TW", "TZ", "UA", "UG", "UM", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", "WS", "YE", "YT", "ZA", "ZM", "ZW"); } function continent_from_code($code) { $code_pays = FALSE; $code = strtoupper($code); $continent = ''; $continents = pays_codes_continents(); if (in_array($code, pays_codes())) { foreach($continents as $continent => $pays) { if (in_array($code, $pays)) { BREAK; } } $continent = array('pays' => array_search($code, $pays), 'continent' => $continent); return $continent; } else return FALSE; } class Flickr { private $apiKey; private $url = 'https://www.flickr.com/services/rest/?'; public function __construct($apikey = null) { $this->apiKey = $apikey; } public function search($query = null, $user_id = null, $per_page = 5, $format = 'php_serial', $size = 'f') { $args = array( 'method' => 'flickr.photos.search', 'api_key' => $this->apiKey, 'text' => urlencode($query), 'user_id' => $user_id, 'per_page' => $per_page, 'format' => $format, 'async' => 1 ); $url = $this->url; $search = $url.http_build_query($args); $result = $this->file_get_contents_curl($search); if ($format == 'php_serial') $result = unserialize($result); return $result; } public function auteur($user_id) { $args = array( 'method' => 'flickr.people.getInfo', 'api_key' => $this->apiKey, 'user_id' => $user_id ); $url = $this->url; $search = $url.http_build_query($args); $result = $this->file_get_contents_curl($search); return $result; } public function coords($photo_id) { $args = array( 'method' => 'flickr.photos.geo.getLocation', 'api_key' => $this->apiKey, 'photo_id' => $photo_id ); $url = $this->url; $search = $url.http_build_query($args); $result = $this->file_get_contents_curl($search); return $result; } private function file_get_contents_curl($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_AUTOREFERER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36'); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); $data = curl_exec($ch); $retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($retcode == 200) return $data; else return null; } } function pays () { GLOBAL $index_cont, $description, $titre_page, $keywords, $regions_texte, $regions_url, $regions_db; $description = $titre_page = 'Listes d\'oiseaux par pays'; $keywords = 'oiseaux, listes, pays'; $continents = pays_codes_continents(); regions(); $index_cont = '

      Listes d\'oiseaux par pays

      '; $index_cont .= 'Note : ces listes suivent la taxonomie Birdlife, pour les autres espèces faire une recherche par mot-clé ou par ordre/famille, en sélectionnant la région.

      '; foreach($continents as $continent => $pays) { $index_cont .= '
      '.$regions_db[$continent]."
      "; $liste = ''; foreach($pays as $pays_continent => $code) { $liste .= ''.$pays_continent." - "; } $index_cont .= preg_replace("/^(.*) - $/", "$1", $liste); $index_cont .= "

      "; } return $index_cont; } function js_copy_sp_id ($nom, $sp, $id) { if (preg_match("/([A-Za-z]+) ([a-z]+)/", $sp, $req)) { $genre = substr($req[1], 0, 1); $espece = $req[2]; } elseif (preg_match("/([A-Za-z]+) \(([a-z]+)\) ([a-z]+)/", $sp, $req)) { $genre = substr($req[1], 0, 1); $espece = $req[3]; } $val = "[ aussi considéré comme une sous-espèce du {".$nom."}".$id." ".$genre.". ".$espece." ]"; $js = ''; // version pdf return $js; } ?>