erreur, sur fo il y a surcharge de la fonction suppDate:

sur fo :

// on supprime les dates dont on ne se sert plus
function suppDate($db,$tabdel){
	if (count($tabdel)==0) return;
	$str = implode ("," , $tabdel);
	return pg_exec($db,"delete from dates where id_date in (".$str.");");
}


//supprime toutes les dates d'un groupe
function suppDate($db,$groupe){
	$resdate=pg_exec($db,"select dates from groupe where id_groupe=$groupe;");
	$dates=pg_fetch_array($resdate,0);
	$tabdates=explode(",","$dates[0]");
	if ($tabdates[0]!='')	suppDate($db,$tabdates);
	pg_exec($db,"update groupe set dates='' where id_groupe=$groupe");	
}

sur bo :

//supprime toutes les dates d'un groupe
function suppDatesGroupe($db,$groupe){
  $resdate=pg_exec($db,"select dates from groupe where id_groupe=$groupe;");
  $dates=pg_fetch_array($resdate,0);
  $tabdates=explode(",","$dates[0]");
  if ($tabdates[0]!='')	suppDate($db,$tabdates);
  pg_exec($db,"update groupe set dates='' where id_groupe=$groupe");	
}


---------------------------------
/*-----------------------------------------------------------*/
//          FONCTIONS RELATIVES AUX PARCOURS (FRONT)
/*-----------------------------------------------------------*/
// fonction qui gre l'avancement du stagiaire ds le parcours
// Donnes reues : $liste_avance ==> liste des etapes obligatoire (vide si etape libre)
//                              $numexo ==> N de qcm ou exotlc ou ...
//                              $type_etape ==> F (forum) R (ressource) ...
function gestion_avancement($obligation,$numexo,$type_etape,$db,$etape_reelle){
    global $s_numparc,$s_numcal,$s_numstag,$s_groupe,$numetape;
    global $s_liste_avance;
     //print("<script>alert('obligation=".$obligation."')</script>");
    if($obligation=='o'){
        //recup des etape obligatoire
        $stock=explode(":",$s_liste_avance);
        //recup de l'avancement du parcours en base de donnes.
        $resavance=pg_exec($db,"select avancement from gestionparcours
        where gp_num_parcours='$s_numparc' and gp_num_groupe='$s_groupe' and gp_num_user='$s_numstag' and num_cal='$s_numcal';");
        $rowavance=pg_fetch_row($resavance,0);
        $val_avance=$rowavance[0];
        //echo "val_avance=$val_avance et numetape=$numetape<br>";
        switch($type_etape){

            case 'F'    :
            case 'P'    :
            case 'R'    :
            case 'S'    :       // modif du 22/10/03 (Pb avancement
                                    //if($numetape>=$val_avance){
                                    if($numetape>$val_avance){

                                    //balayage de stock
                                    reset($stock);
                                    $maj=0;
                                    while(list($cle,$val)=each($stock)){
                                        if($cle>0 && $val==0){
                                            //derniere etape
                                            $lastval=max($stock)+1;
                                            //echo "lastval=$lastval<br>";
                                            $maj=pg_exec($db,"update gestionparcours set avancement='$lastval'
                                            where  gp_num_parcours='$s_numparc' and gp_num_groupe='$s_groupe' and gp_num_user='$s_numstag' and num_cal='$s_numcal';");
                                        }
                                        else
                                            if($val>$val_avance){
                                                //echo "val=$val et val_avance=$val_avance<br>";
                                                $maj=pg_exec($db,"update gestionparcours set avancement='$val'
                                                where  gp_num_parcours='$s_numparc' and gp_num_groupe='$s_groupe' and gp_num_user='$s_numstag' and num_cal='$s_numcal';");
                                                break;
                                            }
                                    }
                                    //if($maj==0){
                                    //$maj=pg_exec($db,"update gestionparcours set avancement='$val' where  gp_num_parcours='$s_numparc' and gp_num_groupe='$s_groupe' and gp_num_user='$s_numstag';");
                                }
            break;
            case 'B'    :
            case 'C'    :
            case 'Q'    :
            case 'A'    :
            //case 'E'    :    //balayage de stock_avance
                                reset($stock);
                                while(list($cle,$val)=each($stock)){
                                    //echo "cle=$cle et val=$val<br>";
                                    if($cle>0 && $val==0){
                                        //derniere etape
                                        $lastval=max($stock)+1;
                                        $maj=pg_exec($db,"update gestionparcours set avancement='$lastval'
                                        where  gp_num_parcours='$s_numparc' and gp_num_groupe='$s_groupe' and gp_num_user='$s_numstag' and num_cal='$s_numcal';");
                                    }
	                            else {
                                         //echo "val=$val et val_avance=$val_avance<br>";
    	                                if($val>$val_avance){

                                            $maj=pg_exec($db,"update gestionparcours set avancement='$val'
                                            where  gp_num_parcours='$s_numparc' and gp_num_groupe='$s_groupe' and gp_num_user='$s_numstag' and num_cal='$s_numcal';");
                                            break;
    	                                }
                                     }
                                }
            break;
            case 'E' :  if($numetape>$val_avance){
                                    //balayage de stock
                                    reset($stock);
                                    $maj=0;
                                    while(list($cle,$val)=each($stock)){
                                        if($cle>0 && $val==0){
                                            //derniere etape
                                            $lastval=max($stock)+1;
                                            //echo "lastval=$lastval<br>";
                                            $maj=pg_exec($db,"update gestionparcours set avancement='$lastval'
                                            where  gp_num_parcours='$s_numparc' and gp_num_groupe='$s_groupe' and gp_num_user='$s_numstag' and num_cal='$s_numcal';");
                                        }
                                        else
                                            if($val>$val_avance){
                                                //echo "val=$val et val_avance=$val_avance<br>";
                                                $maj=pg_exec($db,"update gestionparcours set avancement='$val'
                                                where  gp_num_parcours='$s_numparc' and gp_num_groupe='$s_groupe' and gp_num_user='$s_numstag' and num_cal='$s_numcal';");
                                                break;
                                            }
                                    }
                                    //if($maj==0){
                                    //$maj=pg_exec($db,"update gestionparcours set avancement='$val' where  gp_num_parcours='$s_numparc' and gp_num_groupe='$s_groupe' and gp_num_user='$s_numstag';");
                                }
            break;

        }


    }
    else {
        //echo "cocucou<br>";
        //gestion des etapes libres
        switch($type_etape){
            case 'F'    :
            case 'P'    :
            case 'R'    :
            case 'S'    : $texte=$type_etape.$etape_reelle;
            break;

            case 'Q'    :
            case 'A'    :
            case 'E'    :
            case 'B'    :
            case 'C'    : $texte=$type_etape.$numexo;
            break;
        }
        //recup des etapes libres dans gestionparcours
        //debug
        //echo "num_parc=$num_parc et groupe=$groupe et rowstag[0]=$rowstag[0] et num_cal=$num_cal<br>";
        $reslibre=pg_exec($db,"select etape_libre from gestionparcours
        where gp_num_parcours='$s_numparc' and gp_num_groupe='$s_groupe' and gp_num_user='$s_numstag' and num_cal='$s_numcal';");
        $rowlibre=pg_fetch_row($reslibre,0);
        $stock_libre=explode(",",$rowlibre[0]);
        //on verifie si l'etape est deja en base
        $existe=0;
        while(list($cle,$val)=each($stock_libre)){
            if($val==$texte){
                //debug
                //echo "val=$val et val_etape=$val_etape et numetape=$numetape<br>";
                $existe=1;
                break;
            }
        }
        if($existe==0){
            $stock_libre[]=$texte;
            $liste_libre=implode(",",$stock_libre);
            $maj=pg_exec($db,"update gestionparcours set etape_libre='$liste_libre'
            where gp_num_parcours='$s_numparc' and gp_num_user='$s_numstag' and num_cal='$s_numcal';");
        }
    }
}


--------------------------------------------


/******************* FONCTIONS DE SESSION *************************/

function get_ip()
{
  //On recupere l'IP dans le header
  $SimpleIP = (isset($REMOTE_ADDR) ? $REMOTE_ADDR : getenv("REMOTE_ADDR"));

  $TrueIP = (isset($HTTP_X_FORWARDED_FOR) ? $HTTP_X_FORWARDED_FOR : getenv("HTTP_X_FORWARDED_FOR"));
  if ($TrueIP == "") $TrueIP = (isset($HTTP_X_FORWARDED) ? $HTTP_X_FORWARDED : getenv("HTTP_X_FORWARDED"));
  if ($TrueIP == "") $TrueIP = (isset($HTTP_FORWARDED_FOR) ? $HTTP_FORWARDED_FOR : getenv("HTTP_FORWARDED_FOR"));
  if ($TrueIP == "") $TrueIP = (isset($HTTP_FORWARDED) ? $HTTP_FORWARDED : getenv("HTTP_FORWARDED"));
  $GetProxy = ($TrueIP == "" ? "0":"1");

  if ($GetProxy == "0")
    {
      $TrueIP = (isset($HTTP_VIA) ? $HTTP_VIA : getenv("HTTP_VIA"));
      if ($TrueIP == "") $TrueIP = (isset($HTTP_X_COMING_FROM) ? $HTTP_X_COMING_FROM : getenv("HTTP_X_COMING_FROM"));
      if ($TrueIP == "") $TrueIP = (isset($HTTP_COMING_FROM) ? $HTTP_COMING_FROM : getenv("HTTP_COMING_FROM"));
      if ($TrueIP != "") $GetProxy = "2";
    };

  if ($TrueIP == $SimpleIP) $GetProxy = "0";

  //Recupere la veritable IP si trouvee, sinon  Return the true IP if found, else the proxy IP with a 'p' at the begining
  switch ($GetProxy)
    {
    case '0':
      // Veritable IP sans le proxy
      $IP = $SimpleIP;
      break;
    case '1':
      $b = ereg ("^([0-9]{1,3}\.){3,3}[0-9]{1,3}", $TrueIP, $IP_array);
      if ($b && (count($IP_array)>0))
	{
	  // Veritable IP derriere le proxy
	  $IP = $IP_array[0];
	}
      else
	{
	  // Proxy IP
	  $IP = "p".$SimpleIP;
	};
      break;
    case '2':
      // Proxy IP
      $IP = "p".$SimpleIP;
    };

  return $IP;
}

--------------------------------------------

//**********************************************************
//Verifie le login et le mot de passe de l'utilisateur dans 
//la base donnees
//Si valider retourne 1
//Sinon retourne 0
//**********************************************************
function verifier_user($user,$pass)
{
  global $server;
  global $nombase;

  $db=pg_connect("$server","","","","$nombasecher");
  if(!$db) die("Erreur de connection &agrave; la base de donn&eacute;es");

  $result=pg_exec($db,"select * from UTILISATEURS where login='$user' and password='$pass';");

  if(pg_numrows($result)==1) return(1);
  else return(0);
}

--------------------------------------------


//**********************************************************
//Enregistre la session courante et initialise quelques
//variables de session
//**********************************************************
function enregistrer_session()
{
  global $numuser;
  global $login;
  global $password;
  global $nom;
  global $prenom;
  global $email;
  global $categorie;

  $s_numuser=$numuser;
  $s_login=$login;
  $s_password=$password;
  $s_nom=$nom;
  $s_prenom=$prenom;
  $s_email=$email;
  $s_categorie=$categorie;
  $s_time=time();
  $s_ip_client=get_ip();

  session_register("s_numuser","s_login","s_password","s_nom","s_prenom","s_email","s_categorie","s_time","s_ip_client");
}


--------------------------------------------


function verifier_session()
{
  global $chemin_fo;
  global $server;
  global $nombase;
  global $s_ip_client;
  global $s_time;
  global $s_login;
  global $s_password;

  if($s_login=="" || $s_password=="") return(0);
  if($s_ip_client!=get_ip()) return(0);
  //lecture du fichier ayant pour nom le login et contenant l'ip_client + date de connexion
  $fp=fopen("$chemin_fo/connexion/$s_login","r");
  //$val_ip=fgets($fp,1024);
  $info_client=fgets($fp,1024);
  $tabinfo=explode("|",$info_client);
  $val_ip=$tabinfo[0];
  $val_time=$tabinfo[1];
   fclose($fp);
  if($val_ip!=$s_ip_client || $val_time!=$s_time)
    return(0);


  $db = pg_connect("$server","","","","$nombase");
  if (!$db) die("Impossible d'acc&eagrave;der &agrave; la base de donn&eacute;es");
  
  $res=pg_exec($db,"select * from UTILISATEURS where login='$s_login' and password='$s_password';");
  $cpt=pg_numrows($res);

  unset($db);
  unset($res);

  if($cpt==0) return(0);
  else return(1);
}

--------------------------------------------

function date_en_seconde($date_timestamp){
        // separation date et temps (+ decalage)
        list($date,$temps_decalage)=explode(" ",$date_timestamp);
        // recup de l'anne,du mois et du jour
        list($annee,$mois,$jour)=explode("-",$date);
        // separation du temps et dcalage
        list($temps,$decalage)=explode("+",$temps_decalage);
        // recup heure minute seconde
        list($heure,$minute,$seconde)=explode(":",$temps);
        $date_seconde=mktime($heure,$minute,$seconde,$mois,$jour,$annee,-$decalage);
        return $date_seconde;
}


--------------------------------------------


// fonction qui calcule le temps entre deux dates
// Les paramtres sont de la forme : 2004-01-22 22:14:25+02
function compte_temps($date_actuelle,$date_precedente){
    // il faut faire le calcul suivant : $temps=$date_actuelle - $date_precedente (en seconde)
    // conversion de la date en secondes

    $date_actuelle_seconde=date_en_seconde($date_actuelle);
    // debug
    //echo "date_actuelle_seconde=$date_actuelle_seconde<br>";

    $date_precedente_seconde=date_en_seconde($date_precedente);
    //echo "date_precedente_seconde=$date_precedente_seconde<br>";
    $temps=$date_actuelle_seconde - $date_precedente_seconde;
    //echo "temps=$temps<br>";
    // debug
    //$temps=60;
    // calcul a suivre ....



    return $temps;
}

--------------------------------------------


/*-------------------------------------------------------------*/
//                                              FONCTIONS POUR COURS ET GROUPES
//      NOTE : TABLE CLASSE ET FILIERE
/*-------------------------------------------------------------*/
// Fonction nom_du($num,$db,$libelle)
// Action : retourne le nom du groupe ou du cours suivant la valeur
//		de $libelle ("groupe" ou "cours")
/*------------------------------------------------------------*/
// Fonction groupe_en_formation($gestgp,$niv,$db)
// Action : retourne vrai si le groupe est en formation faux sinon
/*------------------------------------------------------------*/
function groupe_en_formation($gestgp,$db){
        $resgp_parcours=pg_exec($db,"select distinct gp_num_groupe from gestionparcours where gp_num_groupe='$gestgp';");
        if(pg_numrows($resgp_parcours)==0){
                //il faut tester si un de ses sous-groupe est en formation
                $res=pg_exec($db,"select * from classe where id_pere='$gestgp';");
                while($row=pg_fetch_array($res)){
                        $gestgp=$row["id"];
                        return(groupe_en_formation($gestgp,$db));
                }
                return false;

        }
        else
                return true;
}



--------------------------------------------

fonctions diffrentes sur FO et BO ( meme nom mais ne prennent pas les memes arguments forme de surcharge:

sur FO:
/*------------------------------------------------------------*/
// Fonction niveau_max($num,$db,$table)
// Action : retourne le niveau max de la table classe ou filiere
/*------------------------------------------------------------*/
function niveau_max($parent,$db,$table,$max){
         $res=pg_exec($db,"select * from $table where id_pere='$parent' order by nom;");
         while($row=pg_fetch_array($res)){
                $num=$row["id"];
                $rang=niveau($num,$db,$table);
                if($rang>$max)
                        $max=$rang;
                $max=niveau_max($num,$db,$table,$max);
         }
         return $max;
}

sur BO:
/*------------------------------------------------------------*/
// Fonction niveau_max($num,$db,$table)
// Action : retourne le niveau max de la table classe ou filiere
/*------------------------------------------------------------*/
function niveau_max($parent,$db,$table,$max){
         $res=pg_exec($db,"select * from $table where id_pere='$parent' order by nom;");
         while($row=pg_fetch_array($res)){
                $num=$row["id"];
                $rang=niveau($num,$db,$table);
                if($rang>$max)
                        $max=$rang;
                $max=niveau_max($num,$db,$table,$max);
         }
         return $max;
}


---------------------------------------------


// renvoie la date formate en fonction de la langue (sans l'anne)
function formater_date_mini($tab,$langue){
    //debug
    //echo "tab[2]=$tab[2] et tab[1]=$tab[1] et langue=$langue<br>";
    switch($langue){
        case "french": $dt = $tab[2]."-".$tab[1];
        break;
        case "english": $dt = $tab[1]."-".$tab[2];
        break;
        default:$dt=$tab[1]."-".$tab[2];
        }
        return $dt;
}
// A SUIVRE ...


----------------------------------------


//*************************************************
//Fonctions pour gnrer les enttes de l'interface formateur
//*************************************************

function IF_entete_commun(){
        global $MSG_37,$FORM_22,$s_stag,$serverfront;

        // Nom du script o retourner
        global $page_precedente ;

        // Si page precedente n'est pas dfinie, on fait comme avant
        if($page_precedente=="")
                $page_precedente="javascript:history.go(-1)" ;

        // echo "page_precedente = $page_precedente<br>" ;

        // Affichage de l'icone retour (affichage variable ne marche pas)
        echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" align=\"center\">
                        <tr>" ;

        // ON N'AFFICHE PAS L'IMAGE LIEN SI page_precedente EST EGAL A "stop"
        if($page_precedente!="stop")
        print("
        <td>
                <font face=\"Arial, Helvetica, sans-serif\">&nbsp;&nbsp;&nbsp;&nbsp;
                        <a  href=\"$page_precedente\" onMouseOut=\"MM_swapImgRestore()\" onMouseOver=\"MM_swapImage(Image411,,$serverfront/data/images/retour2.gif,1)\">
                        <img name=\"Image411\" border=\"0\" src=\"http://$serverfront/data/images/retour.gif\" width=\"30\" height=\"26\"></a>
                </font>
        </td>
        <td>
                <font face=\"Arial, Helvetica, sans-serif\"><b>$MSG_37</b></font>
        ") ;
        else
                print("
                <td colspan=2>
                <font face=\"Arial, Helvetica, sans-serif\">&nbsp;&nbsp;&nbsp;&nbsp;</font>
                ") ;

        echo "</td>";

        //"
        // if($s_stag==1)

        // Affichage de l'icone fermer (affichage variable ne marche pas)
        echo '
                <td>
                        <font face="Arial, Helvetica, sans-serif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="javascript:window.close()" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage(\'Image311\',\'\',\'http://'.$serverfront.'/data/images/fermer2.gif\',1)"><img name="Image311" border="0" src="http://'.$serverfront.'/data/images/fermer.gif" width="29" height="26"></a>
                        </font>
                </td>
                <td>
                        <font face="Arial, Helvetica, sans-serif"><b>'.$FORM_22.'</b></font>
                </td>
        ';
            //"
            echo '
                        </tr>
                  </table>';
}


----------------------------------------------


function IF_entete($formation,$groupe="",$util=""){
// $formation : nom de la formation
// $groupe : nom du groupe
//$util : nom/prnom de l'utilisateur

        // Si on n'a pas selectionn de formation, il y a un vide dans l'affichage
        if($formation=="")
                $formation="Aucune formation selectionne";

        global $MSG_635,$MSG_682,$MSG_616,$s_stag ;

        // Pour remplacer history(go -1) ;
        global $page_precedente ;

        // debug
        //echo "s_stag=$s_stag<br>";
        /*$nb=6;
        if(empty($groupe))
                $nb-=2;
        if(empty($util))
                $nb-=2;*/
        $nb=3;
        if(empty($groupe))
                $nb-=1;
        if(empty($util))
                $nb-=1;

        IF_entete_commun();

        // John modification de l'affichage le 30/10/2003
        // EN TETE DE PAGE
        print("
        <br>
        <table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" align=\"center\" width=45%>
        <tr>
                <td colspan=$nb height=\"100%\">
                <hr>
                </td>
        </tr>
        <tr>");
      // print("<td><b>&nbsp;&nbsp; <!--<img src=\"/data/images/jaune.gif\" width=\"25\" height=\"25\" border=\"1\" vspace=\"0\" hspace=\"0\">--></b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>");

      //CALENDRIER
      print("
      <td height=30 width=33%>
        <div valign=middle align=\"center\"><b><font size=\"4\"  face=\"Arial, Helvetica, sans-serif\">$MSG_635</font></b></div>
      </td>");
      //"
       // GROUPE S'IL Y EN A UN
       if(!empty($groupe)){
                /*echo'<td>&nbsp;&nbsp;&nbsp;&nbsp;<!-- <img src="/data/images/orange.gif" width="25" height="25" border="1" vspace="0" hspace="0">-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
                        <td>
                        <div align="center"><font size="4" face="Arial, Helvetica, sans-serif"><b>'.$MSG_682.'</b></font></div>
                        </td>';//"
                */
                // Modification john
                print("<td width=33%>
                        <div align=\"center\" valign=middle><font size=\"4\" face=\"Arial, Helvetica, sans-serif\"><b>$MSG_682</b></font></div>
                        </td>");
       }
       // UTILISATEUR
       if(!empty($util)){
                /*echo'
                <td>&nbsp;&nbsp;&nbsp;&nbsp;<!-- <img src="/data/images/bleu.gif" width="25" height="25" border="1" vspace="0" hspace="0">-->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
                <td>
                        <div align="center"><font size="4" face="Arial, Helvetica, sans-serif"><b>'.$MSG_616.'</b></font>&nbsp;&nbsp;</div>
                </td>';//''*/
                print("
                <td width=33%>
                        <div align=\"center\"><font size=\"4\" face=\"Arial, Helvetica, sans-serif\"><b>$MSG_616</b></font></div>
                </td>");
       }

    print("
    </tr>
    <tr>");
      //echo "<td>&nbsp; </td>"; case vide
      // FORMATION
      print("<td height=30>
        <div align=\"center\"><font size=\"2\" face=\"Arial, Helvetica, sans-serif\"><b>$formation</b></font></div>
      </td>");

      // GROUPE
      if(!empty($groupe)){
                //echo"<td>&nbsp; </td>"; case vide
                print("
                <td>
                        <div align=\"center\"><font face=\"Arial, Helvetica, sans-serif\" size=\"2\"><b>$groupe</b></font></div>
                </td>");
        }

      // UTILISATEUR
      if(!empty($util)){
                //echo"<td>&nbsp; </td>"; case vide
                print("
                <td>
                         <div align=\"center\"><font face=\"Arial, Helvetica, sans-serif\" size=\"2\"><b>$util</b></font></div>
                </td>");
         }

    print("
    </tr>
    <tr>
      <td colspan=$nb height=\"100%\">
        <hr>
      </td>
    </tr>
  </table>");
}


----------------------------------------------


// Le lien RETOUR ramne  la page $page
function IF_entete_commun2($page){
        global $MSG_37,$FORM_22,$s_stag,$serverfront;

        // Affichage de l'icone retour (affichage variable ne marche pas)
        echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" align=\"center\">
                        <tr>
                          <td>
                                <font face=\"Arial, Helvetica, sans-serif\">&nbsp;&nbsp;&nbsp;&nbsp;
                                <a  href=\"$page\" onMouseOut=\"MM_swapImgRestore()\" onMouseOver=\"MM_swapImage(Image411,,$serverfront/data/images/retour2.gif,1)\"><img name=\"Image411\" border=\"0\" src=\"http://$serverfront/data/images/retour.gif\" width=\"30\" height=\"26\"></a>
                                </font>
                          </td>
                          <td>
                                <font face=\"Arial, Helvetica, sans-serif\"><b>$MSG_37</b></font>
                          </td>
        ";

        //"
        // if($s_stag==1)

        // Affichage de l'icone fermer (affichage variable ne marche pas)
        echo '
                <td>
                        <font face="Arial, Helvetica, sans-serif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="javascript:window.close()" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage(\'Image311\',\'\',\''.$serverfront.'/data/images/fermer2.gif\',1)"><img name="Image311" border="0" src="http://'.$serverfront.'/data/images/fermer.gif" width="29" height="26"></a>
                        </font>
                </td>
                <td>
                        <font face="Arial, Helvetica, sans-serif"><b>'.$FORM_22.'</b></font>
                </td>
        ';

            echo '
                        </tr>
                  </table>';
}//"
*/



----------------------------------------------



function get_nomcal($num){
/* retourne le nom du calendrier  partir de son numro */
    if($num>0){
        $sql="SELECT nom_cal
        FROM calendrier
        WHERE num_cal=$num";
        $result=pg_query($sql);
        return(pg_result($result,0));
    }

}

function numcal_to_nomgrp($num){
/* renvoit le nom du groupe associ  un numrode calendrier */
$sql="SELECT nom
          FROM classe
          WHERE id IN ( SELECT DISTINCT g_num_gest_g
                                FROM gestionnaire
                                WHERE g_num_cal='$num')";
$result=pg_query($sql);

return(pg_result($result,0));

}


-------------------------


function sec_to_txt($nb_seconde){
        global $MSG_263,$MSG_262,$MSG_261;

        //$txt =$nb_seconde;

        $time=get_hms($nb_seconde);
        if($time["heure"]>0)
                $txt.=' '.$time["heure"].' '.$MSG_263;

        if($time["minute"]>0)
                $txt.=' '.$time["minute"].' '.$MSG_262;

        if($time["seconde"]>0)
                $txt.=' '.$time["seconde"].' '.$MSG_261;

        return($txt);

}

-------------------------------


function get_hms($nb_seconde){
    $tab["heure"]=floor($nb_seconde/3600);
    $tab["minute"]=floor(($nb_seconde-$tab["heure"]*60*60)/60);
    $tab["seconde"]=$nb_seconde-$tab["heure"]*60*60-$tab["minute"]*60;

    return($tab);
}


-------------------------------------


// fonction qui test si une srie est alatoire
// Retourne 1 si alatoire
function test_serie_aleatoire($serie,&$mode_aleatoire){
    global $s_numcal;
    $aleatoire=0;
    // 1 - test si serie existante en mode alatoire
    $sql="select * from gestserie where num_serie=$serie and num_cal=$s_numcal and aleatoire='t'";
    $res=pg_query($sql);
    if(pg_numrows($res)==1){
        $mode_aleatoire=0;
        return 1;
    }
    // 2 - test si serie aleatoire monotheme ou multitheme
    $sql="select distinct mode from serie_aleatoire where num_serie=$serie";
    $res=pg_query($sql);
        if(pg_numrows($res)==1){
            $row=pg_fetch_row($res,0);
            $mode_aleatoire=$row[0];
            return 1;
        }
    return 0;
}


---------------------------------------

// fonction qui test si une page admet un affichage dynamique
// si oui ==> met la configuration dans un tableau et retourne 1
// si non ==> retourne 0
// parametres : $nom_script (nom de la page)
//                      $num_cal (N calendrier)
//                      $num_exo (qcm ou blanc )
//                      $tab (pour la configuration)
function affichage_dynamique($nom_script,$num_cal,$num_exo=0,&$tab,&$num_page){
    $configuration_affichage=0;
    // initialisation du tableau
    for($i=0;$i<22;$i++)
    $tab[]=0;
    $req="select num_page,configuration from configpage where num_page in
    (select id from page where libelle_script like '%$nom_script%') and num_cal='$num_cal' and num_qcm='$num_exo'";
    $res=pg_exec($req);
    if(pg_numrows($res)==1){
        $configuration_affichage=1;
        $row=pg_fetch_row($res,0);
        $num_page=$row[0];
        // On met la configuration dans un tableau
        $tab=explode(",",$row[1]);
    }
    return $configuration_affichage;
}


-----------------------------------


function get_serie_statut($id_stag,$id_form,$id_serie){
/*
Retourne le statut d'une srie

1: non commence
2: en cours
3: interrompue
4: ractive
5: finie


*/

        $sql="SELECT score
                 FROM res_serie
                 WHERE id_stag=$id_stag
                 AND id_formation=$id_form
                 AND id_serie=$id_serie";

        $result=pg_query($sql);
        if(pg_num_rows($result)==0)
        {
                //srie non commence
                return(1);
        }
        else{

                $score=pg_result($result,0);

                if($score<0)
                {
                        $var='s_current_'.$id_serie;
                        if(session_is_registered($var))
                        {
                                // serie en cours
                                return(2);
                        }
                        else
                        {
                                // srie interrompue
                                return(3);
                        }

                }
                else{
                        // on rcupe le nombre d'tapes dans la srie
                        // test si alatoire
                        $aleatoire=test_serie_aleatoire($id_serie,$mode_aleatoire);
                        if($aleatoire==1 && $mode_aleatoire>0)
                             $sql="SELECT count(*)
                                 FROM  asso_exo_serie_aleatoire
                                 WHERE id_serie=$id_serie and num_user=$id_stag";

                        else
                             $sql="SELECT count(*)
                                 FROM  asso_exo_serie
                                 WHERE id_serie=$id_serie";


                        $result=pg_query($sql);
                        $nb_etape=pg_result($result,0);

                        // on rcupre le nombre d'tapes dj effectus.
                        $sql="SELECT count(*)
                                 FROM  res_serie_exo
                                 WHERE id_serie=$id_serie
                                 AND id_stag=$id_stag
                                 AND id_formation=$id_form";
                        $result=pg_query($sql);
                        $nb_done=pg_result($result,0);
                        //echo $nb_done;
                        if($nb_done==$nb_etape)
                                // srie termine
                                return(5);
                        else
                                // srie ractive
                                return(4);

                }

        }
}



-----------------------------------

