Hola, no se si ya habrás resuelto el inconveniente pero yo estoy pasando por algo similar. La universidad tiene directores de escuela y estos desean tener acceso a todos los cursos de su escuela para supervisar el avance de sus docentes.
La solución seria matricularlos en todos los cursos de su escuela lo que seria una perdida de tiempo. Como segunda opción se le puede poner como gestor de la categoría principal de la escuela y con esto el usuario ya podra acceder a todos los cursos de
esa categoria y las subcategorias que tenga. Sin embargo, como las encuentra ? tendria que ir buscando curso por curso como dijiste.
Lo que pude hacer es lo siguiente. Crear un curso formato de actividad única y dentro use un script que me lista todos los cursos de las categorías en las que el usuario es gestor.
Con este primer script obtengo las categorías donde el usuario es gestor, únicamente las categorías padre, es decir, puede que pase que por error se ponga a un usuario como gestor en una subcategoria habiéndolo ya puesto como gestor en la categoría padre
de esta.
//OBTENER CATEGORIAS DONDE SE ES GESTOR
$userid = $USER->id;
$array_gestor = array();
function get_categories_gestor($id = 0){
global $DB, $userid, $array_gestor;
$categories = $DB->get_records('course_categories', array('parent'=>$id));
if($categories != null){
foreach($categories as $item){
$categorycontext = context_coursecat::instance($item->id);
$gestor = $DB->get_record('role_assignments', array('contextid'=>$categorycontext->id, 'userid'=>$userid));
if(!empty($gestor)){
array_push($array_gestor, $item->id);
}else{
$childrens = $DB->get_records('course_categories', array('parent'=>$item->id));
if(!empty($childrens)){
get_categories_gestor($item->id);
}
}
}
}
}
Este otro script obtiene todos los cursos en base a las categorías padre de las cuales es gestor el usuario.
//OBTENER CURSOS
function category_course_list($id){
global $DB, $array_courses;
$cate = $DB->get_record_sql('SELECT * FROM moodle.mdl_course_categories WHERE id = ?', array($id));
$childrens = $DB->get_records_sql('SELECT * FROM moodle.mdl_course_categories WHERE parent = ?', array($cate->id));
$courses = $DB->get_records('course', array('category'=>$cate->id));
foreach($courses as $course){
array_push($array_courses, $course);
}
if(!empty($childrens)){
foreach($childrens as $children){
category_course_list($children->id);
}
}
}
Para ejecutarlo, únicamente.
$array_courses = array();
get_categories_gestor();
foreach($array_gestor as $categoria){
category_course_list($categoria);
}
print_object($array_courses);
Ahora, ese código obtendrá el listado de cursos, si deseas obtener los docentes del curso o ordenarlos por categorías ya tendrías que hacer unas pequeñas variaciones.
Espero te sirva de algo.