Esempio n. 1
0
$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.
// 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'];
    }
Esempio n. 3
0
// =====> Cas n°1 : moyenne des scores d'acquisition d'items matières sélectionnés
// =====> Cas n°2 : pourcentage d'items acquis d'items matières sélectionnés

if( $is_matiere_items_bilanMS || $is_matiere_items_bilanPA )
{
  $DB_TAB = DB_STRUCTURE_SOCLE::DB_lister_infos_items( $compet_liste , TRUE /*detail*/ );
  foreach($DB_TAB as $DB_ROW)
  {
    $tab_item[$DB_ROW['item_id']] = array(
      'item_coef'      => $DB_ROW['item_coef'],
      'calcul_methode' => $DB_ROW['calcul_methode'],
      'calcul_limite'  => $DB_ROW['calcul_limite'],
    );
  }
  // Un directeur effectuant une recherche sur un grand nombre d'items pour tous les élèves de l'établissement peut provoquer un dépassement de mémoire.
  $DB_TAB = DB_STRUCTURE_BILAN::DB_lister_result_eleves_items( $liste_eleve , $compet_liste , 0 /*matiere_id*/ , NULL /*date_mysql_debut*/ , NULL /*date_mysql_fin*/ , $_SESSION['USER_PROFIL_TYPE'] , FALSE /*onlyprof*/ , TRUE /*onlynote*/ );
  foreach($DB_TAB as $DB_ROW)
  {
    $tab_eval[$DB_ROW['eleve_id']][$DB_ROW['item_id']][]['note'] = $DB_ROW['note'];
  }
}

// =====> Cas n°3 : pourcentage d'items disciplinaires acquis d'un item du socle

if( $is_socle_item_pourcentage )
{
  $is_langue = (in_array($socle_item_id,$tab_langue_items)) ? TRUE : FALSE ;
  $DB_TAB = DB_STRUCTURE_BILAN::DB_lister_result_eleves_palier_sans_infos_items($liste_eleve , $socle_item_id , $_SESSION['USER_PROFIL_TYPE']);
  foreach($DB_TAB as $DB_ROW)
  {
    $test_comptabilise = ($mode=='auto') ? ( !$is_langue || in_array($DB_ROW['matiere_id'],$tab_langues[$tab_eleve_langue[$DB_ROW['eleve_id']]]['tab_matiere_id']) ) : in_array($DB_ROW['matiere_id'],$tab_matiere_id) ;
Esempio n. 4
0
/**
 * 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;
}
Esempio n. 5
0
$tab_eval = array();
// [eleve_id][item_id][]['note'] => note   [type "pourcentage" uniquement]
$tab_item = array();
// [item_id] => array(calcul_methode,calcul_limite); [type "pourcentage" uniquement]
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Récupération des données
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// =====> Cas n°1 : moyenne des scores d'acquisition d'items matières sélectionnés
// =====> Cas n°2 : pourcentage d'items acquis d'items matières sélectionnés
if ($is_matiere_items_bilanMS || $is_matiere_items_bilanPA) {
    $DB_TAB = DB_STRUCTURE_SOCLE::DB_lister_infos_items($compet_liste, TRUE);
    foreach ($DB_TAB as $DB_ROW) {
        $tab_item[$DB_ROW['item_id']] = array('item_coef' => $DB_ROW['item_coef'], 'calcul_methode' => $DB_ROW['calcul_methode'], 'calcul_limite' => $DB_ROW['calcul_limite']);
    }
    // Un directeur effectuant une recherche sur un grand nombre d'items pour tous les élèves de l'établissement peut provoquer un dépassement de mémoire.
    $DB_TAB = DB_STRUCTURE_BILAN::DB_lister_result_eleves_items($liste_eleve, $compet_liste, 0, NULL, NULL, $_SESSION['USER_PROFIL_TYPE'], FALSE, TRUE);
    foreach ($DB_TAB as $DB_ROW) {
        $tab_eval[$DB_ROW['eleve_id']][$DB_ROW['item_id']][]['note'] = $DB_ROW['note'];
    }
}
// =====> Cas n°3 : pourcentage d'items disciplinaires acquis d'un item du socle
if ($is_socle_item_pourcentage) {
    $is_langue = in_array($socle_item_id, $tab_langue_items) ? TRUE : FALSE;
    $DB_TAB = DB_STRUCTURE_BILAN::DB_lister_result_eleves_palier_sans_infos_items($liste_eleve, $socle_item_id, $_SESSION['USER_PROFIL_TYPE']);
    foreach ($DB_TAB as $DB_ROW) {
        $test_comptabilise = $mode == 'auto' ? !$is_langue || in_array($DB_ROW['matiere_id'], $tab_langues[$tab_eleve_langue[$DB_ROW['eleve_id']]]['tab_matiere_id']) : in_array($DB_ROW['matiere_id'], $tab_matiere_id);
        if ($test_comptabilise) {
            $tab_eval[$DB_ROW['eleve_id']][$DB_ROW['item_id']][]['note'] = $DB_ROW['note'];
            $tab_item[$DB_ROW['item_id']] = TRUE;
        }
    }
$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...
 */