/** * afficher_form_element_checkbox_eleves_professeur * * @param bool $with_pourcent * @return string */ function afficher_form_element_checkbox_eleves_professeur($with_pourcent) { $affichage = ''; $tab_regroupements = array(); $tab_id = array('classe'=>'','groupe'=>''); // Recherche de la liste des classes et des groupes du professeur $DB_TAB = DB_STRUCTURE_PROFESSEUR::DB_lister_classes_groupes_professeur($_SESSION['USER_ID'],$_SESSION['USER_JOIN_GROUPES']); foreach($DB_TAB as $DB_ROW) { $tab_regroupements[$DB_ROW['groupe_id']] = array('nom'=>$DB_ROW['groupe_nom'],'eleve'=>array()); $tab_id[$DB_ROW['groupe_type']][] = $DB_ROW['groupe_id']; } // Recherche de la liste des élèves pour chaque classe du professeur if(is_array($tab_id['classe'])) { $listing = implode(',',$tab_id['classe']); $DB_TAB = DB_STRUCTURE_PROFESSEUR::DB_lister_eleves_classes($listing); foreach($DB_TAB as $DB_ROW) { $tab_regroupements[$DB_ROW['eleve_classe_id']]['eleve'][$DB_ROW['user_id']] = $DB_ROW['user_nom'].' '.$DB_ROW['user_prenom'].' ('.$DB_ROW['user_login'].')'; } } // Recherche de la liste des élèves pour chaque groupe du professeur if(is_array($tab_id['groupe'])) { $listing = implode(',',$tab_id['groupe']); $DB_TAB = DB_STRUCTURE_PROFESSEUR::DB_lister_eleves_groupes($listing); foreach($DB_TAB as $DB_ROW) { $tab_regroupements[$DB_ROW['groupe_id']]['eleve'][$DB_ROW['user_id']] = $DB_ROW['user_nom'].' '.$DB_ROW['user_prenom'].' ('.$DB_ROW['user_login'].')'; } } // Affichage de la liste des élèves (du professeur) pour chaque classe et groupe foreach($tab_regroupements as $groupe_id => $tab_groupe) { $gradient_pourcent = ($with_pourcent) ? '<span id="groupe_'.$groupe_id.'" class="gradient_pourcent"></span>' : '' ; $affichage .= '<ul class="ul_m1">'.NL; $affichage .= '<li class="li_m1"><span class="deja">'.html($tab_groupe['nom']).'</span>'.$gradient_pourcent.NL; $affichage .= '<ul class="ul_n3">'.NL; foreach($tab_groupe['eleve'] as $eleve_id => $eleve_nom) { // C'est plus compliqué que pour les items car un élève peut appartenir à une classe et plusieurs groupes => id du groupe mélé à l'id $affichage .= '<li class="li_n3"><input id="id_'.$eleve_id.'_'.$groupe_id.'" name="f_eleves[]" type="checkbox" value="'.$eleve_id.'" /><label for="id_'.$eleve_id.'_'.$groupe_id.'"> '.html($eleve_nom).'</label><span></span></li>'.NL; } $affichage .= '</ul>'.NL; $affichage .= '</li>'.NL; $affichage .= '</ul>'.NL; } return $affichage; }
echo '<td>{{NIVEAU_NOM}}</td>'; echo '<td>' . html($groupe_nom) . '</td>'; echo '<td>' . $eleves_texte . '</td>'; echo '<td>' . $profs_texte . '</td>'; echo '<td class="nu">'; echo '<q class="modifier" title="Modifier ce groupe de besoin."></q>'; echo '<q class="supprimer" title="Supprimer ce groupe de besoin."></q>'; echo '</td>'; echo '<SCRIPT>'; echo 'tab_eleves["' . $groupe_id . '"]="' . implode('_', $tab_eleves) . '";'; echo 'tab_profs["' . $groupe_id . '"]="' . implode('_', $tab_profs) . '";'; exit; } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Supprimer un groupe de besoin existant // //////////////////////////////////////////////////////////////////////////////////////////////////// if ($action == 'supprimer' && $groupe_id && $groupe_nom) { // Effacer l'enregistrement DB_STRUCTURE_PROFESSEUR::DB_supprimer_groupe_par_prof($groupe_id, 'besoin', TRUE); // Log de l'action SACocheLog::ajouter('Suppression du regroupement "' . $groupe_nom . '" (besoin n°' . $groupe_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é son regroupement "' . $groupe_nom . '" (besoin n°' . $groupe_id . '), et donc les devoirs associés.' . "\r\n"; DB_STRUCTURE_NOTIFICATION::enregistrer_action_sensible($notification_contenu); // Afficher le retour exit('<td>ok</td>'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // On ne devrait pas en arriver là ! // //////////////////////////////////////////////////////////////////////////////////////////////////// exit('Erreur avec les données transmises !');
/** * Tester si on a un droit d'accès spécifique * * @param string $listing_droits_sigles * @param int $matiere_coord_or_groupe_pp_connu si le droit comporte une restriction aux coordonnateurs matières | professeurs principaux, on peut déja connaitre et transmettre l'info (soit pour au moins une matière | classe, soit pour une matière | classe donnée) * @param int $matiere_id_or_groupe_id_a_tester si le droit comporte une restriction aux coordonnateurs matières | professeurs principaux, et si $matiere_coord_or_groupe_pp_connu n'est pas transmis, on peut chercher si le droit est bon soit pour une matière | classe donnée, soit pour au moins une matière | classe * @param string $forcer_profil_sigle pour forcer à tester un profil donné au lieu du profil de l'utilisateur * @param string $forcer_profil_type pour forcer à tester un profil donné au lieu du profil de l'utilisateur * @return bool */ function test_user_droit_specifique( $listing_droits_sigles , $matiere_coord_or_groupe_pp_connu=NULL , $matiere_id_or_groupe_id_a_tester=0 , $forcer_profil_sigle=NULL , $forcer_profil_type=NULL ) { $user_profil_sigle = (!$forcer_profil_sigle) ? $_SESSION['USER_PROFIL_SIGLE'] : $forcer_profil_sigle ; $user_profil_type = (!$forcer_profil_type) ? $_SESSION['USER_PROFIL_TYPE'] : $forcer_profil_type ; $tableau_droits_sigles = explode(',',$listing_droits_sigles); $test_droit = in_array($user_profil_sigle,$tableau_droits_sigles); if( $test_droit && ($user_profil_type=='professeur') && ($_SESSION['USER_JOIN_GROUPES']=='config') && test_droit_specifique_restreint($listing_droits_sigles,'ONLY_PP') ) { return ($matiere_coord_or_groupe_pp_connu!==NULL) ? (bool)$matiere_coord_or_groupe_pp_connu : DB_STRUCTURE_PROFESSEUR::DB_tester_prof_principal($_SESSION['USER_ID'],$matiere_id_or_groupe_id_a_tester) ; } if( $test_droit && ($user_profil_type=='professeur') && ($_SESSION['USER_JOIN_MATIERES']=='config') && test_droit_specifique_restreint($listing_droits_sigles,'ONLY_COORD') ) { return ($matiere_coord_or_groupe_pp_connu!==NULL) ? (bool)$matiere_coord_or_groupe_pp_connu : DB_STRUCTURE_PROFESSEUR::tester_prof_coordonnateur($_SESSION['USER_ID'],$matiere_id_or_groupe_id_a_tester) ; } if( $test_droit && ($user_profil_type=='professeur') && ($_SESSION['USER_JOIN_MATIERES']=='config') && test_droit_specifique_restreint($listing_droits_sigles,'ONLY_LV') ) { return DB_STRUCTURE_PROFESSEUR::tester_prof_langue_vivante($_SESSION['USER_ID']) ; } return $test_droit; }
echo '<q class="supprimer" title="Supprimer ce groupe de besoin."></q>'; echo'</td>'; echo'<SCRIPT>'; echo'tab_eleves["'.$groupe_id.'"]="'.implode('_',$tab_eleves).'";'; echo'tab_profs["'.$groupe_id.'"]="'.implode('_',$tab_profs).'";'; exit(); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Supprimer un groupe de besoin existant // //////////////////////////////////////////////////////////////////////////////////////////////////// if( ($action=='supprimer') && $groupe_id && $groupe_nom ) { // Effacer l'enregistrement DB_STRUCTURE_PROFESSEUR::DB_supprimer_groupe_par_prof( $groupe_id , 'besoin' , TRUE /*with_devoir*/ ); // Log de l'action SACocheLog::ajouter('Suppression du regroupement "'.$groupe_nom.'" (besoin n°'.$groupe_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é son regroupement "'.$groupe_nom.'" (besoin n°'.$groupe_id.'), et donc les devoirs associés.'."\r\n"; DB_STRUCTURE_NOTIFICATION::enregistrer_action_sensible($notification_contenu); // Afficher le retour exit('<td>ok</td>'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // On ne devrait pas en arriver là ! // //////////////////////////////////////////////////////////////////////////////////////////////////// exit('Erreur avec les données transmises !');
* si ce n’est pas le cas, consultez : <http://www.gnu.org/licenses/>. * */ // Mettre à jour l'élément de formulaire "f_devoir" et le renvoyer en HTML if (!defined('SACoche')) { exit('Ce fichier ne peut être appelé directement !'); } if ($_SESSION['SESAMATH_ID'] == ID_DEMO) { } $eval_type = isset($_POST['eval_type']) ? Clean::texte($_POST['eval_type']) : ''; // 'groupe' ou 'select' $groupe_id = isset($_POST['groupe_id']) ? Clean::entier($_POST['groupe_id']) : 0; // utile uniquement pour $eval_type='groupe' $tab_types = array('groupe', 'select'); if (!$groupe_id && $eval_type == 'groupe' || !in_array($eval_type, $tab_types)) { exit('Erreur avec les données transmises !'); } // Lister les dernières évaluations d'une classe ou d'un groupe ou d'un groupe de besoin $DB_TAB = DB_STRUCTURE_PROFESSEUR::DB_lister_devoirs_prof_groupe_sans_infos_last($_SESSION['USER_ID'], $groupe_id, $eval_type); if (empty($DB_TAB)) { exit('<option value="" disabled>Aucun devoir n\'a été trouvé pour ce groupe d\'élèves !</option>'); } foreach ($DB_TAB as $key => $DB_ROW) { // Le code js a besoin qu'une option soit sélectionnée $selected = $key ? '' : ' selected'; // Formater la date et la référence de l'évaluation $date_affich = convert_date_mysql_to_french($DB_ROW['devoir_date']); $date_visible_affich = convert_date_mysql_to_french($DB_ROW['devoir_visible_date']); echo '<option value="' . $DB_ROW['devoir_id'] . '_' . $DB_ROW['groupe_id'] . '"' . $selected . '>' . $date_affich . ' || ' . $date_visible_affich . ' || ' . html($DB_ROW['devoir_info']) . '</option>'; } exit;
* 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 = "Évaluer une classe ou un groupe"; require('./_inc/fonction_affichage_sections_communes.php'); // Élément de formulaire "f_aff_classe" pour le choix des élèves (liste des classes / groupes / besoins) du professeur, enregistré dans une variable javascript pour utilisation suivant le besoin, et utilisé pour un tri initial // Fabrication de tableaux javascript "tab_niveau" et "tab_groupe" indiquant le niveau et le nom d'un groupe $select_eleve = ''; $tab_niveau_js = 'var tab_niveau = new Array();'; $tab_groupe_js = 'var tab_groupe = new Array();'; $tab_id_classe_groupe = array(); $DB_TAB = DB_STRUCTURE_PROFESSEUR::DB_lister_groupes_professeur($_SESSION['USER_ID']); $tab_options = array('classe'=>'','groupe'=>'','besoin'=>''); foreach($DB_TAB as $DB_ROW) { $groupe = strtoupper($DB_ROW['groupe_type']{0}).$DB_ROW['groupe_id']; $tab_options[$DB_ROW['groupe_type']] .= '<option value="'.$groupe.'">'.html($DB_ROW['groupe_nom']).'</option>'; $tab_niveau_js .= 'tab_niveau["'.$groupe.'"]="'.sprintf("%02u",$DB_ROW['niveau_ordre']).'";'; $tab_groupe_js .= 'tab_groupe["'.$groupe.'"]="'.html($DB_ROW['groupe_nom']).'";'; if($DB_ROW['groupe_type']!='besoin') { $tab_id_classe_groupe[] = $DB_ROW['groupe_id']; } } foreach($tab_options as $type => $contenu) { if($contenu)
<li><span class="danger">Supprimer un référentiel efface les résultats associés de tous les élèves !</span></li> </ul> <hr /> <div id="div_tableaux"> <?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(); $texte_profil = afficher_profils_droit_specifique($_SESSION['DROIT_GERER_REFERENTIEL'],'br'); // On récupère la liste des matières où le professeur est rattaché, et s'il en est coordonnateur $DB_TAB_MATIERES = DB_STRUCTURE_PROFESSEUR::DB_lister_matieres_professeur_infos_referentiel($_SESSION['USER_ID']); if(empty($DB_TAB_MATIERES)) { $nb_matieres = 0; echo'<p><span class="danger">Vous n\'êtes rattaché à aucune matière de l\'établissement !</span></p>'; } else { $nb_matieres = count($DB_TAB_MATIERES); foreach($DB_TAB_MATIERES as $DB_ROW) { $tab_matiere[$DB_ROW['matiere_id']] = array( 'nom' => html($DB_ROW['matiere_nom']), 'nb_demandes' => $DB_ROW['matiere_nb_demandes'], 'coord' => $DB_ROW['jointure_coord'], );
} ?> <ul class="puce"> <li><span class="manuel"><a class="pop_up" href="<?php echo SERVEUR_DOCUMENTAIRE ?>?fichier=referentiels_socle__referentiel_modifier_contenu">DOC : Modifier le contenu des référentiels.</a></span></li> <li><span class="astuce">Pour mettre à jour sur le serveur communautaire un référentiel modifié, utiliser la page [<a href="./index.php?page=professeur_referentiel&section=gestion">créer / paramétrer les référentiels</a>].</span></li> <li><span class="danger">Retirer des items supprime les résultats associés de tous les élèves !</span></li> </ul> <hr /> <form action="#" method="post" id="zone_choix_referentiel" onsubmit="return false;"> <?php $texte_profil = afficher_profils_droit_specifique($_SESSION['DROIT_GERER_REFERENTIEL'],'br'); // On récupère la liste des référentiels des matières auxquelles le professeur est rattaché, et s'il en est coordonnateur $DB_TAB = DB_STRUCTURE_PROFESSEUR::DB_lister_matieres_niveaux_referentiels_professeur($_SESSION['USER_ID']); if(empty($DB_TAB)) { echo'<ul class="puce">'.NL; echo'<li><span class="danger">Aucun référentiel présent parmi les matières qui vous sont rattachées !</span></li>'.NL; echo'<li><span class="astuce">Commencer par <a href="./index.php?page=professeur_referentiel&section=gestion">créer ou importer un référentiel</a>.</span></li>'.NL; echo'</ul>'.NL; } else { // On récupère les données $tab_matiere = array(); $tab_matiere_droit = array(); foreach($DB_TAB as $DB_ROW) { if(!isset($tab_matiere[$DB_ROW['matiere_id']]))
$item_ref = $DB_ROW['item_ref']; $texte_socle = ($DB_ROW['entree_id']) ? '[S] ' : '[–] '; $tab_comp_id[$DB_ROW['item_id']] = array($item_ref,$texte_socle.$DB_ROW['item_nom']); } // résultats vierges foreach($tab_user_id as $user_id=>$val_user) { foreach($tab_comp_id as $comp_id=>$val_comp) { $tab_result[$comp_id][$user_id] = ''; } } // compléter si demandé avec les résultats et/ou les demandes d'évaluations if($with_result || $only_req) { $DB_TAB = DB_STRUCTURE_PROFESSEUR::DB_lister_saisies_devoir($devoir_id,$with_REQ=$only_req); foreach($DB_TAB as $DB_ROW) { // Test pour éviter les pbs des élèves changés de groupes ou des items modifiés en cours de route if(isset($tab_result[$DB_ROW['item_id']][$DB_ROW['eleve_id']])) { $valeur = ($with_result) ? $DB_ROW['saisie_note'] : ( ($DB_ROW['saisie_note']) ? 'REQ' : '' ) ; if($valeur) { $tab_result[$DB_ROW['item_id']][$DB_ROW['eleve_id']] = $valeur ; $tab_user_nb_req[$DB_ROW['eleve_id']]++; } } } } // On attaque l'élaboration des sorties HTML, CSV et PDF
} // //////////////////////////////////////////////////////////////////////////////////////////////////// // Elaboration du bulletin (moyenne et/ou appréciation) en HTML et PDF + CSV pour GEPI + Formulaire pour report prof // //////////////////////////////////////////////////////////////////////////////////////////////////// if( $type_bulletin && $make_html ) { $tab_bulletin_input = array(); $bulletin_form = $bulletin_periode = $bulletin_alerte = '' ; if($_SESSION['USER_PROFIL_TYPE']=='professeur') { if($_SESSION['OFFICIEL']['BULLETIN_MOYENNE_SCORES']) { // Attention : $groupe_id peut être un identifiant de groupe et non de classe, auquel cas les élèves peuvent être issus de différentes classes dont les états des bulletins sont différents... $DB_TAB = DB_STRUCTURE_PROFESSEUR::DB_lister_periodes_bulletins_saisies_ouvertes($liste_eleve); $nb_periodes_ouvertes = !empty($DB_TAB) ? count($DB_TAB) : 0 ; if($nb_periodes_ouvertes==1) { $bulletin_periode = '['.html($DB_TAB[0]['periode_nom']).']<input type="hidden" id="f_periode_eleves" name="f_periode_eleves" value="'.$DB_TAB[0]['periode_id'].'_'.$DB_TAB[0]['eleves_listing'].'" />' ; } elseif($nb_periodes_ouvertes>1) { foreach($DB_TAB as $DB_ROW) { $selected = ($DB_ROW['periode_id']==$periode_id) ? ' selected' : '' ; $bulletin_periode .= '<option value="'.$DB_ROW['periode_id'].'_'.$DB_ROW['eleves_listing'].'"'.$selected.'>'.html($DB_ROW['periode_nom']).'</option>'; } $bulletin_periode = '<select id="f_periode_eleves" name="f_periode_eleves">'.$bulletin_periode.'</select>'; }
$tab_niveau_groupe[$DB_ROW['niveau_id']][] = $DB_ROW['groupe_id']; $tab_groupe_associe[$DB_ROW['groupe_id']] = array ( 'nom' => html($DB_ROW['groupe_nom']) , 'eleve' => '' , 'professeur' => '' , ); } } // Récupérer la liste des élèves et professeurs / groupes de besoin if( !empty($DB_TAB) ) { $listing_groupes_id = implode( ',' , array_merge(array_keys($tab_groupe_proprio),array_keys($tab_groupe_associe)) ); $DB_TAB = DB_STRUCTURE_PROFESSEUR::DB_lister_users_avec_groupes_besoins($listing_groupes_id); foreach($DB_TAB as $DB_ROW) { if(isset($tab_groupe_proprio[$DB_ROW['groupe_id']])) { $tab_groupe_proprio[$DB_ROW['groupe_id']][$DB_ROW['user_profil_type']][] = $DB_ROW['user_id']; } else { $tab_groupe_associe[$DB_ROW['groupe_id']][$DB_ROW['user_profil_type']] .= ($DB_ROW['jointure_pp']) ? '<span class="proprio">'.html($DB_ROW['user_nom'].' '.$DB_ROW['user_prenom']).'</span><br />' : html($DB_ROW['user_nom'].' '.$DB_ROW['user_prenom']).'<br />' ; } } } // Eléments javascript concernant les niveaux : select_niveau & tab_niveau_ordre_js
$info = $devoir_description.' ('.$_SESSION['USER_NOM'].' '.$_SESSION['USER_PRENOM']{0}.'.)'; foreach($tab_nouveau_ajouter as $item_id => $note) { DB_STRUCTURE_PROFESSEUR::DB_ajouter_saisie($devoir_prof_id,$_SESSION['USER_ID'],$devoir_id,$item_id,$devoir_date_mysql,$note,$info,$date_visible_mysql); } foreach($tab_nouveau_modifier as $item_id => $note) { DB_STRUCTURE_PROFESSEUR::DB_modifier_saisie($_SESSION['USER_ID'],$devoir_id,$item_id,$note,$info); } foreach($tab_nouveau_supprimer as $item_id) { DB_STRUCTURE_PROFESSEUR::DB_supprimer_saisie($_SESSION['USER_ID'],$devoir_id,$item_id); } foreach($tab_demande_supprimer as $item_id) { DB_STRUCTURE_PROFESSEUR::DB_supprimer_demande_precise($_SESSION['USER_ID'],$item_id); } // Ajout aux flux RSS des profs concernés $titre = 'Autoévaluation effectuée par '.$_SESSION['USER_NOM'].' '.$_SESSION['USER_PRENOM']{0}.'.'; $texte = $_SESSION['USER_PRENOM'].' '.$_SESSION['USER_NOM'].' s\'auto-évalue sur le devoir "'.$devoir_description.'"'; $guid = 'autoeval_'.$devoir_id.'-'.$_SESSION['USER_ID']; foreach($tab_profs_rss as $prof_id) { Modifier_RSS(adresse_RSS($prof_id),$titre,$texte,$guid); } exit('ok'); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // On ne devrait pas en arriver là // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/** * modifier_liaison_devoir_eleve * Uniquement pour les évaluations de type 'eval' ; voir DB_modifier_liaison_devoir_groupe() pour les autres * * @param int $devoir_id * @param int $groupe_id * @param array $tab_eleves tableau des id des élèves * @param string $mode 'creer' pour un insert dans un nouveau devoir || 'substituer' pour une maj delete / insert || 'ajouter' pour maj insert uniquement * @return void */ public static function DB_modifier_liaison_devoir_eleve($devoir_id,$groupe_id,$tab_eleves,$mode) { DB_STRUCTURE_PROFESSEUR::DB_modifier_liaison_user_groupe_par_prof($groupe_id,$tab_eleves,array() /*tab_profs*/,$mode,$devoir_id); }
} } // Retour exit('ok'.']¤['.$msg_url.']¤['.$msg_data); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Enregistrer un commentaire texte ou audio // //////////////////////////////////////////////////////////////////////////////////////////////////// if( ( ($action=='enregistrer_texte') || ($action=='enregistrer_audio') ) && $devoir_id && $eleve_id && in_array($msg_autre,array('oui','non')) && $date_visible && $description ) { $msg_objet = substr($action,-5); $date_visible_mysql = convert_date_french_to_mysql($date_visible); // Tester les droits $proprio_id = DB_STRUCTURE_PROFESSEUR::DB_recuperer_devoir_prorietaire_id( $devoir_id ); if($proprio_id==$_SESSION['USER_ID']) { $niveau_droit = 4; // propriétaire } elseif($profs_liste) // forcément { $search_liste = '_'.$profs_liste.'_'; if( strpos( $search_liste, '_m'.$_SESSION['USER_ID'].'_' ) !== FALSE ) { $niveau_droit = 3; // modifier } elseif( strpos( $search_liste, '_s'.$_SESSION['USER_ID'].'_' ) !== FALSE ) { $niveau_droit = 2; // saisir }
} // Affichage du bilan des affectations des professeurs dans les groupes de besoin $tab_niveau_groupe = array(); $tab_user = array(); // Récupérer la liste des groupes de besoin $DB_TAB = DB_STRUCTURE_PROFESSEUR::DB_lister_groupes_besoins($_SESSION['USER_ID'],TRUE /* is_proprio */); 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 professeurs / groupes de besoin if( count($tab_user) ) { $DB_TAB = DB_STRUCTURE_PROFESSEUR::DB_lister_users_avec_groupes_besoins( 'professeur' , implode(',',array_keys($tab_user)) ); foreach($DB_TAB as $DB_ROW) { $tab_user[$DB_ROW['groupe_id']] .= ($DB_ROW['jointure_pp']) ? '<span class="proprio">'.html($DB_ROW['user_nom'].' '.$DB_ROW['user_prenom']).'</span><br />' : 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)
} // Il reste dans $tab_post les données à ajouter (mises dans $tab_nouveau_ajouter) et les données qui ne servent pas (non enregistrées et non saisies) $tab_nouveau_ajouter = array_filter($tab_post, 'sans_rien'); // // Il n'y a plus qu'à mettre à jour la base // // L'information associée à la note comporte le nom de l'évaluation + celui du professeur (c'est une information statique, conservée sur plusieurs années) $info = $devoir_description . ' (' . afficher_identite_initiale($_SESSION['USER_NOM'], FALSE, $_SESSION['USER_PRENOM'], TRUE, $_SESSION['USER_GENRE']) . ')'; foreach ($tab_nouveau_ajouter as $item_id => $note) { DB_STRUCTURE_PROFESSEUR::DB_ajouter_saisie($devoir_proprio_id, $_SESSION['USER_ID'], $devoir_id, $item_id, $devoir_date_mysql, $note, $info, $date_visible_mysql); } foreach ($tab_nouveau_modifier as $item_id => $note) { DB_STRUCTURE_PROFESSEUR::DB_modifier_saisie($devoir_proprio_id, $_SESSION['USER_ID'], $devoir_id, $item_id, $note, $info); } foreach ($tab_nouveau_supprimer as $item_id) { DB_STRUCTURE_PROFESSEUR::DB_supprimer_saisie($_SESSION['USER_ID'], $devoir_id, $item_id); } foreach ($tab_demande_supprimer as $item_id) { DB_STRUCTURE_DEMANDE::DB_supprimer_demande_precise_eleve_item($_SESSION['USER_ID'], $item_id); } // Ajout aux flux RSS des profs concernés $tab_profs_rss = array_merge(array($devoir_proprio_id), DB_STRUCTURE_ELEVE::DB_lister_devoir_profs_droit_saisie($devoir_id)); $titre = 'Autoévaluation effectuée par ' . afficher_identite_initiale($_SESSION['USER_NOM'], FALSE, $_SESSION['USER_PRENOM'], TRUE); $texte = $_SESSION['USER_PRENOM'] . ' ' . $_SESSION['USER_NOM'] . ' s\'auto-évalue sur le devoir "' . $devoir_description . '".' . "\r\n"; $texte .= $msg_data ? 'Commentaire :' . "\r\n" . $msg_data . "\r\n" : 'Pas de commentaire saisi.' . "\r\n"; $guid = 'autoeval_' . $devoir_id . '_' . $_SESSION['USER_ID'] . '_' . $_SERVER['REQUEST_TIME']; // obligé d'ajouter un time pour unicité au cas où un élève valide 2x l'autoévaluation foreach ($tab_profs_rss as $prof_id) { RSS::modifier_fichier_prof($prof_id, $titre, $texte, $guid); } // Notifications (rendues visibles ultérieurement) ; on récupère des données conçues pour le flux RSS ($texte , $tab_profs_rss)
echo $select_pages_nb; ?> <br /> <label class="tab">Évaluations :</label>cases de largeur <?php echo $select_cases_larg; ?> </div> <p><span class="tab"></span><button id="bouton_valider" type="submit" class="generer">Générer.</button><label id="ajax_msg"> </label></p> </fieldset></form> <form action="#" method="post" id="zone_matieres_items" class="arbre_dynamique arbre_check hide"> <div>Tout déployer / contracter :<q class="deployer_m1"></q><q class="deployer_m2"></q><q class="deployer_n1"></q><q class="deployer_n2"></q><q class="deployer_n3"></q></div> <p>Cocher ci-dessous (<span class="astuce">cliquer sur un intitulé pour déployer son contenu</span>) :</p> <?php // Affichage de la liste des items pour toutes les matières d'un professeur ou toutes les matières de l'établissement si directeur ou PP, sur tous les niveaux $user_id = $_SESSION['USER_PROFIL_TYPE'] == 'professeur' && !DB_STRUCTURE_PROFESSEUR::DB_tester_prof_principal($_SESSION['USER_ID'], 0) ? $_SESSION['USER_ID'] : 0; $DB_TAB = DB_STRUCTURE_COMMUN::DB_recuperer_arborescence($user_id, 0, 0, FALSE, FALSE, FALSE); if (empty($DB_TAB)) { echo '<p class="danger">Vous n\'êtes rattaché à aucune matière, ou des matières ne comportant aucun référentiel !</p>'; } else { $arborescence = HtmlArborescence::afficher_matiere_from_SQL($DB_TAB, TRUE, TRUE, FALSE, FALSE, 'texte', FALSE, TRUE); echo strpos($arborescence, '<input') ? $arborescence : '<p class="danger">Vous êtes rattaché à des matières dont les référentiels ne comportent aucun item !</p>'; } ?> <p><span class="tab"></span><button id="valider_compet" type="button" class="valider">Valider la sélection</button> <button id="annuler_compet" type="button" class="annuler">Annuler / Retour</button></p> <hr /> <p> <label class="tab" for="f_selection_items"><img alt="" src="./_img/bulle_aide.png" width="16" height="16" title="Pour choisir un regroupement d'items mémorisé." /> Initialisation</label><?php echo $select_selection_items; ?> <br />
{ exit('Le fichier n\'a pas pu être enregistré sur le serveur !'); } // Mise à jour dans la base DB_STRUCTURE_PROFESSEUR::DB_modifier_devoir_document($devoir_id,$_SESSION['USER_ID'],$doc_objet,$fichier_nom); // Retour exit('ok'.']¤['.$ref.']¤['.$doc_objet.']¤['.$fichier_nom); } // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Retirer un sujet ou un corrigé d'évaluation // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if( ($action=='retirer_document') && $devoir_id && in_array($doc_objet,array('sujet','corrige')) && $doc_nom ) { // Suppression du fichier unlink($dossier_devoir.$doc_nom); // Mise à jour dans la base DB_STRUCTURE_PROFESSEUR::DB_modifier_devoir_document($devoir_id,$_SESSION['USER_ID'],$doc_objet,''); // Retour exit('ok'); } // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // On ne devrait pas en arriver là ! // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// exit('Erreur avec les données transmises !'); ?>
DB_STRUCTURE_PROFESSEUR::DB_supprimer_demandes_devoir($listing_demande_id); } exit('ok'); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Changer le statut pour "évaluation en préparation" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - elseif( ($action=='changer') && $nb_demandes ) { $listing_demande_id = implode(',',$tab_demande_id); DB_STRUCTURE_PROFESSEUR::DB_modifier_statut_demandes($listing_demande_id,'prof'); exit('ok'); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Retirer de la liste des demandes // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - elseif( ($action=='retirer') && $nb_demandes ) { $listing_demande_id = implode(',',$tab_demande_id); DB_STRUCTURE_PROFESSEUR::DB_supprimer_demandes_devoir($listing_demande_id); exit('ok'); } else { echo'Erreur avec les données transmises !'; } ?>
$date_visible_mysql = convert_date_french_to_mysql($date_visible); // Dans le cas d'une évaluation sur une liste d'élèves sélectionnés if($qui=='select') { // Il faut ajouter tous les élèves choisis DB_STRUCTURE_PROFESSEUR::DB_modifier_liaison_devoir_eleve($devoir_id,$devoir_groupe_id,$tab_user_id,'ajouter'); // ($devoir_groupe_id et non $groupe_id qui correspond à la classe d'origine des élèves...) } // Maintenant on peut modifier les items de l'évaluation DB_STRUCTURE_PROFESSEUR::DB_modifier_liaison_devoir_item($devoir_id,$tab_item_id,'ajouter'); // Insérer les scores 'REQ' pour indiquer au prof les demandes dans le tableau de saisie $tab_item_for_user = array(); $info = 'À saisir ('.afficher_identite_initiale($_SESSION['USER_NOM'],FALSE,$_SESSION['USER_PRENOM'],TRUE).')'; foreach($tab_user_item as $key) { list($eleve_id,$item_id) = explode('x',$key); DB_STRUCTURE_PROFESSEUR::DB_ajouter_saisie($_SESSION['USER_ID'],$eleve_id,$devoir_id,$item_id,$date_mysql,'REQ',$info,$date_visible_mysql); $tab_item_for_user[$eleve_id][] = $item_id; } // Pour terminer, on change le statut des demandes ou on les supprime $listing_demande_id = implode(',',$tab_demande_id); if($suite=='changer') { DB_STRUCTURE_DEMANDE::DB_modifier_demandes_statut($listing_demande_id,'prof',$message); } else { DB_STRUCTURE_DEMANDE::DB_supprimer_demandes_devoir($listing_demande_id); } // Notifications (rendues visibles ultérieurement à cause de la potentielle date de visibilité future du devoir) $listing_abonnes = DB_STRUCTURE_NOTIFICATION::DB_lister_destinataires_listing_id( $abonnement_ref , implode(',',$tab_user_id) ); if($listing_abonnes)
</p> <?php // //////////////////////////////////////////////////////////////////////////////////////////////////// // Affichage du 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 // //////////////////////////////////////////////////////////////////////////////////////////////////// $tab_groupe = array(); $tab_periode = array(); $tab_jointure = array(); // Récupérer la liste des classes & groupes, dans l'ordre des niveaux switch ($_SESSION['USER_PROFIL_TYPE']) { case 'directeur': $DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_classes_et_groupes_avec_niveaux(); 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) {
if (!$presence_eleve) { // 'ajouter' plutôt que 'creer' car en cas d'ajout puis de suppression d'une note à un élève, un élève peut se retrouver déjà affecté à un devoir sans qu'il n'y ait de note trouvée DB_STRUCTURE_PROFESSEUR::DB_modifier_liaison_devoir_eleve($devoir_id, $groupe_id, array($eleve_id), 'ajouter'); } $notif_eleve = FALSE; if ($presence_saisie == FALSE) { if ($note_val != 'X') { DB_STRUCTURE_PROFESSEUR::DB_ajouter_saisie($_SESSION['USER_ID'], $eleve_id, $devoir_id, $item_id, TODAY_MYSQL, $note_val, $info, TODAY_MYSQL); $notif_eleve = TRUE; } } else { if ($note_val == 'X') { DB_STRUCTURE_PROFESSEUR::DB_supprimer_saisie($eleve_id, $devoir_id, $item_id); $notif_eleve = TRUE; } elseif ($presence_saisie != $note_val) { DB_STRUCTURE_PROFESSEUR::DB_modifier_saisie($_SESSION['USER_ID'], $eleve_id, $devoir_id, $item_id, $note_val, $info); $notif_eleve = TRUE; } } // Notifications (rendues visibles ultérieurement) ; le mode discret ne d'applique volontairement pas ici car les modifications sont chirurgicales if ($notif_eleve) { $abonnement_ref = 'devoir_saisie'; $listing_eleves = (string) $eleve_id; $listing_parents = DB_STRUCTURE_NOTIFICATION::DB_lister_parents_listing_id($listing_eleves); $listing_users = $listing_parents ? $listing_eleves . ',' . $listing_parents : $listing_eleves; $listing_abonnes = DB_STRUCTURE_NOTIFICATION::DB_lister_destinataires_listing_id($abonnement_ref, $listing_users); if ($listing_abonnes) { $adresse_lien_profond = Sesamail::adresse_lien_profond('page=evaluation_voir&devoir_id=' . $devoir_id . '&eleve_id='); $notification_contenu = 'Saisie "à la volée" enregistrée par ' . afficher_identite_initiale($_SESSION['USER_NOM'], FALSE, $_SESSION['USER_PRENOM'], TRUE, $_SESSION['USER_GENRE']) . '.' . "\r\n\r\n"; $tab_abonnes = DB_STRUCTURE_NOTIFICATION::DB_lister_detail_abonnes_envois($listing_abonnes, $listing_eleves, $listing_parents); foreach ($tab_abonnes as $abonne_id => $tab_abonne) {
$droit_appreciation_generale = test_user_droit_specifique($_SESSION['DROIT_FICHE_BREVET_APPRECIATION_GENERALE'], $DB_ROW['jointure_pp'], 0); $droit_impression_pdf = test_user_droit_specifique($_SESSION['DROIT_FICHE_BREVET_IMPRESSION_PDF'], $DB_ROW['jointure_pp'], 0); $droit_voir_archives_pdf = test_user_droit_specifique($_SESSION['DROIT_FICHE_BREVET_VOIR_ARCHIVE']); $tab_classe[$DB_ROW['groupe_id']][0] = compact('droit_modifier_statut', 'droit_appreciation_generale', 'droit_impression_pdf'); $tab_affich[$DB_ROW['groupe_id'] . '_0']['title'] = '<th id="groupe_' . $DB_ROW['groupe_id'] . '_0">' . html($DB_ROW['groupe_nom']) . '</th>'; $tab_affich[$DB_ROW['groupe_id'] . '_0']['fiche'] = '<td class="hc">-</td>'; $tab_options_classes[$DB_ROW['groupe_id'] . '_0'] = '<option value="' . $DB_ROW['groupe_id'] . '_0">' . html($DB_ROW['groupe_nom']) . '</option>'; } } else { // Pour les groupes, il faudra récupérer les classes dont sont issues les élèves $tab_groupe[$DB_ROW['groupe_id']] = html($DB_ROW['groupe_nom']); } } if (count($tab_groupe)) { // On récupère les classes dont sont issues les élèves des groupes et on complète $tab_classe $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) { if (in_array($tab['eleve_classe_id'], $tab_classes_concernees)) { $classe_id = $tab['eleve_classe_id']; $droit_modifier_statut = FALSE; $droit_appreciation_generale = test_user_droit_specifique($_SESSION['DROIT_FICHE_BREVET_APPRECIATION_GENERALE'], NULL, $classe_id); $droit_impression_pdf = test_user_droit_specifique($_SESSION['DROIT_FICHE_BREVET_IMPRESSION_PDF'], NULL, $classe_id); $tab_classe[$classe_id][$groupe_id] = compact('droit_modifier_statut', 'droit_appreciation_generale', 'droit_impression_pdf'); $tab_affich[$classe_id . '_' . $groupe_id]['title'] = '<th id="groupe_' . $classe_id . '_' . $groupe_id . '">' . html($tab_classe_etabl[$classe_id]) . '<br />' . html($groupe_nom) . '</th>'; $tab_affich[$classe_id . '_' . $groupe_id]['fiche'] = '<td class="hc">-</td>'; $tab_options_classes[$classe_id . '_' . $groupe_id] = '<option value="' . $classe_id . '_' . $groupe_id . '">' . html($tab_classe_etabl[$classe_id] . ' - ' . $groupe_nom) . '</option>'; } } }
foreach (${'tab_selection_' . $critere . '_key'} as $item_id => $tab_temp) { $date_affich = convert_date_mysql_to_french($DB_TAB[$item_id][0]['saisie_date']); $tab_accueil[$critere]['contenu'] .= '<li>' . Html::note_image($DB_TAB[$item_id][0]['saisie_note'], '', '') . ' ' . $text_eleve_nom . html($date_affich) . ' || <a href="./index.php?page=releve&section=items_matiere&matiere_id=' . $DB_TAB[$item_id][0]['matiere_id'] . '&item_id=' . $item_id . $param_eleve_num . '">' . html($DB_TAB[$item_id][0]['matiere_nom']) . ' || ' . html($DB_TAB[$item_id][0]['item_ref'] . ' - ' . afficher_texte_tronque($DB_TAB[$item_id][0]['item_nom'], $longueur_intitule_item_maxi)) . '</a></li>'; } $tab_accueil[$critere]['contenu'] .= '</ul>'; } } } } } // //////////////////////////////////////////////////////////////////////////////////////////////////// // [demandes] - Info Demandes d'évaluations // //////////////////////////////////////////////////////////////////////////////////////////////////// if (in_array($_SESSION['USER_PROFIL_TYPE'], array('professeur', 'eleve'))) { if ($_SESSION['USER_PROFIL_TYPE'] == 'professeur') { $DB_TAB = DB_STRUCTURE_PROFESSEUR::DB_compter_demandes_evaluation($_SESSION['USER_ID'], $_SESSION['USER_JOIN_GROUPES']); $page = 'evaluation_demande_professeur'; } if ($_SESSION['USER_PROFIL_TYPE'] == 'eleve') { $DB_TAB = DB_STRUCTURE_ELEVE::DB_compter_demandes_evaluation($_SESSION['USER_ID']); $page = 'evaluation_demande_eleve'; } if (!empty($DB_TAB)) { $nb_etat_prof = empty($DB_TAB['prof']['nombre']) ? 0 : $DB_TAB['prof']['nombre']; $nb_etat_eleve = empty($DB_TAB['eleve']['nombre']) ? 0 : $DB_TAB['eleve']['nombre']; $tab_accueil['demandes']['nombre'] = $nb_etat_prof + $nb_etat_eleve; $tab_accueil['demandes']['contenu'] = '<p class="b"><TG> ' . $tab_accueil['demandes']['masque'] . '</p>'; if ($nb_etat_eleve) { $s = $DB_TAB['eleve']['nombre'] > 1 ? 's' : ''; $tab_accueil['demandes']['contenu'] .= '<p>Vous avez <a href="./index.php?page=' . $page . '"><span class="b">' . $nb_etat_eleve . ' demande' . $s . ' d\'évaluation' . $s . '</span></a> en attente de réponse.</p>'; }