} // Maintenant on complète avec les valeurs de la base $DB_TAB = DB_STRUCTURE_SOCLE::DB_lister_jointure_user_entree($liste_eleve, $listing_entree_id, $domaine_id = 0, $pilier_id = 0, $palier_id = 0); // en fait on connait aussi le palier mais la requête est plus simple (pas de jointure) avec les entrées foreach ($DB_TAB as $DB_ROW) { $tab_user_entree[$DB_ROW['user_id']][$DB_ROW['entree_id']] = array('etat' => $DB_ROW['validation_entree_etat'], 'date' => convert_date_mysql_to_french($DB_ROW['validation_entree_date']), 'info' => $DB_ROW['validation_entree_info']); } // On commence par remplir tout le tableau des piliers pour ne pas avoir ensuite à tester tout le temps si le champ existe foreach ($tab_eleve_id as $eleve_id) { foreach ($tab_pilier as $pilier_id => $tab) { $tab_user_pilier[$eleve_id][$pilier_id] = array('etat' => 2, 'date' => '', 'info' => ''); } } // Maintenant on complète avec les valeurs de la base $listing_pilier_id = implode(',', array_keys($tab_pilier)); $DB_TAB = DB_STRUCTURE_SOCLE::DB_lister_jointure_user_pilier($liste_eleve, $listing_pilier_id, $palier_id = 0); // en fait on connait aussi le palier mais la requête est plus simple (pas de jointure) avec les piliers foreach ($DB_TAB as $DB_ROW) { $tab_user_pilier[$DB_ROW['user_id']][$DB_ROW['pilier_id']] = array('etat' => $DB_ROW['validation_pilier_etat'], 'date' => convert_date_mysql_to_french($DB_ROW['validation_pilier_date']), 'info' => $DB_ROW['validation_pilier_info']); } } // //////////////////////////////////////////////////////////////////////////////////////////////////// /* * 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... */ // //////////////////////////////////////////////////////////////////////////////////////////////////// DB::close(SACOCHE_STRUCTURE_BD_NAME); unset($DB_TAB); // ////////////////////////////////////////////////////////////////////////////////////////////////////
* 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::_("Import / Export de validations du socle")); ?> <?php // Test pour l'export $nb_eleves_sans_sconet = DB_STRUCTURE_SOCLE::DB_compter_eleves_actuels_sans_id_sconet(); $s = $nb_eleves_sans_sconet > 1 ? 's' : ''; $test_uai = $_SESSION['WEBMESTRE_UAI'] ? TRUE : FALSE; $test_cnil = intval(CNIL_NUMERO) && CNIL_DATE_ENGAGEMENT && CNIL_DATE_RECEPISSE ? TRUE : FALSE; $test_id_sconet = !$nb_eleves_sans_sconet ? TRUE : FALSE; $test_key_sesamath = $_SESSION['SESAMATH_KEY'] && $_SESSION['SESAMATH_ID'] ? TRUE : FALSE; $webmestre_menu_uai = HEBERGEUR_INSTALLATION == 'multi-structures' ? '[Gestion des inscriptions] [Gestion des établissements]' : '[Paramétrages installation] [Identité de l\'installation]'; $webmestre_menu_cnil = '[Paramétrages installation] [Identité de l\'installation]'; $msg_uai = $test_uai ? '<label class="valide">Référence ' . html($_SESSION['WEBMESTRE_UAI']) . '</label>' : '<label class="erreur">Référence non renseignée par le webmestre.</label> <span class="manuel"><a class="pop_up" href="' . SERVEUR_DOCUMENTAIRE . '?fichier=support_webmestre__identite_installation">DOC</a></span> ' . HtmlMail::to(WEBMESTRE_COURRIEL, 'SACoche - référence UAI', 'contact', 'Bonjour. La référence UAI de notre établissement (base n°' . $_SESSION['BASE'] . ') n\'est pas renseignée. Pouvez-vous faire le nécessaire depuis votre menu ' . $webmestre_menu_uai . ' ?'); $msg_cnil = $test_cnil ? '<label class="valide">Déclaration n°' . html(CNIL_NUMERO) . ' - demande effectuée le ' . html(CNIL_DATE_ENGAGEMENT) . ' - récépissé reçu le ' . html(CNIL_DATE_RECEPISSE) . '</label>' : '<label class="erreur">Déclaration non renseignée par le webmestre.</label> <span class="manuel"><a class="pop_up" href="' . SERVEUR_DOCUMENTAIRE . '?fichier=support_webmestre__identite_installation">DOC</a></span> ' . HtmlMail::to(WEBMESTRE_COURRIEL, 'SACoche - Informations CNIL', 'contact', 'Bonjour. Les informations CNIL de l\'installation ' . URL_INSTALL_SACOCHE . ' ne sont pas renseignées. Pouvez-vous faire le nécessaire depuis votre menu ' . $webmestre_menu_cnil . ' ?'); $msg_id_sconet = $test_id_sconet ? '<label class="valide">Identifiants élèves présents.</label>' : '<label class="alerte">' . $nb_eleves_sans_sconet . ' élève' . $s . ' trouvé' . $s . ' sans identifiant Sconet.</label> <span class="manuel"><a class="pop_up" href="' . SERVEUR_DOCUMENTAIRE . '?fichier=support_administrateur__import_users_sconet">DOC</a></span>'; $msg_key_sesamath = $test_key_sesamath ? '<label class="valide">Etablissement identifié sur le serveur communautaire.</label>' : '<label class="erreur">Identification non effectuée par un administrateur.</label> <span class="manuel"><a class="pop_up" href="' . SERVEUR_DOCUMENTAIRE . '?fichier=support_administrateur__gestion_informations_structure">DOC</a></span>'; $bouton_export_lpc = $test_uai && $test_cnil && $test_key_sesamath ? 'id="bouton_export" class="fichier_export enabled"' : 'id="disabled_export" class="fichier_export" disabled'; ?> <?php
} if( (!is_null($DB_ROW['section_id'])) && ($DB_ROW['section_id']!=$section_id) ) { $section_id = $DB_ROW['section_id']; $tab_section[$pilier_id][$section_id] = $DB_ROW['pilier_ref'].'.'.$DB_ROW['section_ordre'].' - '.$DB_ROW['section_nom']; } if( (!is_null($DB_ROW['entree_id'])) && ($DB_ROW['entree_id']!=$socle_id) ) { $socle_id = $DB_ROW['entree_id']; $tab_socle[$pilier_id][$section_id][$socle_id] = $DB_ROW['pilier_ref'].'.'.$DB_ROW['section_ordre'].'.'.$DB_ROW['entree_ordre'].' - '.$DB_ROW['entree_nom']; } } // Récupération des données des référentiels liés au socle $tab_jointure = array(); $DB_TAB = DB_STRUCTURE_SOCLE::DB_recuperer_associations_entrees_socle(); foreach($DB_TAB as $DB_ROW) { $tab_jointure[$DB_ROW['entree_id']][] = $DB_ROW['matiere_ref'].'.'.$DB_ROW['niveau_ref'].'.'.$DB_ROW['item_ref'].' - '.$DB_ROW['item_nom']; } // Elaboration de la sortie $export_csv .= $palier_nom."\r\n"; $export_html .= '<ul class="ul_m1">'.NL; $export_html .= '<li class="li_m1"><span>'.html($palier_nom).'</span>'.NL; $export_html .= '<ul class="ul_n1">'.NL; foreach($tab_pilier as $pilier_id => $pilier_nom) { $export_csv .= $separateur.$pilier_nom."\r\n"; $export_html .= '<li class="li_n1"><span>'.html($pilier_nom).'</span>'.NL; $export_html .= '<ul class="ul_n2">'.NL;
{ $tab_bad[] = 'U'.$DB_ROW['user_id'].'C'.$DB_ROW['pilier_id'].'" class="v3">'; $tab_bon[] = 'U'.$DB_ROW['user_id'].'C'.$DB_ROW['pilier_id'].'" class="v'.$DB_ROW['validation_pilier_etat'].'" title="Validé le '.convert_date_mysql_to_french($DB_ROW['validation_pilier_date']).' par '.html($DB_ROW['validation_pilier_info']).'" data-etat="lock">'; } } $affichage = str_replace($tab_bad,$tab_bon,$affichage); // Afficher le résultat echo $affichage; } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Supprimer une validation positive // //////////////////////////////////////////////////////////////////////////////////////////////////// elseif( ($action=='Enregistrer_validation') && ($delete_id) ) { // Récupérer le duo {eleve;pilier} $string_infos = str_replace( array('U','C') , '_' , $delete_id); list($rien,$eleve_id,$pilier_id) = explode('_',$string_infos); // Mettre à jour la base DB_STRUCTURE_SOCLE::DB_supprimer_validation('pilier',$eleve_id,$pilier_id); exit('OK'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // On ne devrait pas en arriver là... // //////////////////////////////////////////////////////////////////////////////////////////////////// exit('Erreur avec les données transmises !'); ?>
{ // 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 !');
unset($tab_post[$key]); } // Il reste dans $tab_post les validations à ajouter (mises dans $tab_nouveau_ajouter) et les validations à ignorer (non effectuées par le formulaire) // On remplit $tab_nouveau_ajouter // Validation absente dans la base mais effectuée par le formulaire $tab_nouveau_ajouter = array_filter($tab_post, 'is_renseigne'); // Sinon, validation absente dans la base et absente du formulaire : RAS // Il n'y a plus qu'à mettre à jour la base if (!count($tab_nouveau_ajouter) && !count($tab_nouveau_modifier) && !count($tab_nouveau_supprimer)) { exit('Aucune modification détectée !'); } // L'information associée à la validation comporte le nom du validateur (c'est une information statique, conservée sur plusieurs années) $info = afficher_identite_initiale($_SESSION['USER_NOM'], FALSE, $_SESSION['USER_PRENOM'], TRUE, $_SESSION['USER_GENRE']); foreach ($tab_nouveau_ajouter as $key => $etat) { list($entree_id, $eleve_id) = explode('x', $key); DB_STRUCTURE_SOCLE::DB_ajouter_validation('entree', $eleve_id, $entree_id, $etat, TODAY_MYSQL, $info); } foreach ($tab_nouveau_modifier as $key => $etat) { list($entree_id, $eleve_id) = explode('x', $key); DB_STRUCTURE_SOCLE::DB_modifier_validation('entree', $eleve_id, $entree_id, $etat, TODAY_MYSQL, $info); } foreach ($tab_nouveau_supprimer as $key) { list($entree_id, $eleve_id) = explode('x', $key); DB_STRUCTURE_SOCLE::DB_supprimer_validation('entree', $eleve_id, $entree_id); } exit('OK'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // On ne devrait pas en arriver là... // //////////////////////////////////////////////////////////////////////////////////////////////////// exit('Erreur avec les données transmises !');
$DB_TAB = DB_STRUCTURE_SOCLE::DB_lister_jointure_user_entree($liste_eleve,$listing_entree_id,$domaine_id=0,$pilier_id=0,$palier_id=0); // en fait on connait aussi le palier mais la requête est plus simple (pas de jointure) avec les entrées foreach($DB_TAB as $DB_ROW) { $tab_user_entree[$DB_ROW['user_id']][$DB_ROW['entree_id']] = array('etat'=>$DB_ROW['validation_entree_etat'],'date'=>convert_date_mysql_to_french($DB_ROW['validation_entree_date']),'info'=>$DB_ROW['validation_entree_info']); } // On commence par remplir tout le tableau des piliers pour ne pas avoir ensuite à tester tout le temps si le champ existe foreach($tab_eleve_id as $eleve_id) { foreach($tab_pilier as $pilier_id => $tab) { $tab_user_pilier[$eleve_id][$pilier_id] = array('etat'=>2,'date'=>'','info'=>''); } } //Maintenant on complète avec les valeurs de la base $listing_pilier_id = implode(',',array_keys($tab_pilier)); $DB_TAB = DB_STRUCTURE_SOCLE::DB_lister_jointure_user_pilier($liste_eleve,$listing_pilier_id,$palier_id=0); // en fait on connait aussi le palier mais la requête est plus simple (pas de jointure) avec les piliers foreach($DB_TAB as $DB_ROW) { $tab_user_pilier[$DB_ROW['user_id']][$DB_ROW['pilier_id']] = array('etat'=>$DB_ROW['validation_pilier_etat'],'date'=>convert_date_mysql_to_french($DB_ROW['validation_pilier_date']),'info'=>$DB_ROW['validation_pilier_info']); } } // //////////////////////////////////////////////////////////////////////////////////////////////////// /* * 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... */ // //////////////////////////////////////////////////////////////////////////////////////////////////// DB::close(SACOCHE_STRUCTURE_BD_NAME);
} } } // les validations d'items if(isset($tab_eleve_fichier['validations'][$i_fichier]['entree'])) { foreach($tab_eleve_fichier['validations'][$i_fichier]['entree'] as $entree_id => $tab_infos_fichier) { if(!isset($tab_validations[$id_base]['entree'][$entree_id])) { DB_STRUCTURE_SOCLE::DB_ajouter_validation('entree',$id_base,$entree_id,$tab_infos_fichier['etat'],$tab_infos_fichier['date'],$tab_infos_fichier['info']); $nb_modifs++; } elseif($tab_validations[$id_base]['entree'][$entree_id]<$tab_infos_fichier['date']) { DB_STRUCTURE_SOCLE::DB_modifier_validation('entree',$id_base,$entree_id,$tab_infos_fichier['etat'],$tab_infos_fichier['date'],$tab_infos_fichier['info']); $nb_modifs++; } } } if($nb_modifs) { $s = ($nb_modifs>1) ? 's' : '' ; $lignes_modifier .= '<li><em>Modifié</em> ('.$nb_modifs.' import'.$s.' de validation'.$s.' ) : '.html($tab_eleve_base['nom'][$id_base].' '.$tab_eleve_base['prenom'][$id_base]).' ('.$tab_eleve_base['sconet_id'][$id_base].')</li>'.NL; } else { $lignes_inchanger .= '<li><em>Inchangé</em> (pas de validations nouvelles) : '.html($tab_eleve_base['nom'][$id_base].' '.$tab_eleve_base['prenom'][$id_base]).' ('.$tab_eleve_base['sconet_id'][$id_base].')</li>'.NL; } } }