}
// Outil de résolution de bug ; le test1 provoque parfois l'erreur "Array sizes are inconsistent".
// Edit au 11/05/2012 : a priori c'est corrigé, mais je laisse quand même le test au cas où, ça ne coûte rien...
if (!$test1) {
    ajouter_log_PHP('Import fichier ' . $import_origine . ' ' . $import_profil, serialize($tab_users_fichier), __FILE__, __LINE__, TRUE);
}
// On enregistre
FileSystem::ecrire_fichier(CHEMIN_DOSSIER_IMPORT . 'import_' . $import_origine . '_' . $import_profil . '_' . $_SESSION['BASE'] . '_' . session_id() . '_users.txt', serialize($tab_users_fichier));
FileSystem::ecrire_fichier(CHEMIN_DOSSIER_IMPORT . 'import_' . $import_origine . '_' . $import_profil . '_' . $_SESSION['BASE'] . '_' . session_id() . '_classes.txt', serialize($tab_classes_fichier));
FileSystem::ecrire_fichier(CHEMIN_DOSSIER_IMPORT . 'import_' . $import_origine . '_' . $import_profil . '_' . $_SESSION['BASE'] . '_' . session_id() . '_groupes.txt', serialize($tab_groupes_fichier));
FileSystem::ecrire_fichier(CHEMIN_DOSSIER_IMPORT . 'import_' . $import_origine . '_' . $import_profil . '_' . $_SESSION['BASE'] . '_' . session_id() . '_liens_id_base.txt', serialize($tab_liens_id_base));
// On affiche le bilan des utilisateurs trouvés
if (count($tab_users_fichier['profil_sigle'])) {
    // Nom des profils
    $tab_profils_libelles = array();
    $DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_profils_parametres('user_profil_nom_long_singulier,user_profil_nom_long_pluriel', FALSE);
    foreach ($DB_TAB as $DB_ROW) {
        $tab_profils_libelles[$DB_ROW['user_profil_sigle']] = array(1 => $DB_ROW['user_profil_nom_long_singulier'], 2 => $DB_ROW['user_profil_nom_long_pluriel']);
    }
    // Boucle pour l'affichage
    $tab_profil_nombre = array_count_values($tab_users_fichier['profil_sigle']);
    foreach ($tab_profil_nombre as $profil => $nombre) {
        $s = $nombre > 1 ? 's' : '';
        echo '<p><label class="valide">' . $nombre . ' ' . $tab_profils_libelles[$profil][min(2, $nombre)] . ' trouvé' . $s . '.</label></p>' . NL;
    }
} else {
    if ($import_profil == 'parent') {
        exit('<p><label class="alerte">Aucun parent trouvé ayant un enfant dans l\'établissement : importer d\'abord les élèves !</label></p>');
    } else {
        exit('<p><label class="alerte">Aucun utilisateur trouvé !</label></p>');
    }
    if ($notification_contenu) {
        DB_STRUCTURE_NOTIFICATION::enregistrer_action_admin($notification_contenu, $_SESSION['USER_ID']);
    }
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Bilan des affectations des périodes aux classes & groupes ; en plusieurs requêtes pour récupérer les périodes sans classes-groupes et les classes-groupes sans périodes.
// 2/2 - On poursuit avec les requêtes suivantes (associations) et l'affichage.
// ////////////////////////////////////////////////////////////////////////////////////////////////////
echo '<hr />' . NL;
// Récupérer l'amplitude complète sur l'ensemble des périodes
$DB_ROW = DB_STRUCTURE_ADMINISTRATEUR::DB_recuperer_amplitude_periodes();
$tout_debut = $DB_ROW['tout_debut'] ? $DB_ROW['tout_debut'] : '2000-01-01';
$toute_fin = $DB_ROW['toute_fin'] ? $DB_ROW['toute_fin'] : '2000-01-01';
$nb_jours_total = $DB_ROW['nb_jours_total'] ? $DB_ROW['nb_jours_total'] : 0;
// Récupérer la liste des jointures, et le nécessaire pour établir les graphiques
$DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_jointure_groupe_periode_avec_infos_graphiques($tout_debut);
$memo_groupe_id = 0;
foreach ($DB_TAB as $DB_ROW) {
    $groupe_id = $DB_ROW['groupe_id'];
    $date_affich_debut = convert_date_mysql_to_french($DB_ROW['jointure_date_debut']);
    $date_affich_fin = convert_date_mysql_to_french($DB_ROW['jointure_date_fin']);
    $tab_jointure[$groupe_id][$DB_ROW['periode_id']] = html($date_affich_debut) . ' ~ ' . html($date_affich_fin) . '<q class="date_ajouter" title="Importer ces dates dans les champs."></q>';
    // graphique (début)
    if ($memo_groupe_id != $groupe_id) {
        $memo_position = 0;
        $memo_groupe_id = $groupe_id;
    }
    $margin_left = 100 * round($DB_ROW['position_jour_debut'] / $nb_jours_total, 4);
    $width = 100 * round(($DB_ROW['nb_jour'] + 1) / $nb_jours_total, 4);
    // On ajoute un jour pour dessiner les barres jusqu'au jour suivant.
    if ($memo_position + 0.02 < $margin_left) {
Example #3
0
         foreach ($DB_TAB as $DB_ROW) {
             $tab_classes[$DB_ROW['groupe_id']] = $DB_ROW['groupe_nom'];
         }
         // Récupération des profs ou directeurs par classe
         $tab_profs_par_classe = array();
         if (!empty($tab_profils['directeur'])) {
             // Les directeurs sont rattachés à toutes les classes
             foreach ($tab_classes as $classe_id => $classe_nom) {
                 $tab_profs_par_classe[$classe_id] = $tab_profils['directeur'];
             }
         }
         if (!empty($tab_profils['professeur'])) {
             // Les professeurs ne sont rattachés qu'à certaines classes
             $listing_profs_id = implode(',', $tab_profils['professeur']);
             $listing_groupes_id = implode(',', array_keys($tab_classes));
             $DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_jointure_professeurs_groupes($listing_profs_id, $listing_groupes_id);
             foreach ($DB_TAB as $DB_ROW) {
                 $tab_profs_par_classe[$DB_ROW['groupe_id']][] = $DB_ROW['user_id'];
             }
         }
     }
 }
 // On passe au traitement des données reçues
 $auteur = afficher_identite_initiale($_SESSION['USER_NOM'], FALSE, $_SESSION['USER_PRENOM'], TRUE, $_SESSION['USER_GENRE']);
 foreach ($tab_ids as $classe_id) {
     $is_modif = DB_STRUCTURE_BREVET::DB_modifier_brevet_classe_etat($classe_id, $new_etat);
     if ($is_modif && $abonnes_nb && isset($tab_profs_par_classe[$classe_id])) {
         $texte = 'Statut [' . $tab_etats[$new_etat] . '] appliqué par ' . $auteur . ' à [Fiches brevet] [Session ' . $annee_session_brevet . '] [' . $tab_classes[$classe_id] . '].' . "\r\n";
         foreach ($tab_profs_par_classe[$classe_id] as $user_id) {
             $tab_abonnes[$user_id]['contenu'] .= $texte;
         }
$tab_i_fichier_TO_id_base  = $tab_liens_id_base['users'];
// On récupère le fichier avec les utilisateurs : $tab_users_fichier['champ'] : i -> valeur, avec comme champs : sconet_id / sconet_num / reference / profil_sigle / nom / prenom / classe / groupes / matieres / adresse / enfant
$fnom = CHEMIN_DOSSIER_IMPORT.'import_'.$import_origine.'_'.$import_profil.'_'.$_SESSION['BASE'].'_'.session_id().'_users.txt';
if(!is_file($fnom))
{
  exit('Erreur : le fichier contenant les utilisateurs est introuvable !');
}
$contenu = file_get_contents($fnom);
$tab_users_fichier = @unserialize($contenu);
if($tab_users_fichier===FALSE)
{
  exit('Erreur : le fichier contenant les utilisateurs est syntaxiquement incorrect !');
}
// On récupère le contenu de la base pour comparer : $tab_base_adresse[user_id]=array()
$tab_base_adresse = array();
$DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_adresses_parents();
foreach($DB_TAB as $DB_ROW)
{
  $tab_base_adresse[$DB_ROW['parent_id']] = array( $DB_ROW['adresse_ligne1'] , $DB_ROW['adresse_ligne2'] , $DB_ROW['adresse_ligne3'] , $DB_ROW['adresse_ligne4'] , (int)$DB_ROW['adresse_postal_code'] , $DB_ROW['adresse_postal_libelle'] , $DB_ROW['adresse_pays_nom'] );
}
// Pour préparer l'affichage
$lignes_ajouter   = '';
$lignes_modifier  = '';
$lignes_conserver = '';
// Pour préparer l'enregistrement des données
$tab_users_ajouter = array();
$tab_users_modifier = array();
// Parcourir chaque entrée du fichier
foreach($tab_i_fichier_TO_id_base as $i_fichier => $id_base)
{
  // Cas [1] : parent présent dans le fichier, adresse absente de la base : il vient d'être ajouté, on ajoute aussi son adresse, sauf si elle est vide (on ne teste pas le pays qui vaut FRANCE par défaut dans l'export Sconet).
        break;
    case 'professeur':
        $DB_TAB = DB_STRUCTURE_PROFESSEUR::DB_lister_classes_groupes_professeur($_SESSION['USER_ID'], $_SESSION['USER_JOIN_GROUPES']);
        break;
    case 'parent':
        $DB_TAB = DB_STRUCTURE_ELEVE::DB_lister_classes_parent($_SESSION['USER_ID']);
        break;
    case 'eleve':
        $DB_TAB = array(0 => array('groupe_id' => $_SESSION['ELEVE_CLASSE_ID'], 'groupe_nom' => $_SESSION['ELEVE_CLASSE_NOM']));
}
if (!empty($DB_TAB)) {
    foreach ($DB_TAB as $DB_ROW) {
        $tab_groupe[$DB_ROW['groupe_id']] = '<th>' . html($DB_ROW['groupe_nom']) . '</th>';
    }
    // Récupérer la liste des périodes, dans l'ordre choisi par l'admin
    $DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_periodes();
    if (!empty($DB_TAB)) {
        foreach ($DB_TAB as $DB_ROW) {
            $tab_periode[$DB_ROW['periode_id']] = '<th>' . html($DB_ROW['periode_nom']) . '</th>';
        }
        // Récupérer la liste des jointures
        $listing_groupes_id = implode(',', array_keys($tab_groupe));
        $DB_TAB = DB_STRUCTURE_COMMUN::DB_lister_jointure_groupe_periode($listing_groupes_id);
        $memo_groupe_id = 0;
        if (!empty($DB_TAB)) {
            foreach ($DB_TAB as $DB_ROW) {
                $date_affich_debut = convert_date_mysql_to_french($DB_ROW['jointure_date_debut']);
                $date_affich_fin = convert_date_mysql_to_french($DB_ROW['jointure_date_fin']);
                $tab_jointure[$DB_ROW['groupe_id']][$DB_ROW['periode_id']] = html($date_affich_debut) . ' ~ ' . html($date_affich_fin);
            }
        }
Example #6
0
                   .'<th>Num. Sconet</th>'
                   .'<th>Référence</th>'
                   .'<th>Login</th>'
                   .'<th>Civilité</th>'
                   .'<th>Nom</th>'
                   .'<th>Prénom</th>'
                   .'<th>Enfant Id.</th>'
                   .'<th>Enfant Nom</th>'
                   .'<th>Enfant Prénom</th>'
                   .'<th>Enfant Classe Ref.</th>'
                   .'<th>Enfant Classe Nom</th>'
                 .'</tr>'.NL.'</thead><tbody>'.NL;

  // Récupérer la liste des classes
  $tab_groupe = array();
  $DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_classes();
  foreach($DB_TAB as $DB_ROW)
  {
    $tab_groupe[$DB_ROW['groupe_id']] = array( 'ref'=>$DB_ROW['groupe_ref'] , 'nom'=>$DB_ROW['groupe_nom'] );
  }
  // Récupérer les données des responsables
  $champs = 'parent.user_id AS parent_id, parent.user_id_ent AS parent_id_ent, parent.user_id_gepi AS parent_id_gepi,
             parent.user_sconet_id AS parent_sconet_id, parent.user_sconet_elenoet AS parent_sconet_elenoet, parent.user_reference AS parent_reference,
             parent.user_genre AS parent_genre, parent.user_nom AS parent_nom, parent.user_prenom AS parent_prenom, parent.user_login AS parent_login,
             enfant.user_id AS enfant_id,enfant.user_nom AS enfant_nom,enfant.user_prenom AS enfant_prenom,enfant.eleve_classe_id AS enfant_classe_id' ;
  $DB_TAB = DB_STRUCTURE_COMMUN::DB_lister_users_regroupement( 'parent' /*profil_type*/ , 1 /*statut*/ , $tab_types[$groupe_type] , $groupe_id , 'alpha' /*eleves_ordre*/ , $champs );
  if(!empty($DB_TAB))
  {
    foreach($DB_TAB as $DB_ROW)
    {
      $export_csv .= $DB_ROW['parent_id']
<div id="zone_perso">
  <hr />
  <h2>Niveaux spécifiques (établissement)</h2>
  <table class="form hsort">
    <thead>
      <tr>
        <th>Référence</th>
        <th>Nom complet</th>
        <th class="nu"><q class="ajouter" title="Ajouter un niveau."></q></th>
      </tr>
    </thead>
    <tbody>
      <?php
      // Lister les niveaux spécifiques
      $DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_niveaux(TRUE /*is_specifique*/);
      if(!empty($DB_TAB))
      {
        foreach($DB_TAB as $DB_ROW)
        {
          // Afficher une ligne du tableau
          echo'<tr id="id_'.$DB_ROW['niveau_id'].'">';
          echo  '<td>'.html($DB_ROW['niveau_ref']).'</td>';
          echo  '<td>'.html($DB_ROW['niveau_nom']).'</td>';
          echo  '<td class="nu">';
          echo    '<q class="modifier" title="Modifier ce niveau."></q>';
          echo    '<q class="supprimer" title="Supprimer ce niveau."></q>';
          echo  '</td>';
          echo'</tr>'.NL;
        }
      }
  echo'<p class="danger">Aucun compte personnel trouvé !</p>'.NL;
  return; // Ne pas exécuter la suite de ce fichier inclus.
}

$compteur = 0 ;
foreach($DB_TAB as $DB_ROW)
{
  $tab_principal[0][$DB_ROW['user_id']] = '<th id="th_'.$DB_ROW['user_id'].'"><img alt="'.html($DB_ROW['user_nom'].' '.$DB_ROW['user_prenom']).'" src="./_img/php/etiquette.php?dossier='.$_SESSION['BASE'].'&amp;nom='.urlencode($DB_ROW['user_nom']).'&amp;prenom='.urlencode($DB_ROW['user_prenom']).'" /></th>';
  $tab_profs[$DB_ROW['user_id']] = html($DB_ROW['user_nom'].' '.$DB_ROW['user_prenom']);
  $tab_matieres_par_prof[$DB_ROW['user_id']] = '';
  $tab_lignes_profs[floor($compteur/8)][] = $DB_ROW['user_id'];
  $compteur++;
}

// Récupérer la liste des jointures
$DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_jointure_professeurs_matieres();
foreach($DB_TAB as $DB_ROW)
{
  if( (isset($tab_profs[$DB_ROW['user_id']])) && (isset($tab_matieres[$DB_ROW['matiere_id']])) )
  {
    $checked = ($DB_ROW['jointure_coord']) ? ' checked' : '' ;
    $classe  = ($DB_ROW['jointure_coord']) ? 'on' : 'off' ;
    $js_val  = ($DB_ROW['jointure_coord']) ? 2 : 1 ;
    $tab_js .= 'tab_join['.$DB_ROW['matiere_id'].']['.$DB_ROW['user_id'].']='.$js_val.';';
    $tab_profs_par_matiere[$DB_ROW['matiere_id']] .= '<div id="mp_'.$DB_ROW['matiere_id'].'_'.$DB_ROW['user_id'].'" class="'.$classe.'"><input type="checkbox" id="'.$DB_ROW['matiere_id'].'mp'.$DB_ROW['user_id'].'" value=""'.$checked.' /> <label for="'.$DB_ROW['matiere_id'].'mp'.$DB_ROW['user_id'].'">'.$tab_profs[$DB_ROW['user_id']].'</label></div>';
    $tab_matieres_par_prof[$DB_ROW['user_id']]   .= '<div id="pm_'.$DB_ROW['user_id'].'_'.$DB_ROW['matiere_id'].'" class="'.$classe.'"><input type="checkbox" id="'.$DB_ROW['user_id'].'pm'.$DB_ROW['matiere_id'].'" value=""'.$checked.' /> <label for="'.$DB_ROW['user_id'].'pm'.$DB_ROW['matiere_id'].'">'.$tab_matieres[$DB_ROW['matiere_id']].'</label></div>';
  }
}

// Assemblage du tableau des personnels par matière
$TH = array();
	<li><span class="manuel"><a class="pop_up" href="<?php echo SERVEUR_DOCUMENTAIRE ?>?fichier=referentiels_socle__calcul_scores_etats_acquisitions">DOC : Calcul des scores et des états d'acquisitions.</a></span></li>
	<li><span class="astuce">Profils autorisés par les administrateurs : <span class="u"><?php echo $texte ?></span>.</span></li>
</ul>

<form action="#" method="post">
<hr />

<?php
// Séparé en plusieurs requêtes sinon on ne s'en sort pas (entre les matières sans coordonnateurs, sans référentiel, les deux à la fois...).
// La recherche ne s'effectue que sur les matières et niveaux utilisés, sans débusquer des référentiels résiduels.
$tab_matiere = array();
$tab_niveau  = array();
$tab_colonne = array();

// On récupère la liste des matières utilisées par l'établissement
$DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_matieres_etablissement( TRUE /*order_by_name*/ );
$nb_matieres = !empty($DB_TAB) ? count($DB_TAB) : 0 ;
if(!$nb_matieres)
{
	echo'<p><span class="danger">Aucune matière associée à l\'établissement !</span></p>';
}
else
{
	foreach($DB_TAB as $DB_ROW)
	{
		$tab_matiere[$DB_ROW['matiere_id']] = array(
			'nom'         => html($DB_ROW['matiere_nom']) ,
			'nb_demandes' => $DB_ROW['matiere_nb_demandes']
		);
	}
	// On récupère la liste des niveaux utilisés par l'établissement
    exit(']¤[' . $id);
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Déplacer les référentiels d'une matière vers une autre
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($action == 'deplacer_referentiels' && $id_avant && $id_apres && $id_avant != $id_apres && $nom_avant && $nom_apres) {
    // Déplacement après vérification que c'est possible (matière de destination vierge de données)
    //
    $is_ok = DB_STRUCTURE_ADMINISTRATEUR::DB_deplacer_referentiel_matiere($id_avant, $id_apres);
    if (!$is_ok) {
        exit('Erreur : la nouvelle matière contient déjà des données !');
    }
    // Retirer l'ancienne matière partagée || Supprimer l'ancienne matière spécifique existante
    if ($id_avant > ID_MATIERE_PARTAGEE_MAX) {
        DB_STRUCTURE_ADMINISTRATEUR::DB_supprimer_matiere_specifique($id_avant);
        $log_fin = 'avec suppression de la matière spécifique "' . $nom_avant . '"';
    } else {
        DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_matiere_partagee($id_avant, 0);
        $log_fin = 'avec retrait de la matière partagée "' . $nom_avant . '"';
    }
    // Log de l'action
    SACocheLog::ajouter('Déplacement des référentiels de "' . $nom_avant . '" (' . $id_avant . ') vers "' . $nom_apres . '" (' . $id_apres . '), ' . $log_fin . '.');
    // Notifications (rendues visibles ultérieurement)
    $notification_contenu = date('d-m-Y H:i:s') . ' ' . $_SESSION['USER_PRENOM'] . ' ' . $_SESSION['USER_NOM'] . ' a déplacé des référentiels de "' . $nom_avant . '" (' . $id_avant . ') vers "' . $nom_apres . '" (' . $id_apres . '), ' . $log_fin . '.' . "\r\n";
    DB_STRUCTURE_NOTIFICATION::enregistrer_action_admin($notification_contenu, $_SESSION['USER_ID']);
    exit('ok');
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// On ne devrait pas en arriver là...
// ////////////////////////////////////////////////////////////////////////////////////////////////////
exit('Erreur avec les données transmises !');
			$tab_retirer[$key] = true;
		}
	}

	// Il n'y a plus qu'à mettre à jour la base
	if( count($tab_ajouter) || count($tab_retirer) )
	{
		foreach($tab_ajouter as $key => $true)
		{
			list($matiere_id,$professeur_id) = explode('x',$key);
			DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_liaison_professeur_coordonnateur($professeur_id,$matiere_id,true);
		}
		foreach($tab_retirer as $key => $true)
		{
			list($matiere_id,$professeur_id) = explode('x',$key);
			DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_liaison_professeur_coordonnateur($professeur_id,$matiere_id,false);
		}
		echo'ok';
	}
	else
	{
		echo'Aucune modification détectée !';
	}
}

else
{
	echo'Erreur avec les données transmises !';
}
?>
  echo'<hr /><p class="danger">Aucun référentiel enregistré !</p>'.NL;
}
else
{
  $tab_choix = array( 'domaine'=>'synthèse par domaine' , 'theme'=>'synthèse par thème' , 'sans'=>'pas de synthèse' );
  // Récupérer la liste des domaines de chaque référentiel
  $tab_domaines = array();
  $DB_TAB_DOMAINES = DB_STRUCTURE_ADMINISTRATEUR::DB_recuperer_referentiels_domaines();
  foreach($DB_TAB_DOMAINES as $DB_ROW)
  {
    $ids = $DB_ROW['matiere_id'].'_'.$DB_ROW['niveau_id'];
    $tab_domaines[$ids][] = '<li class="li_n1">'.html($DB_ROW['domaine_nom']).'</li>';
  }
  // Récupérer la liste des thèmes de chaque référentiel
  $tab_themes = array();
  $DB_TAB_THEMES = DB_STRUCTURE_ADMINISTRATEUR::DB_recuperer_referentiels_themes();
  foreach($DB_TAB_THEMES as $DB_ROW)
  {
    $ids = $DB_ROW['matiere_id'].'_'.$DB_ROW['niveau_id'];
    $tab_themes[$ids][] = '<li class="li_n2">'.html($DB_ROW['theme_nom']).'</li>';
  }
  // Passer en revue les référentiels
  $memo_matiere_id = 0;
  foreach($DB_TAB as $DB_ROW)
  {
    if($memo_matiere_id!=$DB_ROW['matiere_id'])
    {
      $memo_matiere_id = $DB_ROW['matiere_id'];
      echo'<hr />'.NL;
      echo'<h2>'.html($DB_ROW['matiere_nom']).'</h2>'.NL;
      echo'<hr />'.NL;
			$tab_retirer[$key] = true;
		}
	}

	// Il n'y a plus qu'à mettre à jour la base
	if( count($tab_ajouter) || count($tab_retirer) )
	{
		foreach($tab_ajouter as $key => $true)
		{
			list($groupe_id,$professeur_id) = explode('x',$key);
			DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_liaison_professeur_principal($professeur_id,$groupe_id,true);
		}
		foreach($tab_retirer as $key => $true)
		{
			list($groupe_id,$professeur_id) = explode('x',$key);
			DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_liaison_professeur_principal($professeur_id,$groupe_id,false);
		}
		echo'ok';
	}
	else
	{
		echo'Aucune modification détectée !';
	}
}

else
{
	echo'Erreur avec les données transmises !';
}
?>
        }
    }
}
// Affichage du bilan des affectations des élèves dans les classes ; en deux requêtes pour récupérer les élèves sans classes et les classes sans élèves
$tab_niveau_groupe = array();
$tab_user = array();
$tab_niveau_groupe[0][0] = 'sans classe';
$tab_user[0] = '';
// Récupérer la liste des classes
$DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_classes_avec_niveaux();
foreach ($DB_TAB as $DB_ROW) {
    $tab_niveau_groupe[$DB_ROW['niveau_id']][$DB_ROW['groupe_id']] = html($DB_ROW['groupe_nom']);
    $tab_user[$DB_ROW['groupe_id']] = '';
}
// Récupérer la liste des élèves / classes
$DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_users('eleve', 1, 'eleve_classe_id,user_nom,user_prenom', FALSE);
foreach ($DB_TAB as $DB_ROW) {
    $tab_user[$DB_ROW['eleve_classe_id']] .= html($DB_ROW['user_nom'] . ' ' . $DB_ROW['user_prenom']) . '<br />';
}
// Assemblage du tableau résultant
$TH = array();
$TB = array();
$TF = array();
foreach ($tab_niveau_groupe as $niveau_id => $tab_groupe) {
    $TH[$niveau_id] = '';
    $TB[$niveau_id] = '';
    $TF[$niveau_id] = '';
    foreach ($tab_groupe as $groupe_id => $groupe_nom) {
        $nb = mb_substr_count($tab_user[$groupe_id], '<br />', 'UTF-8');
        $s = $nb > 1 ? 's' : '';
        $TH[$niveau_id] .= '<th>' . $groupe_nom . '</th>';
 // Récupération des données déjà extraites du fichier
 if (!is_file(CHEMIN_DOSSIER_IMPORT . $fichier_memo)) {
     exit('Erreur : le fichier ' . CHEMIN_DOSSIER_IMPORT . $fichier_memo . ' contenant les données à traiter est introuvable !');
 }
 $contenu = file_get_contents(CHEMIN_DOSSIER_IMPORT . $fichier_memo);
 $tab_users_fichier = @unserialize($contenu);
 if ($tab_users_fichier === FALSE) {
     exit('Erreur : le fichier contenant les données à traiter est syntaxiquement incorrect !');
 }
 // Récupération des données de la base
 $tab_users_base = array();
 $tab_users_base['sconet_id'] = array();
 $tab_users_base['sconet_elenoet'] = array();
 $tab_users_base['nom'] = array();
 $tab_users_base['prenom'] = array();
 $DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_users('eleve', 2, 'user_id,user_sconet_id,user_sconet_elenoet,user_nom,user_prenom', FALSE, FALSE);
 foreach ($DB_TAB as $DB_ROW) {
     $tab_users_base['sconet_id'][$DB_ROW['user_id']] = $DB_ROW['user_sconet_id'];
     $tab_users_base['sconet_elenoet'][$DB_ROW['user_id']] = $DB_ROW['user_sconet_elenoet'];
     $tab_users_base['nom'][$DB_ROW['user_id']] = $DB_ROW['user_nom'];
     $tab_users_base['prenom'][$DB_ROW['user_id']] = $DB_ROW['user_prenom'];
 }
 // Analyse et maj du contenu de la base
 $lignes_ok = '';
 $lignes_ko = '';
 foreach ($tab_users_fichier as $tab_donnees_eleve) {
     list($eleve_sconet_id, $eleve_sconet_elenoet, $eleve_nom, $eleve_prenom, $nb_absence, $nb_absence_nj, $nb_retard, $nb_retard_nj) = $tab_donnees_eleve;
     $user_id = FALSE;
     // Recherche sur sconet_id
     if (!$user_id && $eleve_sconet_id) {
         $user_id = array_search($eleve_sconet_id, $tab_users_base['sconet_id']);
if (!defined('SACoche')) {
    exit('Ce fichier ne peut être appelé directement !');
}
if ($_SESSION['SESAMATH_ID'] == ID_DEMO) {
    exit('Action désactivée pour la démo...');
}
$action = isset($_POST['f_action']) ? Clean::texte($_POST['f_action']) : '';
$tab_profils_actifs = isset($_POST['tab_id']) ? Clean::map_texte(explode(',', $_POST['tab_id'])) : array();
$tab_profils = array_keys($_SESSION['TAB_PROFILS_ADMIN']['TYPE']);
$tab_profils_inactifs = array_diff($tab_profils, $tab_profils_actifs);
$tab_profils_anormaux = array_diff($tab_profils_actifs, $tab_profils);
if (count($tab_profils_anormaux)) {
    exit('Erreur avec les profils transmis !');
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Choix des profils
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($action == 'choix_profils') {
    // Il n'y a que quelques profils : on ne s'embête pas à comparer pour voir ce qui a changé, on effectue un update pour chacun.
    foreach ($tab_profils_actifs as $profil_sigle) {
        DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_profil_parametre($profil_sigle, 'user_profil_actif', 1);
    }
    foreach ($tab_profils_inactifs as $profil_sigle) {
        DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_profil_parametre($profil_sigle, 'user_profil_actif', 0);
    }
    exit('ok');
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// On ne devrait pas en arriver là...
// ////////////////////////////////////////////////////////////////////////////////////////////////////
exit('Erreur avec les données transmises !');
 * 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 !');
}
if ($_SESSION['SESAMATH_ID'] == ID_DEMO && $_GET['action'] != 'initialiser') {
    exit('Action désactivée pour la démo...');
}
$action = isset($_POST['f_action']) ? $_POST['f_action'] : '';
$tab_modifs = isset($_POST['tab_modifs']) ? explode(',', $_POST['tab_modifs']) : array();
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Ajouter | Retirer un professeur à un groupe
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if (in_array($action, array('ajouter', 'retirer')) && count($tab_modifs)) {
    $etat = $action == 'ajouter' ? TRUE : FALSE;
    foreach ($tab_modifs as $key => $id_modifs) {
        list($groupe_id, $prof_id) = explode('_', $id_modifs);
        $groupe_id = Clean::entier($groupe_id);
        $prof_id = Clean::entier($prof_id);
        if ($groupe_id && $prof_id) {
            DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_liaison_user_groupe_par_admin($prof_id, 'professeur', $groupe_id, 'groupe', $etat);
        }
    }
    exit('ok');
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// On ne devrait pas en arriver là...
// ////////////////////////////////////////////////////////////////////////////////////////////////////
exit('Erreur avec les données transmises !');
$tab_check = (isset($_POST['f_check'])) ? explode(',',$_POST['f_check']) : array() ;
$nb_add = 0;
$nb_mod = 0;
foreach($tab_check as $check_infos)
{
  if(substr($check_infos,0,4)=='mod_')
  {
    $i_fichier = Clean::entier( substr($check_infos,4) );
    if( isset($tab_i_fichier_TO_id_base[$i_fichier]) && isset($tab_users_fichier['adresse'][$i_fichier]) )
    {
      DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_adresse_parent( $tab_i_fichier_TO_id_base[$i_fichier] , $tab_users_fichier['adresse'][$i_fichier] );
      $nb_mod++;
    }
  }
  elseif(substr($check_infos,0,4)=='add_')
  {
    $i_fichier = Clean::entier( substr($check_infos,4) );
    if( isset($tab_i_fichier_TO_id_base[$i_fichier]) && isset($tab_users_fichier['adresse'][$i_fichier]) )
    {
      DB_STRUCTURE_ADMINISTRATEUR::DB_ajouter_adresse_parent( $tab_i_fichier_TO_id_base[$i_fichier] , $tab_users_fichier['adresse'][$i_fichier] );
      $nb_add++;
    }
  }
}
// Afficher le résultat
echo'<p><label class="valide">Nouvelles adresses ajoutées : '.$nb_add.'</label></p>'.NL;
echo'<p><label class="valide">Anciennes adresses modifiées : '.$nb_mod.'</label></p>'.NL;
echo'<ul class="puce p"><li><a href="#step81" id="passer_etape_suivante">Passer à l\'étape 5.</a><label id="ajax_msg">&nbsp;</label></li></ul>'.NL;

?>
Example #19
0
  return; // Ne pas exécuter la suite de ce fichier inclus.
}

//
// Affichage du bilan des affectations des series aux élèves avec indicateur de moyennes enregistrées
//

$tab_niveau_groupe = array();
$tab_user          = array();
$tab_select        = array();
$tab_niveau_groupe[0][0] = 'sans classe';
$tab_user[0]             = '';
$tab_select[0]           = '';

// Récupérer la liste des classes
$DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_classes_avec_niveaux($niveau_ordre='DESC');
foreach($DB_TAB as $DB_ROW)
{
  $tab_niveau_groupe[$DB_ROW['niveau_id']][$DB_ROW['groupe_id']] = html($DB_ROW['groupe_nom']);
  $tab_user[  $DB_ROW['groupe_id']] = '';
  $tab_select[$DB_ROW['groupe_id']] = '';
}
// Récupérer la liste des élèves, avec classe, série de brevet, et récupération du total des points (si existant)
$DB_TAB = DB_STRUCTURE_BREVET::DB_lister_brevet_eleves_avec_serie_et_total();
foreach($DB_TAB as $DB_ROW)
{
  $class = ($DB_ROW['saisie_note']===NULL) ? 'non' : 'oui' ;
  $tab_user[  $DB_ROW['eleve_classe_id']] .= '<a class="'.$class.'" id="m_'.$DB_ROW['eleve_classe_id'].'_'.$DB_ROW['user_id'].'_'.$DB_ROW['eleve_brevet_serie'].'" href="#"><img src="./_img/brevet/'.$DB_ROW['eleve_brevet_serie'].'.png" alt="" title="'.$tab_brevet_series[$DB_ROW['eleve_brevet_serie']].'" /><span>'.html($DB_ROW['user_nom'].' '.$DB_ROW['user_prenom']).'</span></a><br />';
  $tab_select[$DB_ROW['eleve_classe_id']] .= '<option value="'.$DB_ROW['eleve_classe_id'].'_'.$DB_ROW['user_id'].'_'.$DB_ROW['eleve_brevet_serie'].'">'.html($DB_ROW['user_nom'].' '.$DB_ROW['user_prenom']).'</option>';
}
// Assemblage du tableau résultant
 * 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::_("Réglage des autorisations"));

// Tableau avec les noms des profils activés dans l'établissement
$tab_profils_libelles = array();
$tab_profil_join_groupes  = array();
$tab_profil_join_matieres = array();
Layout::add( 'js_inline_before' , 'var tab_profil_join_groupes  = new Array();' );
Layout::add( 'js_inline_before' , 'var tab_profil_join_matieres = new Array();' );

$DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_profils_parametres( 'user_profil_type,user_profil_join_groupes,user_profil_join_matieres,user_profil_nom_court_pluriel' /*listing_champs*/ , TRUE /*only_actif*/ );
$DB_TAB[] = array( 'user_profil_sigle' => 'ONLY_COORD' , 'user_profil_type' => '' , 'user_profil_join_groupes' => 0 , 'user_profil_join_matieres' => 0 , 'user_profil_nom_court_pluriel' => 'restriction aux<br />coordonnateurs<br />matières' );
$DB_TAB[] = array( 'user_profil_sigle' => 'ONLY_PP'    , 'user_profil_type' => '' , 'user_profil_join_groupes' => 0 , 'user_profil_join_matieres' => 0 , 'user_profil_nom_court_pluriel' => 'restriction aux<br />professeurs<br />principaux' );
$DB_TAB[] = array( 'user_profil_sigle' => 'ONLY_LV'    , 'user_profil_type' => '' , 'user_profil_join_groupes' => 0 , 'user_profil_join_matieres' => 0 , 'user_profil_nom_court_pluriel' => 'restriction aux<br />professeurs<br />de LV' );
foreach($DB_TAB as $DB_ROW)
{
  $tab_profils_libelles[$DB_ROW['user_profil_sigle']] = $DB_ROW['user_profil_nom_court_pluriel'];
  $is_profil_join_groupe = ( ($DB_ROW['user_profil_type']=='professeur') && ($DB_ROW['user_profil_join_groupes']=='config') ) ? TRUE : FALSE ;
  $tab_profil_join_groupes[$DB_ROW['user_profil_sigle']] = $is_profil_join_groupe;
  $is_profil_join_groupe = ($is_profil_join_groupe) ? 'true' : 'false' ;
  Layout::add( 'js_inline_before' , 'tab_profil_join_groupes["'.$DB_ROW['user_profil_sigle'].'" ] = '.$is_profil_join_groupe.';' );
  $is_profil_join_matiere = ( ($DB_ROW['user_profil_type']=='professeur') && ($DB_ROW['user_profil_join_matieres']=='config') ) ? TRUE : FALSE ;
  $tab_profil_join_matieres[$DB_ROW['user_profil_sigle']] = $is_profil_join_matiere;
  $is_profil_join_matiere = ($is_profil_join_matiere) ? 'true' : 'false' ;
  Layout::add( 'js_inline_before' , 'tab_profil_join_matieres["'.$DB_ROW['user_profil_sigle'].'"] = '.$is_profil_join_matiere.';' );
}
  echo'<td>{{NIVEAU_NOM}}</td>';
  echo'<td>'.html($ref).'</td>';
  echo'<td>'.html($nom).'</td>';
  echo'<td class="nu">';
  echo  '<q class="modifier" title="Modifier cette classe."></q>';
  echo  '<q class="supprimer" title="Supprimer cette classe."></q>';
  echo'</td>';
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Supprimer une classe existante
// ////////////////////////////////////////////////////////////////////////////////////////////////////
else if( ($action=='supprimer') && $id && $nom )
{
  // Effacer l'enregistrement
  DB_STRUCTURE_ADMINISTRATEUR::DB_supprimer_groupe_par_admin( $id , 'classe' , TRUE /*with_devoir*/ );
  // Log de l'action
  SACocheLog::ajouter('Suppression de la classe "'.$nom.'" (n°'.$id.'), et donc des devoirs associés.');
  // Notifications (rendues visibles ultérieurement)
  $notification_contenu = date('d-m-Y H:i:s').' '.$_SESSION['USER_PRENOM'].' '.$_SESSION['USER_NOM'].' a supprimé la classe "'.$nom.'" (n°'.$id.'), et donc les devoirs associés.'."\r\n";
  DB_STRUCTURE_NOTIFICATION::enregistrer_action_admin( $notification_contenu , $_SESSION['USER_ID'] );
  // Afficher le retour
  echo'<td>ok</td>';
}

else
{
  echo'Erreur avec les données transmises !';
}
?>
$action = (isset($_GET['action']))  ? $_GET['action']  : '';
$profil = (isset($_POST['profil'])) ? $_POST['profil'] : '';
$tab_select_users = (isset($_POST['select_users'])) ? array_map('clean_entier',explode(',',$_POST['select_users'])) : array() ;
$tab_select_users = array_filter($tab_select_users,'positif');
$nb = count($tab_select_users);

//	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
//	Désactiver des comptes élèves
//	Désactiver des comptes parents
//	Désactiver des comptes professeurs et/ou directeurs
//	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-

if( ($action=='desactiver') && $nb )
{
	foreach($tab_select_users as $user_id)
	{
		// Mettre à jour l'enregistrement
		DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_user_statut( $user_id , 0 );
	}
	$s = ($nb>1) ? 's' : '';
	exit('OK'.$nb.' compte'.$s.' désactivé'.$s.'.');
}

//	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
//	On ne devrait pas en arriver là...
//	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-

exit('Erreur avec les données transmises !');

?>
    }
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// associations profs/groupes ou élèves/groupes
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Garder trace des identités des utilisateurs de la base
$tab_base_user_identite = array();
// On récupère le contenu de la base pour comparer : $tab_base_affectation[user_id_groupe_id]=TRUE et $tab_base_groupe[groupe_id]=groupe_nom
// En deux requêtes sinon on ne récupère pas les groupes sans utilisateurs affectés.
$tab_base_groupe = array();
$DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_groupes();
foreach ($DB_TAB as $DB_ROW) {
    $tab_base_groupe[$DB_ROW['groupe_id']] = $DB_ROW['groupe_nom'];
}
$tab_base_affectation = array();
$DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_users_avec_groupe($import_profil, TRUE);
foreach ($DB_TAB as $DB_ROW) {
    $tab_base_affectation[$DB_ROW['user_id'] . '_' . $DB_ROW['groupe_id']] = TRUE;
    $tab_base_user_identite[$DB_ROW['user_id']] = $DB_ROW['user_nom'] . ' ' . $DB_ROW['user_prenom'];
}
// Parcourir chaque entrée du fichier à la recherche d'affectations utilisateurs/groupes
foreach ($tab_users_fichier['groupe'] as $i_fichier => $tab_groupes) {
    if (count($tab_groupes)) {
        foreach ($tab_groupes as $i_groupe => $groupe_ref) {
            // On a trouvé une telle affectation ; comparer avec ce que contient la base
            if (isset($tab_i_fichier_TO_id_base[$i_fichier]) && isset($tab_i_groupe_TO_id_base[$i_groupe])) {
                $user_id = $tab_i_fichier_TO_id_base[$i_fichier];
                $groupe_id = $tab_i_groupe_TO_id_base[$i_groupe];
                if (isset($tab_base_affectation[$user_id . '_' . $groupe_id])) {
                    if ($mode == 'complet') {
                        $lignes_groupes_ras .= '<tr><th>Conserver</th><td>' . html($tab_users_fichier['nom'][$i_fichier] . ' ' . $tab_users_fichier['prenom'][$i_fichier]) . '</td><td>' . html($tab_base_groupe[$groupe_id]) . '</td></tr>' . NL;
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Étape 41 - Analyse des données des groupes (sconet_professeurs_directeurs | sconet_eleves | tableur_professeurs_directeurs | tableur_eleves)
// ////////////////////////////////////////////////////////////////////////////////////////////////////

// On récupère le fichier avec des infos sur les correspondances : $tab_liens_id_base['classes'] -> $tab_i_classe_TO_id_base ; $tab_liens_id_base['groupes'] -> $tab_i_groupe_TO_id_base ; $tab_liens_id_base['users'] -> $tab_i_fichier_TO_id_base
$tab_liens_id_base = load_fichier('liens_id_base');
$tab_i_classe_TO_id_base  = $tab_liens_id_base['classes'];
$tab_i_groupe_TO_id_base  = $tab_liens_id_base['groupes'];
$tab_i_fichier_TO_id_base = $tab_liens_id_base['users'];
// On récupère le fichier avec les groupes : $tab_groupes_fichier['ref'] : i -> ref ; $tab_groupes_fichier['nom'] : i -> nom ; $tab_groupes_fichier['niveau'] : i -> niveau
$tab_groupes_fichier = load_fichier('groupes');
// On récupère le contenu de la base pour comparer : $tab_groupes_base['ref'] : id -> ref ; $tab_groupes_base['nom'] : id -> nom
$tab_groupes_base        = array();
$tab_groupes_base['ref'] = array();
$tab_groupes_base['nom'] = array();
$DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_groupes();
foreach($DB_TAB as $DB_ROW)
{
  $tab_groupes_base['ref'][$DB_ROW['groupe_id']] = $DB_ROW['groupe_ref'];
  $tab_groupes_base['nom'][$DB_ROW['groupe_id']] = $DB_ROW['groupe_nom'];
}
// Contenu du fichier à conserver
$lignes_ras = '';
foreach($tab_groupes_fichier['ref'] as $i_groupe => $ref)
{
  $id_base = array_search($ref,$tab_groupes_base['ref']);
  if($id_base!==FALSE)
  {
    if($mode=='complet')
    {
      $lignes_ras .= '<tr><th>'.html($tab_groupes_base['ref'][$id_base]).'</th><td>'.html($tab_groupes_base['nom'][$id_base]).'</td></tr>'.NL;
 * 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::_("Nettoyer / Initialiser la base"));
$label = version_compare($_SESSION['VERSION_BASE'], VERSION_BASE_STRUCTURE, '=') ? 'valide' : 'alerte';
Layout::add('js_inline_before', 'var nb_devoirs_annee_scolaire_precedente = ' . DB_STRUCTURE_ADMINISTRATEUR::DB_compter_devoirs_annees_scolaires_precedentes() . ';');
?>

<p><span class="manuel"><a class="pop_up" href="<?php 
echo SERVEUR_DOCUMENTAIRE;
?>
?fichier=support_administrateur__gestion_nettoyage">DOC : Nettoyage et initialisation annuelle de la base</a></span></p>

<hr />

<h2>Version de la base</h2>

<div class="astuce">La base de données est mise à jour automatiquement.</div>
<div>Version attendue : <?php 
echo VERSION_BASE_STRUCTURE;
?>
/**
 * Supprimer un niveau spécifique
 *
 * @param int $niveau_id
 * @return void
 */
public static function DB_supprimer_niveau_specifique($niveau_id)
{
  $DB_SQL = 'DELETE sacoche_niveau, sacoche_jointure_message_destinataire ';
  $DB_SQL.= 'FROM sacoche_niveau ';
  $DB_SQL.= 'LEFT JOIN sacoche_jointure_message_destinataire ON sacoche_niveau.niveau_id=sacoche_jointure_message_destinataire.destinataire_id AND destinataire_type="niveau" ';
  $DB_SQL.= 'WHERE niveau_id=:niveau_id ';
  $DB_VAR = array(':niveau_id'=>$niveau_id);
  DB::query(SACOCHE_STRUCTURE_BD_NAME , $DB_SQL , $DB_VAR);
  // Il faut aussi supprimer les référentiels associés, et donc tous les scores associés (orphelins du niveau)
  DB_STRUCTURE_ADMINISTRATEUR::DB_supprimer_referentiels('niveau_id',$niveau_id);
}
     $tab_donnees[':email_origine'] = '';
 }
 // Cas du mot de passe
 if (!$box_password) {
     $tab_donnees[':password'] = crypter_mdp($password);
 }
 // Cas de la date de sortie
 if ($box_date) {
     $sortie_date = '-';
     $sortie_date_mysql = SORTIE_DEFAUT_MYSQL;
 } else {
     $sortie_date_mysql = convert_date_french_to_mysql($sortie_date);
 }
 // Mettre à jour l'enregistrement
 $tab_donnees += array(':sconet_id' => $sconet_id, ':reference' => $reference, ':profil_sigle' => $profil, ':genre' => $genre, ':nom' => $nom, ':prenom' => $prenom, ':courriel' => $courriel, ':id_ent' => $id_ent, ':id_gepi' => $id_gepi, ':sortie_date' => $sortie_date_mysql);
 DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_user($id, $tab_donnees);
 // Afficher le retour
 $checked = $check ? ' checked' : '';
 echo '<td class="nu"><input type="checkbox" name="f_ids" value="' . $id . '"' . $checked . ' /></td>';
 echo '<td class="label">' . html($id_ent) . '</td>';
 echo '<td class="label">' . html($id_gepi) . '</td>';
 echo '<td class="label">' . html($sconet_id) . '</td>';
 echo '<td class="label">' . html($reference) . '</td>';
 echo '<td class="label">' . html($profil) . ' <img alt="" src="./_img/bulle_aide.png" width="16" height="16" title="' . html(html($_SESSION['tmp'][$profil])) . '" /></td>';
 echo '<td class="label">' . Html::$tab_genre['adulte'][$genre] . '</td>';
 echo '<td class="label">' . html($nom) . '</td>';
 echo '<td class="label">' . html($prenom) . '</td>';
 echo '<td class="label">' . html($login) . '</td>';
 echo $box_password ? '<td class="label i">champ crypté</td>' : '<td class="label new">' . $password . ' <img alt="" src="./_img/bulle_aide.png" width="16" height="16" title="Pensez à noter le mot de passe !" /></td>';
 echo '<td class="label">' . html($courriel) . '</td>';
 echo '<td class="label">' . $sortie_date . '</td>';
    <tr>
      <th>Id. ENT</th>
      <th>Id. GEPI</th>
      <th>Civ.</th>
      <th>Nom</th>
      <th>Prénom</th>
      <th>Login</th>
      <th>Mot de passe</th>
      <th>Courriel</th>
      <th class="nu"><q class="ajouter" title="Ajouter un administrateur."></q></th>
    </tr>
  </thead>
  <tbody>
    <?php 
// Lister les administrateurs
$DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_users('administrateur', 1, 'user_id,user_id_ent,user_id_gepi,user_genre,user_nom,user_prenom,user_login,user_email', FALSE);
if (!empty($DB_TAB)) {
    foreach ($DB_TAB as $DB_ROW) {
        // Afficher une ligne du tableau
        echo '<tr id="id_' . $DB_ROW['user_id'] . '">';
        echo '<td>' . html($DB_ROW['user_id_ent']) . '</td>';
        echo '<td>' . html($DB_ROW['user_id_gepi']) . '</td>';
        echo '<td>' . Html::$tab_genre['adulte'][$DB_ROW['user_genre']] . '</td>';
        echo '<td>' . html($DB_ROW['user_nom']) . '</td>';
        echo '<td>' . html($DB_ROW['user_prenom']) . '</td>';
        echo '<td>' . html($DB_ROW['user_login']) . '</td>';
        echo '<td class="i">champ crypté</td>';
        echo '<td>' . html($DB_ROW['user_email']) . '</td>';
        echo '<td class="nu">';
        echo '<q class="modifier" title="Modifier cet administrateur."></q>';
        echo $DB_ROW['user_id'] != $_SESSION['USER_ID'] ? '<q class="supprimer" title="Retirer cet administrateur."></q>' : '<q class="supprimer_non" title="Un administrateur ne peut pas supprimer son propre compte."></q>';
// Lister les parents, par nom / prénom ou recherche d'homonymies
if(!$find_doublon)
{
  $DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_parents_avec_infos_enfants( FALSE /*with_adresse*/ , $statut , $debut_nom , $debut_prenom );
}
elseif($find_doublon) // (forcément)
{
  $DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::lister_parents_homonymes();
  if(!empty($DB_TAB))
  {
    $tab_parents_id = array();
    foreach($DB_TAB as $DB_ROW)
    {
      $tab_parents_id = array_merge( $tab_parents_id , explode(',',$DB_ROW['identifiants']) );
    }
    $DB_TAB = count($tab_parents_id) ? DB_STRUCTURE_ADMINISTRATEUR::DB_lister_parents_avec_infos_enfants( FALSE /*with_adresse*/ , TRUE /*statut*/ , '' /*debut_nom*/ , '' /*debut_prenom*/ , implode(',',$tab_parents_id) ) : array() ;
    // Préparation de l'export CSV
    $separateur = ';';
    // ajout du préfixe 'ENT_' pour éviter un bug avec M$ Excel « SYLK : Format de fichier non valide » (http://support.microsoft.com/kb/323626/fr). 
    $export_csv = 'ENT_ID'.$separateur.'SCONET_ID'.$separateur.'NOM'.$separateur.'PRENOM'.$separateur.'RESPONSABILITES'."\r\n\r\n";
  }
}
?>

<table id="table_action" class="form t9 hsort">
  <thead>
    <tr>
      <th class="nu"><q class="cocher_tout" title="Tout cocher."></q><br /><q class="cocher_rien" title="Tout décocher."></q></th>
      <th>Resp</th>
      <th>Id. ENT</th>
      <th>Id. GEPI</th>
  foreach($tab_modifs as $key => $id_modifs)
  {
    list($classe_id,$prof_id) = explode('_',$id_modifs);
    $classe_id = Clean::entier($classe_id);
    $prof_id   = Clean::entier($prof_id);
    if($classe_id && $prof_id)
    {
      DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_liaison_user_groupe_par_admin( $prof_id , 'professeur' , $classe_id , 'classe' , $etat );
    }
  }
  exit('ok');
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Ajouter | Retirer une affectation en tant que professeur principal
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if( in_array($action,array('ajouter_pp','retirer_pp')) && ($classe_id) && ($prof_id) )
{
  $etat = ($action=='ajouter_pp') ? TRUE : FALSE ;
  DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_liaison_professeur_principal( $prof_id , $classe_id , $etat );
  exit('ok');
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// On ne devrait pas en arriver là...
// ////////////////////////////////////////////////////////////////////////////////////////////////////

exit('Erreur avec les données transmises !');

?>