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.audit, 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); /* 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['audit']]++; } 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é { $uniq=$m->select("engagements","count(*) as c","id_referentiels=".$k); $nbeng[$r]["t"]=$uniq[0]['c']; $nbeng[$k]["t"]=$uniq[0]['c']; $uniq=$m->select("engagements","count(*) as c","importances=1 and id_referentiels=".$k); $nbeng[$r]["1"]=$uniq[0]['c']; $nbeng[$k]["1"]=$uniq[0]['c']; $uniq=$m->select("engagements","count(*) as c","importances=2 and id_referentiels=".$k); $nbeng[$r]["2"]=$uniq[0]['c']; $nbeng[$k]["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)) { //liste des id d'audits dans chaque référentiels pour cet utilisateur $q3="select id,id_referentiels from audits where id_auditeur=".$u['id']." and id_utilisateurs=".$id_utilisateur; $l3=$m->select_str($q3); foreach($l3 as $dataaudits) $listeaudits[$dataaudits['id_referentiels']]=$dataaudits['id']; //construisons le tableau de sortie outtab foreach($res as $numref=>$referentiel) { if ($u['statuts']=='animateur')$outtab[$numref]["nom"]="".$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"; //récupération du nombre de oui pour affichage $nbnon=$importance['n']?$importance['n']:"0"; //récupération du nombre de non pour affichage $nbnp=$importance['np']?$importance['np']:"0"; //récupération du nombre de np pour affichage $nbrep[$noimport]=0;//réinitialisation du nombre de réponse pour cette importance 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 au total if($importance['n'])$nbtotn+=(int)$importance['n'];//nombre de non au total if($importance['np'])$nbtotnp+=(int)$importance['np'];//nombre d'inapplicables au total 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']; //récupération du nb total d'engagements selon la query tout en haut $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.)"; if($globalscore["nbtoto"]) //on n'affiche que si on a des audits déjà remplis { $table=new sorttable("tab_scores"); $table->titles=array("Référentiel", "Score"); $table->datas=$outtab; print "

Tableau des résultats d'audits

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

Pas de score d'audit pour l'instant

"; } else print "

Pas de score d'audit pour l'instant

"; ?>