<?php
/*
Copyright (C) 2001, 2002 Bertand Pallie, Loc Dayot - Mairie Pierrefitte (93)
EPNadmin - Version 0.6 - 13/05/2003
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 2 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 should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
http://epnadmin.pierrefitte93.fr/
*/
//require_once("header.inc.php");
require_once("constantes.inc.php"); // dfinition des constantes
if (!defined("FCT_PARCOURS"))
return $fctnonactive;
//require_once("fonctions.inc.php"); // concernant des fonctions transversales inclassables
require_once("mysql.inc.php"); // concernant mysql
//require_once("sessions.inc.php"); // concernant les sessions et initiations
require_once("usagers.inc.php"); // concernant la gestion des usagers
//require_once("reservations.inc.php"); // concernant les rservations des postes en accs individuel par des usagers
//require_once("tableaux.inc.php"); // Concernant l'affichage transpos d'un tableau
//require_once("siteweb.inc.php"); // concernant les pages perso des usagers et les sites web des structures
require_once("dateheure.inc.php"); // concernant la manipulation des heures et des dates, formulaire, conversion...
require_once("structures.inc.php"); // concernant les structures
require_once("initiations.inc.php"); // concernant les initiations et les thmes
//require_once("parcours.inc.php"); // concernant les parcours des usagers et leur positionnement
function recherchePositionnement($id_usager, $id_initiation="")
{
$req = "SELECT * FROM positionnement WHERE id_usager=$id_usager";
if ($id_initiation!="") $req.=" AND id_initiation=$id_initiation";
$res = executeRequete($req);
return $res;
}
// -
// Parcours -
// -
function rechercheParcours($id_usager)
{
$req = "SELECT * FROM parcours
LEFT JOIN initiations ON initiations.id=parcours.id_initiation
WHERE id_usager=$id_usager ORDER BY id_theme, niveau";
return executeRequete($req);
}
function trouveParcours($id_usager, $id_initiation)
{
$req = "SELECT * FROM parcours WHERE id_usager=$id_usager AND id_initiation=$id_initiation";
$res = executeRequete($req);
return fetch_object($res);
}
function accessible($id_usager, $id_initiation)
{
// On recherche les initiations dpendantes.
$resinit=recherche("initiations", "id", $id_initiation);
$initiation = fetch_object($resinit);
// Est-ce que l'initiation a dj t faire ?
$parcours = trouveParcours($id_usager, $id_initiation);
if ($parcours->etat=="effectu")
return FALSE; // car c'est bizarre de faire deux fois la mme initiation...
if ($initiation->prerequis)
{ // Il y a des dpendances.
$prerequis = explode(",",$initiation->prerequis);
$npr=0;
while (($prou=str_replace("|", ",", $prerequis[$npr]))>"")
{
$req1 = "SELECT * FROM initiations WHERE id IN ($prou)";
$res1 = executeRequete($req1);
$fait=FALSE;
// On va chercher pour chaque initiation requis, si on l'a faite ou alors qu'on a le niveau
// TODO : On peut se demander s'il ne faudrait pas ne tenir compte que du niveau...
while (!$fait && $requis=fetch_object($res1))
{ // S'il y en a au moins un (parmis les OU), c'est suffisant
if ($parcours = trouveParcours($id_usager, $requis->id))
if ($parcours->etat=="effectu" || $parcours->etat=="conseill")
$fait=TRUE;
if (!$fait)
{ // l'usager a les connaissances ?
$reqpos="SELECT * FROM positionnement
WHERE id_usager=$id_usager
AND id_initiation=$requis->id";
$respos=executeRequete($reqpos);
if ($posit=fetch_object($respos))
if ($posit->niveau!="dbutant(e)")
$fait=TRUE; // oui
}
}
if (!$fait) // S'il n'y en a aucun, c'est pas suffisant
return FALSE;
$npr++;
} // while $prou
}
return TRUE;
}
function indispensable($id_usager, $id_initiation)
{
$parc=trouveParcours($id_usager, $id_initiation);
if ($parc->etat=="effectu")
return TRUE;
//if ($id_initiation==1)
// return true;
// On scrute tout le parcours pour voir si l'initiation y figure comme indispensable.
$req="SELECT * FROM parcours
LEFT JOIN initiations ON parcours.id_initiation=initiations.id
WHERE id_usager=$id_usager";
$res=executeRequete($req);
while ($enr = fetch_object($res))
{
if ($enr->prerequis!="")
{
$tableauET = explode(",", $enr->prerequis);
for ($iET=0; $iET<count($tableauET); $iET++)
{
$tableauOU = explode("|", $tableauET[$iET]);
$resultat=FALSE;
for ($iOU=0; $iOU<count($tableauOU); $iOU++)
if ($tableauOU[$iOU]==$id_initiation)
$resultat=TRUE;
}
if ($resultat)
return TRUE;
}
}
return FALSE;
}
function ajouteInitiation($id_usager, $id_initiation)
{
global $sparcoursinitdansparcours;
// On regarde si l'initiation n'est pas dj dans le parcours pdagogique...
$req = "SELECT id_usager FROM parcours
WHERE id_usager=$id_usager AND id_initiation=$id_initiation";
$res2 = executeRequete($req);
$parcours = fetch_object($res2);
if (!$parcours) // Non, l'initiation n'est pas encore dans le parcours
{
// On regarde quel est le niveau de l'usager.
$res3 = recherchePositionnement($id_usager, $id_initiation);
$posi = fetch_object($res3);
switch ($posi->niveau)
{
case "initi(e)" : $tat="conseill"; break;
case "avanc(e)" : $tat=""; break; // pas la peine.
default : $tat="indispensable"; break;
} // switch
if ($tat!="")
{
// On regarde s'il y a des prrequis et on ajoute les prrequis.
// On recherche les initiations dpendantes.
$initiation = trouveInitiation($id_initiation);
$prerequis = $initiation->prerequis;
//debug("Prrequis : $prerequis");
if ($prerequis!="")
{
$req = "SELECT * FROM initiations WHERE id IN ($prerequis)";
$res1 = executeRequete($req);
while ($requis = fetch_object($res1))
ajouteInitiation($id_usager, $requis->id);
}
$req = "INSERT INTO parcours (id_usager, id_initiation, etat) VALUES ($id_usager, $id_initiation, \"$tat\")";
printf($sparcoursinitdansparcours, $initiation->initiation);
executeRequete($req);
}
}
// return $tat;
}
function formulaireAjoutInitiation($id_usager)
{
global $ajouter, $info, $PHP_SELF, $sparcourspasinitdispo;
// Affiche toutes les initiations tries par thme avec un lien pour l'inscrire.
echo "<table align=center>\n";
for ($id_theme_sessions=1; $id_theme_sessions<9; $id_theme_sessions++)
{
$res = recherche("themes", "id", $id_theme_sessions);
$theme = fetch_object($res);
echo "<tr bgcolor=\"".COULEUR_PARCOURS."\"><td rowspan=2 align=center>\n";
// afficheTheme($theme);
if ($theme->url_image!="")
echo "<img src=\"./$theme->url_image\" alt=\"$theme->theme\" border=0 height=80>";
echo "</td>\n";
echo "<td><h3>$theme->theme</h3>
<p>$theme->commentaire</p>";
echo "</td></tr>
<tr><td>\n<table width=\"100%\" border=1>\n";
$res2 = recherche("initiations", "id_theme", $id_theme_sessions, "niveau");
$aucun=true;
while ($initiation=fetch_object($res2))
if (!trouveParcours($id_usager, $initiation->id))
{
echo "<tr>";
echo "<td>$initiation->niveau</td>\n";
echo "<td><b>$initiation->initiation</b></td>\n";
echo "<td width=21><a href=\"$PHP_SELF?operation=1&id_initiation=$initiation->id&id_usager=$id_usager\">$info</a></td>\n";
echo "<td width=21><a href=\"$PHP_SELF?operation=3&id_initiation=$initiation->id&id_usager=$id_usager\">$ajouter</a></td>\n";
$aucun=false;
echo "</tr>\n";
}
if ($aucun)
{
echo "<tr><td colspan=4>$sparcourspasinitdispo</td></tr>\n";
}
echo "</table></td></tr>\n";
}
echo "</table>\n";
}
function afficheParcours($id_usager, $mode="tout")
{
global $info, $programmer, $deprogrammer, $rien, $retirer, $shorsparcours, $sle, $de, $s, $savec, $sprevue,
$smaispasprog, $seffectue, $sproblemelong, $programmee;
switch ($mode)
{
case "programm" :
$req1 = "SELECT *, parcours.etat AS etat FROM parcours
LEFT JOIN initiations ON initiations.id=parcours.id_initiation
LEFT JOIN sessions ON sessions.id=parcours.id_session
WHERE id_usager=$id_usager
AND parcours.id_session IS NOT NULL
AND sessions.date>=NOW()
ORDER BY id_theme, niveau";
$res1 = executeRequete($req1);
break;
default :
$res1 = rechercheParcours($id_usager);
break;
}
$yena=FALSE;
echo "<table border=1 align=center>\n";
while ($parcours=fetch_object($res1))
{
$yena=TRUE;
echo "<tr>\n";
$res = recherche("themes", "id", $parcours->id_theme);
$theme = fetch_object($res);
if ($parcours->id_initiation>0)
{
echo "<td><img src=\"$theme->url_image\" alt=\"$theme->theme\" border=0 height=20></td>\n";
echo "<td><a href=\"parcours.php?operation=1&id_initiation=$parcours->id_initiation&id_usager=$id_usager\">
$parcours->initiation</a></td>\n";
}
else
{
if ($parcours->id_session!=0)
{
$resc=recherche("sessions", "id", $parcours->id_session);
$session=fetch_object($resc);
}
echo "<td>$shorsparcours</td>\n";
echo "<td>$session->nom_session</td>\n";
}
//echo "<td><a href=\"parcours.php?operation=1&id_initiation=$parcours->id_initiation&id_usager=$id_usager\">
// $info</a></td>\n";
echo "<td>";
if ($parcours->id_session!=0)
{
$resb=recherche("sessions", "id", $parcours->id_session);
$session=fetch_object($resb);
}
$information=" $sle <b>".datetodate($session->date)." $s ".datetoheure($session->debut)."</b> $savec $session->animateur $s ".localisation($session->id_localisation);
switch ($parcours->etat)
{
case "indispensable" :
case "conseill" :
echo " <b>$parcours->etat</b>";
if ($parcours->id_session!=0)
{
$usager = trouveUsager($id_usager);
echo " $sprevue $information";
echo "</td>\n<td><a href=\"inscription_session.php?operation=8&id_session=$parcours->id_session&id_usager=$id_usager\">$deprogrammer</a>\n";
}
else
{
echo " $smaispasprog";
if (accessible($id_usager, $parcours->id_initiation))
echo "</td>\n<td><a href=\"parcours.php?operation=6&id_initiation=$parcours->id_initiation&id_usager=$id_usager\">$programmer</a>\n";
else
echo "</td><td>$rien</td>\n";
}
break;
case "effectu" :
echo " <b>$seffectue</b> $information\n";
echo "<td>$rien</td>\n";
break;
case "absent" :
echo " $sprogrammee $information <b>$smaislapin</b>";
if (accessible($id_usager, $parcours->id_initiation))
echo "</td>\n<td><a href=\"parcours.php?operation=6&id_initiation=$parcours->id_initiation&id_usager=$id_usager\">$programmer</a>";
else
echo "<td>$rien</td>\n";
break;
case "probleme" :
echo " $sprogrammee $information <b>$sproblemelong</b>";
if (accessible($id_usager, $parcours->id_initiation))
echo "</td>\n<td><a href=\"parcours.php?operation=6&id_initiation=$parcours->id_initiation&id_usager=$id_usager\">$programmer</a>";
else
echo "<td>$rien</td>\n";
break;
case "en retard" :
echo " $sprogrammee $information <b>$sretardlong</b>";
if (accessible($id_usager, $parcours->id_initiation))
echo "</td><td><a href=\"parcours.php?operation=6&id_initiation=$parcours->id_initiation&id_usager=$id_usager\">$programmer</a>";
else
echo "<td>$rien</td>\n";
break;
} // fin du switch tat
if (!indispensable($id_usager, $parcours->id_initiation))
echo "<td><a href=\"parcours.php?operation=2&id_initiation=$parcours->id_initiation&id_usager=$id_usager\">$retirer</td>\n";
else
echo "<td>$rien</td>\n";
echo "</tr>\n";
} // while
if (!$yena)
echo "<tr><td>$sparcoursprevuvide</td></tr>\n";
echo "</table>\n";
}
function afficheSessionsAccessibles($id_usager)
{
global $info, $programmer, $deprogrammer, $rien, $retirer,
$s, $savec, $spassessionconvenant;
echo "<table border=1 align=center>\n";
// Affichage maintenant des sessions qui ne font pas partie du parcours, mais inscription automatique
$req="SELECT * FROM sessions
WHERE date>=NOW() AND inscriptionauto='oui' AND etat='rservation'";
$res=executeRequete($req);
$yena=FALSE;
while ($session=fetch_object($res))
{
$affiche=TRUE;
// Est-ce que c'est prvu pour tre dans le parcours
if ($session->id_initiation!=0)
{
$res2=recherche("initiations", "id", $session->id_initiation);
$initiation=fetch_object($res2);
$affiche&=($initiation->dans_parcours!='non');
// Est-ce que l'usager n'est pas dj inscrit dans cette initiation ?
$req3="SELECT * FROM parcours
WHERE id_usager=$id_usager
AND id_initiation=$session->id_initiation
AND id_session IS NOT NULL
AND (etat='conseill' OR etat='indispensable' OR etat='effectu')";
$res3=executeRequete($req3);
$affiche&=(! fetch_object($res3));
// Est-ce que la session est accessible, compte-tenu de son parcours et son niveau
$affiche&=(accessible($id_usager, $session->id_initiation));
}
// Est-ce que l'usager n'est pas dj inscrit cette session ?
$req4="SELECT * FROM parcours
WHERE id_usager=$id_usager
AND id_session=$session->id";
$res4=executeRequete($req4);
$affiche&=(! fetch_object($res4));
if ($affiche)
{
$yena=TRUE;
echo "<tr>";
if ($initiation->id_theme)
{
$res5 = recherche("themes", "id", $initiation->id_theme);
$theme = fetch_object($res5);
echo "<td><img src=\"$theme->url_image\" alt=\"$theme->theme\" border=0 height=20></td>\n";
}
else
echo "<td>Hors parcours</td>\n";
if ($session->id_initiation!=0)
echo "<td><a href=\"parcours.php?operation=1&id_initiation=$session->id_initiation&id_usager=$id_usager\">
$initiation->initiation</a></td>\n";
else
echo "<td>$session->nom_session</td>";
echo "<td><table width=\"100%\"><tr><td>";
echo datetodate($session->date)." $s ".localisation($session->id_localisation)." $savec ".$session->animateur;
echo "</td><td>";
echo " <a href=\"inscription_session.php?operation=3&id_session=$session->id&id_usager=$id_usager\">$programmer</a>";
echo "</tr></table></td></tr>\n";
} // if affiche
} // while session
if (!$yena)
echo "<tr><td>$spassessionconvenant</td></tr>\n";
echo "</table>\n";
}
?>