<?php
define("TAB","&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
	
include("../include/vars_adm.php");
include("../include/util.inc.php");
include("../include/utiljs.php");
include("../prof/bilan.inc.php");


function printdemrep($id,$titre) {
global $etab_id,$bilan,$nbaccetab,$nbrefusetab,$datedem,$tnomprof,
		$trid, $tpid, $tacc, $tdaterep, $trepdel,
		$nometab,$codepostal;
print "<br /><hr /><h3>$titre</h3>";
print "<p>";
//etab
print "etab_id=$etab_id, nom=$nometab, CP=$codepostal<br />";
//demandes
print "demande=$id, bilan=$bilan, nb_accords=$nbaccetab, nb_refus=$nbrefusetab, date=$datedem<br />";
//réponses
print "reponses : <br />";
$nbrep=count($tpid);
for ($r=0;$r<$nbrep;$r++) {
	if (in_array($trid[$r],$trepdel)) $msupp=TAB."<i><b> ~~> effacée ! </b></i>";
	else $msupp='';
	print TAB."- rep=".$trid[$r].", prof=".$tpid[$r].", nom=".$tnomprof[$r].", accord=".$tacc[$r].", date=".$tdaterep[$r]."$msupp<br />";
	}
print "</p><hr />\n";
}


function verifdem($id) {
//les "global" sont :
//  - uniques et relatifs à la demande traitée pour : 
//      eid=eleve_id, iid=item_id, $did=disc_id, nbaccetab, nbrefusetab, etab_id, datedem
//  - des tableaux pour les profs éventuels : 
//		tpid=prof_id, tacc=accord, tdaterep (éventuellement 1 seule ligne de NULL)

//le paramètre $id correspond au $oldmid du programme appelant
//on analyse les cas les plus probables en premier
global  $eid,$iid,$did,$etab_id,$datedem,
        $trid,$tpid,$tacc,$tdaterep, $trepdel,$tnomprof,
        $nbaccetab,$nbrefusetab,
		$nometab,$codepostal,
		$bilan, $messages; //pour rendre global et visible dans les fonctions appelées
$nbrep=count($tpid);
$oldprof=0;
$dejaoui=false;$dejanon=false;
$bilan=0;
$messages='';
$trepdel=array();
for ($i=0 ; $i<$nbrep ; $i++) {
	$prof_id=$tpid[$i];
	$accord=$tacc[$i];
	$daterep=$tdaterep[$i];
	$reponse_id=$trid[$i];
	if ($oldprof==$prof_id) {
		//plusieurs réponses du même prof
		//on jette sauf si NON puis OUI
		if ($accord) {
			//un même prof ne peut donner 2 oui	
			if ($dejaoui) {
				$trepdel[]=$reponse_id;
				// ------------------------------------- effacer(réponse)
				}
			else {
				$bilan++;
				$dejaoui=true;
				if ($dejanon) $bilan++; //un NON devenu OUI donc +2
                //NB : les NON précèdent les OUI (voir requête)    				  
                }
			}
		else {
			//prof_id a répondu NON. A-t-il déjà répondu NON ?
			if ($dejanon) {
				$trepdel[]=$reponse_id;
				// ------------------------------------- effacer(réponse)
				}
			else {
				$bilan--; 
				$dejanon=true; 
				}			
			}
		}
	else {
		//on change de prof pour cette demande : tout réinitialiser sauf le bilan
		$dejaoui=$accord==1;
		$dejanon=$accord==0;
		$oldprof=$prof_id;
		if ($accord) $bilan++; else $bilan--;
		}
	}
if ($bilan>=$nbaccetab) {
    //vérifier si l'item a été octroyé
	$resr=query("SELECT * FROM resultats WHERE eleve_id=$eid
					                       AND item_id=$iid
					                       AND disc_id=$did");
	if (mysql_num_rows($resr)==0) {
		//anormal : rajouter un résultat
		printdemrep($id,"Ajout d'un résultat");
		ajout_resultat($eid,$iid,$did,$id,0); 
        }	
	}
elseif ($bilan<=-$nbrefusetab ) {
	//l'item a peut-être été acquis... dommage, on ne va pas le supprimer après l'avoir donné
	//quoi qu'il en soit, on supprime demande et réponses
	printdemrep($id,"Suppression d'une demande et de ses réponses");
	//query("DELETE FROM demandes WHERE message_id=$id");
	//query("DELETE FROM reponses WHERE message_id=$id");
    }
elseif (count($tdelrep)) {
	//il y a des réponses supprimées pour incohérences mais sans conséquences 
	//sur les résultats ni la demande. On signale quand même la mise en cohérence de la base.
	printdemrep($id,"Réponses supprimées car redondantes");
	}
else print "<span style=\"color:blue\">$id - </span>";

}


//----------------------------------------
//à revoir lors de l'intégration
connecte($host,$user,$mdp,$db);
getparams(2); //pas de mise en session ???
//----------------------------------------



if ($MODULE=='Melia') {    
	$cond_disc_dem=" AND demandes.disc_id=$disc_id ";
    $cond_disc_res=" AND resultats.disc_id=$disc_id ";
    }
else {
	$cond_disc_dem='';
    $cond_disc_res='';
    }

query("CREATE TABLE IF NOT EXISTS demverifiees (
		message_id INT UNSIGNED NOT NULL ,
		UNIQUE (message_id)
		) ENGINE = MYISAM") ;

//on ne s'intéresse pas aux demandes ayant abouti à un résultat : elles ne présentent pas de risque ni d'erreur, 
//même s'il y a des incohérences dans les demandes / reponses. Et puis on ne va pas supprimer le résultat !

print "<h2>Vérification des demandes / réponses</h2>";
print "<hr />";
print "<p><i>En couleurs, les demandes sans anomalie</i></p>";
 
$sqldemandes="
	SELECT DISTINCT demandes.message_id AS mid,
                    demandes.eleve_id AS eid,
                    demandes.item_id AS iid,
                    demandes.disc_id AS did,
					demandes.quand AS datedem,
					reponses.reponse_id AS rid,  
					reponses.prof_id AS pid,
					reponses.quand AS daterep, 
					accord, 
					profs.etab_id,
					profs.nom AS nomprof,
					nb_validations,
					nb_max_refus,
					etablissements.nom AS nometab,
					codepostal
	FROM demandes
	LEFT JOIN reponses ON reponses.message_id = demandes.message_id
	LEFT JOIN profs ON reponses.prof_id = profs.prof_id
	LEFT JOIN etablissements ON profs.etab_id = etablissements.etab_id
	LEFT JOIN demverifiees ON demverifiees.message_id = demandes.message_id
	
	WHERE demverifiees.message_id IS NULL
	AND reponses.prof_id IS NOT NULL "
    .$cond_disc_dem."
	
	ORDER BY mid,pid,daterep,accord";
//à égalité de dates, commencer par le refus
//print $sqldemandes;print "<p></p>";		
$res=query($sqldemandes);
$oldmid=0;
$nbverifs=0;
while ($row=mysql_fetch_array($res)) {
	$mid=$row['mid'];
	if ($mid!=$oldmid) {
		//changement de demande
		if ($oldmid) {
			verifdem($oldmid);
			query("INSERT INTO demverifiees SET message_id=".seci($oldmid));
			}
		$oldmid=$mid;
		if ($nbverifs++>1000) break;
		$eid=$row['eid'];
		$iid=$row['iid'];
		$did=$row['did'];
		$datedem=$row['datedem'];
		$etab_id=$row['etab_id'];
		$nometab=$row['nometab'];
		$codepostal=$row['codepostal'];
		$nbaccetab=$row['nb_validations'];
		$nbrefusetab=$row['nb_validations'];
		$trid=$tpid=$tacc=$tdaterep=$tnomprof=array();
		}
	$trid[]=$row['rid'];
	$tpid[]=$row['pid'];
	$tacc[]=$row['accord'];
	$tdaterep[]=$row['daterep'];
	$tnomprof[]=$row['nomprof'];
	}
	
?>