Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Número de respuestas: 34Me han dicho que atraves de la interfaz no se puede hacer.
Alguien me puede ayudar o orientarme a traves del codigo?
Soy programador y me lo han pedido en eltrabajo.
Un abrazo compañeros y gracias por la ayuda.
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Hay una función llamada get_user_courses_bycap() que te da todos los cursos donde está matriculado el usuario.
A partir de eso, puedes para cada categoría obtener el contexto del curso y comprobar si en el path del contexto de la categoría está el contexto del curso.
Al menos esa es la forma más rápida que se me ocurre, ya que el principal problema es cuando tienes un escenario con subcategorías. Es decir si un usuario está matriculado en un curso, tiene un rol en ese contexto pero no en la categoría a la que pertenece el curso, por tanto no hay forma de comprobar, o al menos yo no la he encontrado, si existe relación directa entre usuario y categoría.
Por eso creo que la mejor solución es buscar el id del contexto de la categoría en el path del contexto del curso. Si hay coincidencia, significa que el usuario está matriculado en un curso incluido en esa categoría o subcategoría.
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Un saludo y de verdad que muchas, muchas gracias.
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Donde tengo el parametro $accessdata ?
Y como especifico el $cap ?
Para que sirve $doanything?
Un saludo xavi y ya siento ser tan capullo en Moodle.
UN SALUDO COMPADRE.
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
if (isset($USER->access)) {
$accessinfo = $USER->access;
}else {
$accessinfo = get_user_access_sitewide($USER->id);
}
Los parámetros más habituales que he visto en otros sitios de Moodle para dicha función son:
get_user_courses_bycap($USER->id, 'moodle/course:view', $accessinfo, true);
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Cada curso esta en una categoria(categoryPath) y cada curso pertenece a un contexto que tiene un id y un path de contexto.
Hasta ahi lo he observado ademas tengo ya cargados los cursos y lo estoy debugeando....
Pero por favor compañero...podrias explicarme lo de.....la validacion que me explicabas para saber la categoria.
Muchas gracias amigo y muuuuuuchisimas gracias por la paciencia.
UN ABRAZO.
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
$cursos=get_user_courses_bycap($USER->id, 'moodle/course:view', $accessinfo, true);
Este son lo valores de $cursos:
$cursos Array [3]
0 Object of: stdClass
id (string:1) 4
sortorder (string:6) 213661
shortname (string:27) 49 Promoción Carrera Fiscal
idnumber (string:0)
categorypath (string:2) /2
context Object of: stdClass
id (string:2) 39
path (string:8) /1/38/39
depth (string:1) 3
contextlevel (string:2) 50
instanceid (string:1) 4
1 Object of: stdClass
2 Object of: stdClass
Podrias aclararme que hacer con los valores.
MUCHAS GRACIAS Xavi. UN ABRAZO Y MIL GRACIAS.
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Lo siento por darte asi la informacion pero estoy desesperado..ojala tengas paciencia.
UN SALUDO Y MIL GRACIAS.
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Obtener contexto de categoría
hay_cursos = false;
Obtenemos todos los cursos del usuario actual
Para cada curso
>>>>>obtenemos el contexto del curso
>>>>>Si el contexto está presente en el path de la categoría
>>>>>>>>>>>>hay_cursos = true
Si hay_cursos
>>>>>>>>mostramos categoría
sino
>>>>>>>>no hacemos nada
El contexto del curso se obtiene mediante get_context_instance(CONTEXT_COURSE,$curso->id) y esto te devolverá un objeto tipo contexto.
Se me olvidó commentarte que para esta solución es necesario obtener también el contexto de la categoría, ya que a través de esto obtienes el ansiado path. Para esto puedes usar get_context_instance(CONTEXT_COURSECAT,$category->id). El objeto category ya te viene en la misma función print_whole_category_list()
Para saber si el contexto está en el path de la categoría, una opción es usar alguna de las funciones de búsqueda de patrones en cadenas de caracteres, ya que al fin y al cabo, el path no es más que una cadena de texto del tipo xx/xxxx/xx/xxx. Por tanto, puedes usar algo como esto strstr($cm->path,$cm_cat->id) donde cm es el contexto del curso y cm_cat es el contexto de la categoría.
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
$cursos Array [3]
0 Object of: stdClass
id (string:1) 4
sortorder (string:6) 213661
shortname (string:27) 49 Promoción Carrera Fiscal
idnumber (string:0)
categorypath (string:2) /2
context Object of: stdClass
id (string:2) 39
path (string:8) /1/38/39
depth (string:1) 3
contextlevel (string:2) 50
instanceid (string:1) 4
1 Object of: stdClass
2 Object of: stdClass
Joder Xavi...estas demostrando mucho como persona tio.
UN ABRAZO Y TE COMENTO QUE SIGO AQUI AL PIE DEL CAÑON
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Al obtener los cursos mediante get_user_courses_bycap() lo que te devuelve para cada curso son una serie de datos del mismo y un objeto tipo contexto con sus atributos.
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
GRACIAS.
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
http://moodle.org/mod/forum/discuss.php?d=98506
pero no sé si esta solución solo muestra cursos, o categorías y cursos...
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
UN ABRAZO
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Fernando, ayudame como lograste lo de mostrar en my moodle los cursos y no las actividades pendientes de cada uno... mi plataforma es v. 1.9.
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
santiago, yo manejo moodle 2.1.3 y la verdad no estoy seguro que tanto cambie el código, pero pues espero que te sirva de ayuda:
yo encontré una función en el directorio moodle/course/lib.php que tiene el nombre de "print_overview()" aquí encuentras como busca cada curso que pertenece al usuario con la sesión iniciada y lo imprime, dentro de esta función encontraras lo siguiente:
<<start code>>
if (array_key_exists($course->id, $htmlarray)) {
foreach ($htmlarray[$course->id] as $modname => $html) {
echo $html;
}
}
<<end code>>
Esto es lo que imprime todo lo que no es el nombre del curso, solo tendrías que documentarear la parte donde dice "echo $html;"
Saludos.
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Gracias Juan, el día sábado encontré esa misma solución que me indicas, salvo que yo documenté todo lo siguiente:
if (array_key_exists($course->id, $htmlarray)) {
foreach ($htmlarray[$course->id] as $modname => $html) {
echo $html;
}
}
También funcionó.
Muchas gracias nuevamente.
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Tal y como dice Fernando, desde la función print_my_moodle() que está en moodle/course/lib.php
Sería bastante sencillo hacerlo.
De hecho en esta función se recuperan los "objetos" curso en los que el alumno está matriculado. En estos objetos se devuelve el campo "category" que es el id de la categoria a la que pertenece el curso en cuestión.
Concretamente en las líneas:
if (!empty($courses)) {
echo '<ul class="unlist">';
foreach ($courses as $course) {
if ($course->id == SITEID) {
continue;
}
echo '<li>';
//Con $course->category recuperas el id de la categoria
//Aquí se imprime el curso.
//Esto lo cambiarías por la función que imprima el nombre de la categoria de ese curso(por ejemplo). Puedes hacer una función print_cat($course->category) que lo haga.
print_course($course);
echo "</li>\n";
}
echo "</ul>\n";
}
Creo que de esta forma sería mucho más sencillo.
Hasta pronto,
Salu2
J. Raul (juagarc4)
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
He estado pensando en la posibilidad de modificar 'Overview Report' pero no se como se hace.
Alguien me puede ayudar???
Esto me urge.!! Gracias
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Saludos a todos.,
pues le sigo dando vueltas y vueltas modificando el codigo de lib.php para que en la portada del moodle una vez iniciada una sesion ya sea de un profesor o alumno se les muestre la categoria a la cual los asigne solamente no todas ha y por supuesto los cursos de la misma pero nada de nada que lo logro; y no me interesa colocar esa opcion de my moodle, si alguien lo ha logrado mediante codigo se lo agradeceria.
La cuestion puede ser que este entre la linea 1748 a la 1790, la cuestion estaría en arreglar esa parte del codigo. lo que estaba colocando xavi con respecto al pseudocodigo suena con mucha lógica, .. en fin espero que me ayuden ...
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
> como administrador
>editar cursos
>creo una categoria y agrego cursos
luego en
>portada
>cambio para que se vean las categorias en la portada
en las dos opciones que hay.
podria explicar con un ejemplo ... intente como explicas pero no me resulta.cual esel codigo que hay que cambiar???
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Recomiendo hacer una copia de dicho archivo antes de aplicar el parche, por lo que pudiera pasar.
Para que funcione, la portada debe estar en modo lista combo.
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
dices que puede dañar el moodle??
y de donde sacastes el parche?
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
El parche es de mi cosecha. Lo he aplicado más cuatro plataformas con versiones distintas y funcionan perfectamente.
El parche en sí no es muy complejo. Como dije más arriba, simplemente obtiene el rol del usuario actual, y si es estudiante, busca en cada categoría si tienes cursos donde estés matriculado. En caso afirmativo, muestra la categoría. Si eres admin, te muestra todo.
Tiene algunas pegas, como mostrar las categorías aunque el curso esté oculto, por ejemplo, pero eso lo dejo para una segunda versión.
Una cosa que se me olvidó mencionar. Este parche deshabilita los enlaces de las categorías desde portada. Esto quiere decir que si un alumno pulsa en la categoría desde portada, no pasa nada, ya que no está creada como enlace sino como texto plano.
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Hola,
Tengo instalada la versión 2.1 del moodle, podrían actualizar el parche para esta versión? Creo que es una herramienta de gran utilidad que debería ir ya integrada con el moodle!
Gracias por adelantado!
Cristina
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Como se aplica el parche en linux
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Aqui aparece que hay que utilizar el archivo moodle/course/lib.php
pero en ese archivo no aparecen las funciones que dice el foro Enhttps://moodle.org/mod/forum/discuss.php?d=139965
Las funciones aparecen en el archivo /opt/lampp/htdocs/aula/lib/deprecatedlib.php.
Pero cuando agrego instrucciones echo dentro de las funciones no muestra la salida del echo.
Siendo que deberían ejecutarse las funciones.
Si coloco código echo fuera de las funciones se imprime el contenido del echo en la página
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
la versión de moodle que utilizo es la 2.7.2
Re: Mostrar solo las categorias que contengan cursos donde el usuario esta inscrito
Hola,
Yo tengo el mismo problema. Estoy trabajando con una versión 2.7 por lo que al intentar aplicar tu parche me da error.
Necestaría mostrar sólo las categorías de los cursos en en los que el usuario está matriculado, porque ahora mismo puede verlas todas.
Un saludo