// Restreindre la recherche à une période donnée, cas d'une date personnalisée (toujours le cas pour une sélection d'élèves) if($aff_periode==0) { // Formater les dates $date_debut_mysql = convert_date_french_to_mysql($date_debut); $date_fin_mysql = convert_date_french_to_mysql($date_fin); // Vérifier que la date de début est antérieure à la date de fin if($date_debut_mysql>$date_fin_mysql) { exit('Erreur : la date de début est postérieure à la date de fin !'); } } // Restreindre la recherche à une période donnée, cas d'une période associée à une classe ou à un groupe else { $DB_ROW = DB_STRUCTURE_COMMUN::DB_recuperer_dates_periode($aff_classe_id,$aff_periode); if(!count($DB_ROW)) { exit('Erreur : cette classe et cette période ne sont pas reliées !'); } // Formater les dates $date_debut_mysql = $DB_ROW['jointure_date_debut']; $date_fin_mysql = $DB_ROW['jointure_date_fin']; } // Lister les évaluations $script = ''; $classe_id = ($aff_classe_txt!='d2') ? $aff_classe_id : -1 ; // 'd2' est transmis si on veut toutes les classes / tous les groupes ; classe_id vaut 0 si selection d'élèves $DB_TAB = DB_STRUCTURE_PROFESSEUR::DB_lister_devoirs_prof($_SESSION['USER_ID'],$classe_id,$date_debut_mysql,$date_fin_mysql); foreach($DB_TAB as $DB_ROW) { $date_affich = convert_date_mysql_to_french($DB_ROW['devoir_date']);
if (!$aff_lien) { $texte_lien_apres = ''; } $toggle_class = $aff_start ? 'toggle_moins' : 'toggle_plus'; $toggle_etat = $aff_start ? '' : ' class="hide"'; $avec_texte_nombre = !$make_officiel || $_SESSION['OFFICIEL']['BULLETIN_ACQUIS_TEXTE_NOMBRE'] ? TRUE : FALSE; $avec_texte_code = !$make_officiel || $_SESSION['OFFICIEL']['BULLETIN_ACQUIS_TEXTE_CODE'] ? TRUE : FALSE; } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Période concernée // //////////////////////////////////////////////////////////////////////////////////////////////////// if ($periode_id == 0) { $date_mysql_debut = convert_date_french_to_mysql($date_debut); $date_mysql_fin = convert_date_french_to_mysql($date_fin); } else { $DB_ROW = DB_STRUCTURE_COMMUN::DB_recuperer_dates_periode($groupe_id, $periode_id); if (empty($DB_ROW)) { exit('La classe et la période ne sont pas reliées !'); } $date_mysql_debut = $DB_ROW['jointure_date_debut']; $date_mysql_fin = $DB_ROW['jointure_date_fin']; $date_debut = convert_date_mysql_to_french($date_mysql_debut); $date_fin = convert_date_mysql_to_french($date_mysql_fin); } if ($date_mysql_debut > $date_mysql_fin) { exit('La date de début est postérieure à la date de fin !'); } $tab_precision_retroactif = array('auto' => 'notes antérieures selon référentiels', 'oui' => 'avec notes antérieures', 'non' => 'sans notes antérieures', 'annuel' => 'notes antérieures de l\'année scolaire'); $precision_socle = $only_socle ? ', restriction au socle' : ''; $precision_niveau = $only_niveau ? ', restriction au niveau de l\'élève' : ''; $texte_periode = 'Du ' . $date_debut . ' au ' . $date_fin . '.';
/** * 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; }