Tabelle utilizzate dalla funzinone di iscrizione alle cohort

Tabelle utilizzate dalla funzinone di iscrizione alle cohort

di Silvia Rolando -
Numero di risposte: 8

Buongiorno, abbiamo scritto un programma in php per creare nuovi utenti e iscriverli alle cohort.

Le tabelle e le relazioni che abbiamo considerato sono le seguente:

mdl_user elenco utenti serve il campo id

mdl_cohort elenco cohort serve il campo id

mdl_course elenco corsi serve il campo id

mdl_cohort_members associazione tra ID cohort (cohortid) preso da mdl_cohort e user ID (userid) preso da mdl_user. Associa l'utente alle cohort a cui è iscritto

mdl_enrol assegna alle cohort i corsi utilizzando come tipo di enrol=cohort, id del corso courseid=id.mdl_course e customint1=id.mdl_cohort. Si devono prendere tutti gli id che hanno customint1=id.mdl_cohort

mdl_user_enrolments iscrive gli utenti ai corsi. Una riga per ogni iscrizione di un utente al corso

associando allo userid=id.mdl_user l'indice enrolid=id.mdl_enrol. Per iscriverlo a tutti i corsi della cohort si devono prendere tutti gli id che hanno customint1=id.mdl_cohort nella tabella mdl_enrol.


Il problema è che quando gli utenti vengono inseriti dal programma php i corsi non vengono tracciati. Togliendo, dall'interfaccia moodle, l'utente dalla cohort e rimettendolo il tracciamento funziona correttamente.


Manca qualcosa? Riuscite a darmi una mano?

Grazie

Silvia


Media dei voti:  -
In riposta a Silvia Rolando

Re: Tabelle utilizzate dalla funzinone di iscrizione alle cohort

di Andrea Bicciolo -
Immagine Core developers Immagine Plugin developers Immagine Translators

Se l'applicazione PHP che gestisce gli utenti è un'applicazione essenzialmente esterna a Moodle, allora potrebbe essere utile valutare di comunicare via web service, evitando di lavorare direttamente nel database di Moodle. Tramite web service saranno le funzioni di Moodle a compilare correttamente i campi delle tabelle e le relative relazioni.

Nella versione "core" di Moodle esistono già le funzioni web service per gestire utenti, per inserire utenti nei gruppi globali e per iscrivere utenti ai corsi.  I web service inoltre possono essere sviluppati ad hoc espandendo le funzioni "core" con funzioni specifiche per il proprio scenario d'uso.

In questa pagina della documentazione trovi l'elenco delle funzioni web service già disponibili:

Di seguito alcune funzioni che nel tuo caso potrebbero essere utilizzate:

  • core_user_create_users()
  • core_user_update_users()
  • core_cohort_create_cohorts()
  • core_cohort_update_cohorts()
  • core_cohort_add_cohort_members()
  • enrol_manual_enrol_users()
In riposta a Andrea Bicciolo

Re: Tabelle utilizzate dalla funzinone di iscrizione alle cohort

di Silvia Rolando -

Ciao, 

abbiamo modificato il programma come da tuoi suggerimenti utilizzando le funizioni web service, purtroppo ancora gli utenti vengono creati, aggiunti correttamente alla cohort, riescono ad accedere ai corsi in maniera corretta ma la fruizione non viene tracciata.

Ti allego la funzione che aggiunge l'utente alla cohort:


function my_cohort_add_member($cohort_1,$cohort_2, $user_id) {

    $cohort_id_1=$this->get_moodle_cohort_id($cohort_1);

    $cohort_id_2=$this->get_moodle_cohort_id($cohort_2);

    if($cohort_id_1>0 or $cohort_id_2>0){

        $query_ok="SELECT `id` FROM ".DB_NAME_MOODLE.".`mdl_cohort` where id in (".$cohort_id_1.",".$cohort_id_2.")";

        $risultato_ok = mysql_query($query_ok);

        while($row_ok = mysql_fetch_array($risultato_ok)){

             cohort_add_member($row_ok['id'], $user_id);

        }

    $query_ko="SELECT `id` FROM ".DB_NAME_MOODLE.".`mdl_cohort` where id not in (".$cohort_id_1.",".$cohort_id_2.")";

     $risultato_ko = mysql_query($query_ko);

     while($row_ko = mysql_fetch_array($risultato_ko)){

          cohort_remove_member($row_ko['id'], $user_id);

     }

   }

 }


Il tracciamento Moodle, che tu sappia, richiede altre sincronizzazioni dobbiamo utilizzare qulache altra funzione?

Ti ringrazio in anticipo, spero che riuscirai ad illuminarci come in passato.

Ciao

Silvia

In riposta a Silvia Rolando

Re: Tabelle utilizzate dalla funzinone di iscrizione alle cohort

di Andrea Bicciolo -
Immagine Core developers Immagine Plugin developers Immagine Translators
Non sono certo di capire la richiesta perché se usi i web service sia per creare utenti sia per inserirli nei gruppi globali, allora per iscrivere ai corsi gli utenti di un dato gruppo globale è sufficiente usare il metodo di Iscrizione "Sincronizzazione gruppi globali". Se questo è lo scopo, non occorre scrivere codice ad hoc.

Approfondimento sul metodo di iscrizione citato:

In riposta a Andrea Bicciolo

Re: Tabelle utilizzate dalla funzinone di iscrizione alle cohort

di Silvia Rolando -

Ciao, grazie della risposta. 

In effetti il mio problema è che dobbiamo inserire (con un programma PHP) utenti che trovo in un file di testo e contestualmente iscriverli ad una cohort, per l'ultima operazione usiamo la funzione  cohort_add_member($cohort_id, $user_id), fatto questo ci aspettiamo che funzioni tutto che l'utente veda i corsi appartenenti alla cohort e che il pacchetto SCORM associato tracci correttamente.

Ma questo non avviene se aggiungo l'utente alla cohort con la funzione  cohort_add_member($cohort_id, $user_id) l'utente viene iscritto alla cohort, ai corsi ma il tracciamento non avviene.

Nella tua risposta dici che è suffuciente utilizzate il metodo di Iscrizione "Sincronizzazione gruppi globali", con questo vuoi dire che dopo aver utilizzato la funzione cohort_add_member dobbiamo usare un'altra funzione ?

Pensavo che forse per capire cosa non funziona potremmo partire dalla funzione di Moodle che gestisce l'upload degli user, che invece funziona (ovviamente) in modo corretto, magari hai idea del percorso in cui posso trovarla.


User Import

Scusa ma non riusciamo ad uscirne! Ti ringrazio molto della tua gentilezza e disponibilità.

Silvia 



In riposta a Silvia Rolando

Re: Tabelle utilizzate dalla funzinone di iscrizione alle cohort

di Sara Cenni -

Ciao Silvia,

se posso aggiungere anche la mia opinione non ho ben capito se avete seguito il consiglio di Andrea di usare i webservice di Moodle che sono MOLTO MOLTO comodi. Questo è l'elenco https://docs.moodle.org/dev/Web_service_API_functions

Ad esempio c'è la funzione core_cohort_add_cohort_members() che credo che sarebbe perfetta per il tuo caso. In questo modo secondo me potreste semplificarvi molto la vita sorridente 

Ciao

Sara

In riposta a Sara Cenni

Re: Tabelle utilizzate dalla funzinone di iscrizione alle cohort

di Andrea Bicciolo -
Immagine Core developers Immagine Plugin developers Immagine Translators

In effetti l'osservazione di Sara è pertinente, il mio suggerimento era volto proprio all'uso dei web service ed alle relative funzioni per la gestione degli utenti e dei gruppi globali.

Per quanto riguarda il metodo di iscrizione "Sincronizzazione gruppi globali", nel link alla documentazione proposto nel mio intervento precedente è reperibile la descrizione del metodo e le istruzioni per utilizzarlo con i gruppi globali affinché le iscrizioni vengano sincronizzate in base all'appartenenza al gruppo globale stesso.

In riposta a Andrea Bicciolo

Re: Tabelle utilizzate dalla funzinone di iscrizione alle cohort

di Silvia Rolando -

Vi ringrazio in effetti non avevamo utilizzato la funzione core_cohort_add_cohort_members() suggerita da Sara.

Grazie come sempre del supporto, ciao.

Silvia