// Si cet élève a été évalué... if(isset($tab_eval[$eleve_id])) { $tab_eleve[$key]['nb_items'] = 0; // Pour chaque matiere... foreach($tab_matiere as $matiere_id => $matiere_nom) { // Si cet élève a été évalué dans cette matière... if(isset($tab_eval[$eleve_id][$matiere_id])) { // Pour chaque item... foreach($tab_eval[$eleve_id][$matiere_id] as $item_id => $tab_devoirs) { extract($tab_item[$item_id][0]); // $item_ref $item_nom $item_coef $item_socle $item_lien $calcul_methode $calcul_limite // calcul du bilan de l'item $tab_score_eleve_item[$eleve_id][$matiere_id][$item_id] = calculer_score($tab_devoirs,$calcul_methode,$calcul_limite); $tab_score_item_eleve[$item_id][$eleve_id] = $tab_score_eleve_item[$eleve_id][$matiere_id][$item_id]; } // calcul des bilans des scores $tableau_score_filtre = array_filter($tab_score_eleve_item[$eleve_id][$matiere_id],'non_nul'); $nb_scores = count( $tableau_score_filtre ); // la moyenne peut être pondérée par des coefficients $somme_scores_ponderes = 0; $somme_coefs = 0; if($nb_scores) { foreach($tableau_score_filtre as $item_id => $item_score) { $somme_scores_ponderes += $item_score*$tab_item[$item_id][0]['item_coef']; $somme_coefs += $tab_item[$item_id][0]['item_coef']; }
*/ // Pour chaque élève... if (empty($is_appreciation_groupe)) { $forcer_profil_sigle = $make_officiel ? 'TUT' : NULL; $forcer_profil_type = $make_officiel ? 'parent' : NULL; $afficher_score = test_user_droit_specifique($_SESSION['DROIT_VOIR_SCORE_BILAN'], NULL, 0, $forcer_profil_sigle, $forcer_profil_type); foreach ($tab_eleve_infos as $eleve_id => $tab_eleve) { // Si cet élève a été évalué... if (isset($tab_eval[$eleve_id])) { // Pour chaque item on calcule son score bilan, et on mémorise les infos pour le détail HTML foreach ($tab_eval[$eleve_id] as $item_id => $tab_devoirs) { // le score bilan extract($tab_item[$item_id][0]); // $item_ref $item_nom $item_coef $item_cart $item_socle $item_lien $matiere_id $calcul_methode $calcul_limite $calcul_retroactif $synthese_ref $matiere_nb_demandes = $tab_matiere[$matiere_id]['matiere_nb_demandes']; $score = calculer_score($tab_devoirs, $calcul_methode, $calcul_limite); $tab_score_eleve_item[$eleve_id][$matiere_id][$synthese_ref][$item_id] = $score; // le détail HTML if ($make_html) { if ($score !== FALSE) { $indice = test_A($score) ? 'A' : (test_NA($score) ? 'NA' : 'VA'); if ($aff_coef) { $texte_coef = '[' . $item_coef . '] '; } if ($aff_socle) { $texte_socle = $item_socle ? '[S] ' : '[–] '; } if ($aff_lien) { $texte_lien_avant = $item_lien ? '<a target="_blank" href="' . html($item_lien) . '">' : ''; $texte_lien_apres = $item_lien ? '</a>' : ''; }
exit('ok'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Actualiser un score // //////////////////////////////////////////////////////////////////////////////////////////////////// if( ($action=='actualiser_score') && $demande_id && $item_id && ($score>-2) ) { $tab_devoirs = array(); $DB_TAB = DB_STRUCTURE_DEMANDE::DB_lister_result_eleve_item( $_SESSION['USER_ID'] , $item_id ); foreach($DB_TAB as $DB_ROW) { $tab_devoirs[] = array('note'=>$DB_ROW['note']); } $score_new = (count($tab_devoirs)) ? calculer_score($tab_devoirs,$DB_ROW['calcul_methode'],$DB_ROW['calcul_limite']) : FALSE ; if( ( ($score==-1) && ($score_new!==FALSE) ) || ( ($score>-1) && ($score_new!==$score) ) ) { // maj score $score_new_bdd = ($score_new!=-1) ? $score_new : NULL ; DB_STRUCTURE_DEMANDE::DB_modifier_demande_score( $demande_id , $score_new_bdd ); } $score_retour = str_replace( '</td>' , ' <q class="actualiser" title="Actualiser le score (enregistré lors de la demande)."></q></td>' , Html::td_score( $score_new , 'score' /*methode_tri*/ , '' /*pourcent*/ ) ); exit($score_retour); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // On ne devrait pas en arriver là... // //////////////////////////////////////////////////////////////////////////////////////////////////// exit('Erreur avec les données transmises !');
// Du coup, on choisit de récupérer les notes et de calculer les scores pour tout le monde. $tab_devoirs = array(); $tab_scores = array(); $DB_TAB = DB_STRUCTURE_ELEVE::DB_lister_result_eleve_items($eleve_id, $liste_item_id, $_SESSION['USER_PROFIL_TYPE']); foreach ($DB_TAB as $DB_ROW) { $tab_devoirs[$DB_ROW['item_id']][] = array('note' => $DB_ROW['note']); } // préparer les lignes $tab_affich = array(); foreach ($tab_liste_item as $item_id) { $DB_ROW = $DB_TAB_COMP[$item_id][0]; $item_ref = $DB_ROW['item_ref']; $texte_socle = $DB_ROW['entree_id'] ? '[S] ' : '[–] '; $texte_lien_avant = $DB_ROW['item_lien'] ? '<a target="_blank" href="' . html($DB_ROW['item_lien']) . '">' : ''; $texte_lien_apres = $DB_ROW['item_lien'] ? '</a>' : ''; $tab_scores[$item_id] = isset($tab_devoirs[$item_id]) ? calculer_score($tab_devoirs[$item_id], $DB_ROW['referentiel_calcul_methode'], $DB_ROW['referentiel_calcul_limite']) : FALSE; if ($_SESSION['USER_PROFIL_TYPE'] != 'eleve') { $texte_demande_eval = ''; } elseif (!$DB_ROW['matiere_nb_demandes']) { $texte_demande_eval = '<q class="demander_non" title="Pas de demande autorisée pour les items de cette matière."></q>'; } elseif (!$DB_ROW['item_cart']) { $texte_demande_eval = '<q class="demander_non" title="Pas de demande autorisée pour cet item précis."></q>'; } else { $texte_demande_eval = '<q class="demander_add" id="demande_' . $DB_ROW['matiere_id'] . '_' . $item_id . '_' . $tab_scores[$item_id] . '" title="Ajouter aux demandes d\'évaluations."></q>'; } $tab_affich[$item_id] = '<td>' . html($item_ref) . '</td><td>' . $texte_socle . $texte_lien_avant . html($DB_ROW['item_nom']) . $texte_lien_apres . $texte_demande_eval . '</td>'; } // récupérer les saisies et les ajouter $tab_notes = array(); $DB_TAB = DB_STRUCTURE_ELEVE::DB_lister_saisies_devoir_eleve($devoir_id, $eleve_id, $_SESSION['USER_PROFIL_TYPE'], FALSE); foreach ($DB_TAB as $DB_ROW) {
// C'est parti !!! // //////////////////////////////////////////////////////////////////////////////////////////////////// $max_value = ($conversion_sur_20) ? 20 : 100 ; if(count($tab_date)) { // Pour chaque évaluation... foreach($tab_date[$eleve_id] as $date_js => $tab_items) { $tab_rubrique_todo_moyenne = array(); // On (re)-calcule les scores des items concernés foreach($tab_items as $item_id => $nb_evals) { extract($tab_item[$item_id][0]); // $item_coef $calcul_methode $calcul_limite $calcul_retroactif $rubrique_id = $tab_rubrique_for_item[$item_id]; $tab_score_eleve_item[$eleve_id][$rubrique_id][$item_id] = calculer_score(array_slice($tab_eval[$eleve_id][$item_id],0,$nb_evals),$calcul_methode,$calcul_limite); $tab_rubrique_todo_moyenne[] = $rubrique_id; } // On (re)-calcule les moyennes des matières concernées foreach($tab_rubrique_todo_moyenne as $rubrique_id) { // calcul des bilans des scores $tableau_score_filtre = array_filter($tab_score_eleve_item[$eleve_id][$rubrique_id],'non_vide'); $nb_scores = count( $tableau_score_filtre ); // la moyenne peut être pondérée par des coefficients $somme_scores_ponderes = 0; $somme_coefs = 0; if($nb_scores) { foreach($tableau_score_filtre as $item_id => $item_score) {
$tab_devoirs = array(); $DB_TAB = DB_STRUCTURE_ELEVE::DB_lister_result_eleve_items($eleve_id,$liste_item_id); foreach($DB_TAB as $DB_ROW) { $tab_devoirs[$DB_ROW['item_id']][] = array('note'=>$DB_ROW['note']); } // préparer les lignes $tab_affich = array(); foreach($tab_liste_item as $item_id) { $DB_ROW = $DB_TAB_COMP[$item_id][0]; $item_ref = $DB_ROW['item_ref']; $texte_socle = ($DB_ROW['entree_id']) ? '[S] ' : '[–] '; $texte_lien_avant = ($DB_ROW['item_lien']) ? '<a class="lien_ext" href="'.html($DB_ROW['item_lien']).'">' : ''; $texte_lien_apres = ($DB_ROW['item_lien']) ? '</a>' : ''; $score = (isset($tab_devoirs[$item_id])) ? calculer_score($tab_devoirs[$item_id],$DB_ROW['referentiel_calcul_methode'],$DB_ROW['referentiel_calcul_limite']) : false ; $texte_demande_eval = ($_SESSION['USER_PROFIL']!='eleve') ? '' : ( ($DB_ROW['item_cart']) ? '<q class="demander_add" id="demande_'.$DB_ROW['matiere_id'].'_'.$item_id.'_'.$score.'" title="Ajouter aux demandes d\'évaluations."></q>' : '<q class="demander_non" title="Demande interdite."></q>' ) ; $tab_affich[$item_id] = '<tr><td>'.html($item_ref).'</td><td>'.$texte_socle.$texte_lien_avant.html($DB_ROW['item_nom']).$texte_lien_apres.$texte_demande_eval.'</td><td class="hc">-</td>'.affich_score_html($score,$methode_tri='score',$pourcent='').'</tr>'; } // récupérer les saisies et les ajouter $DB_TAB = DB_STRUCTURE_ELEVE::DB_lister_saisies_devoir_eleve( $devoir_id , $eleve_id , FALSE /*with_REQ*/ ); foreach($DB_TAB as $DB_ROW) { // Test pour éviter les pbs des élèves changés de groupes ou des items modifiés en cours de route if(isset($tab_affich[$DB_ROW['item_id']])) { $tab_affich[$DB_ROW['item_id']] = str_replace('>-<','>'.affich_note_html($DB_ROW['saisie_note'],'','',$tri=true).'<',$tab_affich[$DB_ROW['item_id']]); } } exit(implode('',$tab_affich)); }
/** * Pour un bulletin d'une période / d'un élève et d'une matière donné, calculer et forcer la mise à jour d'une moyenne (effacée ou figée). * * @param int $periode_id * @param int $classe_id * @param int $eleve_id * @param array $matiere_id * @param string $retroactif oui|non|auto * @return float la moyenne en question (FALSE si pb) */ function calculer_et_enregistrer_moyenne_precise_bulletin($periode_id, $classe_id, $eleve_id, $matiere_id, $retroactif) { // Dates période $DB_ROW = DB_STRUCTURE_COMMUN::DB_recuperer_dates_periode($classe_id, $periode_id); if (empty($DB_ROW)) { return FALSE; } // Récupération de la liste des items travaillés $date_mysql_debut = $DB_ROW['jointure_date_debut']; $date_mysql_fin = $DB_ROW['jointure_date_fin']; list($tab_item, $tab_matiere) = DB_STRUCTURE_BILAN::DB_recuperer_items_travailles($eleve_id, $matiere_id, $date_mysql_debut, $date_mysql_fin); $item_nb = count($tab_item); if (!$item_nb) { return FALSE; } $tab_liste_item = array_keys($tab_item); $liste_item_id = implode(',', $tab_liste_item); // Récupération de la liste des résultats des évaluations associées à ces items donnés d'une ou plusieurs matieres, pour les élèves selectionnés, sur la période sélectionnée $date_mysql_debut_annee_scolaire = jour_debut_annee_scolaire('mysql'); if ($retroactif == 'non') { $date_mysql_start = $date_mysql_debut; } elseif ($retroactif == 'annuel') { $date_mysql_start = $date_mysql_debut_annee_scolaire; } else { $date_mysql_start = FALSE; } // 'oui' | 'auto' ; en 'auto' il faut faire le tri après $DB_TAB = DB_STRUCTURE_BILAN::DB_lister_result_eleves_items($eleve_id, $liste_item_id, -1, $date_mysql_start, $date_mysql_fin, $_SESSION['USER_PROFIL_TYPE'], FALSE); if (empty($DB_TAB)) { return FALSE; } foreach ($DB_TAB as $DB_ROW) { $retro_item = $tab_item[$DB_ROW['item_id']][0]['calcul_retroactif']; if ($retroactif != 'auto' || $retro_item == 'oui' || $retro_item == 'non' && $DB_ROW['date'] >= $date_mysql_debut || $retro_item == 'annuel' && $DB_ROW['date'] >= $date_mysql_debut_annee_scolaire) { $tab_eval[$DB_ROW['item_id']][] = array('note' => $DB_ROW['note']); } } if (empty($tab_eval)) { return FALSE; } // On calcule la moyenne voulue $tab_score = array(); // Pour chaque item... foreach ($tab_eval as $item_id => $tab_devoirs) { extract($tab_item[$item_id][0]); // $item_ref $item_nom $item_coef $item_socle $item_lien $calcul_methode $calcul_limite // calcul du bilan de l'item $tab_score[$item_id] = calculer_score($tab_devoirs, $calcul_methode, $calcul_limite); } // calcul des bilans des scores $tableau_score_filtre = array_filter($tab_score, 'non_vide'); $nb_scores = count($tableau_score_filtre); // la moyenne peut être pondérée par des coefficients $somme_scores_ponderes = 0; $somme_coefs = 0; if ($nb_scores) { foreach ($tableau_score_filtre as $item_id => $item_score) { $somme_scores_ponderes += $item_score * $tab_item[$item_id][0]['item_coef']; $somme_coefs += $tab_item[$item_id][0]['item_coef']; } } // et voilà la moyenne des pourcentages d'acquisition if (!$somme_coefs) { return FALSE; } $moyennes_calculee = round($somme_scores_ponderes / $somme_coefs, 0) / 5; DB_STRUCTURE_OFFICIEL::DB_modifier_bilan_officiel_saisie('bulletin', $periode_id, $eleve_id, $matiere_id, 0, 'eleve', $moyennes_calculee, ''); return $moyennes_calculee; }