Connectix Boards

Bienvenue, vous n'êtes pas connecté. ( Se connecter - S'enregistrer )

Dernière version sortie: 0.8.4!
Venez tester la version 1.0 beta :)

Connectix Boards > Zone de tests > Zone de tests > Test de spoilers et balises PHP

RSS >  Test de spoilers et balises PHP, suite à un bug découvert
Ishimaru Chiaki #1 17/12/2008 - 03h04

Groupe : Doc-rédacteur
Messages : 800
Enregistré le : 12/03/2008

Hors ligne Site Web

Je test avec include/core/class.users.php  Code PHP à l'intérieur des balises PHP qui sont eux-mêmes imbriqués dans les balises Spoiler

Spoiler

<?php
/**
*    Connectix Boards 0.8, free interactive php bulletin boards.
*    Copyright (C) 2005-2007  Jasienski Martin.
*
*    This program is free software; you can redistribute it and/or modify
*    it under the terms of the GNU General Public License as published by
*    the Free Software Foundation; either version 3 of the License, or
*    (at your option) any later version.
*
*    This program is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*    GNU General Public License for more details.
*
*    You can find a copy of the GNU General Public License at 
*    <http://www.connectix-boards.org/license.txt>.
*/
class user {
    var 
$time_loaded;            // Timestamp du dernier chargement des données
    
var $time_to_wait 5;        // Temps (en minutes) à attendre pour un rechargement des données
    
var $logged;
    var 
$username;
    var 
$userid;
    var 
$userclass;
    var 
$nbmp;
    var 
$mod;
    var 
$punished;
    var 
$mpadv;
    var 
$gr_status;
    var 
$gr_mps;
    var 
$gr_auth_see;
    var 
$gr_auth_reply;
    var 
$gr_auth_create;
    var 
$gr_auth_flood;
    var 
$usr_pref_res=15;
    var 
$usr_pref_usrs=20;
    var 
$usr_pref_msgs=15;
    var 
$usr_pref_topics=20;
    var 
$usr_pref_skin;
    var 
$usr_pref_lang;
    var 
$usr_pref_timezone;
    var 
$usr_pref_ctsummer;
    var 
$connected_position;
    var 
$mark_as_read;

    
/* Crée un objet de gestion des membres. */
    
function user () {
        
$this->logged=false;

        
/* Gestion du login automatique par cookies */
        
if (isset($_COOKIE['cb_username']) && isset($_COOKIE['cb_password'])) {
            if (!
$this->isRegistered($_COOKIE['cb_username'],$_COOKIE['cb_password'],true,true)) {
                
setcookie('cb_username',false,1,$GLOBALS['cb_cfg']->config['cookie_path']);
                
setcookie('cb_password',false,1,$GLOBALS['cb_cfg']->config['cookie_path']);
            }
        }

        
/* Si on n'est pas loggé, on initialise les droits invité */
        
if (!$this->logged$this->setVars();
    }
    
/* Fonction à appeler à chaque nouvelle page, si l'objet a déja été instancié. */
    
function newPage () {
        if (
$this->logged)
            
$GLOBALS['cb_db']->query('UPDATE '.$GLOBALS['cb_db']->prefix.'users SET usr_lastaction='.time().' WHERE usr_id='.$this->userid);

        if (
$GLOBALS['cb_cfg']->config['last-cached'] > time() || time()-$this->time_to_wait*60 $this->time_loaded
            
$this->setVars();
    }
    
/* Fonction qui insère tout ce qu'il faut dans la table connected et users. */
    
function connected ($position) {
        
$this->connected_position $position;
        
$conid $this->logged $this->userid : (int)str_pad(substr(str_replace('.','',$_SERVER['REMOTE_ADDR']),0,11),10,'0') ;
        
$GLOBALS['cb_db']->query('REPLACE DELAYED INTO '.$GLOBALS['cb_db']->prefix.'connected(con_ip,con_id,con_timestamp,con_position) VALUES('.ip2long($_SERVER['REMOTE_ADDR']).','.$conid.','.time().',\''.$this->connected_position.'\')');
        if (
mt_rand(0,100) < 2$GLOBALS['cb_db']->query('DELETE FROM '.$GLOBALS['cb_db']->prefix.'connected WHERE con_timestamp<'.(time()-($GLOBALS['cb_cfg']->config['connectedlimit']*60)));
    }
    
/* La fonction isRegistered vérifie si l'utilisateur est bien enregistré dans la BDD et renvoit true si c'est le cas, false sinon. */
    
function isRegistered ($username,$password,$passSalted false,$remember false) {
        
$q $GLOBALS['cb_db']->query('SELECT
                usr_id,usr_punished,usr_password,usr_registered,usr_name,usr_lastaction,usr_markasread'
.(($GLOBALS['cb_cfg']->config['hash_type'] == 'ipb')?',usr_password_s':'').'
            FROM '
.$GLOBALS['cb_db']->prefix.'users
            WHERE usr_name=\''
.clean($username).'\'');

        if (
$ud $GLOBALS['cb_db']->fetch_assoc($q)) {
            
$pun=explode('|',$ud['usr_punished']);

            
// Conditions pour être connecté (password ok et compte validé)
            
$cond_pass false;
            if (
$passSalted$cond_pass = (cbHash($ud['usr_password'].$GLOBALS['cb_cfg']->config['pass_salt']) == $password);
            else 
$cond_pass = ($ud['usr_password'] == cbHash($password));
            
            
$cond_val = ($ud['usr_registered']=='TRUE');

            
// Vérification, à cause de la migration IPB
            
if (!($cond_pass && $cond_val) && $GLOBALS['cb_cfg']->config['hash_type'] == 'ipb' && !empty($ud['usr_password_s'])) {
                
// Si le password est bon, au sens IPB
                
if ($ud['usr_password'] == md5(md5($ud['usr_password_s']).cbHash($password))) {
                    
$cond_pass true;
                    
// Modification des infos utilisateur pour être compatible CB (IPB, c'est nul!)
                    
$GLOBALS['cb_db']->query('UPDATE '.$GLOBALS['cb_db']->prefix.'users SET usr_password=\''.cbHash($password).'\',usr_password_s=\'\' WHERE usr_id='.$ud['usr_id']);
                }
            }

            if (
$cond_val) {
                if (
$cond_pass) {
                    if (!(
$pun[0]=='ban' && $pun[1]+$pun[2]>time())) {
                        
$this->logged true;
                        
$this->userid $ud['usr_id'];

                        
$conid=str_pad(substr(str_replace('.','',$_SERVER['REMOTE_ADDR']),0,11),10,'0');
                        
$GLOBALS['cb_db']->query('DELETE FROM '.$GLOBALS['cb_db']->prefix.'connected WHERE con_id='.(int)$conid);

                        
$GLOBALS['cb_db']->query('UPDATE '.$GLOBALS['cb_db']->prefix.'users SET usr_lastconnect='.time().',usr_lastaction='.time().' WHERE usr_id='.$this->userid);

                        if (
$remember) {
                            
$timestampexpire time() + 365*24*3600;
                            
setcookie('cb_username',$ud['usr_name'],$timestampexpire,$GLOBALS['cb_cfg']->config['cookie_path']);
                            
setcookie('cb_password',cbHash($ud['usr_password'].$GLOBALS['cb_cfg']->config['pass_salt']),$timestampexpire,$GLOBALS['cb_cfg']->config['cookie_path']);
                        }
                        
                        if (
$GLOBALS['cb_cfg']->config['readornot_sessions'] == 'yes') {
                            
$msg_mar $GLOBALS['cb_db']->single_result('SELECT MAX(msg_id) FROM '.$GLOBALS['cb_db']->prefix.'messages WHERE msg_timestamp <='.$ud['usr_lastaction']);
                            if (
is_numeric($msg_mar))
                                
$GLOBALS['cb_db']->query('UPDATE '.$GLOBALS['cb_db']->prefix.'users SET usr_markasread='.(int)$msg_mar.' WHERE usr_id='.$ud['usr_id']);
                        }
                        
                        
$this->setVars();
                        return 
true;
                    } elseif (
$GLOBALS['cb_tpl']->lang_loaded('errors.lang')) trigger_error(str_replace('timeleft',getTimeFormat($pun[1]+$pun[2]-time()),lang('error_banned')),E_USER_WARNING);
                } elseif (
$GLOBALS['cb_tpl']->lang_loaded('errors.lang')) trigger_error(lang('error_wrongpassword'),E_USER_WARNING);
            } elseif (
$GLOBALS['cb_tpl']->lang_loaded('errors.lang')) trigger_error(lang('error_validateaccount'),E_USER_WARNING);
        } elseif (
$GLOBALS['cb_tpl']->lang_loaded('errors.lang')) trigger_error(lang('error_notregistered'),E_USER_WARNING);
        return 
false;
    }
    
/* Gestion du formulaire de connexion rapide */
    
function fastConnect() {
        if (!
$this->logged && isset($_POST['fast_connect'])) {
            if (!empty(
$_POST['fast_login']) && !empty($_POST['fast_password'])) {
                if (
$this->isRegistered($_POST['fast_login'], $_POST['fast_password'], false, (isset($_POST['fast_remember']) && $_POST['fast_remember']=='on'))) {
                    if (isset(
$_SERVER['HTTP_REFERER']) && parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) == $_SERVER['HTTP_HOST'] && strpos($_SERVER['HTTP_REFERER'],'login') === false)  {
                        
header('Location: '.$_SERVER['HTTP_REFERER']);
                        exit();
                    } else 
redirect();
                }
            } else 
trigger_error(lang('error_fillfields'),E_USER_WARNING);
        }
    }
    
/* Fonction qui spécifie si un utilisateur a les droits de modération sur le groupe de topics demandé. */
    
function isMod ($tg) {
        if (
$this->logged!==true) return false;
        if (
$this->isAdmin()) return true;
        elseif (
$this->isModerator()) return in_array($tg,$this->mod);
        else return 
false;
    }
    
/* Fonction qui détermine si l'utilisateur est administrateur ou pas. */
    
function isAdmin () {
        if (
$this->logged!==true) return false;
        return (
$this->gr_status == 2);
    }
    
/* Fonction qui détermine si l'utilisateur est modérateur ou pas (ne tient pas compte des groupes de sujets modérés). */
    
function isModerator () {
        if (
$this->logged!==true) return false;
        return (
$this->gr_status >= 1);
    }
    
/* Fonction qui détermine les droits de l'utilisateur -> renvoie true si l'utilisateur possède le droit considéré. */
    
function getAuth ($auth_type,$tg_id) {
        if (
in_array($tg_id,$this->gr_auth_see)) return false;
        if (
$auth_type=='see') return true;

        if (
$this->logged !== true && $GLOBALS['cb_cfg']->config['postguest'] != 'yes') return false;

        if (isset(
$this->punished[2]) && $this->punished[0]=='readonly' && ($this->punished[1]+$this->punished[2])>time()) return false;

        if (
in_array($tg_id,$this->gr_auth_reply)) return false;
        if (
$auth_type=='reply') return true;

        if (
in_array($tg_id,$this->gr_auth_create)) return false;

        return 
true;
    }
    
/* Fonction qui détermine si l'utilisateur a le droit de flooder ou non. */
    
function canFlood() {
        if (
$this->logged!==true) return false;
        if (
$this->gr_auth_flood==1) return true;
        return 
false;
    }
    
/* Fonction qui renvoie la langue à utiliser. */
    
function getPreferredLang () {
        if (
$this->logged && !empty($this->usr_pref_lang) && isLang($this->usr_pref_lang)) return $this->usr_pref_lang;
        return 
$GLOBALS['cb_cfg']->config['defaultlanguage'];
    }
    
/* Fonction qui renvoie la skin à utiliser. */
    
function getPreferredSkin () {
        if (
$this->logged && !empty($this->usr_pref_skin) && isSkin($this->usr_pref_skin)) return $this->usr_pref_skin;
        return 
$GLOBALS['cb_cfg']->config['defaultstyle'];
    }
    
/* Fonction qui initialise toutes les variables nécéssaires. */
    
function setVars () {
        if (
$this->logged) {
            
$ud $GLOBALS['cb_db']->query('SELECT
                    usr_name,usr_nbmp,usr_mod,usr_mpadv,usr_punished,usr_markasread,
                    usr_pref_msgs,usr_pref_res,usr_pref_topics,usr_pref_usrs,usr_pref_skin,usr_pref_lang,usr_pref_timezone,usr_pref_ctsummer,
                    gr_id,gr_status,gr_mod,gr_mps,gr_auth_flood,gr_auth_see,gr_auth_reply,gr_auth_create
                FROM '
.$GLOBALS['cb_db']->prefix.'users
                LEFT JOIN '
.$GLOBALS['cb_db']->prefix.'groups ON gr_id=usr_class
                WHERE usr_id='
.$this->userid);
            
$ud $GLOBALS['cb_db']->fetch_assoc($ud);
            
            
$this->punished  explode('|',$ud['usr_punished']);

            if (
$this->punished[0] == 'ban' && $this->punished[1]+$this->punished[2]>time())
                
trigger_error(lang(array('item' => 'error_banned','timeleft' => ($this->punished[1]+$this->punished[2]-time()))));
            
            
$this->username  $ud['usr_name'];
            
$this->userclass $ud['gr_id'];
      &

Besoin de volontaires pour les tests du support IPv6 dans la future version 0.8.5 !
Plus d'informations ici

Mon fil Twitter
Ishimaru Chiaki #2 17/12/2008 - 03h04

Groupe : Doc-rédacteur
Messages : 800
Enregistré le : 12/03/2008

Hors ligne Site Web

On test avec la balise code au lieu de la balise PHP
Spoiler<?php
/**
*    Connectix Boards 0.8, free interactive php bulletin boards.
*    Copyright (C) 2005-2007  Jasienski Martin.
*
*    This program is free software; you can redistribute it and/or modify
*    it under the terms of the GNU General Public License as published by
*    the Free Software Foundation; either version 3 of the License, or
*    (at your option) any later version.
*
*    This program is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*    GNU General Public License for more details.
*
*    You can find a copy of the GNU General Public License at
*    <http://www.connectix-boards.org/license.txt>.
*/
class user {
    var $time_loaded;            // Timestamp du dernier chargement des données
    var $time_to_wait = 5;        // Temps (en minutes) à attendre pour un rechargement des données
    var $logged;
    var $username;
    var $userid;
    var $userclass;
    var $nbmp;
    var $mod;
    var $punished;
    var $mpadv;
    var $gr_status;
    var $gr_mps;
    var $gr_auth_see;
    var $gr_auth_reply;
    var $gr_auth_create;
    var $gr_auth_flood;
    var $usr_pref_res=15;
    var $usr_pref_usrs=20;
    var $usr_pref_msgs=15;
    var $usr_pref_topics=20;
    var $usr_pref_skin;
    var $usr_pref_lang;
    var $usr_pref_timezone;
    var $usr_pref_ctsummer;
    var $connected_position;
    var $mark_as_read;

    /* Crée un objet de gestion des membres. */
   function user () {
        $this->logged=false;

        /* Gestion du login automatique par cookies */
        if (isset($_COOKIE['cb_username']) && isset($_COOKIE['cb_password'])) {
            if (!$this->isRegistered($_COOKIE['cb_username'],$_COOKIE['cb_password'],true,true)) {
                setcookie('cb_username',false,1,$GLOBALS['cb_cfg']->config['cookie_path']);
                setcookie('cb_password',false,1,$GLOBALS['cb_cfg']->config['cookie_path']);
            }
        }

        /* Si on n'est pas loggé, on initialise les droits invité */
        if (!$this->logged) $this->setVars();
   }
    /* Fonction à appeler à chaque nouvelle page, si l'objet a déja été instancié. */
    function newPage () {
        if ($this->logged)
            $GLOBALS['cb_db']->query('UPDATE '.$GLOBALS['cb_db']->prefix.'users SET usr_lastaction='.time().' WHERE usr_id='.$this->userid);

        if ($GLOBALS['cb_cfg']->config['last-cached'] > time() || time()-$this->time_to_wait*60 > $this->time_loaded)
            $this->setVars();
    }
    /* Fonction qui insère tout ce qu'il faut dans la table connected et users. */
    function connected ($position) {
        $this->connected_position = $position;
        $conid = $this->logged ? $this->userid : (int)str_pad(substr(str_replace('.','',$_SERVER['REMOTE_ADDR']),0,11),10,'0') ;
        $GLOBALS['cb_db']->query('REPLACE DELAYED INTO '.$GLOBALS['cb_db']->prefix.'connected(con_ip,con_id,con_timestamp,con_position) VALUES('.ip2long($_SERVER['REMOTE_ADDR']).','.$conid.','.time().',\''.$this->connected_position.'\')');
        if (mt_rand(0,100) < 2) $GLOBALS['cb_db']->query('DELETE FROM '.$GLOBALS['cb_db']->prefix.'connected WHERE con_timestamp<'.(time()-($GLOBALS['cb_cfg']->config['connectedlimit']*60)));
    }
   /* La fonction isRegistered vérifie si l'utilisateur est bien enregistré dans la BDD et renvoit true si c'est le cas, false sinon. */
   function isRegistered ($username,$password,$passSalted = false,$remember = false) {
        $q = $GLOBALS['cb_db']->query('SELECT
                usr_id,usr_punished,usr_password,usr_registered,usr_name,usr_lastaction,usr_markasread'.(($GLOBALS['cb_cfg']->config['hash_type'] == 'ipb')?',usr_password_s':'').'
           FROM '.$GLOBALS['cb_db']->prefix.'users
           WHERE usr_name=\''.clean($username).'\'');

        if ($ud = $GLOBALS['cb_db']->fetch_assoc($q)) {
            $pun=explode('|',$ud['usr_punished']);

            // Conditions pour être connecté (password ok et compte validé)
            $cond_pass = false;
            if ($passSalted) $cond_pass = (cbHash($ud['usr_password'].$GLOBALS['cb_cfg']->config['pass_salt']) == $password);
            else $cond_pass = ($ud['usr_password'] == cbHash($password));
           
            $cond_val = ($ud['usr_registered']=='TRUE');

            // Vérification, à cause de la migration IPB
            if (!($cond_pass && $cond_val) && $GLOBALS['cb_cfg']->config['hash_type'] == 'ipb' && !empty($ud['usr_password_s'])) {
                // Si le password est bon, au sens IPB
                if ($ud['usr_password'] == md5(md5($ud['usr_password_s']).cbHash($password))) {
                    $cond_pass = true;
                    // Modification des infos utilisateur pour être compatible CB (IPB, c'est nul!)
                    $GLOBALS['cb_db']->query('UPDATE '.$GLOBALS['cb_db']->prefix.'users SET usr_password=\''.cbHash($password).'\',usr_password_s=\'\' WHERE usr_id='.$ud['usr_id']);
                }
            }

            if ($cond_val) {
                if ($cond_pass) {
                    if (!($pun[0]=='ban' && $pun[1]+$pun[2]>time())) {
                        $this->logged = true;
                        $this->userid = $ud['usr_id'];

                        $conid=str_pad(substr(str_replace('.','',$_SERVER['REMOTE_ADDR']),0,11),10,'0');
                        $GLOBALS['cb_db']->query('DELETE FROM '.$GLOBALS['cb_db']->prefix.'connected WHERE con_id='.(int)$conid);

                        $GLOBALS['cb_db']->query('UPDATE '.$GLOBALS['cb_db']->prefix.'users SET usr_lastconnect='.time().',usr_lastaction='.time().' WHERE usr_id='.$this->userid);

                        if ($remember) {
                            $timestampexpire = time() + 365*24*3600;
                            setcookie('cb_username',$ud['usr_name'],$timestampexpire,$GLOBALS['cb_cfg']->config['cookie_path']);
                            setcookie('cb_password',cbHash($ud['usr_password'].$GLOBALS['cb_cfg']->config['pass_salt']),$timestampexpire,$GLOBALS['cb_cfg']->config['cookie_path']);
                        }
                       
                        if ($GLOBALS['cb_cfg']->config['readornot_sessions'] == 'yes') {
                            $msg_mar = $GLOBALS['cb_db']->single_result('SELECT MAX(msg_id) FROM '.$GLOBALS['cb_db']->prefix.'messages WHERE msg_timestamp <='.$ud['usr_lastaction']);
                            if (is_numeric($msg_mar))
                                $GLOBALS['cb_db']->query('UPDATE '.$GLOBALS['cb_db']->prefix.'users SET usr_markasread='.(int)$msg_mar.' WHERE usr_id='.$ud['usr_id']);
                        }
                       
                        $this->setVars();
                        return true;
                    } elseif ($GLOBALS['cb_tpl']->lang_loaded('errors.lang')) trigger_error(str_replace('timeleft',getTimeFormat($pun[1]+$pun[2]-time()),lang('error_banned')),E_USER_WARNING);
                } elseif ($GLOBALS['cb_tpl']->lang_loaded('errors.lang')) trigger_error(lang('error_wrongpassword'),E_USER_WARNING);
            } elseif ($GLOBALS['cb_tpl']->lang_loaded('errors.lang')) trigger_error(lang('error_validateaccount'),E_USER_WARNING);
        } elseif ($GLOBALS['cb_tpl']->lang_loaded('errors.lang')) trigger_error(lang('error_notregistered'),E_USER_WARNING);
        return false;
   }
    /* Gestion du formulaire de connexion rapide */
    function fastConnect() {
        if (!$this->logged && isset($_POST['fast_connect'])) {
            if (!empty($_POST['fast_login']) && !empty($_POST['fast_password'])) {
                if ($this->isRegistered($_POST['fast_login'], $_POST['fast_password'], false, (isset($_POST['fast_remember']) && $_POST['fast_remember']=='on'))) {
                    if (isset($_SERVER['HTTP_REFERER']) && parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) == $_SERVER['HTTP_HOST'] && strpos($_SERVER['HTTP_REFERER'],'login') === false)  {
                        header('Location: '.$_SERVER['HTTP_REFERER']);
                        exit();
                    } else redirect();
                }
            } else trigger_error(lang('error_fillfields'),E_USER_WARNING);
        }
    }
    /* Fonction qui spécifie si un utilisateur a les droits de modération sur le groupe de topics demandé. */
    function isMod ($tg) {
        if ($this->logged!==true) return false;
        if ($this->isAdmin()) return true;
        elseif ($this->isModerator()) return in_array($tg,$this->mod);
        else return false;
    }
    /* Fonction qui détermine si l'utilisateur est administrateur ou pas. */
    function isAdmin () {
        if ($this->logged!==true) return false;
        return ($this->gr_status == 2);
    }
    /* Fonction qui détermine si l'utilisateur est modérateur ou pas (ne tient pas compte des groupes de sujets modérés). */
    function isModerator () {
        if ($this->logged!==true) return false;
        return ($this->gr_status >= 1);
    }
    /* Fonction qui détermine les droits de l'utilisateur -> renvoie true si l'utilisateur possède le droit considéré. */
    function getAuth ($auth_type,$tg_id) {
        if (in_array($tg_id,$this->gr_auth_see)) return false;
        if ($auth_type=='see') return true;

        if ($this->logged !== true && $GLOBALS['cb_cfg']->config['postguest'] != 'yes') return false;

        if (isset($this->punished[2]) && $this->punished[0]=='readonly' && ($this->punished[1]+$this->punished[2])>time()) return false;

        if (in_array($tg_id,$this->gr_auth_reply)) return false;
        if ($auth_type=='reply') return true;

        if (in_array($tg_id,$this->gr_auth_create)) return false;

        return true;
    }
    /* Fonction qui détermine si l'utilisateur a le droit de flooder ou non. */
    function canFlood() {
        if ($this->logged!==true) return false;
        if ($this->gr_auth_flood==1) return true;
        return false;
    }
    /* Fonction qui renvoie la langue à utiliser. */
    function getPreferredLang () {
        if ($this->logged && !empty($this->usr_pref_lang) && isLang($this->usr_pref_lang)) return $this->usr_pref_lang;
        return $GLOBALS['cb_cfg']->config['defaultlanguage'];
    }
    /* Fonction qui renvoie la skin à utiliser. */
    function getPreferredSkin () {
        if ($this->logged && !empty($this->usr_pref_skin) && isSkin($this->usr_pref_skin)) return $this->usr_pref_skin;
        return $GLOBALS['cb_cfg']->config['defaultstyle'];
    }
    /* Fonction qui initialise toutes les variables nécéssaires. */
    function setVars () {
        if ($this->logged) {
            $ud = $GLOBALS['cb_db']->query('SELECT
                    usr_name,usr_nbmp,usr_mod,usr_mpadv,usr_punished,usr_markasread,
                    usr_pref_msgs,usr_pref_res,usr_pref_topics,usr_pref_usrs,usr_pref_skin,usr_pref_lang,usr_pref_timezone,usr_pref_ctsummer,
                    gr_id,gr_status,gr_mod,gr_mps,gr_auth_flood,gr_auth_see,gr_auth_reply,gr_auth_create
                FROM '.$GLOBALS['cb_db']->prefix.'users
                LEFT JOIN '.$GLOBALS['cb_db']->prefix.'groups ON gr_id=usr_class
                WHERE usr_id='.$this->userid);
            $ud = $GLOBALS['cb_db']->fetch_assoc($ud);
           
            $this->punished  = explode('|',$ud['usr_punished']);

            if ($this->punished[0] == 'ban' && $this->punished[1]+$this->punished[2]>time())
                trigger_error(lang(array('item' => 'error_banned','timeleft' => ($this->punished[1]+$this->punished[2]-time()))));
           
            $this->username  = $ud['usr_name'];
            $this->userclass = $ud['gr_id'];
            $this->nbmp      = $ud['usr_nbmp'];
            $this->mod       = array_filter(explode('/',$ud['usr_mod'].'/'.$ud['gr_mod']));
            $this->mpadv     = $ud['usr_mpadv'];
            $this->gr_status  = $ud['gr_status'];
            $this->gr_mps    = $ud['gr_mps'];
            $this->gr_auth_flood    = $ud['gr_auth_flood'];
            $this->gr_auth_see      = array_filter(explode('/',$ud['gr_auth_see']));
            $this->gr_auth_reply    = array_filter(explode('/',$ud['gr_auth_reply']));
            $this->gr_auth_create   = array_filter(explode('/',$ud['gr_auth_create']));
            $this->usr_pref_msgs    = $ud['usr_pref_msgs'];
            $this->usr_pref_topics  = $ud['usr_pref_topics'];
            $this->usr_pref_usrs    = $ud['usr_pref_usrs'];
            $this->usr_pref_res     = $ud['usr_pref_res'];
            $this->usr_pref_skin    = $ud['usr_pref_skin'];
            $this->usr_pref_lang    = $ud['usr_pref_lang'];
            $this->usr_pref_timezone= ($ud['usr_pref_timezone']!='')?$ud['usr_pref_timezone']:(date('Z')/3600);
            $this->usr_pref_ctsummer= ($ud['usr_pref_timezone']!='')?$ud['usr_pref_ctsummer']:0;
            $this->mark_as_read        = $ud['usr_markasread'];
        } else {
            $guests_auth = $GLOBALS['cb_db']->single_result('SELECT CONCAT(gr_auth_see,\'|\',gr_auth_create,\'|\',gr_auth_reply) FROM '.$GLOBALS['cb_db']->prefix.'groups WHERE gr_cond=-2');
            $guests_auth = explode('|',$guests_auth);
            $this->gr_auth_create = array_filter(explode('/',$guests_auth[1]));
            $this->gr_auth_see = array_filter(explode('/',$guests_auth[0]));
            $this->gr_auth_reply = array_filter(explode('/',$guests_auth[2]));
        }
        $this->time_loaded = time();
    }
}
?>
Besoin de volontaires pour les tests du support IPv6 dans la future version 0.8.5 !
Plus d'informations ici

Mon fil Twitter
Ishimaru Chiaki #3 17/12/2008 - 03h05

Groupe : Doc-rédacteur
Messages : 800
Enregistré le : 12/03/2008

Hors ligne Site Web

Maintenant, code PHP tout seul

<?php
/**
*    Connectix Boards 0.8, free interactive php bulletin boards.
*    Copyright (C) 2005-2007  Jasienski Martin.
*
*    This program is free software; you can redistribute it and/or modify
*    it under the terms of the GNU General Public License as published by
*    the Free Software Foundation; either version 3 of the License, or
*    (at your option) any later version.
*
*    This program is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*    GNU General Public License for more details.
*
*    You can find a copy of the GNU General Public License at 
*    <http://www.connectix-boards.org/license.txt>.
*/
class user {
    var 
$time_loaded;            // Timestamp du dernier chargement des données
    
var $time_to_wait 5;        // Temps (en minutes) à attendre pour un rechargement des données
    
var $logged;
    var 
$username;
    var 
$userid;
    var 
$userclass;
    var 
$nbmp;
    var 
$mod;
    var 
$punished;
    var 
$mpadv;
    var 
$gr_status;
    var 
$gr_mps;
    var 
$gr_auth_see;
    var 
$gr_auth_reply;
    var 
$gr_auth_create;
    var 
$gr_auth_flood;
    var 
$usr_pref_res=15;
    var 
$usr_pref_usrs=20;
    var 
$usr_pref_msgs=15;
    var 
$usr_pref_topics=20;
    var 
$usr_pref_skin;
    var 
$usr_pref_lang;
    var 
$usr_pref_timezone;
    var 
$usr_pref_ctsummer;
    var 
$connected_position;
    var 
$mark_as_read;

    
/* Crée un objet de gestion des membres. */
    
function user () {
        
$this->logged=false;

        
/* Gestion du login automatique par cookies */
        
if (isset($_COOKIE['cb_username']) && isset($_COOKIE['cb_password'])) {
            if (!
$this->isRegistered($_COOKIE['cb_username'],$_COOKIE['cb_password'],true,true)) {
                
setcookie('cb_username',false,1,$GLOBALS['cb_cfg']->config['cookie_path']);
                
setcookie('cb_password',false,1,$GLOBALS['cb_cfg']->config['cookie_path']);
            }
        }

        
/* Si on n'est pas loggé, on initialise les droits invité */
        
if (!$this->logged$this->setVars();
    }
    
/* Fonction à appeler à chaque nouvelle page, si l'objet a déja été instancié. */
    
function newPage () {
        if (
$this->logged)
            
$GLOBALS['cb_db']->query('UPDATE '.$GLOBALS['cb_db']->prefix.'users SET usr_lastaction='.time().' WHERE usr_id='.$this->userid);

        if (
$GLOBALS['cb_cfg']->config['last-cached'] > time() || time()-$this->time_to_wait*60 $this->time_loaded
            
$this->setVars();
    }
    
/* Fonction qui insère tout ce qu'il faut dans la table connected et users. */
    
function connected ($position) {
        
$this->connected_position $position;
        
$conid $this->logged $this->userid : (int)str_pad(substr(str_replace('.','',$_SERVER['REMOTE_ADDR']),0,11),10,'0') ;
        
$GLOBALS['cb_db']->query('REPLACE DELAYED INTO '.$GLOBALS['cb_db']->prefix.'connected(con_ip,con_id,con_timestamp,con_position) VALUES('.ip2long($_SERVER['REMOTE_ADDR']).','.$conid.','.time().',\''.$this->connected_position.'\')');
        if (
mt_rand(0,100) < 2$GLOBALS['cb_db']->query('DELETE FROM '.$GLOBALS['cb_db']->prefix.'connected WHERE con_timestamp<'.(time()-($GLOBALS['cb_cfg']->config['connectedlimit']*60)));
    }
    
/* La fonction isRegistered vérifie si l'utilisateur est bien enregistré dans la BDD et renvoit true si c'est le cas, false sinon. */
    
function isRegistered ($username,$password,$passSalted false,$remember false) {
        
$q $GLOBALS['cb_db']->query('SELECT
                usr_id,usr_punished,usr_password,usr_registered,usr_name,usr_lastaction,usr_markasread'
.(($GLOBALS['cb_cfg']->config['hash_type'] == 'ipb')?',usr_password_s':'').'
            FROM '
.$GLOBALS['cb_db']->prefix.'users
            WHERE usr_name=\''
.clean($username).'\'');

        if (
$ud $GLOBALS['cb_db']->fetch_assoc($q)) {
            
$pun=explode('|',$ud['usr_punished']);

            
// Conditions pour être connecté (password ok et compte validé)
            
$cond_pass false;
            if (
$passSalted$cond_pass = (cbHash($ud['usr_password'].$GLOBALS['cb_cfg']->config['pass_salt']) == $password);
            else 
$cond_pass = ($ud['usr_password'] == cbHash($password));
            
            
$cond_val = ($ud['usr_registered']=='TRUE');

            
// Vérification, à cause de la migration IPB
            
if (!($cond_pass && $cond_val) && $GLOBALS['cb_cfg']->config['hash_type'] == 'ipb' && !empty($ud['usr_password_s'])) {
                
// Si le password est bon, au sens IPB
                
if ($ud['usr_password'] == md5(md5($ud['usr_password_s']).cbHash($password))) {
                    
$cond_pass true;
                    
// Modification des infos utilisateur pour être compatible CB (IPB, c'est nul!)
                    
$GLOBALS['cb_db']->query('UPDATE '.$GLOBALS['cb_db']->prefix.'users SET usr_password=\''.cbHash($password).'\',usr_password_s=\'\' WHERE usr_id='.$ud['usr_id']);
                }
            }

            if (
$cond_val) {
                if (
$cond_pass) {
                    if (!(
$pun[0]=='ban' && $pun[1]+$pun[2]>time())) {
                        
$this->logged true;
                        
$this->userid $ud['usr_id'];

                        
$conid=str_pad(substr(str_replace('.','',$_SERVER['REMOTE_ADDR']),0,11),10,'0');
                        
$GLOBALS['cb_db']->query('DELETE FROM '.$GLOBALS['cb_db']->prefix.'connected WHERE con_id='.(int)$conid);

                        
$GLOBALS['cb_db']->query('UPDATE '.$GLOBALS['cb_db']->prefix.'users SET usr_lastconnect='.time().',usr_lastaction='.time().' WHERE usr_id='.$this->userid);

                        if (
$remember) {
                            
$timestampexpire time() + 365*24*3600;
                            
setcookie('cb_username',$ud['usr_name'],$timestampexpire,$GLOBALS['cb_cfg']->config['cookie_path']);
                            
setcookie('cb_password',cbHash($ud['usr_password'].$GLOBALS['cb_cfg']->config['pass_salt']),$timestampexpire,$GLOBALS['cb_cfg']->config['cookie_path']);
                        }
                        
                        if (
$GLOBALS['cb_cfg']->config['readornot_sessions'] == 'yes') {
                            
$msg_mar $GLOBALS['cb_db']->single_result('SELECT MAX(msg_id) FROM '.$GLOBALS['cb_db']->prefix.'messages WHERE msg_timestamp <='.$ud['usr_lastaction']);
                            if (
is_numeric($msg_mar))
                                
$GLOBALS['cb_db']->query('UPDATE '.$GLOBALS['cb_db']->prefix.'users SET usr_markasread='.(int)$msg_mar.' WHERE usr_id='.$ud['usr_id']);
                        }
                        
                        
$this->setVars();
                        return 
true;
                    } elseif (
$GLOBALS['cb_tpl']->lang_loaded('errors.lang')) trigger_error(str_replace('timeleft',getTimeFormat($pun[1]+$pun[2]-time()),lang('error_banned')),E_USER_WARNING);
                } elseif (
$GLOBALS['cb_tpl']->lang_loaded('errors.lang')) trigger_error(lang('error_wrongpassword'),E_USER_WARNING);
            } elseif (
$GLOBALS['cb_tpl']->lang_loaded('errors.lang')) trigger_error(lang('error_validateaccount'),E_USER_WARNING);
        } elseif (
$GLOBALS['cb_tpl']->lang_loaded('errors.lang')) trigger_error(lang('error_notregistered'),E_USER_WARNING);
        return 
false;
    }
    
/* Gestion du formulaire de connexion rapide */
    
function fastConnect() {
        if (!
$this->logged && isset($_POST['fast_connect'])) {
            if (!empty(
$_POST['fast_login']) && !empty($_POST['fast_password'])) {
                if (
$this->isRegistered($_POST['fast_login'], $_POST['fast_password'], false, (isset($_POST['fast_remember']) && $_POST['fast_remember']=='on'))) {
                    if (isset(
$_SERVER['HTTP_REFERER']) && parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) == $_SERVER['HTTP_HOST'] && strpos($_SERVER['HTTP_REFERER'],'login') === false)  {
                        
header('Location: '.$_SERVER['HTTP_REFERER']);
                        exit();
                    } else 
redirect();
                }
            } else 
trigger_error(lang('error_fillfields'),E_USER_WARNING);
        }
    }
    
/* Fonction qui spécifie si un utilisateur a les droits de modération sur le groupe de topics demandé. */
    
function isMod ($tg) {
        if (
$this->logged!==true) return false;
        if (
$this->isAdmin()) return true;
        elseif (
$this->isModerator()) return in_array($tg,$this->mod);
        else return 
false;
    }
    
/* Fonction qui détermine si l'utilisateur est administrateur ou pas. */
    
function isAdmin () {
        if (
$this->logged!==true) return false;
        return (
$this->gr_status == 2);
    }
    
/* Fonction qui détermine si l'utilisateur est modérateur ou pas (ne tient pas compte des groupes de sujets modérés). */
    
function isModerator () {
        if (
$this->logged!==true) return false;
        return (
$this->gr_status >= 1);
    }
    
/* Fonction qui détermine les droits de l'utilisateur -> renvoie true si l'utilisateur possède le droit considéré. */
    
function getAuth ($auth_type,$tg_id) {
        if (
in_array($tg_id,$this->gr_auth_see)) return false;
        if (
$auth_type=='see') return true;

        if (
$this->logged !== true && $GLOBALS['cb_cfg']->config['postguest'] != 'yes') return false;

        if (isset(
$this->punished[2]) && $this->punished[0]=='readonly' && ($this->punished[1]+$this->punished[2])>time()) return false;

        if (
in_array($tg_id,$this->gr_auth_reply)) return false;
        if (
$auth_type=='reply') return true;

        if (
in_array($tg_id,$this->gr_auth_create)) return false;

        return 
true;
    }
    
/* Fonction qui détermine si l'utilisateur a le droit de flooder ou non. */
    
function canFlood() {
        if (
$this->logged!==true) return false;
        if (
$this->gr_auth_flood==1) return true;
        return 
false;
    }
    
/* Fonction qui renvoie la langue à utiliser. */
    
function getPreferredLang () {
        if (
$this->logged && !empty($this->usr_pref_lang) && isLang($this->usr_pref_lang)) return $this->usr_pref_lang;
        return 
$GLOBALS['cb_cfg']->config['defaultlanguage'];
    }
    
/* Fonction qui renvoie la skin à utiliser. */
    
function getPreferredSkin () {
        if (
$this->logged && !empty($this->usr_pref_skin) && isSkin($this->usr_pref_skin)) return $this->usr_pref_skin;
        return 
$GLOBALS['cb_cfg']->config['defaultstyle'];
    }
    
/* Fonction qui initialise toutes les variables nécéssaires. */
    
function setVars () {
        if (
$this->logged) {
            
$ud $GLOBALS['cb_db']->query('SELECT
                    usr_name,usr_nbmp,usr_mod,usr_mpadv,usr_punished,usr_markasread,
                    usr_pref_msgs,usr_pref_res,usr_pref_topics,usr_pref_usrs,usr_pref_skin,usr_pref_lang,usr_pref_timezone,usr_pref_ctsummer,
                    gr_id,gr_status,gr_mod,gr_mps,gr_auth_flood,gr_auth_see,gr_auth_reply,gr_auth_create
                FROM '
.$GLOBALS['cb_db']->prefix.'users
                LEFT JOIN '
.$GLOBALS['cb_db']->prefix.'groups ON gr_id=usr_class
                WHERE usr_id='
.$this->userid);
            
$ud $GLOBALS['cb_db']->fetch_assoc($ud);
            
            
$this->punished  explode('|',$ud['usr_punished']);

            if (
$this->punished[0] == 'ban' && $this->punished[1]+$this->punished[2]>time())
                
trigger_error(lang(array('item' => 'error_banned','timeleft' => ($this->punished[1]+$this->punished[2]-time()))));
            
            
$this->username  $ud['usr_name'];
            
$this->userclass $ud['gr_id'];
            
$this->nbmp      $ud['usr_nbmp'

Ce message a été édité par Ishimaru Chiaki le 17/12/2008 à 03h09.
Besoin de volontaires pour les tests du support IPv6 dans la future version 0.8.5 !
Plus d'informations ici

Mon fil Twitter
Ishimaru Chiaki #4 17/12/2008 - 03h10

Groupe : Doc-rédacteur
Messages : 800
Enregistré le : 12/03/2008

Hors ligne Site Web

Résultat, il y a un bug avec la balise PHP
Besoin de volontaires pour les tests du support IPv6 dans la future version 0.8.5 !
Plus d'informations ici

Mon fil Twitter
finalbob #5 17/12/2008 - 07h06

Groupe : Modérateur
Messages : 718
Enregistré le : 08/03/2007

Hors ligne Site Web

EDIT: nan rien j'avais pas encore lu ton post dans 'bug'...
Ce message a été édité par finalbob le 17/12/2008 à 07h10.
youplaboum !
Posted Image
tout mes MODs pour cb

 >  Réponse rapide

Composez votre message

Connectix Boards > Zone de tests > Zone de tests > Test de spoilers et balises PHP

 >  Informations du forum

1 personne(s) présente(s) durant une période de 15 minutes (0 membre(s) et 1 invité(s)).