[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 3 4 /** 5 6 * Deploie des devoirs ou documents aux utilisateur 7 8 * @Version $Id: distribution.php 8601 2015-03-16 20:17:16Z plouf $ 9 * @Projet LCS-SE3 10 11 * @Auteurs Jean Gourdin 12 13 * @Licence Distribue selon les termes de la licence GPL 14 15 */ 16 17 /** 18 19 * file: distribution.php 20 * @Repertoire: echanges/ 21 22 */ 23 24 25 require("entete.inc.php"); 26 require ("ldap.inc.php"); 27 require ("fonc_outils.inc.php"); 28 29 require_once ("lang.inc.php"); 30 bindtextdomain('se3-echange',"/var/www/se3/locale"); 31 textdomain ('se3-echange'); 32 33 // recuperer les parametres passes par POST 34 foreach ($_POST as $cle=>$val) { 35 $$cle = $val; 36 } 37 38 // Aide en ligne pour un devoir 39 if ($devoir) { 40 //aide 41 $_SESSION["pageaide"]="L%27interface_prof#Ressources_et_partages"; 42 } 43 44 $login=isauth(); 45 $id_prof=$login; 46 $now =date("Y-m-d"); 47 $table="devoirs"; 48 $fichiers= array(); 49 50 51 echo "<body > 52 <h1>".gettext("Distribution de document(s)")." <font size=-2>(<em>".gettext("par")." $login,".gettext(" le ").affiche_date($now)."</em>)</font></h1> 53 <hr>\n"; 54 55 // nombre de documents : $nombre=$_POST['nombre']; 56 // recup type de la distrib : $type=$_POST['type']; 57 // recup type des liste de classes ou d'eleves --> cf chaque cas 58 // $classes=$_POST['classes']; OU $liste_classe=$_POST['liste_classe']; 59 60 //Suppression des espaces dans l'identifiant 61 //(utilise par la suite pour la creation du dossier): 62 //$id_devoir=preg_replace("/ /","_","$id_devoir"); 63 $id_devoir=strtr(preg_replace("/�/","AE",preg_replace("/�/","ae",preg_replace("/�/","OE",preg_replace("/�/","oe","$id_devoir"))))," '���������������������զ����ݾ�������������������������������","__AAAAAAACEEEEIIIINOOOOOSUUUUYYZaaaaaaceeeeiiiinoooooosuuuuyyz"); 64 65 66 // VERIFICATION 67 // verifier si l'id_devoir d'un devoir non archive est deja attribue 68 if ($devoir) { 69 // verification de l'id_devoir 70 $req =" SELECT id_devoir FROM $table WHERE BINARY id_devoir='$id_devoir' "; 71 // echo $req; 72 $res=mysql_query($req); 73 $nb=mysql_num_rows($res); 74 if ($nb >0) { 75 die ("<h4>".gettext("L'identifiant du devoir a déjà été utilisé !")."<br>".gettext("Veuillez en choisir un autre.")."</h4>\n"); 76 } 77 } 78 79 if ($devoir) { 80 // traitement de la date de retour 81 $date_retour= "$jour_retour/$mois_retour/$an_retour"; 82 echo "<h3>".gettext("Distribution du devoir")." <em>$id_devoir</em> (".gettext("pour le")." $date_retour)</h3>\n"; 83 } 84 else 85 echo "<h3>".gettext("Distribution ").($nombre==1?gettext("du fichier"):gettext("des fichiers"))."</h3>\n"; 86 87 // stockage des fichiers uploades dans /tmp avant distribution 88 for ($i=1; $i<= $nombre; $i++) { 89 $ff="fich$i"; 90 // === DEBUG == 91 // echo "fichier $_FILES[$ff]['name'] <br>"; 92 // print_r($_FILES); 93 $destination="/tmp/".$_FILES[$ff]['name']; 94 if (move_uploaded_file($_FILES[$ff]['tmp_name'], $destination)) { 95 if ($f = @fopen( $destination, "r")) { 96 $taille=$_FILES[$ff]['size']; 97 //== DEBUG == 98 99 // echo "ouverture du fichier $ff de taille $taille"; 100 $contenu=fread($f, $taille); 101 $donnees=addslashes($contenu); 102 $nom = $_FILES[$ff]['name'] ; 103 //$chemin="/tmp/$nom"; 104 system("mkdir -p /tmp/$login"); 105 $chemin="/tmp/$login/$nom"; 106 107 $f1 = fopen($chemin,"w"); 108 if ($f1) 109 echo "<lI>$nom</li>"; 110 fputs($f1, $contenu); 111 fclose($f1); 112 $fichiers[] = $nom; 113 } 114 } 115 else 116 echo "<li>".gettext("pas de fichier n�")." $i ".gettext("choisi (ou fichier vide ..)")."</li>"; 117 } 118 // VERIFICATION : si aucun fichier n'a ete choisi, s'arreter avec message 119 $nb_fichiers=sizeof($fichiers); 120 if ($nb_fichiers==0) 121 die (gettext("Echec de la distribution, recommencez ..")); 122 123 // declarations globales 124 $tab_eleves=array(); // tableau associatif : nom-classe/groupe --> liste des eleves 125 $liste_eleves = ""; 126 127 if ($type==1) { 128 /* traitement de la distribution type I : distribution par classes 129 *****************************************************************/ 130 if (! empty($liste_classe)) { 131 $liste_classe=trim($liste_classe); 132 $liste_classe=preg_replace("/#$/","",$liste_classe); 133 $classes=preg_split("/#/",$liste_classe); 134 } 135 $n=sizeof($classes); // nombre de classes+groupes 136 // creation de la liste des classes 137 for ($i=0; $i<$n; $i++) { 138 $filtres[$i]="cn=$classes[$i]"; // echo "Classes : $classes[$i]<br>"; 139 } 140 141 echo "<h3>".gettext("Aux élèves des classes (ou groupes)")."</h3>\n"; 142 // boucle sur les classes 143 for ($g=0; $g <$n ; $g++) { 144 145 $classe=$classes[$g]; // ATTENTION ! nom de la gieme classe OU nom GROUPE 146 $equipe="Equipe_".preg_replace("/Classe_/","",$classe); // Modif delineau (il y a surement mieux � faire) 147 $liste_eleves_classe = ""; // liste des eleves par classe/groupe 148 $eleves=array(); // tableau indice des eleves de la classe/groupe 149 $uids = search_uids ($filtres[$g]); 150 // $eleves = search_people_groups ($uids,"","group"); 151 $membres = search_people_groups ($uids,"","group"); 152 153 154 // recherche des vrais eleves, fitrer les profs .. 155 for ($p=0; $p < sizeof($membres); $p++) { 156 $id_eleve = $membres[$p]["uid"]; 157 // est-ce un vrai eleve ? eliminons les profs faisant partie du groupe !! 158 if (est_prof($id_eleve)) continue; 159 $eleves[]=$membres[$p]; // $eleves tableau indice : num-eleve --> [iud,sexe,fullname] 160 $liste_eleves .= "$id_eleve#"; 161 $liste_eleves_classe .= "$id_eleve#"; 162 } 163 // distribution et affichage des resultats 164 $tab_eleves[$classe]=$liste_eleves_classe ; // <---- tableau des eleves a transformer en liste 165 $nb_eleves=sizeof($eleves); 166 echo "$classe <font size=-1>[$nb_eleves ".($nb_eleves==1?gettext("élève"):gettext("élèves"))."]</font><br>\n"; 167 168 for ($p=0; $p < $nb_eleves; $p++) { // boucle sur les vrais eleves 169 $id_eleve = $eleves[$p]["uid"]; 170 $param=params_eleve($id_eleve); 171 172 // creation rep pour devoir et copies fichiers (inversion si n�cessaire) 173 $rep= "/var/se3/Classes/".$param[classe]."/".inverse_login($id_eleve); echo $rep."<br>"; 174 $cr=1; 175 if (($devoir) and ("$id_devoir"!="")){ 176 $rep .= "/$id_devoir"; 177 //$ch ="/usr/bin/sudo /usr/share/se3/scripts/creer_rep_distrib.sh $login $id_eleve $rep"; 178 $ch ="/usr/bin/sudo /usr/share/se3/scripts/creer_rep_distrib.sh $login $id_eleve \"$rep\""; 179 $cr= exec($ch) ; 180 } 181 if ($cr) { 182 /// Le repertoire du devoir $rep a ete cree, boucle sur tous les fichiers a distribuer 183 // $CR1 produit des cr1, pour verifier que tous les fichiers ont ete distribuies 184 $CR1=1; 185 for ($i=0; $i< $nb_fichiers; $i++) { 186 //$ch1 ="/usr/bin/sudo /usr/share/se3/scripts/copie_fich_distrib.sh $login $id_eleve $rep \"$fichiers[$i]\" "; 187 $ch1 ="/usr/bin/sudo /usr/share/se3/scripts/copie_fich_distrib.sh $login $id_eleve \"$rep\" \"$fichiers[$i]\" $equipe "; // Modif delineau 188 $cr1= exec($ch1) ; 189 // on range $cr1 dans un tableau 190 $tab_cr1[$i]=$cr1; 191 $CR1 *= $cr1; 192 } 193 if ($CR1) { 194 $im=($eleves[$p]["sexe"]=="F"?"<img src=\"../annu/images/gender_girl.gif\" width=14 height=14 hspace=3 border=0>": 195 "<img src=\"../annu/images/gender_boy.gif\" width=14 height=14 hspace=3 border=0>"); 196 echo $im.$eleves[$p]["fullname"]."<br>\n"; 197 } 198 else { 199 // preciser les fichiers non distribues ?? 200 echo " ---> ".gettext("échec de la distribution pour ").$eleves[$p]["fullname"]."<br>\n"; 201 } 202 } 203 else { 204 // verifier que le rep. existe deja, pour le meme devoir 205 // cas (rare ?) d'eleves presents dans plusieurs groupes ! 206 // echo "<h4>Echec de la creation du repertoire $rep</h4>"; 207 echo " ---> ".gettext("distribution déjà effectuée pour ").$eleves[$p]["fullname"]."<br>\n"; 208 } 209 } // fin for $p 210 echo "<p>"; 211 } // fin for $g 212 213 } // FIN envoi de type I 214 else { 215 216 /* traitement de la distribution type II : choix d'eleves seulement 217 * ici les profs ont deja ete filtres 218 *******************************************************************/ 219 // groupes d'eleves par classes : $liste_classe=$_POST['liste_classe']; 220 // liste des classes : $liste_classe 221 $classes=preg_split("/#/",$liste_classe); 222 $n=sizeof($classes); 223 echo "<h3>".gettext("Aux élèves sélectionnés dans les classes (ou groupes) :")." </h3>\n"; 224 225 // $liste_eleves=""; 226 227 for ($g=0; $g<$n; $g++) { 228 // boucle sur toutes les classes 229 $classe=$classes[$g]; // nom de la gieme classe/groupe 230 $equipe="Equipe_".preg_replace("/Classe_/","",$classe); // Modif delineau (il y a surement mieux � faire) 231 $liste_eleves_classe = ""; // liste des eleves par classe/groupe 232 $libelle_eleves="eleves".$g; 233 234 $eleves=$_POST[$libelle_eleves]; 235 $nb_eleves=sizeof($eleves); 236 237 echo "$classe <font size='-1'>[".($nb_eleves==0?gettext("aucun élève"):($nb_eleves==1?"$nb_eleves ".gettext("élève"):"$nb_eleves ".gettext("élèves")))."]</font><br>\n"; 238 239 for ($p=0; $p < $nb_eleves; $p++) { // dans le cas II, il s'agit toujours de vrais eleves dans ce groupe !! 240 $id_eleve = $eleves[$p]; 241 $param=params_eleve($id_eleve); 242 243 $liste_eleves .= "$id_eleve#"; 244 $liste_eleves_classe .= "$id_eleve#"; 245 246 // creation rep pour devoir et copies fichiers 247 $rep= "/var/se3/Classes/".$param[classe]."/".inverse_login($id_eleve); 248 $cr=1; 249 if (($devoir) and ("$id_devoir"!="")){ 250 $rep .= "/$id_devoir"; 251 //$ch ="/usr/bin/sudo /usr/share/se3/scripts/creer_rep_distrib.sh $login $id_eleve $rep"; 252 $ch ="/usr/bin/sudo /usr/share/se3/scripts/creer_rep_distrib.sh $login $id_eleve \"$rep\""; 253 $cr= exec($ch) ; 254 } 255 if ($cr) { 256 $CR1=1; 257 for ($i=0; $i< $nb_fichiers; $i++) { 258 // boucle sur tous les fichiers a distribuer 259 //$ch1 ="/usr/bin/sudo /usr/share/se3/scripts/copie_fich_distrib.sh $login $id_eleve $rep \"$fichiers[$i]\" "; 260 $ch1 ="/usr/bin/sudo /usr/share/se3/scripts/copie_fich_distrib.sh $login $id_eleve \"$rep\" \"$fichiers[$i]\" $equipe "; // Modif delineau 261 $cr1= exec($ch1) ; 262 // on range $cr1 dans un tableau 263 $tab_cr1[$i]=$cr1; 264 $CR1 *= $cr1; 265 } 266 if ($CR1) { 267 $im=($param["sexe"]=="F"?"<img src=\"../annu/images/gender_girl.gif\" width=14 height=14 hspace=3 border=0>": 268 "<img src=\"../annu/images/gender_boy.gif\" width=14 height=14 hspace=3 border=0>"); 269 echo $im.$param["nom"]."<br>\n"; 270 } 271 else { 272 echo " ---> ".gettext("échec de la distribution pour ").$param["nom"]."<br>\n"; 273 } 274 } 275 else { 276 echo " ---> ".gettext("distribution déjà effectuée pour ").$param["nom"]."<br>\n"; 277 // echo "<h4>Echec de la création du répertoire $rep</h4>"; 278 } 279 } // fin for $p 280 echo "<p>"; 281 $tab_eleves[$classe]=$liste_eleves_classe ; // <---- tableau des eleves a transformer en liste 282 } // fin for $g 283 } // FIN envoi de type II 284 285 //Nettoyage apres la fin des envois: 286 //for ($i=1; $i<= $nombre; $i++) { 287 for ($i=0; $i< $nombre; $i++) { 288 if(file_exists("/tmp/$login/$fichiers[$i]")){ 289 //echo "<p>unlink(\"/tmp/$login/$fichiers[$i]\")</p>"; 290 unlink("/tmp/$login/$fichiers[$i]"); 291 } 292 } 293 294 /* Traitement des envois de DEVOIRS 295 **********************************/ 296 if ("$id_devoir"!="") { 297 if (trim($nom_devoir) =="" ) $nom_devoir="devoir"; // nom du devoir a rendre 298 echo "<p>".gettext("Afin de pouvoir ramasser leur devoir, ces élèves devront l'enregistrer :")."<br>"; 299 echo gettext("- dans un fichier nommé <strong>")." $nom_devoir</strong> <br>"; 300 echo gettext("- en utilisant une casse quelconque")."<br>"; 301 echo gettext("- le nom étant muni de l'extension usuelle liée au type du fichier")."<p>\n"; 302 } 303 //if ($devoir and $cr and $cr1) { 304 if ($devoir) { 305 $date_retour=$an_retour."-".$mois_retour."-".$jour_retour; // date de retour 306 $liste_eleves=tab_liste($tab_eleves); // calcul de la liste classes-eleves 307 // construction de la requete d'enregistrement du devoir 308 $req_devoir="INSERT INTO $table "; 309 $req_devoir .=" (id_prof,id_devoir,nom_devoir,date_distrib,date_recup,description,liste_distrib) "; 310 $req_devoir .=" VALUES ('$id_prof','$id_devoir','$nom_devoir','$now','$date_retour','$description','$liste_eleves') "; 311 $ok = mysql_query($req_devoir); 312 } 313 // else 314 // echo "Echec de distribution du devoir $devoir"; 315 include ("pdp.inc.php"); 316 ?> 317
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |