* @version $Id$ * @license http://opensource.org/licenses/gpl-2.0.php GNU GPL 2 */ /** * print_r() next gen pour le debug * * @param array $array */ function printr($array) { echo ''; print_r($array); echo ''; } /** * Ajoute l'ID de session a l'url * * @param string $url URL a modifier * @param bool $force Si true, on force l'ajout de la SID dans l'URL * @return string URL modifiee */ function sid($url, $force = false) { $use_rewriting = (Fsb::$mods) ? Fsb::$mods->is_active('url_rewriting') : false; if ($force || (!defined('SESSION_METHOD_COOKIE') && Fsb::$session->sid && (!$use_rewriting || Fsb::$session->is_logged()))) { $add_end = ''; if (preg_match('/#([a-z0-9_]+)$/i', $url, $match)) { $add_end = '#' . $match[1]; $url = preg_replace('/#([a-z0-9_]+)$/i', '', $url); } $url .= (strstr($url, '?') ? '&' : '?') . 'sid=' . Fsb::$session->sid . $add_end; } if ($use_rewriting) { $url = preg_replace(array_keys($GLOBALS['_rewrite']), array_values($GLOBALS['_rewrite']), $url); } return ($url); } /** * Verifie lors d'une confirmation sur le bouton "oui" a ete choisi * * @return bool */ function check_confirm() { $fsb_check_sid = Http::request('fsb_check_sid', 'post'); if ($fsb_check_sid !== Fsb::$session->sid || !Http::request('confirm_yes', 'post')) { return (false); } return (true); } /** * Verifie la validite d'un code pour un captcha * * @param string $code * @return bool */ function check_captcha($code) { $current_code = Fsb::$session->data['s_visual_code']; if (!$current_code || strpos($current_code, ':') === false) { return (false); } $current_code = substr($current_code, 2); return ((strtolower($code) === strtolower($current_code)) ? true : false); } /** * Retourne le chemin depuis la racine du forum * * @param string $path Chemin complet (avec __FILE__ par exemple) * @param string $dir_name Nom du repertoire a la racine * @return string */ function fsb_basename($path, $dir_name) { // On recupere le bon repertoire si le chemin total a ete passe en argument $dir_name = basename($dir_name); $delimiter = (preg_match('/^WIN/', PHP_OS) && strpos($path, '\\')) ? '\\' : '/'; $ary = explode($delimiter, $path); $count = count($ary); $new = array(); for ($i = 0, $begin = false; $i < $count; $i++) { if (!$begin && $ary[$i] == $dir_name) { $begin = true; } else if ($begin) { $new[] = $ary[$i]; } } return (($begin) ? implode($delimiter, $new) : basename($path)); } /** * Retourne la chaine de caractere a afficher pour retourner sur une page via un clic * * @param string $url * @param string $name Nom de la page (pour la variable de langue) * @return string */ function return_to($url, $name) { return ('

' . sprintf(Fsb::$session->lang('return_to_' . $name), sid($url))); } /** * Converti une taille en octet dans une unite plus grande si possible * * @param int $size Taille en octet * @return string */ function convert_size($size) { if ($size >= 1048576) { return (substr($size / 1048576, 0, 5) . ' MO'); } else if ($size >= 1024) { return (substr($size / 1024, 0, 5) . ' KO'); } else { return (substr($size, 0, 5) . ' O'); } } /** * Converti un format de taille des variables de configuration de PHP en octet * @link http://fr2.php.net/manual/fr/function.ini-get.php * * @param string $ini_size Taille issue d'une configuration PHP * @return int */ function ini_get_bytes($ini_size) { $ini_size = trim($ini_size); $last = strtolower($ini_size[strlen($ini_size) - 1]); switch($last) { case 'g': $ini_size *= 1024; case 'm': $ini_size *= 1024; case 'k': $ini_size *= 1024; } return ($ini_size); } /** * Selectionne une ligne de tableau multi dimensionel en fonction de la valeur d'une clef * * @param array $ary Tableau a fouiller * @param string $field Nom de la clef * @param string $value Valeur de la clef * @return string */ function array_select(&$ary, $field, $value) { foreach ($ary AS $v) { if (isset($v[$field]) && $v[$field] == $value) { return ($v); } } return (null); } /** * Ecrit des donnees dans un fichier * * @param string $filename Nom du fichier * @param string $code Donnees a ecrire * @return bool */ function fsb_write($filename, $code) { $fd = @fopen($filename, 'w'); if (!$fd) { return (false); } flock($fd, LOCK_EX); fwrite($fd, $code); flock($fd, LOCK_UN); fclose($fd); @chmod($filename, 0666); return (true); } /** * Agit comme la fonction array_map() de PHP, mais recusivement sur tous les sous tableaux * * @param string $callback * @param array $ary * @return array */ function array_map_recursive($callback, $ary) { foreach ($ary AS $key => $value) { if (is_array($value)) { $ary[$key] = array_map_recursive($callback, $value); } else { $ary[$key] = $callback($value); } } return ($ary); } /** * Renvoie tous les forums dans un tableau * * @param string $where Clause WHERE de selection des forums * @param bool $use_cache Definit si on utilise le cache pour la requete * @return array */ function get_forums($where = '', $use_cache = true) { $sql = 'SELECT * FROM ' . SQL_PREFIX . 'forums ' . $where . ' ORDER BY f_left'; $result = Fsb::$db->query($sql, ($use_cache) ? 'forums_' : null); $data = Fsb::$db->rows($result); return ($data); } /** * Retourne true s'il s'agit de la derniere version comparee * * @param string $current_version Version actuelle de ce script * @param string $last_version Derniere version connue pour le script * @return bool */ function is_last_version($current_version, $last_version) { if (!preg_match('#^([0-9]+)\.([0-9]+)\.([0-9]+)(\.(RC([0-9]+)))?([a-z])?$#', $current_version, $m_current)) { return (false); } if (!preg_match('#^([0-9]+)\.([0-9]+)\.([0-9]+)(\.(RC([0-9]+)))?([a-z])?$#', $last_version, $m_last)) { return (false); } // Comparaison des versions majeures, mineures et des revisions for ($i = 1; $i < 4; $i++) { if ($m_current[$i] != $m_last[$i]) { return (($m_current[$i] < $m_last[$i]) ? false : true); } } // Comparaison du numero de RC et des revisions mineures $rc_current = (isset($m_current[6])) ? $m_current[6] : ''; $rc_last = (isset($m_last[6])) ? $m_last[6] : ''; if (($rc_current || $rc_last) && $rc_current != $rc_last) { return ((!$rc_current || ($rc_last && $rc_current >= $rc_last)) ? true : false); } $minor_current = (isset($m_current[7])) ? $m_current[7] : ''; $minor_last = (isset($m_last[7])) ? $m_last[7] : ''; if ($minor_current || $minor_last) { return ((!$minor_current || $minor_last > $minor_current) ? false : true); } return (true); } /** * Retourne les donnees d'un fichier (extension ou bien corps) * * @param string $filename * @param string $type 'extension' ou 'filename' * @return string */ function get_file_data($filename, $type) { $tmp = explode('.', basename($filename)); switch ($type) { case 'extension' : return (strtolower($tmp[count($tmp) - 1])); break; case 'filename' : unset($tmp[count($tmp) - 1]); return (implode('.', $tmp)); break; } } /** * Un preg_replace() qui remplace tous les elements de la chaine, meme les elements imbriques * * @param string $pattern * @param string $replace * @param string $str * @param int $limit * @return string */ function preg_replace_multiple($pattern, $replace, $str, $limit = -1) { while (preg_match($pattern, $str)) { $str = preg_replace($pattern, $replace, $str, $limit); } return ($str); } /** * Retourne un tableau contenant un boolean signalant si un sujet est lu, et une chaine de caractere * de type t_id=xx ou p_id=yy#yy a place a la fin de l'URL pointant vers le dernier message d'un sujet * * @param int $p_id ID du dernier message * @param int $p_time Date du dernier message * @param int $t_id ID du sujet * @param int $last_time Date du dernier message lu du sujet * @param int $last_id ID du dernier message lu du sujet * @return array */ function check_read_post($p_id, $p_time, $t_id, $last_time, $last_id) { if ((Fsb::$session->is_logged() && (!$last_time || $last_time < $p_time) && $p_time > Fsb::$session->data['u_last_read'])) { $is_read = false; $last_url = ($last_time) ? 'p_id=' . $last_id . '#p' . $last_id : 't_id=' . $t_id; } else { $is_read = true; $last_url = 'p_id=' . $p_id . '#p' . $p_id; } return (array($is_read, $last_url)); } /* EOF */