Recherche plug-in :gestion par packets d’utilisateurs & Dwl de fichier (Créer un compte)

  • Statut : non résolu
11 sujets de 1 à 11 (sur un total de 11)
  • Auteur
    Messages
  • #565472
    brisfan
    Participant
    Initié WordPress
    7 contributions

    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.

    #1064542
    brisfan
    Participant
    Initié WordPress
    7 contributions

    Personne n’aurai la moindre piste à me proposer? :(

    #1064543
    Qwindoo
    Modérateur
    Maître WordPress
    2862 contributions

    Hello,

    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 !

    #1064544
    brisfan
    Participant
    Initié WordPress
    7 contributions

    Merci 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/

    #1064545
    brisfan
    Participant
    Initié WordPress
    7 contributions

    J’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!

    #1064546
    Qwindoo
    Modérateur
    Maître WordPress
    2862 contributions

    WordPress 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.

    #1064547
    brisfan
    Participant
    Initié WordPress
    7 contributions

    Si 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?

    #1064548
    Qwindoo
    Modérateur
    Maître WordPress
    2862 contributions

    Hello !

    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 media

    En 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.

    #1064551
    brisfan
    Participant
    Initié WordPress
    7 contributions

    Merci 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 fichier

    if ($classe_fichier == $studentClass) //On vérifie que la classe de l’élève et celle du fichier correspondent
    {
    $fin_de_chemin = substr($chemin, –8); // 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 ‘

    ‘;
    echo ‘

    ‘;
    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 ‘

    ‘;}

    }
    ?>

    Liste des fichiers d’interrogation disponibles
    ID interro Sujets vierges Corrigé générique Corrigé personnalisé
    ‘.$ligne_interro[« Nom »].’ ‘.$ligne_interro[« DOC-sujet.pdf »].’ ‘.$ligne_interro[« DOC-corrige.pdf »].’ ‘.$ligne_interro[$studentID. ».pdf »].’
    #1064549
    brisfan
    Participant
    Initié WordPress
    7 contributions

    Pour 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.

    #1064550
    Qwindoo
    Modérateur
    Maître WordPress
    2862 contributions

    Comme 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).

11 sujets de 1 à 11 (sur un total de 11)
  • Vous devez être connecté pour répondre à ce sujet.