user; $m=new mysql(); //détermination du participant if(!empty($_REQUEST['id_utilisateur'])) { $TheRepeatedParam="id_utilisateur=".$_REQUEST['id_utilisateur']; $id_utilisateur=$_REQUEST['id_utilisateur']; } else $id_utilisateur=$u['id']; //$l=$m->select("reponses","id,choix,sessions,id_engagements,","id_utilisateurs=".$id_utilisateur.""); //Obtenir la liste des réponses $q="select reponses.id as rep, reponses.choix, engagements.id as eng, engagements.importances, referentiels.id as ref, referentiels.nom from reponses INNER join (engagements INNER join referentiels on engagements.id_referentiels=referentiels.id) on reponses.id_engagements=engagements.id where reponses.id_utilisateurs=".$id_utilisateur; $l=$m->select_str($q); //obtenir la liste des référentiels destinés à l'utilisateur $q2="select referentiels.id, referentiels.nom from referentiels INNER JOIN l_ref_users on referentiels.id=l_ref_users.id_referentiels where l_ref_users.id_utilisateurs=".$id_utilisateur." order by referentiels.nom"; $l2=$m->select_str($q2); //Trouver les noms des référentiels parents de la liste trouvée pou rles ajouter, le cas échéant //ou alors définir des correspondances pour que les parents soient pris pour les enfants $q3="select id, `id_referentiels:parent` as parent from referentiels"; $l3=$m->select_str($q3); foreach($l3 as $r) { foreach($l2 as $selected) { if ($r['id']==$selected['id']) $referentiels[$r['parent']]=$r['id']; } } if(is_array($referentiels)) ksort($referentiels); /* générer un tableau qui classe les résultats par session et référentiel : -séparer les référentiels -séparer les sessions -calculer le nombre total d'engagements par référentiel -indiquer le nombre d'engagements répondus -repérer le nombre d'engagements répondu pour chaque type de réponse (oui, non, inapplicable) -indiquer le nombre de réponses oui dans chaque type de priorité */ //initialisation des variables unset($res); unset($outtab); unset($globalscore); foreach($l2 as $e)//liste de tous les référentiels { $ref[$e['id']]=$e['nom']; //initialisation des données $res[$e['id']][1]['o']=0; $res[$e['id']][1]['n']=0; $res[$e['id']][1]['np']=0; $res[$e['id']][2]['o']=0; $res[$e['id']][2]['n']=0; $res[$e['id']][2]['np']=0; } foreach($l as $e)//ajouter les types de réponses à chaque priorité, en séparant les sessions et les référentiels { $res[$e['ref']][$e['importances']][$e['choix']]++; } //~ print_r($referentiels); if(is_array($ref)) { $ref=array_unique($ref); foreach($ref as $k=>$r)//déterminer le nombre d'engagements total par référentiel et ensuite par priorité { //déterminer quel est $e l'enfant final référentiel appartenant à l2, grace à $referentiels //puis ajouter dans les nbeng[$e] le résultat avec k //~ if (isset($referentiels[$k])) $ref_destination = $referentiels[$k]; if (array_key_exists($k, $referentiels)) $ref_destination = $referentiels[$k]; else $ref_destination = $k; $uniq=$m->select("engagements","count(*) as c","id_referentiels=".$k); $nbeng[$ref_destination]["t"]=$uniq[0]['c']; $uniq=$m->select("engagements","count(*) as c","importances=1 and id_referentiels=".$k); $nbeng[$ref_destination]["1"]=$uniq[0]['c']; $uniq=$m->select("engagements","count(*) as c","importances=2 and id_referentiels=".$k); $nbeng[$ref_destination]["2"]=$uniq[0]['c']; //~ $u=$m->select("engagements","count(*) as c","importances=3 and id_referentiels=".$k); //~ $nbeng[$r]["3"]=$u[0]['c']; } } if(is_array($res)) { //construisons le tableau de sortie outtab foreach($res as $numref=>$referentiel) { if (array_key_exists($numref, $referentiels)) $ref_destination = $referentiels[$numref]; else $ref_destination = $numref; if ($u['statuts']=='utilisateur')$outtab[$numref]["nom"]="$numref - ".$ref[$numref]."";//le référentiel else $outtab[$numref]["nom"]=$ref[$numref];//le référentiel $nbtoto=0;$nbtotn=0;$nbtotnp=0;//initialisation des réponses par type for($noimport=1;$noimport<3;$noimport++) { $importance=$referentiel[$noimport]; $nboui=$importance['o']?$importance['o']:"0"; $nbnon=$importance['n']?$importance['n']:"0"; $nbnp=$importance['np']?$importance['np']:"0"; $nbrep[$noimport]=0; if($importance['o'])$nbrep[$noimport]+=(int)$importance['o']; //calcul du if($importance['n'])$nbrep[$noimport]+=(int)$importance['n']; //nombre de //if($importance['np'])$nbrep[$noimport]+=(int)$importance['np']; //réponses dans cette priorité if($importance['o'])$nbtoto+=(int)$importance['o'];//nombre de oui if($importance['n'])$nbtotn+=(int)$importance['n'];//nombre de non if($importance['np'])$nbtotnp+=(int)$importance['np'];//nombre d'inapplicables if(empty($nbrep[$noimport]))(int)$nbrep[$noimport]="0";//si on a un nb de réponses nul dans une priorité $nbengp=$nbeng[$numref][$noimport] - (int)$importance['np'];//nombre total d'engagements de cette priorité if ($nbengp)$txrep=round($nboui*100/$nbengp,1);else $txrep="-";//calcul du taux de réponses positives sur l'ensembles des engagements d'une priorité $outtab[$numref]["score"].="" ." ".$txrep."% ; "; # foreach($importance as $choix=>$nbchoix) $globalscore["nbengp".$noimport]+=$nbengp; $globalscore["nboui".$noimport]+=$nboui; $globalscore["nbnon".$noimport]+=$nbnon; $globalscore["nbnp".$noimport]+=$nbnp; $globalscore["nbrep".$noimport]+=$nbrep[$noimport]; //~ $globalscore["txrep".$noimport]+=$txrep; } $nbtotrep=(int)$nbrep['1']+(int)$nbrep['2']+(int)$nbrep['3']-$nbtotnp;//nombre de réponses totales sans les inapplicables $nbtoteng=$nbeng[$numref]['t']; $outtab[$numref]["score"].="Total : " .$nbtoto."/".($nbtoteng-$nbtotnp).""; if($nbtotnp)$outtab[$numref]["score"].=" (+".$nbtotnp." inappl.)"; $globalscore["nbtoto"]+=$nbtoto; $globalscore["nbtotn"]+=$nbtotn; $globalscore["nbtotnp"]+=$nbtotnp; $globalscore["nbtoteng"]+=$nbtoteng; } $outtab["Global"]["nom"]="Total";//le référentiel if ($globalscore["nbengp1"]) $globalscore["txrep1"]=round($globalscore["nboui1"]*100/$globalscore["nbengp1"],1);else $globalscore["txrep1"]="-";//calcul du taux de réponses positives sur l'ensembles des engagements d'une priorité if ($globalscore["nbengp2"]) $globalscore["txrep2"]=round($globalscore["nboui2"]*100/$globalscore["nbengp2"],1);else $globalscore["txrep2"]="-";//calcul du taux de réponses positives sur l'ensembles des engagements d'une priorité $outtab["Global"]["score"]="" ." ".$globalscore["txrep1"]."% ; "; $outtab["Global"]["score"].="" ." ".$globalscore["txrep2"]."% ; "; $outtab["Global"]["score"].="Total : " .$globalscore["nbtoto"]."/".($globalscore["nbtoteng"]-$globalscore["nbtotnp"])." (+".$globalscore["nbtotnp"]." inappl.)"; $table=new sorttable("tab_scores"); $table->titles=array("Référentiel", "Score"); $table->datas=$outtab; print "

Tableau des résultats des auto-évaluations

"; print $table->html(); if ($globalscore["nbtoteng"])$total_a_enregistrer=round(100*$globalscore["nbtoto"] / $globalscore["nbtoteng"], 2);; $m->updateit("utilisateurs", $id_utilisateur, "score_total", $total_a_enregistrer); $totaux_a_enregistrer=serialize($outtab); $m->updateit("utilisateurs", $id_utilisateur, "scores", $totaux_a_enregistrer); } else print "

Pas de score pour l'instant

" ?>