<?php
/**
 * @version $Id$
 * @author Thomas Crespin <thomas.crespin@sesamath.net>
 * @copyright Thomas Crespin 2009-2022
 * 
 * ****************************************************************************************************
 * SACoche <https://sacoche.sesamath.net> - Suivi d’Acquisitions de Compétences
 * © Thomas Crespin pour Sésamath <https://www.sesamath.net> - Tous droits réservés.
 * Logiciel placé sous la licence libre Affero GPL 3 <https://www.gnu.org/licenses/agpl-3.0.html>.
 * ****************************************************************************************************
 * 
 * Ce fichier est une partie de SACoche.
 * 
 * SACoche est un logiciel libre ; vous pouvez le redistribuer ou le modifier suivant les termes 
 * de la “GNU Affero General Public License” telle que publiée par la Free Software Foundation :
 * soit la version 3 de cette licence, soit (à votre gré) toute version ultérieure.
 * 
 * SACoche est distribué dans l’espoir qu’il vous sera utile, mais SANS AUCUNE GARANTIE :
 * sans même la garantie implicite de COMMERCIALISABILITÉ ni d’ADÉQUATION À UN OBJECTIF PARTICULIER.
 * Consultez la Licence Publique Générale GNU Affero pour plus de détails.
 * 
 * Vous devriez avoir reçu une copie de la Licence Publique Générale GNU Affero avec SACoche ;
 * si ce n’est pas le cas, consultez : <http://www.gnu.org/licenses/>.
 * 
 */

if(!defined('SACoche')) {exit('Ce fichier ne peut être appelé directement !');}
$TITRE = html(Lang::_('Livret Scolaire')).' &rarr; '.html(Lang::_('Moyennes annuelles 3e'));

$test_droit_directeur = ( ($_SESSION['USER_PROFIL_TYPE']=='directeur') && Outil::test_user_droit_specifique($_SESSION['DROIT_OFFICIEL_LIVRET_CONSULTER_MOYENNE_DNB']) ) ? TRUE : FALSE ;
$test_droit_professeur = ( ($_SESSION['USER_PROFIL_TYPE']=='professeur') && Outil::test_user_droit_specifique( $_SESSION['DROIT_OFFICIEL_LIVRET_CONSULTER_MOYENNE_DNB'] , NULL /*matiere_coord_or_groupe_pp_connu*/ , 0 /*matiere_id_or_groupe_id_a_tester*/ ) ) ? TRUE : FALSE ;
if( ($_SESSION['USER_PROFIL_TYPE']!='administrateur') && !$test_droit_directeur && !$test_droit_professeur )
{
  echo'<p class="danger">'.html(Lang::_('Vous n’êtes pas habilité à accéder à cette fonctionnalité !')).'</p>'.NL;
  echo'<div class="astuce">Profils autorisés (par les administrateurs) :</div>'.NL;
  echo Outil::afficher_profils_droit_specifique($_SESSION['DROIT_OFFICIEL_LIVRET_CONSULTER_MOYENNE_DNB'],'li');
  return; // Ne pas exécuter la suite de ce fichier inclus.
}

// Indication des profils autorisés
$puce_profils_autorises_consultation = ($_SESSION['USER_PROFIL_TYPE']!='professeur') ? '' : '<li><span class="astuce"><a href="#"'.infobulle('administrateurs (de l’établissement)'.BRJS.Outil::afficher_profils_droit_specifique($_SESSION['DROIT_OFFICIEL_LIVRET_CONSULTER_MOYENNE_DNB'],'br')).'>Profils pouvant consulter les positionnements annuels.</a></span></li>';
$puce_profils_autorises_modification = ($_SESSION['USER_PROFIL_TYPE']!='professeur') ? '' : '<li><span class="astuce"><a href="#"'.infobulle(Outil::afficher_profils_droit_specifique($_SESSION['DROIT_OFFICIEL_LIVRET_MODIFIER_MOYENNE_DNB'],'br')).'>Profils pouvant modifier les positionnements annuels.</a></span></li>';
?>

<ul class="puce">
  <li><span class="manuel"><a class="pop_up" href="<?php echo SERVEUR_DOCUMENTAIRE ?>?fichier=officiel__livret_scolaire_administration#toggle_moyennesdnb">DOC : Administration du Livret Scolaire &rarr; Moyennes annuelles en 3e</a></span></li>
  <li><span class="astuce">Ce menu ne sert que pour les <b>élèves de 3e</b>, en fin d’année scolaire.</span></li>
  <?php echo $puce_profils_autorises_consultation ?>
  <?php echo $puce_profils_autorises_modification ?>
</ul>

<hr>

<?php
if( !DB_STRUCTURE_LIVRET::DB_tester_classes_moyennes3e() )
{
  $consigne = ($_SESSION['USER_PROFIL_TYPE']=='professeur') ? 'un administrateur ou directeur doit commencer' : 'commencez' ;
  echo'<p class="danger">Aucune classe n’est associée à une page du livret concernée par ce dispositif !<br>Si besoin, '.$consigne.' par <a href="./index.php?page=livret&amp;section=classes">associer les classes au livret scolaire</a>.</p>'.NL;
  return; // Ne pas exécuter la suite de ce fichier inclus.
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Récupération de la liste des classes de l’établissement.
// Utile pour les profils administrateurs / directeurs, et requis concernant les professeurs pour une recherche s’il est affecté à des groupes.
// ////////////////////////////////////////////////////////////////////////////////////////////////////

$DB_TAB = DB_STRUCTURE_COMMUN::DB_OPT_classes_etabl( FALSE /*with_ref*/ , NULL /*with_configuration*/ , TRUE /*only_livret_3e*/ );

$tab_classe_etabl = array(); // tableau temporaire avec les noms des classes de l’établissement, de niveau 3e
if(is_array($DB_TAB))
{
  foreach($DB_TAB as $DB_ROW)
  {
    $tab_classe_etabl[$DB_ROW['valeur']] = array( 'nom' => $DB_ROW['texte'] );
  }
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Récupérer la liste des classes accessibles à l’utilisateur.
// Pour les administrateurs et les directeurs, ce sont les classes de l’établissement.
// Mais attention, les bilans ne sont définis que sur les classes, pas sur des groupes (car il ne peut y avoir qu’un type de bilan par élève / période).
// Alors quand les professeurs sont associés à des groupes, il faut chercher de quelle(s) classe(s) proviennent les élèves et proposer autant de choix partiels... sur ces classes
// ////////////////////////////////////////////////////////////////////////////////////////////////////

$tab_groupe = array(); // tableau temporaire avec les noms des groupes du prof
$tab_options_classes = array(); // Pour un futur formulaire select
$nombre_lignes_actives = 0;

if($_SESSION['USER_PROFIL_TYPE']!='professeur') // administrateur | directeur
{
  foreach($tab_classe_etabl as $classe_id => $tab)
  {
    $tab_options_classes[$classe_id.'_0'] = '<option value="'.$classe_id.'_0">'.html($tab['nom']).'</option>';
  }
}
else // professeur
{
  $DB_TAB = DB_STRUCTURE_REGROUPEMENT::DB_lister_classes_groupes_professeur($_SESSION['USER_ID'],$_SESSION['USER_JOIN_GROUPES']);
  foreach($DB_TAB as $DB_ROW)
  {
    if($DB_ROW['groupe_type']=='classe')
    {
      // Pour les classes, on ne garde que celles de 3e
      $classe_id = $DB_ROW['groupe_id'];
      if(isset($tab_classe_etabl[$classe_id]))
      {
        $test_droit_professeur = Outil::test_user_droit_specifique( $_SESSION['DROIT_OFFICIEL_LIVRET_CONSULTER_MOYENNE_DNB'] , $DB_ROW['jointure_pp'] /*matiere_coord_or_groupe_pp_connu*/ , 0 /*matiere_id_or_groupe_id_a_tester*/ );
        $disabled = ($test_droit_professeur) ? '' : ' disabled="disabled"' ;
        $nombre_lignes_actives += (int)$test_droit_professeur;
        $tab_options_classes[$classe_id.'_0'] = '<option value="'.$classe_id.'_0"'.$disabled.'>'.html($DB_ROW['groupe_nom']).'</option>';
      }
    }
    else
    {
      // Pour les groupes, il faudra récupérer les classes dont sont issus les élèves
      $tab_groupe[$DB_ROW['groupe_id']] = $DB_ROW['groupe_nom'];
    }
  }
  if(count($tab_groupe))
  {
    // On récupère les classes dont sont issus les élèves des groupes et on complète $tab_classe, si niveau 3e
    $DB_TAB = DB_STRUCTURE_PROFESSEUR::DB_lister_classes_eleves_from_groupes( implode(',',array_keys($tab_groupe)) );
    foreach($tab_groupe as $groupe_id => $groupe_nom)
    {
      if(isset($DB_TAB[$groupe_id]))
      {
        foreach($DB_TAB[$groupe_id] as $tab)
        {
          $classe_id = $tab['eleve_classe_id'];
          if(isset($tab_classe_etabl[$classe_id]))
          {
            $test_droit_professeur = Outil::test_user_droit_specifique( $_SESSION['DROIT_OFFICIEL_LIVRET_CONSULTER_MOYENNE_DNB'] , NULL /*matiere_coord_or_groupe_pp_connu*/ , $classe_id /*matiere_id_or_groupe_id_a_tester*/ );
            $disabled = ($test_droit_professeur) ? '' : ' disabled="disabled"' ;
            $nombre_lignes_actives += (int)$test_droit_professeur;
            $tab_options_classes[$classe_id.'_'.$groupe_id] = '<option value="'.$classe_id.'_'.$groupe_id.'"'.$disabled.'>'.html($tab_classe_etabl[$classe_id]['nom'].' - '.$groupe_nom).'</option>';
          }
        }
      }
    }
  }
}

$nombre_lignes = count($tab_options_classes);
if(!$nombre_lignes)
{
  echo'<p><label class="erreur">Aucune classe ni aucun groupe du livret 3e n’est associé à votre compte.</label></p>'.NL;
  return; // Ne pas exécuter la suite de ce fichier inclus.
}
if( ($_SESSION['USER_PROFIL_TYPE']=='professeur') && !$nombre_lignes_actives )
{
  echo'<p><label class="erreur">Vous n’êtes professeur principal d’aucune classe du livret 3e.</label></p>'.NL;
  return; // Ne pas exécuter la suite de ce fichier inclus.
}

?>

<form action="#" method="post" id="form_choix_classe_eleve">
  <div>
    <label class="tab mini" for="f_groupe">Élève :</label>
    <select id="f_groupe" name="f_groupe" class="b"><option value=""></option><?php echo implode('',$tab_options_classes) ?></select>
    <span id="span_eleve" class="hide">
      &nbsp;&nbsp;&nbsp;
      <button id="go_premier_eleve" type="button" class="go_premier">Premier</button>
      <button id="go_precedent_eleve" type="button" class="go_precedent">Précédent</button>
      <select id="go_selection_eleve" name="go_selection" class="b"><option value=""></option></select>
      <button id="go_suivant_eleve" type="button" class="go_suivant">Suivant</button>
      <button id="go_dernier_eleve" type="button" class="go_dernier">Dernier</button>
    </span>
  </div>
</form>

<form action="#" method="post" id="form_imprimer" class="hide">
  <p id ="zone_impression">
    <span class="tab mini">&nbsp;</span><button id="bouton_imprimer" type="button" class="imprimer">Archiver / Imprimer</button> un tableau des moyennes annuelles des élèves de ce regroupement. <label id="ajax_msg_imprimer">&nbsp;</label>
  </p>
</form>

<div id="zone_tableau_eleve"></div>

<form action="#" method="post" id="form_saisir_note" class="hide"><fieldset>
  <h2>Saisir une moyenne annuelle</h2>
  <p class="b">
    <label class="tab">Élève :</label><span id="report_eleve">xxx</span><br>
    <label class="tab">Enseignement :</label><span id="report_matiere">xxx</span><br>
    <label class="tab" id="texte_periode1">Période 1 :</label><span id="report_periode1">xxx</span><br>
    <label class="tab" id="texte_periode2">Période 2 :</label><span id="report_periode2">xxx</span><br>
    <label class="tab" id="texte_periode3">Période 3 :</label><span id="report_periode3">xxx</span><br>
    <label class="tab">Moyenne actuelle :</label><span id="report_moyenne">xxx</span><br>
    <input id="saisir_f_eleve"  name="f_eleve"  type="hidden" value="">
    <input id="saisir_f_classe" name="f_classe" type="hidden" value="">
    <input id="saisir_f_rubrique" name="f_rubrique_id" type="hidden" value="">
    <input id="saisir_f_saisie" name="f_saisie_id" type="hidden" value="">
    <input id="saisir_f_moyenne" name="f_moyenne" type="hidden" value="">
  </p>
  <p id="p_radio">
    <label class="tab">Moyenne retenue :</label><label for="objet_valeur"><input type="radio" id="objet_valeur" name="f_saisie_objet" value="valeur"> Note sur 20 : <input id="f_position" name="f_position" type="number" min="0" max="20" step="any" style="width:15ex" value=""> <?php echo infobulle('Effectuer une saisie manuelle annule un positionnement automatique éventuel.'.BRJS.'Jusqu’à 9 décimales autorisées.',TRUE) ?></label><br>
    <span class="tab"></span><label for="objet_dispense"><input type="radio" id="objet_dispense" name="f_saisie_objet" value="dispense"> Dispensé(e). <?php echo infobulle('Uniquement possible pour les enseignements LV2 et EPS.',TRUE) ?></label><br>
    <span class="tab"></span><label for="objet_neant"><input type="radio" id="objet_neant" name="f_saisie_objet" value="neant"> Sans moyenne.</label><br>
    <span class="tab"></span><label for="objet_auto"><input type="radio" id="objet_auto" name="f_saisie_objet" value="auto"> Positionnement automatique. <?php echo infobulle('Supprimer une saisie manuelle et revenir à un positionnement automatique (uniquement possible si aucune période n’est « non notée »).',TRUE) ?></label><br>
  </p>
  <p>
    <span class="tab"></span><input id="f_action" name="f_action" type="hidden" value="enregistrer_moyenne"><button id="bouton_valider" type="button" class="valider">Valider.</button> <button id="bouton_annuler" type="button" class="annuler">Annuler.</button><label id="ajax_msg_gestion">&nbsp;</label>
  </p>
  <p id="texte_neant" class="danger">
    Uniquement autorisé pour les élèves bénéficiant d’un PPS à qui une dispense d’enseignement a été accordée sur la discipline, et pour les élèves scolarisés en ULIS ou en UPE2A à qui n’a pas été dispensé un enseignement concerné par l’épreuve dite « de sciences » (sciences de la vie et de la terre, technologie, physique-chimie, sciences et technologie).<br>
    Pour tous les autres élèves dont une ou plusieurs moyennes périodiques sont manquantes, en fin d’année scolaire le conseil de classe doit décider d’une note sur 20 significative.<br>
    L’objectif est de de faire en sorte que tous les élèves aient une moyenne annuelle sur 20 dans toutes les matières et de s’assurer avec discernement du caractère représentatif de ces moyennes.<br>
    À cette fin, il peut être fait recours à une évaluation de remplacement qui permettra de rendre compte du niveau des acquis de l’élève (la note obtenue par l’élève à cette évaluation de remplacement est alors retenue en lieu et place de la moyenne annuelle manquante).
  </p>
</fieldset></form>
