- Statut : non résolu
- Ce sujet contient 10 réponses, 2 participants et a été mis à jour pour la dernière fois par
brisfan, le il y a 7 années et 1 mois.
-
AuteurMessages
-
29 juillet 2016 à 10 h 42 min #565472
Bonjour,
Je vous situe le contexte pour mieux vous faire comprendre ce que je recherche.
Je suis prof et j’utilise un logiciel qui génère des copies corrigées de mes élèves sous forme de PDF. En sortie j’ai donc des fichiers PDF avec un numéro. Par exemple 1102.pdf sera la copie du deuxième élève de la 1èreS 1.
Je souhaite pouvoir créer sur mon wordpress (j’ai un hébergement mutualisé avec un nom de domaine chez 1&1) une session par élève avec un accès (en téléchargement/consultation dans le navigateur) uniquement aux copies de l’élève et au corrigé « classe » de l’interro.
Sachant que j’ai environ 150 élèves et que je compte faire 1 interrogation par élève et par semaine, une solution automatisée avec le nom des fichiers d’interrogation est indispensable.
Je pense avoir besoin de deux plug-in. Un pour la gestion en masse des utilisateurs et un pour la gestion des fichiers d’interrogation.
J’ai de bonnes notions en PHP/MySQL/HTML/CSS mais la galaxie wordpress est toute nouvelle pour moi. Je suis un peu perdu avec les dizaines de milliers de plug-in, c’est pourquoi je me permet de demander votre aide.
Par avance merci à ceux qui prendront le temps de me lire.
30 juillet 2016 à 17 h 09 min #1064542Personne n’aurai la moindre piste à me proposer?
1 août 2016 à 11 h 49 min #1064543Hello,
Pour ce qui est de la gestion en masse des utilisateurs et de leurs permissions, je te conseille le plugin Members. Pour ce qui est de la gestion automatique des fichiers à partir de leur nom, je n’ai pas de plugin en tête…
Pour ce qui est de la mise en place initiale, tu peux t’en sortir sans trop de mal en créant une catégorie par classe (éventuellement imbriquées si tu as plusieurs sous-classes) puis un article par élève. Ensuite, tu accordes via le plugin Members les droits d’accès qui vont bien à chaque élève sur son propre article ainsi que sur un article commun à toute la classe).
Finalement, chaque semaine tu n’auras plus qu’à attacher chaque fichier à l’article qui lui correspond pour qu’il soit accessible à l’élève afférent. Bien sûr, c’est ce dernier point qu’il va falloir automatiser, mais je crains qu’il ne te faille coder un truc spécifique… Les opérations à effectuer pourraient être :
Chaque semaine :
– (toi) envoyer les 150 fichiers en une seule fois sur WordPress
– (wp) lister les fichiers uploadés qui ne sont pas affectés à un article
Pour chaque fichier trouvé :
– (wp) déterminer la classe, le groupe et le numéro de l’élève à partir du nom du fichier
– (wp) affecter le fichier à l’article correspondant (identifié par exemple au moyen de son slug)Il y a un peu de travail donc !
1 août 2016 à 15 h 37 min #1064544Merci beaucoup pour tes explications je vais m’intéresser au plug-in member de plus près.
En faisant des recherches j’ai trouvé 2 autres plug-in potentiellement intéressant.
– S2Member ici http://www.echodesplugins.li-an.fr/plugins/une-page-reservee-a-chacun-de-vos-membres-avec-s2member/
– Customer-Area (payant) http://www.echodesplugins.li-an.fr/plugins/customer-area-2/2 août 2016 à 11 h 13 min #1064545J’ai du coup une nouvelle question. J’en suis à créer des comptes utilisateurs. Est-il possible de créer des comptes avec identifiants et mots de passe sans adresse email?
Pour créer les comptes de mes élèves à l’avance c’est indispensable, je ne connais pas à l’avance leur email!2 août 2016 à 12 h 21 min #1064546WordPress requiert une adresse email de toutes les façons, mais si tu crées toi-même les comptes depuis l’interface d’administration tu peux renseigner des adresses email bidons (a1@b.com, a2@b.com, etc.) en décochant bien la case « envoyer le mot de passe par email » à chaque fois 😉
Les élèves pourront ensuite changer eux-mêmes leur email une fois connectés.
3 août 2016 à 7 h 39 min #1064547Si j’ai bien compris,
tu me proposes de faire différents rôles, comme par exemple :
– un rôle élève, pour pouvoir publier des articles pour l’ensemble de mes élèves.
– un rôle pour chacune de mes classes, pour rendre visible un article par l’ensemble des élèves d’une classe
– un rôle par élève pour faire un article personnel auquel je pourrais attacher des fichiers que du coup seul l’élève pourra lire.C’est bien ça?
3 août 2016 à 11 h 59 min #1064548Hello !
Comme d’habitude en informatique, tout est affaire de compromis entre la simplicité de mise en oeuvre et la puissance que le système procure.
L’un des nombreux moyens de procéder, avec lequel tu arrives à quelque chose de fonctionnel sans avoir besoin de programmer :
– un rôle élève
– un rôle par classe et par sous-classe
– un rôle par élève
– une page par classe, avec les fichiers communs à la classe (grâce au plugin Members, tu accordes alors un droit de lecture au rôle « classe » correspondant). Tu pourras y rajouter chaque semaine les corrigés de la classe.
– une page par élève, avec les fichiers de l’élève (idem, avec Members, tu accordes un droit de lecture au rôle « élève » correspondant). Tu pourras y rajouter chaque semaine les corrigés de l’élève.Malheureusement, cela veut quand même dire que tu te tapes 150+ modifications de page par semaine 😕
Une autre solution qui requiert de programmer un peu mais permet d’automatiser tout cela :
– un rôle « eleve »
– un rôle par classe et par sous-classe « classe_1 », « classe_1_1 », « classe_1_2 », « classe_2″…
– une page par classe avec les fichiers communs (idem que ci-dessus)
– pas de rôle par élève mais quand tu crées chaque élève, tu lui donnes comme nom d’utilisateur « eleve_1 », « eleve_2 », etc.
– une page « mes notes » accessible par tous les élèves, à laquelle tu assignes un template de page. Chaque semaine tu y balances en une fois l’ensemble de tes corrigés (dûment nommés bien sûr), et c’est dans le template de page que tu codes ton propre système de listing des fichiers en fonction du nom du fichier, de l’élève et de la classe dans laquelle il se trouve.Cela pourrait ressembler à ceci (dans le template de page « élève » donc) :
roles;
// convention de nom du fichier : 1-5, 1_2-14, etc. (classe 1, classe 1-2, élève 5, élève 14)
$media_class = substr($m->post_name, 0, strpos(‘-‘, $m->post_name));
$media_student = substr($m->post_name, strpos(‘-‘, $m->post_name)+1);
// on vérifie les accès…
$media_is_in_my_class = in_array(‘classe_’.$media_class, $roles);
$media_is_for_me = ‘eleve_’.$media_student == $student->user_login;
return $media_is_in_my_class && $media_is_for_me;
});
// affiche les medias
foreach ($student_media as $media): ?>
Lien vers le mediaEn procédant comme ça, ton processus est simplifié chaque semaine car tu peux balancer les fichiers en vrac 🙂
En contrepartie, tu perds la possibilité de pousser facilement un contenu (texte, message) particulier à un élève particulier sur une semaine particulière. Tout ce que tu peux pousser, ce sont des fichiers.PS j’ai écrit au kilomètre hein, le code ne fonctionne sûrement pas tel quel… mais cela te donne une idée de ce à quoi cela pourrait ressembler.
3 août 2016 à 20 h 29 min #1064551Merci beaucoup! Avec les rudiments que je possède en php je devrais pouvoir me débrouiller.
L’année dernière je me débrouillais avec une fonction, un code de filtrage et un code d’affichage en tableau que j’avais écris.– cette fonction prend en entrée un chemin de dossier $dirscanned et un type d’extension $extension. Elle liste de manière récursive le chemin de tout les fichiers de l’extension choisie inclus dans le dossier et ses sous-dossiers.
//
//
// Liste de manière récursive (aussi dans les sous-dossiers) //
// les chemins d’accès à tous les fichiers de l’extension choisie. //
//
//function lister1dossierR($dirscanned, $extension)
{
// Arguments :
//$dirscanned chemin d’accès scanné, cela doit être un chemin de dossier sans le « / » à la fin.
//$extension extension du type de fichier qui nous intéresse.//On scanne le contenu du dossier
$scan = scandir($dirscanned)or die(‘Erreur, le dossier n’a pas pu être scanné’);//initialisation des variables
$resultat = array();
$listedossiers = array();//On parcourt le tableau $scan
foreach ($scan as $fichier)
{
//Si c’est un dossier à l’exception de . et ..
if(is_dir($dirscanned.’/’.$fichier) AND $fichier != ‘.’ AND $fichier != ‘..’)
{$listedossiers[] = $dirscanned.’/’.$fichier;}//on ajoute le chemin du dossier dans la liste des dossiers//Si c’est un fichier
else
{
$extensionfichier = substr($fichier, -3); // On récupère l’extension du fichier
if ($extensionfichier == $extension) // Si l’extension est celle recherchée
{$resultat[] = $dirscanned.’/’.$fichier;} //On l’enregistre dans le tableau des résultats
}
}// Récursivité de la fonction – On rappelle la fonction pour chacun des dossiers de la liste et on fusionne les résultats
foreach ($listedossiers as $chemindossier)
{$resultat = array_merge($resultat, lister1dossierR($chemindossier, $extension));}return ($resultat);
}– ce code permet de filtrer les liens qui correspondent à l’élève concerné
//
//
// – Filtrage des fichiers PDF en vue d’afficher un tableau de liens.//
// – /! Nécessite la fonction : lister1dossierR() /! //
//
///* préparation des variables à utiliser */
$studentID = $_SESSION;
$studentClass = substr($studentID,0,2);// longueur en caractère de la chaine correspondant à la partie commune de l’adresse du fichier + 1 pour le « / »
$AMC_dir_length = strlen($AMC_dir) + 1;
$RAPPORT_dir_length = strlen($RAPPORT_dir) + 1;//listing des chemins d’accès des fichiers dans les dossiers à analyser
$liste_AMC = lister1dossierR($AMC_dir, ‘pdf’); // dossier contenant les pdf interros et punitions
$liste_RAPPORTS = lister1dossierR($RAPPORT_dir, ‘pdf’); // dossier contenant les rapports//Déclaration des matrices de résultats (tableaux à deux dimmensions) des fichiers listés :
$liste_interro = array(); // les fichiers d’interros// traitement de la variable $liste (QCM & punitions)
foreach($liste_AMC as $chemin)
{
/* préparation des variables correspondant au fichier */
$classe_fichier = substr($chemin, $AMC_dir_length,2); // On récupère la classe correspondant au fichier
$id_interro = substr($chemin, $AMC_dir_length,4);// On récupère l’ID_interro correspondant au fichierif ($classe_fichier == $studentClass) //On vérifie que la classe de l’élève et celle du fichier correspondent
{
$fin_de_chemin = substr($chemin, –; // On récupère la fin du nom du fichier
/* Si le fichier est l’un des trois que l’on cherche (sujets vierges/corrigé standard/corrigé personnel),
on l’ajoute, lui et son chemin dans un sous tableau portant comme nom l’ID de l’interro*/// – fichier sujet
if ($fin_de_chemin == « ujet.pdf »)
{$liste_interro[$id_interro][« Nom »] = $id_interro;$liste_interro[$id_interro][« DOC-sujet.pdf »] = ‘ DOC-sujet.pdf‘;}// – fichier corrigé standard
if ($fin_de_chemin == $studentClass. »99.pdf »)
{$liste_interro[$id_interro][« Nom »] = $id_interro;$liste_interro[$id_interro][« DOC-corrige.pdf »] = ‘ DOC-corrigé.pdf‘;}// – fichier corrigé personnalisé
if ($fin_de_chemin == $studentID. ».pdf »)
{$liste_interro[$id_interro][« Nom »] = $id_interro;$liste_interro[$id_interro][$studentID. ».pdf »] = ‘ ‘.$studentID.’.pdf‘;}
}
}– ce code sert à afficher la matrice des résultats filtrés.
//—Affichage tableau interrogation
echo ‘Liste des fichiers d’interrogation disponibles ‘;
echo ‘ID interro Sujets vierges Corrigé générique Corrigé personnalisé ‘;
foreach($liste_interro as $ligne_interro)
{
if (!empty($ligne_interro[« DOC-corrige.pdf »])) // Si il n’y a pas de corrigé le sujet ne s’affichera pas
{echo ‘‘.$ligne_interro[« Nom »].’ ‘.$ligne_interro[« DOC-sujet.pdf »].’ ‘.$ligne_interro[« DOC-corrige.pdf »].’ ‘.$ligne_interro[$studentID. ».pdf »].’ ‘;}
}
?>4 août 2016 à 8 h 21 min #1064549Pour utiliser le php dans WordPress, comment me conseilles-tu de procéder?
Pour le moment j’ai trouvé une extension « PHP Code for posts » pour mettre mon code sur une page.4 août 2016 à 8 h 26 min #1064550Comme je l’écrivais plus haut, le plus propre me paraît être de créer un Template de page personnalisé, d’y mettre ton code et d’assigner le template à une Page (au sens WordPress du terme).
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.