Añadir nueva columna en participantes

Añadir nueva columna en participantes

de Juan Linares -
Número de respuestas: 5
Hola, me gustaría añadir una nueva columna en la tabla de participantes con el rol que tiene cada usuario. ¿Alguién me puede hechar una mano? Llevo días intentandolo pero no consigo nada.

Gracias de antemano.
Adjunto Dibujo_2.JPG
Promedio de valoraciones: -
En respuesta a Juan Linares

Re: Añadir nueva columna en participantes

de Raul Garcia Canet -
Hola Juan,

No se cuál es el motivo para hacer esto, ya que en el listado de participantes puedes filtrar los resultados por Rol, eligiendo del listado deplegable el "Rol" que quieres ver.
De toda formas, supongo que tendrás tus razones gran sonrisa

Bueno, vamos allá:

en el fichero :

var/www/moodle/user/index.php

Busca el siguiente código:

/// Define a table showing a list of users in the current role selection

$tablecolumns = array('userpic', 'fullname');
$tableheaders = array(get_string('userpic'), get_string('fullname'));

Y añade estas dos líneas a continuación:
$tablecolumns[] ='role';
$tableheaders[] = get_string('role');

Estas líneas en mi versión de moodle (1.9.3+) están sobre los números : 297 -299
Esto hará que se muestre el encabezado de la columna con la etiqueta "Rol"

Después, busca el siguiente código (hacia las líneas: 724-726, en mi versión):

$data = array (print_user_picture($user, $course->id, $user->picture, false, true, $piclink), $profilelink . $hidden);

Y añade lo siguiente a continuación

//Obtaining context of course and adding a columns with role for each user
$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
if ($rolestring = get_user_roles_in_context($user->id, $coursecontext)) {
$data[]= $rolestring;
}

//Este es el códgio que sigue que ya lo tendrás (te lo he puesto para que te sitúes).
if (!isset($hiddenfields['city'])) {
$data[] = $user->city;
}

Sólo un par de aclaraciones:
1.- En este código no se comprueba si el usuario que está accediendo es alumno o profesor, de forma que TODOS los que consulten la lista, verán el rol de todos.(esta opción es fácil de implementar. Sólo hace falta un "if " antes de cada trozo de código añadido, que compruebe el rol del usuario actual y listos)

2.- Tampoco he añadido código para que se pueda ocultar esta columna en caso de desearse, así que siempre se mostrará.(No me he parado a ver como se haría pero supongo que no será complicado.)

Espero que te sirva, si necesitas alguna cosa más y está en mi mano...por mi, encantado de ayudarte.
Hasta pronto,
Salu2
J. Raúl (juagarc4) Bsonrisa
En respuesta a Raul Garcia Canet

Re: Añadir nueva columna en participantes

de Juan Linares -
Hola Juan Raul,

Quería preguntarte si es posible añadir otra columna con un campo que cree en el formulario de datos personales. Al menos una pista.

Gracias
En respuesta a Juan Linares

Re: Añadir nueva columna en participantes

de Raul Garcia Canet -
Hola Juan,

Bueno, pues después de algunas pruebas, lo he conseguido:
Enprimer lugar, hay que destacar que las tablas que intervienen en esta consulta son:

mdl_user_info_field (nombre, nombre_corto (shortname), etc...)
mdl_user_info_data (id usuario oasicado, datos del campo, etc..)
mdl_user_info_category (categoria a la que pertenece el campo. Por defecto: Otros campos)

Vamos allá:
En el fichero :

var/www/moodle/user/index.php


1.- Justo debajo de las líneas que añadimos anteriormente:

$tablecolumns[] ='role';
$tableheaders[] = get_string('role');

Añade las siguientes (para construir los encabezados de la tabla):

$tablecolumns[]='nombre corto de la columna de la tabla';
$tableheaders[]='Texto que quieres que aparezca en la tabla';

2.- Recuperamos los datos del alumno. Para ello nos aprovechamos de la función:
profile_user_record, que recupera los campos 'extra' del perfil de usuario. Requiere como entrada un 'id' de usuario.

Justo debajo de las líneas que añadimos anteriormente:

//Obtaining context of course and adding a columns with role for each user
$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
if ($rolestring = get_user_roles_in_context($user->id, $coursecontext)) {
$data[]= $rolestring;
}

Escribimos lo siguiente:

//La libreria que contiene nuestra función
require_once($CFG->dirroot.'/user/profile/lib.php');

//Recuperamos los campos
$u=profile_user_record($user->id);

/Añadimos al vector de datos, los datos del campo que queremos ver.
$data[]=$u->nombre_corto_del_campo;

NOTA: si quieres ver los nombres de los campos (si hubiera más de uso) extra de cada usuario que han sido recuprados, puedes hacer un: print_object($u); después de hacer $u=profile_user_record...

//Este es el código que sigue que ya lo tendrás (te lo he puesto para que te sitúes).
if (!isset($hiddenfields['city'])) {
$data[] = $user->city;
}

Espero que esto te sirva,
Hasta pronto,
Salu2
J. Raul (juagarc4) estupendo