Des cohortes synchronisées sur des champs du profil

Des cohortes synchronisées sur des champs du profil

par François Lizotte,
Nombre de réponses : 11
Avatar Moodleurs particulièrement utiles Avatar Traducteurs

Imaginons que chaque utilisateur dans Moodle a un champ programme qui correspond à son programme d'études. Maintenant, je voudrais synchroniser des cohortes avec ce champ.

C'est d'ailleurs le souhait qui est exprimé ici: https://tracker.moodle.org/browse/MDL-25054

Ce serait vraiment l'idéal, car je gère différentes instances de Moodle avec des méthodes d'authentification variées (interne, LDAP, BD externe, Shibboleth, SSO).

Il me semble que ce doit être simple, mais je n'ai pas encore trouvé de solution, sinon ce module dont la syntaxe est si obscure (on me perd facilement) que j'ai laissé tomber: https://moodle.org/plugins/view.php?plugin=auth_mcae

Y a-t-il quelqu'un, dans la communauté francophone, qui partage un tel désir ?

 

 

 

Moyenne des évaluations  -
En réponse à François Lizotte

Re: Des cohortes synchronisées sur des champs du profil

par Nicolas Martignoni,
Avatar Développeurs Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Nous utilisons le plugin que tu cites à satisfaction, pour créer des cohortes en fonction du domaine de l'adresse de courriel des utilisateurs. Ça marche bien. Tu devrais peut-être insister avec auth_mcae, en attendant l'hypothétique résolution du bogue MDL-25054.

PS. C'est par ailleurs avec les galeries d'images le seul plugin tiers que nous avons admis sur notre Moodle.

Moyenne des évaluations Utile (1)
En réponse à Nicolas Martignoni

Re: Des cohortes synchronisées sur des champs du profil

par Daniel Méthot,
Avatar Moodleurs particulièrement utiles

J'allais dire en effet que ce plugin que je connaissais pas offre des possibilités intéressantes.

Bien qu'inutile pour moi.

Et si Nicolas l'utilise c'est donc un bon signe... pour s'y intéresser.

En réponse à Nicolas Martignoni

Re: Des cohortes synchronisées sur des champs du profil

par François Lizotte,
Avatar Moodleurs particulièrement utiles Avatar Traducteurs

Merci Nicolas. Je suis rassuré de savoir que ce module est utilisé ailleurs dans la francophonie.

J'ai poursuivi mon exploration et j'ai réussi à créer automatiquement une cohorte. Ce n'est pas si compliqué, mais la documentation du module n'est pas des plus limpides.

Au fait, est-il en voie d'être traduit ?

En réponse à François Lizotte

Re: Des cohortes synchronisées sur des champs du profil

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Concernant la traduction francophone, il "suffit" que quelqu'un s'en occupe...

En vérifiant, je vois dans AMOS que la traduction existe bien pour Moodle 2.5, dernière version officiellement supportée (du plugin).

Cette traduction devrait automatiquement être utilisée dans Moodle 2.6... il faut éventuellement prévoir une mise à jour du paquetage de langue clin d’œil

En regardant de plus près, je m'aperçois dans AMOS que la version 2.3 existe bien également, mais PAS la 2.4 (pour lequel aucune version du plugin n'est officiellement disponible).

Séverin

PS : et si tu parlais de la documentation du plugin, comme c'est un wiki, chacun est libre d'améliorer cette documentation...

En réponse à Séverin Terrier

Re: Des cohortes synchronisées sur des champs du profil

par Pascal Maury,
Avatar Développeurs de plugins

Bonjour,

Juste pour info, nous faisons ce que tu décris via un développement perso : http://moodlemoot2013.univ-bordeaux.fr/course/view.php?id=64

Mais mieux vaut privilégier les plugins (notre solution implique la modification d'un fichier de Moodle).

 

En réponse à Pascal Maury

Re: Des cohortes synchronisées sur des champs du profil

par stephane ngov,

bonjour ça peut aussi peut être aidé d'autre personne ou  à comprendre les liens entres les tables,

j'ai crée un class LDAP pour crée des cohortes en fonction de leurs champs institution mais on peut choisir n'importe quel chamop de la table, c'est du LDAP AD,

 

<?php
//4 sept 2013 9H30

class VetoLdap{
    private $test_name="garcia";
    private $LDAP_anonym = NULL;
    private $LDAP_pswd = "xxxxx";
    private $LDAP_login = "xxxxx";
    private $LDAP_host = "xxxxx";
    //*****************Filtres type membre***************
    private $type_etudiant ="OU=Etudiants";
    //*****************Filtres type promo***************
    private $type_prof ="OU=Enseignants";
    //*****************Filtres type personnels***************
    private $type_person ="OU=Personnels";
    
    //*****************Filtres type promo***************
    private $type_promo_1A = "department=VETO-1A*";
    private $type_promo_2A = "department=VETO-2A*";
    private $type_promo_3A = "department=VETO-3A*";
    private $type_promo_4A = "department=VETO-4A*";
    private $type_promo_5A = "department=VETO-5A*";
    private $type_erasmus = "description=VETO - ERASMUS*";
    private $user_stock;//stockage temporaire
    //*****************Recupération de tout les étudiants ID_USER_M2/APPARTIENT AU GROUPE***************
    private static $id_user_M2_GROUPE = array();
    private static $name_G4 = array();

    //***************Liste de types de membre *************
    private $user_prof,$user_erasmus;
    private $user_1A ,$user_2A ,$user_3A ,$user_4A ,$user_5A ;
    private $type_memberof_etudiant = NULL;
    private $type_memberof_prof = NULL;

    //***************Spécialité *************
    private $annee_5 ="CN=GD_5a.veto,OU=Groupes_DIFFUSION_DYNAMIQUE,OU=Groups,xxxxx";
    private $AC ="CN=GD_5a-ac.veto,OU=Groupes_DIFFUSION_DYNAMIQUE,OU=Groups,xxxxx";
    private $AC1="CN=GD_5a-ac1.veto,OU=Groupes_DIFFUSION_DYNAMIQUE,OU=Groups,xxxxx";
    private $AC2="CN=GD_5a-ac2.veto,OU=Groupes_DIFFUSION_DYNAMIQUE,OU=Groups,xxxxx";

    private $AP ="CN=GD_5a-ap.veto,OU=Groupes_DIFFUSION_DYNAMIQUE,OU=Groups,xxxxx";
    private $EQ ="CN=GD_5a-eq.veto,OU=Groupes_DIFFUSION_DYNAMIQUE,OU=Groups,xxxxx";

    //######### les spécialisée mélanger ###########################################################
    private $userAC = array();
    private $userAC1 = array();
    private $userAC2 = array();

    private $userAnnee5 = array();//tout les 5ème année

    private $sp_AC = array();// tout les groupes AC+AC1+AC2
    private $userAP = array();// appartient à AP mixte
    private $userEQ = array();// appartient à EQ mixte
    //######### les spécialisée mélanger ###########################################################

    private $AC_pure = array();
    private $AP_pure = array();
    private $EQ_pure = array();

    private $AC_AP = array();
    private $AP_EQ = array();
    private $EQ_AC = "toto";



    public function __construct(){
            $base_dn = "OU=LYON,OU=Etudiants,OU=People,xxxxx";
        //echo "<h1> ************* extraction LDAP  V1.1 ***************</h1>";
        $this->LDAP_anonym = ldap_connect($this->LDAP_host);    
        ldap_set_option($this->LDAP_anonym, LDAP_OPT_PROTOCOL_VERSION, 3);
        ldap_set_option($this->LDAP_anonym, LDAP_OPT_REFERRALS, 0);
        ldap_bind($this->LDAP_anonym, $this->LDAP_login, $this->LDAP_pswd);
        $this->testMonlien();
        $this->rangeUserSp("Etudiants");//recherche les spécialité des etudiants
        $this->UserPure();//charger les specialité pure
        $this->userMixt();
        //$this->listMemberOf("Etudiants");//recherche les types de memberof etudiants
        //$this->listMemberOf("Enseignants");//recherche les types de memberof etudiants

    }

    public function rangeUserSp($people) //on ne peut pas filter les 1A à 4A car abscence de erasmus triste
    {
        $arbre= "OU=LYON,OU=".$people.",OU=People,xxxxx";
        $results = ldap_search($this->LDAP_anonym, $arbre, ("cn=*"));
        $member_list = ldap_get_entries($this->LDAP_anonym, $results);
        
        
        for($i= 0; $i<$member_list['count'];$i++)
        {
             for($j=0; $j< $member_list[$i]["memberof"]['count'];$j++)
            {
                $find_couple = 0; //on utilise pour rechercher un couple mixte
                //$member_list[$i]["memberof"][$j]."<br/>" //exemple CN=GD_5a-ac2.veto,OU=Groupes_DIFFUSION_DYNAMIQUE,OU=Groups,xxxxx;
                //########### 5ème annee #####################
                if($member_list[$i]["memberof"][$j] == $this->annee_5)
                {
                    $this->userAnnee5[] =  $member_list[$i]["name"][0];
                }

                //########### ANIMAUX DE COMPAGNIE #####################
                if($member_list[$i]["memberof"][$j] == $this->AC)
                {
                    $this->userAC[] =  $member_list[$i]["name"][0];
                }
                if($member_list[$i]["memberof"][$j] == $this->AC1)
                {
                    $this->userAC1[] =  $member_list[$i]["name"][0];
                }
                if($member_list[$i]["memberof"][$j] == $this->AC2)
                {
                    $this->userAC2[] =  $member_list[$i]["name"][0];
                }
                //########### ANIMAUX DE PRODUCTION #####################
                if($member_list[$i]["memberof"][$j] == $this->AP)
                {
                    $this->userAP[] =  $member_list[$i]["name"][0];
                }
                //########### EQUINE #####################
                if($member_list[$i]["memberof"][$j] == $this->EQ)
                {
                    $this->userEQ[] =  $member_list[$i]["name"][0];
                }
            }
        }
        $this->sp_AC = array_merge($this->userAC,$this->userAC1,$this->userAC2);
        $this->sp_AC = array_unique($this->sp_AC); //suppression des doublons

    }

    
    public function UserMixt() //recherche des groupes mixtes
    {
        echo "<h1>user mixt</h1>";
        $arbre = "OU=LYON,".$this->type_etudiant.",OU=People,xxxxx";

        /*********************************** AC + AP ********************************/
        foreach($this->sp_AC as $AC)
        {
            $filtre ="cn=".$AC."";
            $results = ldap_search($this->LDAP_anonym, $arbre, $filtre);
            $member_list = ldap_get_entries($this->LDAP_anonym, $results);
            
                

            foreach($member_list[0]['memberof'] as $M)
            {
                //echo $M."<br/>";
                if($M === $this->AP)
                {
                    $this->AC_AP[] = $AC;
                }
            }

        }

        /*********************************** AP+EQ ********************************/
        foreach($this->userAP as $AP)
        {
            $filtre ="cn=".$AP."";
            $results = ldap_search($this->LDAP_anonym, $arbre, $filtre);
            $member_list = ldap_get_entries($this->LDAP_anonym, $results);
            
                

            foreach($member_list[0]['memberof'] as $M)
            {
                //echo $M."<br/>";
                if($M === $this->EQ)
                {
                    $this->AP_EQ[] = $AP;
                }
            }

        }

        /*********************************** EQ + AC ********************************/
        foreach($this->userEQ as $EQ)
        {
            $filtre ="cn=".$EQ."";
            $results = ldap_search($this->LDAP_anonym, $arbre, $filtre);
            $member_list = ldap_get_entries($this->LDAP_anonym, $results);
            
                

            foreach($member_list[0]['memberof'] as $M)
            {
                //echo $M."<br/>";
                if($M === $this->AC)
                {
                    $this->EQ_AC[] = $EQ;
                }
            }

        }
        var_dump($this->AP_EQ);
    }
    




    public function UserPure()//recherche les goupes spacialié mixte
    {
        $arbre = "OU=LYON,".$this->type_etudiant.",OU=People,xxxxx";
        
        var_dump($this->sp_AC);
        /*********************************** AC PURE ********************************/
        foreach($this->sp_AC as $AC)
        {
            $filtre ="cn=".$AC."";
            echo $filtre."<br/>";
            $results = ldap_search($this->LDAP_anonym, $arbre, $filtre);
            $member_list = ldap_get_entries($this->LDAP_anonym, $results);
            $trouve_intrus = NULL;

            foreach($member_list[0]['memberof'] as $M)
            {
                //echo $M."<br/>";
                if($M === $this->EQ)
                {
                    $trouve_intrus = TRUE;
                }
                if($M === $this->AP)
                {
                    $trouve_intrus = TRUE;
                }
            }
            if($trouve_intrus === NULL)
            {
                $this->AC_pure[] = $AC;
            }
        }


        /*********************************** AP PURE ********************************/
        foreach($this->userAP as $AP)
        {
            $filtre ="cn=".$AP."";
            echo $filtre."<br/>";
            $results = ldap_search($this->LDAP_anonym, $arbre, $filtre);
            $member_list = ldap_get_entries($this->LDAP_anonym, $results);
            $trouve_intrus = NULL;

            foreach($member_list[0]['memberof'] as $M)
            {
                //echo $M."<br/>";
                if($M === $this->AC)
                {
                    $trouve_intrus = TRUE;
                }
                if($M === $this->EQ)
                {
                    $trouve_intrus = TRUE;
                }
            }
            if($trouve_intrus === NULL)
            {
                $this->AP_pure[] = $AP;
            }
        }


        /*********************************** EQ PURE ********************************/
        foreach($this->userEQ as $EQ)
        {
            $filtre ="cn=".$EQ."";
            echo $filtre."<br/>";
            $results = ldap_search($this->LDAP_anonym, $arbre, $filtre);
            $member_list = ldap_get_entries($this->LDAP_anonym, $results);
            $trouve_intrus = NULL;

            foreach($member_list[0]['memberof'] as $M)
            {
                //echo $M."<br/>";
                if($M === $this->AC)
                {
                    $trouve_intrus = TRUE;
                }
                if($M === $this->AP)
                {
                    $trouve_intrus = TRUE;
                }
            }
            if($trouve_intrus === NULL)
            {
                $this->EQ_pure[] = $EQ;
            }
        }

    }

    public function listMemberOf($people) // on recherche le différent type de memberof pour les etudiants
    {
        $arbre= "OU=LYON,OU=".$people.",OU=People,xxxxx";
        $results = ldap_search($this->LDAP_anonym, $arbre, ("cn=*"));
        $member_list = ldap_get_entries($this->LDAP_anonym, $results);
        $type = array();

        for($i= 0; $i<$member_list['count'];$i++)
        {
             for($j=0; $j< $member_list[$i]["memberof"]['count'];$j++)
            {
                $type[] = $member_list[$i]["memberof"][$j]."<br/>";
                
            }
        }

        $type = array_unique($type);
        if($people == "Etudiants")
        {
            $this->type_memberof_etudiant = $type;
        }
        if($people == "Enseignants")
        {
            $this->type_memberof_prof = $type;
        }
        var_dump($this->type_memberof_prof);

    }



    public function getNameG4(){
        return $this->name_G4;
    }
    public function getUser1A(){
        return $this->user_1A;
    }

    public function getUser2A(){
        return $this->user_2A;
    }
    
    public function getUser3A(){
        return $this->user_3A;
    }

    public function getUser4A(){
        return $this->user_4A;
    }
    public function getUser5A(){
        return $this->user_5A;
    }
    public function getUserEra(){
        return $this->user_erasmus;
    }
    public function getUserProf(){
        return $this->user_prof;
    }

    public function typeMemberOf(){
        echo "<h1>prof LDAP</h1>";
        $arbre= "OU=LYON,OU=Etudiants,OU=People,xxxxx";
        $results = ldap_search($this->LDAP_anonym, $arbre, "memberof=*");
        $member_list = ldap_get_entries($this->LDAP_anonym, $results);
        //var_dump($member_list);
    }
    
    public function decompMemberOf($memberOf){
        for($i=0; $i<10;$i++){
            if(isset($memberOf[0]['memberof'][$i]))
            {
            echo "<tr style='background:orange'>";
            echo "<td>membre UP:</td><td>".$memberOf[0]['memberof'][$i]."</td>";
            echo "</tr>";
            }
        }
    }

    public function chaqueUser(){        
        //Recupération des user PROFESSEUR***********************************************
        echo "<h1>prof LDAP</h1>";
        $arbre_prof = "OU=LYON,".$this->type_prof.",OU=People,xxxxx";
        $this->extractLDAP($arbre_prof,"CN=*");//récolte des 1A
        $this->user_prof = $this->user_stock;
        echo "<span style='color=greenyellow' >Membmre trouvé ** en <b>prof - $this->type_prof LDAP </b>".count($this->user_prof)."</span><br/>";
    
        echo "<h1>etudiant LDAP</h1>";
        //Recupération des user ETUDIANT de toute les différentes promo
        $arbre_etudiants = "OU=LYON,".$this->type_etudiant.",OU=People,xxxxx";
        echo "<hr/>";
        $this->extractLDAP($arbre_etudiants,$this->type_promo_1A);//récolte des 1A
        $this->user_1A = $this->user_stock;
        echo "<span style='color:blue' >Membmre trouvé en <b>1A - $this->type_etudiant LDAP </b>".count($this->user_1A)."</span><br/>";    
        echo "<hr/>";
        $this->extractLDAP($arbre_etudiants,$this->type_promo_2A);//récolte des 2A
        $this->user_2A = $this->user_stock;
        echo "<span style='color:blue' >Membmre trouvé en <b>2A  -$this->type_etudiant LDAP </b>".count($this->user_2A)."</span><br/>";
        echo "<hr/>";
        $this->extractLDAP($arbre_etudiants,$this->type_promo_3A);//récolte des 3A
        $this->user_3A = $this->user_stock;
        echo "<span style='color:blue' >Membmre trouvé en <b>3A - $this->type_etudiant LDAP </b>".count($this->user_3A)."</span><br/>";    
        echo "<hr/>";
        $this->extractLDAP($arbre_etudiants,$this->type_promo_4A);//récolte des 4A
        $this->user_4A = $this->user_stock;
        echo "<span style='color:blue' >Membmre trouvé en <b>4A - $this->type_etudiant LDAP </b>".count($this->user_4A)."</span><br/>";
        echo "<hr/>";
        $this->extractLDAP($arbre_etudiants,$this->type_promo_5A);//récolte des 5A
        $this->user_5A = $this->user_stock;
        echo "<span style='color:blue' >Membmre trouvé en <b>5A - $this->type_etudiant LDAP </b>".count($this->user_5A)."</span><br/>";    
        echo "<hr/>";
        $this->extractLDAP($arbre_etudiants,$this->type_erasmus);//récolte des 5A
        $this->user_erasmus = $this->user_stock;
        echo "<span 'style=color:blue' >Membre trouvé en <b>erasmus A - $this->type_etudiant LDAP </b>".count($this->user_erasmus)."</span><br/>";    
        echo "<hr/>";
    }
    
    public function extractLDAP($arbre,$filtre){
        $results = ldap_search($this->LDAP_anonym, $arbre, $filtre);
        $member_list = ldap_get_entries($this->LDAP_anonym, $results);
        $liste_user = $this->recupUserName($member_list);// récupération des user membre

    }

    public function recupUserName($out_membre){
        $this->user_stock = array();//initalisation à zero
        $total_out = $out_membre['count'];
        echo "nom de membre trouvé : <b>".$out_membre['count']."</b><br/>";
        for($i=0; $i <$total_out; $i++){
            if(isset($out_membre[$i]['cn'][0])){
                    if (preg_match("#^SMTP:[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $out_membre[$i]['proxyaddresses'][0]))
                    {
            echo 'adresse ' . $out_membre[$i]['proxyaddresses'][0]. ' est <strong>ok</strong> !<br/>';
                    }else{
                    echo "pas valide |||||||||";
                }


                $this->user_stock[] = $out_membre[$i]['cn'][0];


                if(preg_match("#[^a-z]#",$out_membre[$i]['name'][0])){
                    echo "<br/>presence non caractere =>:<span style='background:red'>".$out_membre[$i]['name'][0]."</span><br/>";
                }
                $this->recupUserGroupe($out_membre[$i]['cn'][0],$out_membre[$i]['department'][0]);
    
                }
                else{
                    echo "ereur ! sur <b>:".$out_membre[$i]['sn'][0]."</b><br/>";
                }
            }
    }

    public function recupUserGroupe($user_ldap,$department){        
        if(preg_match('#VETO-4A VETO-4A-Gr-#',$department))
        {
        
            $this->name_G4[] =str_replace(' ','',$department);
        
        }    
    
        if(isset($department))
        {
            self::$id_user_M2_GROUPE[]= array(
            "user_LDAP" =>$user_ldap,
            "groupe"=>strtolower(str_replace(' ','',$department)));
        }
    }

    public function getM2Groupe(){
        return self::$id_user_M2_GROUPE;
    }

    public function testMonlien()
    {
        $this->findMembre($this->test_name,"E");    
    }
    public function findMembre($nom,$type){ //E = etudiant, P=enseignant,//A= personnel

         if($type== "P")//recherche professeur
        {
            echo "<h1>recherche l'enseignant ".$nom."</h1>";
            $arbre= "OU=LYON,".$this->type_prof.",OU=People,xxxxx";
        }
        if($type=="E")//recherche étudiant
        {
            echo "<h1>recherche l'étudiant ".$nom."</h1>";
            //Recupération des user ETUDIANT de toute les différentes promo
            $arbre = "OU=LYON,".$this->type_etudiant.",OU=People,xxxxx";
            echo "<hr/>";
        }
        if($type=="A")//recherche étudiant
        {
            echo "<h1>recherche le personnel  ".$nom."</h1>";
            //Recupération des user ETUDIANT de toute les différentes promo
            $arbre = "OU=LYON,".$this->type_person.",OU=People,xxxxx";
            echo "<hr/>";
        }
        
        $filtre ="sn=".$nom."";
        $results = ldap_search($this->LDAP_anonym, $arbre, $filtre);
        $member_list = ldap_get_entries($this->LDAP_anonym, $results);

        if($member_list['count'] > 0){
            echo "<h1>fiche complete de ".$nom."</h1>";
            echo "<table style='border:1px solid green'>";
            echo "<tr>";
            echo "<td>login :</td><td>".$member_list[0]['cn'][0]."</td>";
            echo "</tr>";
            echo "<tr>";
            echo "<td>firstname (nom famillle):</td><td>".$member_list[0]['sn'][0]."</td>";
            echo "</tr>";
            echo "<tr>";
            echo "<td>lastname (prenom):</td><td>".$member_list[0]['givenname'][0]."</td>";
            echo "</tr>";
            if(isset($member_list[0]['l'][0]))
            {
            echo "<tr>";
            echo "<td>campus:</td><td>".$member_list[0]['l'][0]."</td>";
            echo "</tr>";
            }
            echo "<tr>";
            echo "<td>description:</td><td>".$member_list[0]['description'][0]."</td>";
            echo "</tr>";
            $this->decompMemberOF($member_list);
            echo "</table>";
        }
        else{
            echo "ce membre n'existe pas dans le LDAP";
        }
    }
}

 

$userLDAP = new VetoLdap();

$userLDAP->chaqueUser();//chargé les users dans les attributs

$name_G4 = array_unique($userLDAP->getNameG4());
$promo1 = $userLDAP->getUser1A();//promo 1A
$promo2 = $userLDAP->getUser2A();//promo 2A
$promo3 = $userLDAP->getUser3A();//promo 3A
$promo4 = $userLDAP->getUser4A();//promo 4A
$promo5 = $userLDAP->getUser5A();//promo 4A

//les 5a année spécialité
$cohort_AC = $userLDAP->getCohortAC();//membre fait partie Animaux de compagnie
$cohort_AP = $userLDAP->getCohortAP();//membre fait partie Animaux de production
$cohort_EQ = $userLDAP->getCohortEQ();//membre fait partie équine

$era     = $userLDAP->getUserEra();//promo erasmus
$prof     = $userLDAP->getUserProf();//promo prof

$LdapGroupe = $userLDAP->getM2Groupe(); // correspondance entre le user du LDAP et le du groupe departemment

 


echo '<span style="background:yellow">resultat de recuperation du LDAP : </span>'; var_dump($prof[0]);
//================= CORRESPONDANCE USER > ID membre de Moodle2 ============================================================
$BddM2 = new BddM2($bdd);

$BddM2->userLdapIds($promo1,'1A');//recup id 1A nom $tri
$BddM2->userLdapIds($promo2,'2A');//recup id 2A
$BddM2->userLdapIds($promo3,'3A');//recup id 3A
$BddM2->userLdapIds($promo4,'4A');//recup id 4A
$BddM2->userLdapIds($promo5,'5A');//recup id 5A
$BddM2->userLdapIds($era,'ERA');//recup id ERASMUS
$BddM2->userLdapIds($prof,'PROF');//recup id ERASMUS;

$BddM2->userLdapIds($cohort_AC,'AC');//recup login ANIMAUX COMPAGNIE
$BddM2->userLdapIds($cohort_AP,'AP');//recup login ANIMAUX Production
$BddM2->userLdapIds($cohort_EQ,'EQ');//recup login ANIMAUX equine

$population = $BddM2->recupIdMembre();

$IdM2_Groupe = $BddM2->userLdapGroupe($LdapGroupe);//récupération du id_membre et groupe

echo '<span style="background:orange"> LDAP => Id membre Moodle 2 + department: </span>';
var_dump($IdM2_Groupe[0]);

echo "<hr/>";
echo "<h1 style='background:orange'>RECHERCHE DES COHORTES MOODLE </h1>";

$ref_time = time();
$query="SELECT timestamp FROM lasttime WHERE id=0";
$qb = $bdd->query($query);
$data = $qb->fetch();

//================= CORRESPONDANCE USER > ID membre de Moodle2 ============================================================
$query="DELETE FROM prod_user WHERE id IN(5218,5221,5217,5219)";
$bdd->query($query);


//suppression des derniers enregistrement============================================================
echo "<h2> timestamp avant : ".$data['timestamp']."  <= </h2>";
$query="DELETE FROM prod_cohort_members WHERE timeadded=".$data['timestamp'];
echo $query;
$bdd->query($query);

$query="DELETE FROM prod_groups_members WHERE timeadded=".$data['timestamp'];
echo $query;
$bdd->query($query);

//ON met a jours le dernier enregistrement dans la table timestamp============================================================
$query="UPDATE lasttime SET timestamp =".$ref_time;
$bdd->query($query);

echo "<h2> timestamp mis a jour:".$ref_time." => </h2>";
//Récupération des membres pour les inscrires dans leurs cohortes============================================================

$cohorte = new Cohorte($ref_time,$bdd);

$cohorte->findIdsMembreDepartment($population);
$attribut = $cohorte->getAllAttr();
extract($attribut);

//======================================= INSCRIPTION DES MEMBRES DANS CHAQUE COHORTE ============================================================
$cohorte->loadMembreCohorte($ids_dep_1A,$id_1A,"1A");
$cohorte->loadMembreCohorte($ids_dep_2A,$id_2A,"2A");
$cohorte->loadMembreCohorte($ids_dep_3A,$id_3A,"3A");
$cohorte->loadMembreCohorte($ids_dep_4A,$id_4A,"4A");
$cohorte->loadMembreCohorte($ids_dep_5A,$id_5A,"5A");

$cohorte->loadMembreCohorte($ids_dep_era,$id_era,"ERASMUS");//ids table membre , id_ numéro de la chorte============================================================
$cohorte->loadMembreCohorte($ids_dep_prof,$id_prof,"enseignant");
$cohorte->loadMembreCohorte($ids_etudiant,$id_etudiant,"enseignant");

$cohorte->loadMembreCohorte($ids_AC,$id_AC,"AC");
$cohorte->loadMembreCohorte($ids_AP,$id_AP,"AP");
$cohorte->loadMembreCohorte($ids_EQ,$id_EQ,"EQ");

 

========================== pour la base de donnnée

<?php
//3 septembre 8H30
class BddM2
{
    private $bdd;
    private $user_M2exitepas = array();
    //numéro de membre
    private $ids_user_P1, $ids_user_P2, $ids_user_P3, $ids_user_P4, $ids_user_P5; //promo 1A
    private $ids_user_era, $ids_prof;
    private $ids_user_AC, $ids_user_AP, $ids_user_EQ;    //numéro de id récupérer pour les spécialités

    public function __construct($bdd){
        $this->bdd = $bdd;
    }

    public function userLdapGroupe($user_groupe)//on conversion user LDAP en Id_m2 avec son nom de groupe
    {
        echo '<h1>conversion user en id_moodle 2 pour les groupes</h1>';
        $idM2_Groupe = array();
        foreach($user_groupe as $U)
        {
            //echo  $U['user_LDAP']."==>".$U['groupe']."<br/>";
            $idM2_Groupe[]=array("id_M2"=>$this->getIdUserM2( $U['user_LDAP']),"Gr"=> $U['groupe'] );
        }
        return $idM2_Groupe;
    }
    public function userLdapIds($userLDAP,$tri){
        
        foreach($userLDAP as $U){

            if($tri == '1A'){
                  $this->ids_user_P1[] = $this->getIdUserM2($U);
            }
            if($tri == '2A'){
                  $this->ids_user_P2[] = $this->getIdUserM2($U);
            }
            if($tri == '3A'){
                  $this->ids_user_P3[] = $this->getIdUserM2($U);
            }
            if($tri == '4A'){
                  $this->ids_user_P4[] = $this->getIdUserM2($U);
            }
            if($tri == '5A'){
                  $this->ids_user_P5[] = $this->getIdUserM2($U);
            }
            if($tri == 'ERA'){
                 $this->ids_user_era[] = $this->getIdUserM2($U);
            }
            if($tri == 'PROF'){
                 $this->ids_prof[] = $this->getIdUserM2($U);
            }

            if($tri == 'AC'){
                 $this->ids_user_AC[] = $this->getIdUserM2($U);
            }
            if($tri == 'AP'){
                 $this->ids_user_AP[] = $this->getIdUserM2($U);
            }
            if($tri == 'EQ'){
                 $this->ids_user_EQ[] = $this->getIdUserM2($U);
            }
        }
    }

    public function recupIdMembre()
    {
        $population = array();

        $population['1A'] = $this->ids_user_P1;
        $population['2A'] = $this->ids_user_P2;
        $population['3A'] = $this->ids_user_P3;
        $population['4A'] = $this->ids_user_P4;
        $population['5A'] = $this->ids_user_P5; //promo 1A
        $population['ERA'] = $this->ids_user_era;
        $population['PROF'] = $this->ids_prof;
        $population['AC'] = $this->ids_user_AC;
        $population['AP'] = $this->ids_user_AP;
        $population['EQ'] = $this->ids_user_EQ;
        return $population;
    }

    public function getIdUserM2($userLDAP){    
        $query= "SELECT id FROM prod_user WHERE username='".$userLDAP."'";
        $qb = $this->bdd->query($query);
        $data = $qb->fetch();
        if($data['id'] != NULL){
            return $data['id'];
        }else{    
             $this->user_M2exitepas[] =  $data['id'];//on récupère les membre inconnus de la tabe moodle
        }
    }    
}

?>






?>

 

 

En réponse à stephane ngov

Re: Des cohortes synchronisées sur des champs du profil

par Patrick Lemaire,
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Merci Stéphane. En pièce jointe, c'était bien aussi grand sourire

Moyenne des évaluations Utile (2)
En réponse à Patrick Lemaire

Re: Des cohortes synchronisées sur des champs du profil

par Daniel Méthot,
Avatar Moodleurs particulièrement utiles

Oui Patrick,

En pièce jointe c'est beaucoup beaucoup mieux. Je ne l'aurais même pas ouvert d'ailleurs sourire

J'ai mal au doigt à force de tourner (rapidement) le bouton fâché

En fait c'est "même pas vrai" car je caresse doucement ma magic mouse rouge

En réponse à Daniel Méthot

Re: Des cohortes synchronisées sur des champs du profil

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Il y a aussi la touche de clavier "bas de page" qui peut être utile dans ces cas là clin d’œil

En attendant une reconnaissance vocale efficace pour ce genre de chose...

En réponse à François Lizotte

Re: Des cohortes synchronisées sur des champs du profil

par Alexandre Scherbyna,

Bonsoir François,

Précisez SVP: Est-ce que vous avez bien créé automatiquement la nouvelle cohorte ou vous avez remplis automatiquement la cohorte existante ?

En réponse à Alexandre Scherbyna

Re: Des cohortes synchronisées sur des champs du profil

par François Lizotte,
Avatar Moodleurs particulièrement utiles Avatar Traducteurs

Bonjour,

Désolé du délai de réponse. J'ai réussi à créer un cohorte automatiquement avec le plugin. En fait, j'ai compris que la syntaxe de base était beaucoup plus simple que ce qui est illustré dans la documentation.

Et la mise à jour du paquetage de langue a fait apparaître la version française dans mon bon vieux Moodle 2.4 de test.

Moyenne des évaluations Utile (1)