?> <?php } ?> </div> <hr /> <?php } ?> <?php if ($SECTION == 'reglages') { echo '<p class="astuce">Choisir une rubrique ci-dessus…</p>' . NL; $nb_inconnu = DB_STRUCTURE_BILAN::DB_compter_modes_synthese_inconnu(); $s = $nb_inconnu > 1 ? 's' : ''; echo $nb_inconnu ? '<label class="alerte">Il y a ' . $nb_inconnu . ' référentiel' . $s . ' <img alt="" src="./_img/bulle_aide.png" width="16" height="16" title="' . str_replace('§BR§', '<br />', html(html(DB_STRUCTURE_BILAN::DB_recuperer_modes_synthese_inconnu()))) . '" /> dont le format de synthèse est inconnu (donc non pris en compte).</label> <a href="./index.php?page=' . $PAGE . '&section=reglages_format_synthese">→ Configurer les formats de synthèse.</a>' . NL : '<label class="valide">Tous les référentiels ont un format de synthèse prédéfini.</label>' . NL; } elseif ($SECTION == 'assiduite') { $fichier_section = CHEMIN_DOSSIER_PAGES . $PAGE . '_' . $SECTION . '.php'; $PAGE = $PAGE . '_' . $SECTION; require $fichier_section; } else { if (substr($SECTION, 0, 8) == 'accueil_') { $BILAN_TYPE = substr($SECTION, 8); $SECTION = 'accueil'; } // Afficher la bonne page et appeler le bon js / ajax par la suite $fichier_section = CHEMIN_DOSSIER_PAGES . $PAGE . '_' . $SECTION . '.php'; if (!is_file($fichier_section)) { echo '<p class="danger">Page introuvable (paramètre manquant ou incorrect) !</p>' . NL; return; // Ne pas exécuter la suite de ce fichier inclus.
$tab_score_a_garder = array(); if ($item_nb) { $DB_TAB = DB_STRUCTURE_BILAN::DB_lister_date_last_eleves_items($liste_eleve, $liste_item); foreach ($DB_TAB as $DB_ROW) { $tab_score_a_garder[$DB_ROW['eleve_id']][$DB_ROW['item_id']] = $DB_ROW['date_last'] < $date_mysql_debut ? FALSE : TRUE; } $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($liste_eleve, $liste_item, $matiere_id, $date_mysql_start, $date_mysql_fin, $_SESSION['USER_PROFIL_TYPE'], FALSE); foreach ($DB_TAB as $DB_ROW) { if ($tab_score_a_garder[$DB_ROW['eleve_id']][$DB_ROW['item_id']]) { $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['eleve_id']][$DB_ROW['item_id']][] = array('note' => $DB_ROW['note'], 'date' => $DB_ROW['date'], 'info' => $DB_ROW['info']); } } } } if (!count($tab_eval) && !$make_officiel) { exit('Aucune évaluation trouvée sur la période ' . $date_debut . ' ~ ' . $date_fin . ' selon les paramètres choisis !'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// /* * Libérer de la place mémoire car les scripts de bilans sont assez gourmands.
// Javascript Layout::add( 'js_inline_before' , 'var date_mysql = "'.TODAY_MYSQL.'";' ); Layout::add( 'js_inline_before' , 'var is_multiple = '.$is_select_multiple.';' ); // Fabrication du tableau javascript "tab_groupe_periode" pour les jointures groupes/périodes // Fabrication du tableau javascript "tab_groupe_niveau" pour les jointures groupes/niveaux HtmlForm::fabriquer_tab_js_jointure_groupe( $tab_groupes , TRUE /*tab_groupe_periode*/ , TRUE /*tab_groupe_niveau*/ ); ?> <div><span class="manuel"><a class="pop_up" href="<?php echo SERVEUR_DOCUMENTAIRE ?>?fichier=releves_bilans__synthese_multimatiere">DOC : Synthèse pluridisciplinaire.</a></span></div> <div class="astuce">Un administrateur ou un directeur doit indiquer le type de synthèse adapté suivant chaque référentiel (<span class="manuel"><a class="pop_up" href="<?php echo SERVEUR_DOCUMENTAIRE ?>?fichier=releves_bilans__reglages_syntheses_bilans#toggle_type_synthese">DOC</a></span>).</div> <?php $nb_inconnu = DB_STRUCTURE_BILAN::DB_compter_modes_synthese_inconnu(); $s = ($nb_inconnu>1) ? 's' : '' ; echo ($nb_inconnu) ? '<label class="alerte">Il y a '.$nb_inconnu.' référentiel'.$s.' <img alt="" src="./_img/bulle_aide.png" width="16" height="16" title="'.str_replace('§BR§','<br />',html(html(DB_STRUCTURE_BILAN::DB_recuperer_modes_synthese_inconnu()))).'" /> dont le format de synthèse est inconnu (donc non pris en compte).</label>'.NL : '<label class="valide">Tous les référentiels ont un format de synthèse prédéfini.</label>'.NL ; ?> <hr /> <form action="#" method="post" id="form_select"><fieldset> <p class="<?php echo $class_form_eleve ?>"> <label class="tab" for="f_groupe">Classe / groupe :</label><?php echo $select_groupe ?><input type="hidden" id="f_groupe_type" name="f_groupe_type" value="" /><input type="hidden" id="f_groupe_nom" name="f_groupe_nom" value="" /> <span id="bloc_ordre" class="hide"><?php echo $select_eleves_ordre ?></span><label id="ajax_maj"> </label><br /> <span id="bloc_eleve" class="hide"><label class="tab" for="f_eleve">Élève(s) :</label><?php echo $select_eleves ?></span> </p> <p id="zone_periodes" class="<?php echo $class_form_periode ?>"> <label class="tab" for="f_periode"><img alt="" src="./_img/bulle_aide.png" width="16" height="16" title="Les items pris en compte sont ceux qui sont évalués<br />au moins une fois sur cette période." /> Période :</label><?php echo $select_periode ?> <span id="dates_perso" class="show"> du <input id="f_date_debut" name="f_date_debut" size="9" type="text" value="<?php echo jour_debut_annee_scolaire('french') ?>" /><q class="date_calendrier" title="Cliquer sur cette image pour importer une date depuis un calendrier !"></q> au <input id="f_date_fin" name="f_date_fin" size="9" type="text" value="<?php echo TODAY_FR ?>" /><q class="date_calendrier" title="Cliquer sur cette image pour importer une date depuis un calendrier !"></q> </span><br />
if ($type == 'pourcentage' && $mode == 'auto') { $tab_item_pilier[$socle_id] = $pilier_id; } } } $listing_entree_id = implode(',', $tab_entree_id); // //////////////////////////////////////////////////////////////////////////////////////////////////// // Récupération de la liste des élèves // //////////////////////////////////////////////////////////////////////////////////////////////////// $eleves_ordre = $groupe_type == 'Classes' ? 'alpha' : $eleves_ordre; $tab_eleve_infos = DB_STRUCTURE_BILAN::DB_lister_eleves_cibles($liste_eleve, $eleves_ordre, FALSE, TRUE, FALSE); // //////////////////////////////////////////////////////////////////////////////////////////////////// // Récupération de la liste des résultats [type "pourcentage" uniquement] // //////////////////////////////////////////////////////////////////////////////////////////////////// if ($type == 'pourcentage') { $DB_TAB = DB_STRUCTURE_BILAN::DB_lister_result_eleves_palier_sans_infos_items($liste_eleve, $listing_entree_id, $_SESSION['USER_PROFIL_TYPE']); foreach ($DB_TAB as $DB_ROW) { $test_comptabilise = $mode == 'auto' ? !in_array($tab_item_pilier[$DB_ROW['socle_id']], $tab_langue_piliers) || in_array($DB_ROW['matiere_id'], $tab_langues[$tab_eleve_infos[$DB_ROW['eleve_id']]['eleve_langue']]['tab_matiere_id']) : in_array($DB_ROW['matiere_id'], $tab_matiere_id); if ($test_comptabilise) { $tab_eval[$DB_ROW['eleve_id']][$DB_ROW['socle_id']][$DB_ROW['item_id']][]['note'] = $DB_ROW['note']; $tab_item[$DB_ROW['item_id']] = TRUE; } } if (count($tab_item)) { $listing_item_id = implode(',', array_keys($tab_item)); $DB_TAB = DB_STRUCTURE_SOCLE::DB_lister_infos_items($listing_item_id, FALSE); foreach ($DB_TAB as $DB_ROW) { $tab_item[$DB_ROW['item_id']] = array('calcul_methode' => $DB_ROW['calcul_methode'], 'calcul_limite' => $DB_ROW['calcul_limite']); } } }
} $tab_eleve_id = array(); foreach ($DB_TAB as $DB_ROW) { if (in_array($DB_ROW['user_id'], $tab_id_eleves_avec_notes)) { $tab_eleve_id[] = $DB_ROW['user_id']; } } if (empty($tab_eleve_id)) { exit('Aucun élève concerné dans ce regroupement !'); } $liste_eleve_id = implode(',', $tab_eleve_id); $nb_eleves = count($tab_eleve_id); // //////////////////////////////////////////////////////////////////////////////////////////////////// // Récupération de l'identité des élèves // //////////////////////////////////////////////////////////////////////////////////////////////////// $tab_eleve_infos = DB_STRUCTURE_BILAN::DB_lister_eleves_cibles($liste_eleve_id, 'alpha', FALSE, FALSE, TRUE); if (!is_array($tab_eleve_infos)) { exit($liste_eleve_id . 'Aucun élève trouvé correspondant aux identifiants transmis !'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Récupération de la liste des séries de brevet (probablement une seule) // //////////////////////////////////////////////////////////////////////////////////////////////////// $tab_brevet_serie = array(); foreach ($tab_eleve_infos as $eleve_id => $tab_eleve) { $tab_brevet_serie[$tab_eleve['eleve_brevet_serie']] = $tab_eleve['eleve_brevet_serie']; // Sera remplacé par le nom de la série après } if (!count($tab_brevet_serie) || isset($tab_brevet_serie['X'])) { exit('Élève(s) trouvé(s) sans association avec une série de brevet !'); } // ////////////////////////////////////////////////////////////////////////////////////////////////////
if(in_array($DB_ROW['user_id'],$tab_id_eleves_avec_notes)) { $tab_eleve_id[] = $DB_ROW['user_id']; } } if(empty($tab_eleve_id)) { exit('Aucun élève concerné dans ce regroupement !'); } $liste_eleve_id = implode(',',$tab_eleve_id); // //////////////////////////////////////////////////////////////////////////////////////////////////// // Récupération de l'identité des élèves // //////////////////////////////////////////////////////////////////////////////////////////////////// $tab_eleve_infos = DB_STRUCTURE_BILAN::DB_lister_eleves_cibles( $liste_eleve_id , 'alpha' /*eleves_ordre*/ , FALSE /*with_gepi*/ , FALSE /*with_langue*/ , TRUE /*with_brevet_serie*/ ); if(!is_array($tab_eleve_infos)) { exit('Aucun élève trouvé correspondant aux identifiants transmis !'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Récupération de la liste des séries de brevet (probablement une seule) // //////////////////////////////////////////////////////////////////////////////////////////////////// $tab_brevet_serie = array(); foreach($tab_eleve_infos as $eleve_id => $tab_eleve) { $tab_brevet_serie[$tab_eleve['eleve_brevet_serie']] = $tab_eleve['eleve_brevet_serie']; // Sera remplacé par le nom de la série après }
// Récupération de la liste des résultats des évaluations associées à ces items donnés d'une ou plusieurs matières, pour les élèves selectionnés, sur la période sélectionnée // Comme un seul élève est concerné à chaque appel, il n'y a pas le problème de certains items à éliminer car pouvent potentiellement apparaitre dans des relevés d'élèves alors qu'ils n'ont pas été interrogés sur la période considérée (mais un camarade oui). // Il faut aussi retenir, à une date donnée, combien d'évaluations sont concernées. // //////////////////////////////////////////////////////////////////////////////////////////////////// function date_mysql_to_date_js($date_mysql) { list($annee,$mois,$jour) = explode('-',$date_mysql); return 'Date.UTC('.$annee.','.((int)$mois-1).','.(int)$jour.')'; } $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 = ($item_nb) ? DB_STRUCTURE_BILAN::DB_lister_result_eleves_items($eleve_id , $liste_item_id , -1 /*matiere_id*/ , $date_mysql_start , $date_mysql_fin , $_SESSION['USER_PROFIL_TYPE'] , FALSE /*onlyprof*/ , FALSE /*onlynote*/ , TRUE /*first_order_by_date*/ ) : array() ; 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['eleve_id']][$DB_ROW['item_id']][] = array('note'=>$DB_ROW['note']); if($objet=='matiere_synthese') { $rubrique_ref = $tab_item[$DB_ROW['item_id']][0]['synthese_ref']; } elseif($objet=='selection') { $rubrique_ref = $tab_item[$DB_ROW['item_id']][0]['item_ref']; $tab_rubrique[ $tab_item[$DB_ROW['item_id']][0]['item_ref'] ] = $tab_item[$DB_ROW['item_id']][0]['item_nom']; }
{ // Période concernée $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']; // Rubriques concernées $tab_rubriques = array() ; if($OBJET=='modifier') { $DB_TAB = (in_array($BILAN_TYPE,array('releve','bulletin'))) ? DB_STRUCTURE_BILAN::DB_recuperer_matieres_travaillees( $classe_id , $liste_matiere_id , $date_mysql_debut , $date_mysql_fin , $_SESSION['USER_ID'] ) : DB_STRUCTURE_SOCLE::DB_recuperer_piliers( (int)substr($BILAN_TYPE,-1) ); foreach($DB_TAB as $DB_ROW) { $tab_rubriques[$DB_ROW['rubrique_id']] = $DB_ROW['rubrique_nom']; } } else if($OBJET=='tamponner') { $tab_rubriques = array( 0 => 'Synthèse générale' ) ; } // Élèves concernés $DB_TAB = (!$is_sous_groupe) ? DB_STRUCTURE_COMMUN::DB_lister_users_regroupement( 'eleve' /*profil_type*/ , 1 /*statut*/ , 'classe' , $classe_id , 'alpha' /*eleves_ordre*/ ) : DB_STRUCTURE_COMMUN::DB_lister_eleves_classe_et_groupe($classe_id,$groupe_id) ; if(empty($DB_TAB)) { exit('Aucun élève trouvé dans ce regroupement !');
$courriel_bilan = Sesamail::mail( $tab['mailto'] , 'Notification - Bilan officiel, étape de saisie' , $tab['contenu'] , $tab['mailto'] ); } } } } } } // Puce avertissement mode de synthèse non configuré $li = ''; if($BILAN_TYPE=='bulletin') { $li = '<li><span class="astuce">Un administrateur ou un directeur doit indiquer le type de synthèse adapté suivant chaque référentiel (<span class="manuel"><a class="pop_up" href="'.SERVEUR_DOCUMENTAIRE.'?fichier=releves_bilans__reglages_syntheses_bilans#toggle_type_synthese">DOC</a></span>).</span></li>'.NL; $nb_inconnu = DB_STRUCTURE_BILAN::DB_compter_modes_synthese_inconnu(); $s = ($nb_inconnu>1) ? 's' : '' ; $li .= ($nb_inconnu) ? '<li><label class="alerte">Il y a '.$nb_inconnu.' référentiel'.$s.' <img alt="" src="./_img/bulle_aide.png" width="16" height="16" title="'.str_replace('§BR§','<br />',html(html(DB_STRUCTURE_BILAN::DB_recuperer_modes_synthese_inconnu()))).'" /> dont le format de synthèse est inconnu (donc non pris en compte).</label></li>'.NL : '<li><label class="valide">Tous les référentiels ont un format de synthèse prédéfini.</label></li>'.NL ; // Volontairement 2 html() pour le title sinon <* est pris comme une balise html par l'infobulle. } // Javascript Layout::add( 'js_inline_before' , 'var USER_ID = '.$_SESSION['USER_ID'].';' ); Layout::add( 'js_inline_before' , 'var TODAY_FR = "'.TODAY_FR.'";' ); Layout::add( 'js_inline_before' , 'var BILAN_TYPE = "'.$BILAN_TYPE.'";' ); Layout::add( 'js_inline_before' , 'var CONVERSION_SUR_20 = '.$_SESSION['OFFICIEL']['BULLETIN_CONVERSION_SUR_20'].';' ); Layout::add( 'js_inline_before' , 'var BACKGROUND_NA = "'.$_SESSION['BACKGROUND_NA'].'";' ); Layout::add( 'js_inline_before' , 'var BACKGROUND_VA = "'.$_SESSION['BACKGROUND_VA'].'";' ); Layout::add( 'js_inline_before' , 'var BACKGROUND_A = "'.$_SESSION['BACKGROUND_A'].'";' ); Layout::add( 'js_inline_before' , 'var URL_IMPORT = "'.URL_DIR_IMPORT.'";' ); Layout::add( 'js_inline_before' , 'var APP_RUBRIQUE_LONGUEUR = '.$_SESSION['OFFICIEL'][$tab_types[$BILAN_TYPE]['droit'].'_APPRECIATION_RUBRIQUE_LONGUEUR'].';' ); Layout::add( 'js_inline_before' , 'var APP_GENERALE_LONGUEUR = '.$_SESSION['OFFICIEL'][$tab_types[$BILAN_TYPE]['droit'].'_APPRECIATION_GENERALE_LONGUEUR'].';' ); Layout::add( 'js_inline_before' , 'var APP_RUBRIQUE_REPORT = '.$_SESSION['OFFICIEL'][$tab_types[$BILAN_TYPE]['droit'].'_APPRECIATION_RUBRIQUE_REPORT'].';' ); Layout::add( 'js_inline_before' , 'var APP_GENERALE_REPORT = '.$_SESSION['OFFICIEL'][$tab_types[$BILAN_TYPE]['droit'].'_APPRECIATION_GENERALE_REPORT'].';' );
/** * Fabrication de tableau javascript de jointures à partir des groupes * * @param array $tab_groupes tableau des données [i] => [valeur texte optgroup] * @param bool $tab_groupe_periode charger ou non "tab_groupe_periode" pour les jointures groupes/périodes * @param bool $tab_groupe_niveau charger ou non "tab_groupe_niveau" pour les jointures groupes/niveaux * @return void alimente Layout::$tab_js_inline[] */ public static function fabriquer_tab_js_jointure_groupe($tab_groupes, $tab_groupe_periode, $tab_groupe_niveau) { Layout::add('js_inline_before', 'var tab_groupe_periode = new Array();'); Layout::add('js_inline_before', 'var tab_groupe_niveau = new Array();'); if (is_array($tab_groupes)) { // On liste les ids des classes et groupes $tab_id_classe_groupe = array(); foreach ($tab_groupes as $tab_groupe_infos) { if (!isset($tab_groupe_infos['optgroup']) || $tab_groupe_infos['optgroup'] != 'besoin') { $tab_id_classe_groupe[] = $tab_groupe_infos['valeur']; } } if (count($tab_id_classe_groupe)) { $listing_groupe_id = implode(',', $tab_id_classe_groupe); // Charger le tableau js $tab_groupe_periode de jointures groupes/périodes if ($tab_groupe_periode) { $tab_memo_groupes = array(); $DB_TAB = DB_STRUCTURE_COMMUN::DB_lister_jointure_groupe_periode($listing_groupe_id); foreach ($DB_TAB as $DB_ROW) { if (!isset($tab_memo_groupes[$DB_ROW['groupe_id']])) { $tab_memo_groupes[$DB_ROW['groupe_id']] = TRUE; Layout::add('js_inline_before', 'tab_groupe_periode[' . $DB_ROW['groupe_id'] . '] = new Array();'); } Layout::add('js_inline_before', 'tab_groupe_periode[' . $DB_ROW['groupe_id'] . '][' . $DB_ROW['periode_id'] . ']="' . $DB_ROW['jointure_date_debut'] . '_' . $DB_ROW['jointure_date_fin'] . '";'); } } // Charger le tableau js $tab_groupe_niveau de jointures groupes/périodes if ($tab_groupe_niveau) { $DB_TAB = DB_STRUCTURE_BILAN::DB_recuperer_niveau_groupes($listing_groupe_id); foreach ($DB_TAB as $DB_ROW) { Layout::add('js_inline_before', 'tab_groupe_niveau[' . $DB_ROW['groupe_id'] . '] = new Array(' . $DB_ROW['niveau_id'] . ',"' . html($DB_ROW['niveau_nom']) . '");'); } } } } }
/** * 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; }
$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 // Comme un seul élève est concerné à chaque appel, il n'y a pas le problème de certains items à éliminer car pouvent potentiellement apparaitre dans des relevés d'élèves alors qu'ils n'ont pas été interrogés sur la période considérée (mais un camarade oui). // Il faut aussi retenir, à une date donnée, combien d'évaluations sont concernées. // //////////////////////////////////////////////////////////////////////////////////////////////////// $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 = $item_nb ? 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, FALSE, TRUE) : array(); 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['eleve_id']][$DB_ROW['item_id']][] = array('note' => $DB_ROW['note']); $tab_matiere_for_item[$DB_ROW['item_id']] = $DB_ROW['matiere_id']; $date = $DB_ROW['date'] >= $date_mysql_debut ? $DB_ROW['date'] : $date_mysql_debut; $tab_date[$DB_ROW['eleve_id']][$date][$DB_ROW['item_id']] = count($tab_eval[$DB_ROW['eleve_id']][$DB_ROW['item_id']]); } } // //////////////////////////////////////////////////////////////////////////////////////////////////// /* * Libérer de la place mémoire car les scripts de bilans sont assez gourmands. * Supprimer $DB_TAB ne fonctionne pas si on ne force pas auparavant la fermeture de la connexion. * SebR devrait peut-être envisager d'ajouter une méthode qui libère cette mémoire, si c'est possible... */
$tab_eleve = isset($_POST['f_eleve']) ? is_array($_POST['f_eleve']) ? $_POST['f_eleve'] : explode(',', $_POST['f_eleve']) : array(); $tab_pilier = array_filter(Clean::map_entier($tab_pilier), 'positif'); $tab_eleve = array_filter(Clean::map_entier($tab_eleve), 'positif'); $listing_eleve_id = implode(',', $tab_eleve); // //////////////////////////////////////////////////////////////////////////////////////////////////// // Afficher le tableau avec les états de validations ET NE CONSERVER QUE LES VALIDATIONS POSITIVES // //////////////////////////////////////////////////////////////////////////////////////////////////// if ($action == 'Afficher_bilan' && $palier_id && count($tab_pilier) && count($tab_eleve) && $groupe_type && $eleves_ordre) { Form::save_choix('validation_socle_pilier'); $affichage = ''; // Tableau des langues $tfoot = ''; require CHEMIN_DOSSIER_INCLUDE . 'tableau_langues_socle.php'; // Récupérer les données des élèves $eleves_ordre = $groupe_type == 'Classes' ? 'alpha' : $eleves_ordre; $tab_eleve_infos = DB_STRUCTURE_BILAN::DB_lister_eleves_cibles($listing_eleve_id, $eleves_ordre, FALSE, TRUE, FALSE); if (!is_array($tab_eleve_infos)) { exit('Aucun élève trouvé correspondant aux identifiants transmis !'); } // Afficher la première ligne du tableau avec les étiquettes des élèves $tab_eleve_id = array(); // listing des ids des élèves mis à jour au cas où la récupération dans la base soit différente des ids transmis... $affichage .= '<thead><tr>'; foreach ($tab_eleve_infos as $eleve_id => $tab_eleve) { extract($tab_eleve); // $eleve_nom $eleve_prenom $eleve_id_gepi $affichage .= '<th><img id="I' . $eleve_id . '" alt="' . html($eleve_nom . ' ' . $eleve_prenom) . '" src="./_img/php/etiquette.php?dossier=' . $_SESSION['BASE'] . '&nom=' . urlencode($eleve_nom) . '&prenom=' . urlencode($eleve_prenom) . '" /></th>'; $tfoot .= '<td class="L' . $eleve_langue . '" title="' . $tab_langues[$eleve_langue]['texte'] . '"></td>'; $tab_eleve_id[] = $eleve_id; } $affichage .= '<th class="nu"> </th>';