"; $_div = ""; // retourne vrai si la rubrique ou une de ses sous-rubriques contient un article, faux sinon. function contient_article($id_rubrique, $connexion) { $res_art = execRequete("SELECT * FROM spip_articles WHERE id_rubrique = ".$id_rubrique." AND statut = 'publie'", $connexion); // il y a des articles -> ok if( mysql_num_rows($res_art) > 0 ) return true; // il n'y a pas d'article -> test de sous-rubriques pouvant contenir des articles else { $res_rub = execRequete("SELECT * FROM spip_rubriques WHERE id_parent = ".$id_rubrique, $connexion); // il y a des sous-rubriques if( mysql_num_rows($res_rub) > 0 ) { $contient = false; // test de la présence d'articles dans les sous-rubriques for ( $i=0; $i < mysql_num_rows($res_rub); $i++ ) { $contient = $contient || contient_article(mysql_result($res_rub, $i, "id_rubrique"), $connexion); if( $contient ) break; } return $contient; } // il n'y a pas de sous-rubrique else return false; } } // affiche un tableau contenant la liste des rubriques de la rubrique dont le N° est passé en paramètre function affiche_rubriques($id_rubrique) { echo '
'; $cpt_rub = 0; $connexion = Connexion (SERVEUR,NOMMH,PASSEMH,BASESPIP); // liste des rubriques $res_rub = execRequete("Select * From spip_rubriques WHERE id_parent=".$id_rubrique." order by titre", $connexion); // Affichage des Rubriques : une rubrique qui ne contient ni brèves, ni article, // ni sous-rubrique elle-même contenant un article n'est pas affichée. for($i=0; $i affichage d'un lien vers la rubrique $breves = false; $res_breves = execRequete("SELECT * FROM spip_breves WHERE id_rubrique = ".mysql_result($res_rub,$i,"id_rubrique")." AND statut='publie'", $connexion); if( mysql_num_rows($res_breves) > 0 ) $breves = true; // si la rubrique contient des articles -> on l'affiche if( $breves || contient_article(mysql_result($res_rub, $i, "id_rubrique"), $connexion) ) { // si la rubrique contient des brèves, le lien pointera sur la rubrique // si elle contient des sous-rubriques avec articles, le lien pointera sur la rubrique // si elle ne contient pas de sous-rubrique et plusieurs articles, le lien pointera vers la rubrique // si elle ne contient pas de sous-rubrique et 1 seul article, le lien pointera vers l'article // compteur pair/impair pour créer une nouvelle ligne if( $cpt_rub%2 == 0 ) echo ''; echo ''; // compteur pair/impair pour aller à la ligne if( $cpt_rub%2 != 0 ) echo ''; $cpt_rub++; } // sinon on ne l'affiche pas } // nombre impair de rubriques -> on complète le tableau if( $cpt_rub%2 != 0 ) echo ''; echo '
'; echo '
'; // un lien pointant vers la sous-rubrique est affiché si elle comporte plusieurs // articles ou des sous-rubriques "valides" comportant elles-même des articles. $lien_vers_rub = $breves; // test de l'existence de sous-rubriques et de leur "validité" (contiennent des articles) if( ! $lien_vers_rub ) { $ss_rub_valides = false; $res_ss_rub = execRequete("Select * From spip_rubriques WHERE id_parent=".mysql_result($res_rub,$i,"id_rubrique"), $connexion); for ($j=0; $j < mysql_num_rows($res_ss_rub); $j++) { if( contient_article(mysql_result($res_ss_rub, $j, "id_rubrique"), $connexion) ) { $ss_rub_valides = true; break; } } } // test du nombre d'articles dans la sous-rubrique if( ! $lien_vers_rub ) { $plusieurs_articles = false; $res_art = execRequete("Select * From spip_articles WHERE id_rubrique=".mysql_result($res_rub,$i,"id_rubrique")." AND statut = 'publie'", $connexion); if( mysql_num_rows($res_art) > 1 ) $plusieurs_articles = true; } // test affichage vers rubrique ou vers article $lien_vers_rub = ( $ss_rub_valides || $plusieurs_articles || $breves ); // Affichage du lien vers la rubrique if( $lien_vers_rub ) { echo '
'.mysql_result($res_rub,$i,"titre").'
'; echo '

'.mysql_result($res_rub,$i,"descriptif").'

'; } // Affichage du lien vers l'article unique contenu dans la sous-arborescence de la rubrique else { echo '
'.mysql_result($res_rub,$i,"titre").'
'; echo '

'.mysql_result($res_rub,$i,"descriptif").'

'; } echo '
'; echo '
 
'; // Affichage d'une ligne de séparation horizontale si l'affichage // d'un article, d'une brève ou d'un site est prévu par la suite. if( $cpt_rub != 0 ) { $res_art = execRequete("SELECT * FROM spip_articles WHERE id_rubrique=".$id_rubrique." AND statut = 'publie'", $connexion); $res_breve = execRequete("SELECT * FROM spip_breves WHERE id_rubrique=".$id_rubrique." AND statut = 'publie'", $connexion); $res_site = execRequete("SELECT * FROM spip_syndic WHERE id_rubrique=".$id_rubrique." AND statut = 'publie'", $connexion); if( ( mysql_num_rows($res_art) != 0 ) || ( mysql_num_rows($res_breves) != 0 ) || ( mysql_num_rows($res_site) != 0 ) ) echo '
'; } } // affiche la hiérarchie du site à partir d'un article donné function hierarchie_article($id_article) { $connexion = Connexion(SERVEUR, NOMMH, PASSEMH, BASESPIP); $resultat = execRequete("SELECT id_rubrique FROM spip_articles WHERE id_article=$id_article;", $connexion); hierarchie_rubrique(mysql_result($resultat,0,"id_rubrique")); } // affiche la hiérarchie du site à partir d'une rubrique donnée // [pending] a virer car utilise spip, pour le moment on ne fait que la vider... function hierarchie_rubrique($id_rub){ } // fonction définissant le format de pied de page pour le site de l'ASEval utilisant SPIP function pied_de_page() { //global $urlBase; global $racine; global $menuItems; $urlBase = $racine; ?>
'; $retry.= '

Vous devez entrer un nom d\'utilisateur valide et un mot de passe correct pour accéder à cette ressource.'; $retry.= '

De plus cette section peut requérir un droit d\'utilisation spécifique'; $retry.= '

Vous pouvez Réessayer ou '; $retry.= 'Annuler.

'; echo $retry; pied_de_page(); exit(); } // Authentification et test du droit nécessaire à l'accès du répertoire. // Optionnel : un id_rubrique peut être passé en paramètre afin d'afficher la hiérarchie vers la page courante. function auth($droit=false, $id_rubrique=-1) { global $PHP_AUTH_USER; global $PHP_AUTH_PW; $erreur = false; if( !isset($PHP_AUTH_USER) ) my_ask_php_auth($id_rubrique); else { $connexion = Connexion(SERVEUR, NOMMH, PASSEMH, BASEMH); $resultat = execRequete("Select * From personne WHERE login='".$PHP_AUTH_USER."'", $connexion); if( mysql_num_rows($resultat)>0 ) { if( mysql_result($resultat,0,"password") == md5($PHP_AUTH_PW) ) { if( mysql_result($resultat,0,"admin") == 1 ) { $erreur = false; // tout est permis à un administrateur } else { // un seul droit a été passé en paramètre if( ! is_array($droit) ) { if( ( $droit ) && ( mysql_result($resultat,0,$droit) != 1 ) ) $erreur = true; // pas le droit } // un tableau de droits a été passé en paramètre else { // si l'utilisateur ne possède pas ce droit if( mysql_result($resultat,0,$droit[0]) != 1 ) { // on dépile le droit qui vient d'être testé array_shift($droit); // on teste le droit suivant $erreur = ! auth($droit,$id_rubrique); } } } } else $erreur = true; // erreur password } else $erreur = true; // erreur login } if( $erreur ) // il y a une erreur { $PHP_AUTH_USER = ''; $PHP_AUTH_PW = ''; my_ask_php_auth($id_rubrique); // on retente l'authentification return false; } else return true; } /* function auth($droit=false; $id_rubrique=-1) { global $PHP_AUTH_USER; global $PHP_AUTH_PW; global $urlBase; $retry = '
'; $retry.= '

Vous devez entrer un nom d\'utilisateur valide et un mot de passe correct pour accéder à cette ressource.'; $retry.= '

De plus cette section peut requérir un droit d\'utilisation spécifique'; $retry.= '

Vous pouvez Réessayer ou '; $retry.= 'Annuler.

'; $erreur = false; if( !isset($PHP_AUTH_USER) ) ask_php_auth($retry, $id_rubrique); else { $connexion = Connexion(SERVEUR, NOMMH, PASSEMH, BASEMH); $resultat = execRequete("Select * From personne WHERE login='".$PHP_AUTH_USER."'", $connexion); if( mysql_num_rows($resultat)>0 ) { if( mysql_result($resultat,0,"password") == md5($PHP_AUTH_PW) ) { if( mysql_result($resultat,0,"admin") == 1 ) { $erreur = false; // tout est permis à un administrateur } else { if( ( $droit ) && ( mysql_result($resultat,0,$droit) != 1 ) ) $erreur = true; // pas le droit // else : pas d'erreur, l'utilisateur a le droit d'accéder à la page } } else $erreur = true; // erreur password } else $erreur = true; // erreur login } if( $erreur ) // il y a une erreur { $PHP_AUTH_USER = ''; $PHP_AUTH_PW = ''; ask_php_auth($retry, $id_rubrique); // on retente l'authentification return false; } else return true; } */ /* function test_droit($login, $droit) { $res = mysql_query("SELECT $droit FROM personne WHERE login='$login'"); return (mysql_result($res,0,$droit) == 1); } function test_admin($login) { $res = mysql_query("SELECT admin FROM personne WHERE login='$login'"); return (mysql_result($res,0,"admin") == 1); } */ function test_droit($login, $droit) { // les droits sont des booléens : 0 ou 1 return test_champ("personne", $droit, 1, false, "login", $login, true); } function test_admin($login) { // être administrateur dépend du droit "admin" return test_droit($login, "admin"); } function count_nb_admins($connexion) { $resultat = mysql_query("SELECT COUNT(id_personne) FROM personne WHERE admin=1", $connexion); return mysql_result($resultat,0,"COUNT(id_personne)"); } function dernier_membre_groupe($id_gr, $connexion) { $resultat = execRequete("SELECT * FROM estdansgroupe WHERE id_gr=".$id_gr, $connexion); return ( mysql_num_rows($resultat) == 1 ); } function groupe_utilise($id_gr, $connexion) { $resultat = execRequete("SELECT * FROM experience WHERE id_gr=".$id_gr, $connexion); return ( mysql_num_rows($resultat) > 0 ); } // crée un login inutilisé à partir du nom et du prénom donnés. function login_auto($nom, $prenom, $connexion) { // test login = prénom utilisé ou pas if( ! login_utilise($prenom, $connexion) ) return $prenom; // test login = nom utilisé ou pas if( ! login_utilise($nom, $connexion) ) return $nom; // test login = prénom concaténé avec les lettres du nom utilisé ou pas $login = $prenom; for($i=0; $i<=strlen($nom); $i++) { $login = $prenom.substr($nom,0,$i); if( ! login_utilise($login, $connexion) ) { return $login; } } // calcul du login de la forme prenom|nom|$i $i=2; $login = $login.$i; while( login_utilise($login, $connexion) ) { ereg("([a-zA-Z]*)[0-9]+", $login, $regs); $i++; $login = $regs[1].$i; } return $login; } // retourne vrai si le login à tester est déjà utilisé dans la table personne // faux s'il n'est utilisé nulle part. function login_utilise($login, $connexion) { // test du login dans la table personne mysql_select_db(BASEMH, $connexion); $resultat = mysql_query("SELECT login FROM personne WHERE login='$login'", $connexion); if( mysql_num_rows($resultat) != 0 ) // login utilisé dans la table personne return true; // login non utilisé return false; } // Retourne true si $type_MIME fait partie du tableau de types MIME acceptés function MIME_OK($type_MIME, $tab_MIME=false) { // initialisation du tableau des types acceptés if( ! $tab_MIME ) $tab_MIME = array("rar" => "application/x-rar-compressed", "zip" => "application/x-zip-compressed", "tar.gz" => "application/x-gzip-compressed", "tar.bz2" => "application/octet-stream" ); foreach( $tab_MIME as $cle => $val) { if( $type_MIME == $val ) return true; // le type MIME est reconnu } return false; } // Crée un champ de type INPUT (text, submit, ....) // $js : code jvascript à insérer dans la balise // $js = 'onclick="javascript:swap();"'; function champINPUT($pType, $pNom, $pVal, $pTaille=-1, $pTailleMax=-1, $js="") { $s = "$val"; } // Crée un menu déroulant numérique de $Min à $Max initialisé à $Val // $js sont les inscriptions javascript à intégrer au SELECT // $js = 'onchange="javascript:swap();"'; function champSELECT_Num($Nom,$Min,$Max,$Val,$js="") { $str = ""; else return ""; } /* Affiche un menu déroulant et le remplit grâce à une requête, en le remplissant ainsi : - les valeurs internes des options du menu sont les valeurs du champ $champValue - les valeurs affichées des options du menu sont les valeurs du champ $champDisplay Optionnel : - $selVal est la valeur de l'élément de $champValue à sélectionner - $js contient du code javscript à insérer - $size est le nombre de lignes pour la taille du combobox - $multiple vaut true pour indiquer que plusieurs éléments peuvent être sélectionnés */ function champSELECT_Requete($nomCombo, $requete, $champValue, $champDisplay, $selVal=-1, $js=false, $size=1, $multiple=false) { $result = mysql_query($requete) or die("Invalid query function champSELECT_Requete()"); $str=""; // si on accepte plusieurs valeurs if( $multiple ) { // test de la présence des [] à la fin du nom (obligatoires pour récupérer toutes les valeurs sélectionnées) if( ereg("[a-zA-Z0-9]*\[\]", $nomCombo) ) $str = "'; return $str; } // Retourne un combobox initialisé par un tableau de valeurs et un tableau de textes associés function champSELECT_Value($nom, $value, $text, $selVal=false, $js=false) { $str = "