Sincronizare cohorte la cursuri - Exemplu seria 3
creez fisierul c2cs3.csv cohort 2 courses seria 3, cu continutul
Am modificat scriptul pentru a seta automat rolul utilizatorilor ca Student în momentul în care cohorta este sincronizată cu un curs. Acum include o verificare a rolului și setează roleid
la rolul „student” (roleid = 5
în mod implicit în Moodle, dar verifică dacă este corect în baza ta de date).
Modificări aduse:
- Adăugată o coloană nouă în CSV:
- Poți acum adăuga o coloană „role” în fișierul CSV pentru a specifica rolul (exemplu:
student
). - Dacă nu specifici rolul, scriptul va folosi implicit „student”.
- Poți acum adăuga o coloană „role” în fișierul CSV pentru a specifica rolul (exemplu:
- Setare automată a rolului pentru metoda „Cohort sync”
- Scriptul verifică și setează rolul corect pentru cohorta sincronizată.
Modificarea scriptului PHP
Am adăugat suport pentru rol și verificarea roleid
în baza de date.
<?php
// Script pentru sincronizarea cohortelor cu cursurile in Moodle și setarea rolului Student
define('CLI_SCRIPT', true);
require_once('/home/moodle/public_html/moodle/config.php');
require_once($CFG->libdir . '/clilib.php');
require_once($CFG->dirroot . '/enrol/locallib.php');
// Preluare parametri din linia de comandă
list($options, $unrecognized) = cli_get_params([
'help' => false,
'file' => null
], [
'h' => 'help',
'f' => 'file'
]);
if ($options['help'] || empty($options['file'])) {
echo "\nScript pentru sincronizarea cohortelor cu cursurile și setarea rolului.\n";
echo "\nUtilizare:\n";
echo "php sync_cohorts.php --file=/cale/catre/cohorts.csv\n";
echo "\nParametri:\n";
echo " --file, -f Calea către fișierul CSV care conține cohortele, cursurile și rolul\n";
echo " --help, -h Afișează acest mesaj de ajutor\n";
exit(0);
}
// Verificare existență fișier CSV
$csvfile = $options['file'];
if (!file_exists($csvfile)) {
cli_error("Fișierul CSV nu a fost găsit: {$csvfile}");
}
// Citire fișier CSV
if (($handle = fopen($csvfile, 'r')) !== false) {
$header = fgetcsv($handle);
if ($header === false || count($header) < 2) {
cli_error("Fișierul CSV trebuie să conțină cel puțin două coloane: cohortid și courseid.");
}
$cohort_col = array_search('cohortid', $header);
$course_col = array_search('courseid', $header);
$role_col = array_search('role', $header);
if ($cohort_col === false || $course_col === false) {
cli_error("Fișierul CSV trebuie să conțină coloanele 'cohortid' și 'courseid'.");
}
while (($data = fgetcsv($handle)) !== false) {
$cohortid = trim($data[$cohort_col]);
$courseid = trim($data[$course_col]);
$rolename = ($role_col !== false) ? trim($data[$role_col]) : 'student'; // Implicit student
// Verificare existență cohortă
$cohort = $DB->get_record('cohort', ['idnumber' => $cohortid], '*', IGNORE_MISSING);
if (!$cohort) {
cli_writeln("Cohorta cu ID-ul '{$cohortid}' nu a fost găsită.");
continue;
}
// Verificare existență curs
if (is_numeric($courseid)) {
$course = $DB->get_record('course', ['id' => $courseid], '*', IGNORE_MISSING);
} else {
$course = $DB->get_record('course', ['shortname' => $courseid], '*', IGNORE_MISSING);
}
if (!$course) {
cli_writeln("Cursul cu ID-ul sau numele scurt '{$courseid}' nu a fost găsit.");
continue;
}
// Obține ID-ul rolului specificat
$role = $DB->get_record('role', ['shortname' => $rolename], '*', IGNORE_MISSING);
if (!$role) {
cli_writeln("Rolul '{$rolename}' nu a fost găsit. Se utilizează rolul implicit 'student'.");
$role = $DB->get_record('role', ['shortname' => 'student'], '*', IGNORE_MISSING);
}
if (!$role) {
cli_error("Rolul 'student' nu a fost găsit în Moodle. Verifică lista de roluri disponibile.");
}
$roleid = $role->id;
// Adaugă metoda de înscriere „Cohort Sync” dacă nu există
$enrol = enrol_get_plugin('cohort');
$instances = enrol_get_instances($course->id, true);
$instance_exists = false;
foreach ($instances as $instance) {
if ($instance->enrol === 'cohort' && $instance->customint1 == $cohort->id) {
// Actualizare rol dacă există deja
if ($instance->roleid != $roleid) {
$DB->set_field('enrol', 'roleid', $roleid, ['id' => $instance->id]);
cli_writeln("Rolul pentru cohorta '{$cohortid}' în cursul '{$courseid}' a fost actualizat la '{$rolename}'.");
}
$instance_exists = true;
break;
}
}
if (!$instance_exists) {
$instanceid = $enrol->add_instance($course, [
'customint1' => $cohort->id,
'roleid' => $roleid // Setează rolul selectat
]);
cli_writeln("Cohorta '{$cohortid}' a fost sincronizată cu cursul '{$courseid}' și rolul '{$rolename}' (ID: {$roleid}).");
}
}
fclose($handle);
} else {
cli_error("Nu s-a putut deschide fișierul CSV: {$csvfile}");
}
cli_writeln("Sincronizarea cohortelor a fost finalizată.");
Cum să folosești noul script
- Creează un fișier CSV cu formatul:
Niciun comentariu:
Trimiteți un comentariu