$val) { $$cle = $val; } // Aide en ligne pour un devoir if ($devoir) { //aide $_SESSION["pageaide"]="L%27interface_prof#Ressources_et_partages"; } $login=isauth(); $id_prof=$login; $now =date("Y-m-d"); $table="devoirs"; $fichiers= array(); echo "

".gettext("Distribution de document(s)")." (".gettext("par")." $login,".gettext(" le ").affiche_date($now).")


\n"; // nombre de documents : $nombre=$_POST['nombre']; // recup type de la distrib : $type=$_POST['type']; // recup type des liste de classes ou d'eleves --> cf chaque cas // $classes=$_POST['classes']; OU $liste_classe=$_POST['liste_classe']; //Suppression des espaces dans l'identifiant //(utilise par la suite pour la creation du dossier): //$id_devoir=preg_replace("/ /","_","$id_devoir"); $id_devoir=strtr(preg_replace("/�/","AE",preg_replace("/�/","ae",preg_replace("/�/","OE",preg_replace("/�/","oe","$id_devoir"))))," '���������������������զ����ݾ�������������������������������","__AAAAAAACEEEEIIIINOOOOOSUUUUYYZaaaaaaceeeeiiiinoooooosuuuuyyz"); // VERIFICATION // verifier si l'id_devoir d'un devoir non archive est deja attribue if ($devoir) { // verification de l'id_devoir $req =" SELECT id_devoir FROM $table WHERE BINARY id_devoir='$id_devoir' "; // echo $req; $res=mysql_query($req); $nb=mysql_num_rows($res); if ($nb >0) { die ("

".gettext("L'identifiant du devoir a déjà été utilisé !")."
".gettext("Veuillez en choisir un autre.")."

\n"); } } if ($devoir) { // traitement de la date de retour $date_retour= "$jour_retour/$mois_retour/$an_retour"; echo "

".gettext("Distribution du devoir")." $id_devoir (".gettext("pour le")." $date_retour)

\n"; } else echo "

".gettext("Distribution ").($nombre==1?gettext("du fichier"):gettext("des fichiers"))."

\n"; // stockage des fichiers uploades dans /tmp avant distribution for ($i=1; $i<= $nombre; $i++) { $ff="fich$i"; // === DEBUG == // echo "fichier $_FILES[$ff]['name']
"; // print_r($_FILES); $destination="/tmp/".$_FILES[$ff]['name']; if (move_uploaded_file($_FILES[$ff]['tmp_name'], $destination)) { if ($f = @fopen( $destination, "r")) { $taille=$_FILES[$ff]['size']; //== DEBUG == // echo "ouverture du fichier $ff de taille $taille"; $contenu=fread($f, $taille); $donnees=addslashes($contenu); $nom = $_FILES[$ff]['name'] ; //$chemin="/tmp/$nom"; system("mkdir -p /tmp/$login"); $chemin="/tmp/$login/$nom"; $f1 = fopen($chemin,"w"); if ($f1) echo "
  • $nom
  • "; fputs($f1, $contenu); fclose($f1); $fichiers[] = $nom; } } else echo "
  • ".gettext("pas de fichier n�")." $i ".gettext("choisi (ou fichier vide ..)")."
  • "; } // VERIFICATION : si aucun fichier n'a ete choisi, s'arreter avec message $nb_fichiers=sizeof($fichiers); if ($nb_fichiers==0) die (gettext("Echec de la distribution, recommencez ..")); // declarations globales $tab_eleves=array(); // tableau associatif : nom-classe/groupe --> liste des eleves $liste_eleves = ""; if ($type==1) { /* traitement de la distribution type I : distribution par classes *****************************************************************/ if (! empty($liste_classe)) { $liste_classe=trim($liste_classe); $liste_classe=preg_replace("/#$/","",$liste_classe); $classes=preg_split("/#/",$liste_classe); } $n=sizeof($classes); // nombre de classes+groupes // creation de la liste des classes for ($i=0; $i<$n; $i++) { $filtres[$i]="cn=$classes[$i]"; // echo "Classes : $classes[$i]
    "; } echo "

    ".gettext("Aux élèves des classes (ou groupes)")."

    \n"; // boucle sur les classes for ($g=0; $g <$n ; $g++) { $classe=$classes[$g]; // ATTENTION ! nom de la gieme classe OU nom GROUPE $equipe="Equipe_".preg_replace("/Classe_/","",$classe); // Modif delineau (il y a surement mieux � faire) $liste_eleves_classe = ""; // liste des eleves par classe/groupe $eleves=array(); // tableau indice des eleves de la classe/groupe $uids = search_uids ($filtres[$g]); // $eleves = search_people_groups ($uids,"","group"); $membres = search_people_groups ($uids,"","group"); // recherche des vrais eleves, fitrer les profs .. for ($p=0; $p < sizeof($membres); $p++) { $id_eleve = $membres[$p]["uid"]; // est-ce un vrai eleve ? eliminons les profs faisant partie du groupe !! if (est_prof($id_eleve)) continue; $eleves[]=$membres[$p]; // $eleves tableau indice : num-eleve --> [iud,sexe,fullname] $liste_eleves .= "$id_eleve#"; $liste_eleves_classe .= "$id_eleve#"; } // distribution et affichage des resultats $tab_eleves[$classe]=$liste_eleves_classe ; // <---- tableau des eleves a transformer en liste $nb_eleves=sizeof($eleves); echo "$classe [$nb_eleves ".($nb_eleves==1?gettext("élève"):gettext("élèves"))."]
    \n"; for ($p=0; $p < $nb_eleves; $p++) { // boucle sur les vrais eleves $id_eleve = $eleves[$p]["uid"]; $param=params_eleve($id_eleve); // creation rep pour devoir et copies fichiers (inversion si n�cessaire) $rep= "/var/se3/Classes/".$param[classe]."/".inverse_login($id_eleve); echo $rep."
    "; $cr=1; if (($devoir) and ("$id_devoir"!="")){ $rep .= "/$id_devoir"; //$ch ="/usr/bin/sudo /usr/share/se3/scripts/creer_rep_distrib.sh $login $id_eleve $rep"; $ch ="/usr/bin/sudo /usr/share/se3/scripts/creer_rep_distrib.sh $login $id_eleve \"$rep\""; $cr= exec($ch) ; } if ($cr) { /// Le repertoire du devoir $rep a ete cree, boucle sur tous les fichiers a distribuer // $CR1 produit des cr1, pour verifier que tous les fichiers ont ete distribuies $CR1=1; for ($i=0; $i< $nb_fichiers; $i++) { //$ch1 ="/usr/bin/sudo /usr/share/se3/scripts/copie_fich_distrib.sh $login $id_eleve $rep \"$fichiers[$i]\" "; $ch1 ="/usr/bin/sudo /usr/share/se3/scripts/copie_fich_distrib.sh $login $id_eleve \"$rep\" \"$fichiers[$i]\" $equipe "; // Modif delineau $cr1= exec($ch1) ; // on range $cr1 dans un tableau $tab_cr1[$i]=$cr1; $CR1 *= $cr1; } if ($CR1) { $im=($eleves[$p]["sexe"]=="F"?"": ""); echo $im.$eleves[$p]["fullname"]."
    \n"; } else { // preciser les fichiers non distribues ?? echo " ---> ".gettext("échec de la distribution pour ").$eleves[$p]["fullname"]."
    \n"; } } else { // verifier que le rep. existe deja, pour le meme devoir // cas (rare ?) d'eleves presents dans plusieurs groupes ! // echo "

    Echec de la creation du repertoire $rep

    "; echo " ---> ".gettext("distribution déjà effectuée pour ").$eleves[$p]["fullname"]."
    \n"; } } // fin for $p echo "

    "; } // fin for $g } // FIN envoi de type I else { /* traitement de la distribution type II : choix d'eleves seulement * ici les profs ont deja ete filtres *******************************************************************/ // groupes d'eleves par classes : $liste_classe=$_POST['liste_classe']; // liste des classes : $liste_classe $classes=preg_split("/#/",$liste_classe); $n=sizeof($classes); echo "

    ".gettext("Aux élèves sélectionnés dans les classes (ou groupes) :")."

    \n"; // $liste_eleves=""; for ($g=0; $g<$n; $g++) { // boucle sur toutes les classes $classe=$classes[$g]; // nom de la gieme classe/groupe $equipe="Equipe_".preg_replace("/Classe_/","",$classe); // Modif delineau (il y a surement mieux � faire) $liste_eleves_classe = ""; // liste des eleves par classe/groupe $libelle_eleves="eleves".$g; $eleves=$_POST[$libelle_eleves]; $nb_eleves=sizeof($eleves); echo "$classe [".($nb_eleves==0?gettext("aucun élève"):($nb_eleves==1?"$nb_eleves ".gettext("élève"):"$nb_eleves ".gettext("élèves")))."]
    \n"; for ($p=0; $p < $nb_eleves; $p++) { // dans le cas II, il s'agit toujours de vrais eleves dans ce groupe !! $id_eleve = $eleves[$p]; $param=params_eleve($id_eleve); $liste_eleves .= "$id_eleve#"; $liste_eleves_classe .= "$id_eleve#"; // creation rep pour devoir et copies fichiers $rep= "/var/se3/Classes/".$param[classe]."/".inverse_login($id_eleve); $cr=1; if (($devoir) and ("$id_devoir"!="")){ $rep .= "/$id_devoir"; //$ch ="/usr/bin/sudo /usr/share/se3/scripts/creer_rep_distrib.sh $login $id_eleve $rep"; $ch ="/usr/bin/sudo /usr/share/se3/scripts/creer_rep_distrib.sh $login $id_eleve \"$rep\""; $cr= exec($ch) ; } if ($cr) { $CR1=1; for ($i=0; $i< $nb_fichiers; $i++) { // boucle sur tous les fichiers a distribuer //$ch1 ="/usr/bin/sudo /usr/share/se3/scripts/copie_fich_distrib.sh $login $id_eleve $rep \"$fichiers[$i]\" "; $ch1 ="/usr/bin/sudo /usr/share/se3/scripts/copie_fich_distrib.sh $login $id_eleve \"$rep\" \"$fichiers[$i]\" $equipe "; // Modif delineau $cr1= exec($ch1) ; // on range $cr1 dans un tableau $tab_cr1[$i]=$cr1; $CR1 *= $cr1; } if ($CR1) { $im=($param["sexe"]=="F"?"": ""); echo $im.$param["nom"]."
    \n"; } else { echo " ---> ".gettext("échec de la distribution pour ").$param["nom"]."
    \n"; } } else { echo " ---> ".gettext("distribution déjà effectuée pour ").$param["nom"]."
    \n"; // echo "

    Echec de la création du répertoire $rep

    "; } } // fin for $p echo "

    "; $tab_eleves[$classe]=$liste_eleves_classe ; // <---- tableau des eleves a transformer en liste } // fin for $g } // FIN envoi de type II //Nettoyage apres la fin des envois: //for ($i=1; $i<= $nombre; $i++) { for ($i=0; $i< $nombre; $i++) { if(file_exists("/tmp/$login/$fichiers[$i]")){ //echo "

    unlink(\"/tmp/$login/$fichiers[$i]\")

    "; unlink("/tmp/$login/$fichiers[$i]"); } } /* Traitement des envois de DEVOIRS **********************************/ if ("$id_devoir"!="") { if (trim($nom_devoir) =="" ) $nom_devoir="devoir"; // nom du devoir a rendre echo "

    ".gettext("Afin de pouvoir ramasser leur devoir, ces élèves devront l'enregistrer :")."
    "; echo gettext("- dans un fichier nommé ")." $nom_devoir
    "; echo gettext("- en utilisant une casse quelconque")."
    "; echo gettext("- le nom étant muni de l'extension usuelle liée au type du fichier")."

    \n"; } //if ($devoir and $cr and $cr1) { if ($devoir) { $date_retour=$an_retour."-".$mois_retour."-".$jour_retour; // date de retour $liste_eleves=tab_liste($tab_eleves); // calcul de la liste classes-eleves // construction de la requete d'enregistrement du devoir $req_devoir="INSERT INTO $table "; $req_devoir .=" (id_prof,id_devoir,nom_devoir,date_distrib,date_recup,description,liste_distrib) "; $req_devoir .=" VALUES ('$id_prof','$id_devoir','$nom_devoir','$now','$date_retour','$description','$liste_eleves') "; $ok = mysql_query($req_devoir); } // else // echo "Echec de distribution du devoir $devoir"; include ("pdp.inc.php"); ?>