<?php

# ----------------------------------------------------------------------------
# AUTEUR : BIOT CYRILLE <biot.cyrille@wanadoo.fr>
# DATE : 24 JANVIER 2001
#
#  FUNCTION liste($a,$b,$c)
#  Fonction permettant de générer le code HTML de l'objet HTML LISTE/MENU
#  (balise <SELECT>) ainsi que de ses options associées :
#        - size : déterminera s'il s'agit d'une LISTE ou d'un MENU,
#        - multiple/unique : déterminera si le choix peut se porter sur une ou
#                            plusieurs entrées,
#  en fonction d'un fichier source externe.
#
# Les paramètres de la fonction créée sont les suivants :
#
#  liste($a,$b,$c) avec
#   --- $a : nom du fichier appelé -- source
#                 (sans extension, même niveau d'arborescence)
#   --- $b : option de la liste :
#           - 0 : LISTE, Hauteur = nombre d'entrées du fichier source
#           - 1 : MENU
#           - n : LISTE, Hauteur = n
#   --- $c : option nombre d'éléments sélectionnés
#           - 0 : choix unique
#           - 1 : choix multiple
#
#   Le fichier source doit se situer au même niveau d'arborescence que le
#   script. Par défaut l'extension associée est csv. Elle est facilement
#   modifiable dans ce script.
#   Les données de ce fichier auront la structure suivante :
#        ENTREE_ECRAN:VALEUR:*
#        ENTREE_ECRAN:VALEUR
#
#        Le premier paramètre : texte à afficher dans la liste
#        Le second paramètre : valeur de l'entrée (= variable)
#        Le troisième paramètre est optionnel. Si il est présent (astérix *)
#        il s'agira alors de l'entrée par défaut de la liste ou du menu.
#        ...
#        exemple : pour un fichier source linguistique :
#        Allemand:de
#        Français:fr
#        Anglais:en:*
#        ...
#   Le délimitateur par défaut est les deux points ":".
#   Modifiable dans le script, si besoin.
#



#
# ------------------------------------------------------
#  FONCTION LISTE -- CODE SOURCE
#

  
function liste($a,$b,$c) {

  
# Spécifiez ici l'extension du fichier associé
  
$ext = "csv";

  
# Spécifiez ici le séparateur de champ
  
$del = ":";

  
$file = $a.".".$ext;     // Fichier source
  
$fp = fopen ("$file","r");        // Ouverture fichier

  #
  # --------------------------------
  # STYLE MENU  - taille automatique
  #
  # (Si le paramètre $b de la fonction est de 0)

  
if ($b == 0) {
      
$nbligne = 0 ;                 // Initialisation variable
      
rewind($fp);                   // Positionnement début fichier
      
while (!feof($fp)) {           // On compte
          
$buffer = fgets($fp,4096); // ...
          
$nbligne ++ ;  }           // les lignes

  #
  # --------------------------------
  # STYLE LISTE -- TAILLE DEFINIE
  #
  # (si paramètre associé ($b) est de 1 alors on aura une liste
  #  si autre valeur (n) : Menu de la taille de cette valeur)

      
} else {
      
$nbligne = $b ;
      }

  
#
  # --------------------------------
  # CHOIX MULTIPLES -- UNIQUE
  #
  # Si LISTE, le choix est forcément unique
  
if ($b == 1) {$c = "' " ;}

  
# Si MENU, alors on laisse le choix
  
if ($c == 0) {
       
# Choix unique
       
$c = "' ";
       } else {
       
# Choix multiple : on passe les variables dans un tableau
       # en vue d'une récupération postérieure dans un script PHP
       
$c = "[]' multiple" ;
       }

  
#   
  # --------------------------------
  # CODE HTML GENERE
  #
  # Définition HTML de la balise Liste / Menu
  
echo "<select name='$a$c size='$nbligne'>";

  
# Repositionnement début de fichier
  
rewind($fp);

  
# Lecture fichier de données
  
$fp = fopen ("$file", "r");

  
# Chargement des données du fichier associé
  
while ($data = fgetcsv ($fp, 1000,$del))
        {
        echo
"<option value='$data[1]'";
        if (!empty(
$data[2]))         // Entrée par défaut ?
              
{echo "selected >";     // oui
              
} else {
              echo
">";}              // Non
        
echo $data[0]."</option>";
        }

   
# FERMETURE FICHIER
   
fclose($fp);

   
# Fermeture balise HTML SELECT
   
echo "</select>";

   }
// fin de la fonction


  #
  # --------------------------------
  # EXEMPLE
  #
  # Pour que cette fonction soit opérationnelle
  # il suffit de l'appeler.
  #
  # test avec un fichier de données lang.csv