Notificaciones

Notificaciones

de Fabian Muñoz -
Número de respuestas: 13

Hola, soy nuevo en el foro…

Quería saber si existe algún modulo que pueda notificar cualquier actividad dentro de un curso y mostrarlo en la pagina principal (donde sale la lista de los cursos), ya sea recursos, actividades, comentarios en los foros, etc. Es mas bien para no estar revisando curso por curso si hay algún material nuevo que envío el profesor.

Un ejemplo practico, si un alumno tiene 10 ramos, no seria muy lógico, que revise asignatura por asignatura para saber si el profesor envío actividades o recursos en un determinado curso.

Muchas gracias



Fabián Muñoz



PD: lo ideal seria como lo puse en la foto...

o alguna idea de como desarrollarlo (tengo conocimientos de programación)(¿crear un bloque?)(¿modificar alguno ya echo?)

Adjunto Sin_t_tulo_1.jpg
Promedio de valoraciones: -
En respuesta a Fabian Muñoz

Re: Notificaciones

de Xavier Paz -
Creo que no existe nada parecido, pero tal vez puedas usar el bloque de Novedades, no recuerdo si se llama así exactamente, donde se refleja cualquier actividad nueva que se haya producido en los cursos desde la última vez que el usuario entró. Lo que no se es si muestra todas las novedades o solo aquellas de los cursos en los que estás matriculado.

De todas formas, una modificación de ese estilo en la portada no sería complicada. No depende de como esté configurada (lista de cursos, combo, categorías, etc..) y por lo que he visto solo tendrías que modificar una función. Más concretamente, la que te interesaría es print_course(), línea 1869 que es donde se conforma el link al curso a partir del nombre. Está en course/lib.php.

La idea sería que en el momento de conformar el enlace a cada curso, compruebe si ha habido actividad de algún tipo relacionada con los recursos del curso. Esto es una simple consulta al log de Moodle, ni siquiera necesitas que te devuelva datos solo saber si hay algún registro. En caso de que exista, adjuntas la imagen NOVEDADES al enlace del nombre del curso. Si no, pues nada.
En respuesta a Xavier Paz

Re: Notificaciones

de Fabian Muñoz -

Muchas gracias.

Tal como tu me dijiste, hice una consulta al log según la ID del curso, la cual me muestra si hay alguna actividad dentro del curso o no, si retorna “true” imprimo una imagen en la portada…

Ahora mi pregunta es como podría borrar esa imagen después de que el alumno ingresó al curso

(si el usuario ingresó al curso, entonces elimino la imagen)



Este es el codigo que agregue:


if (get_record_select("log", 'course='.$course->id)){
$mensaje = " NUEVO";
}
else
{
echo "";
}




y al momento de imprimir


echo '<div class="name"><a title="'.get_string('entercourse').'"'.
$linkcss.' href="'.$CFG->wwwroot.'/course/view.php?id='.$course->id.'">'.
highlight($highlightterms, format_string($course->fullname)).$mensaje.'</a></div>';


// imprimo el curso + la variable $mensaje

En respuesta a Fabian Muñoz

Re: Notificaciones

de Xavier Paz -
Puedes volver a mirar en el log si hay algún registro del alumno relacionado con el curso desde que entró en la plataforma (campo lastlogin en la tabla de usuario). Usa el id de usuario y el id del curso para realizar la búsqueda. Si devuelve algún valor, no muestres la imagen.

Por tanto tienes que realizar dos búsquedas por curso. Una para ver si hay actividad y otra para comprobar si el usuario ya ha estado en el curso. El planteamiento es básicamente el mismo.
En respuesta a Xavier Paz

Re: Notificaciones

de Fabian Muñoz -
Gracias por tu tiempo

me funciono todo bien

saludos

risa
En respuesta a Fabian Muñoz

Re: Notificaciones

de Xavier Paz -
Me alegro. Solo una cosa más ¿podrías publicar el código de la modificación? A lo mejor se puede sugerir que la incluyan en la versión oficial de Moodle.
En respuesta a Xavier Paz

Re: Notificaciones

de Fabian Muñoz -
Bueno a pesar de que lo programe sin el estandar que utiliza moodle (sin get_record_select, etc)

aqui te dejo como quedo la funcion print_course() en course/lib.php

function print_course($course, $highlightterms = '') {

global $CFG, $USER;

if (isset($course->context)) {
$context = $course->context;
} else {
$context = get_context_instance(CONTEXT_COURSE, $course->id);
}


// MI CODIGO



$rs = mysql_query("SELECT * FROM mdl_log WHERE course=".$course->id." AND action LIKE '%add%' order by id desc limit 1 "); // obtengo la ultima fecha de cuando se agrego algun recurso
while($rs2 = mysql_fetch_array($rs))
{
$fechaMaterial = $rs2[time]."<br>";
}



$rs3 = mysql_query("SELECT * FROM mdl_log WHERE userid=".$USER->id." AND action like '$view%'"." AND course=".$course->id." order by id desc limit 1"); // obtengo la fecha del ultimo acceso del usuario al curso
while($rs4 = mysql_fetch_array($rs3))
{
$fechaVista = $rs4[time];
}

if ($fechaMaterial > $fechaVista){ // comparo si la fecha de acceso es menor a la fecha que se agrego el recurso
$mensaje = " <img src=\"{$CFG->pixpath}/bg/news.png\" title=\"".get_string('userhashiddenassignments', 'role')."\" alt=\"".get_string('hiddenassign')."\" class=\"hide-show-image\"/>";
} // si el alumno no ha ingresado al curso, entonces muestro la imagen (nuevo)
else
{
echo "";
}

//


$linkcss = $course->visible ? '' : ' class="dimmed" ';

echo '<div class="coursebox clearfix">';
echo '<div class="info">';
echo '<div class="name"><a title="'.get_string('entercourse').'"'.
$linkcss.' href="'.$CFG->wwwroot.'/course/view.php?id='.$course->id.'">'.
highlight($highlightterms, format_string($course->fullname)).$mensaje.'</a></div>';


/// first find all roles that are supposed to be displayed

if (!empty($CFG->coursemanager)) {
$managerroles = split(',', $CFG->coursemanager);
$canseehidden = has_capability('moodle/role:viewhiddenassigns', $context);
$namesarray = array();
if (isset($course->managers)) {
if (count($course->managers)) {
$rusers = $course->managers;
$canviewfullnames = has_capability('moodle/site:viewfullnames', $context);

/// Rename some of the role names if needed
if (isset($context)) {
$aliasnames = get_records('role_names', 'contextid', $context->id,'','roleid,contextid,name');
}

// keep a note of users displayed to eliminate duplicates
$usersshown = array();
foreach ($rusers as $ra) {

// if we've already displayed user don't again
if (in_array($ra->user->id,$usersshown)) {
continue;
}
$usersshown[] = $ra->user->id;

if ($ra->hidden == 0 || $canseehidden) {
$fullname = fullname($ra->user, $canviewfullnames);
if ($ra->hidden == 1) {
$status = " <img src=\"{$CFG->pixpath}/t/show.gif\" title=\"".get_string('userhashiddenassignments', 'role')."\" alt=\"".get_string('hiddenassign')."\" class=\"hide-show-image\"/>";
} else {
$status = '';
}

if (isset($aliasnames[$ra->roleid])) {
$ra->rolename = $aliasnames[$ra->roleid]->name;
}

$namesarray[] = format_string($ra->rolename)
. ': <a href="'.$CFG->wwwroot.'/user/view.php?id='.$ra->user->id.'&amp;course='.SITEID.'">'
. $fullname . '</a>' . $status;
}
}
}
} else {
$rusers = get_role_users($managerroles, $context,
true, '', 'r.sortorder ASC, u.lastname ASC', $canseehidden);
if (is_array($rusers) && count($rusers)) {
$canviewfullnames = has_capability('moodle/site:viewfullnames', $context);

/// Rename some of the role names if needed
if (isset($context)) {
$aliasnames = get_records('role_names', 'contextid', $context->id,'','roleid,contextid,name');
}

foreach ($rusers as $teacher) {
$fullname = fullname($teacher, $canviewfullnames);

/// Apply role names
if (isset($aliasnames[$teacher->roleid])) {
$teacher->rolename = $aliasnames[$teacher->roleid]->name;
}

$namesarray[] = format_string($teacher->rolename)
. ': <a href="'.$CFG->wwwroot.'/user/view.php?id='.$teacher->id.'&amp;course='.SITEID.'">'
. $fullname . '</a>';
}
}
}

if (!empty($namesarray)) {
echo "<ul class=\"teachers\">\n<li>";
echo implode('</li><li>', $namesarray);
echo "</li></ul>";
}
}

require_once("$CFG->dirroot/enrol/enrol.class.php");
$enrol = enrolment_factory::factory($course->enrol);
echo $enrol->get_access_icons($course);

echo '</div><div class="summary">';
$options = NULL;
$options->noclean = true;
$options->para = false;
echo highlight($highlightterms, format_text($course->summary, FORMAT_MOODLE, $options, $course->id));
echo '</div>';
echo '</div>';
}
Adjunto moodle.jpg
En respuesta a Xavier Paz

Re: Notificaciones

de Alexander Raventos Liranza -
bueno uno de los objetivos de mi tesis de grado es publicar el codigo y tratar de que lo acepten, no te preocupes que como sea yo publico el codigo
En respuesta a Alexander Raventos Liranza

Re: Notificaciones

de Xavier Paz -
Como decía Fabian que no había seguido el estandar de Moodle, ahí teneís la misma modificación pero usando los métodos "oficiales". La he probado contra 1.9.4 y funciona. Creo que voy a proponerla al equipo de desarrollo de Moodle. Ya os contaré como ha ido la cosa.

    //MOD
   
    $dateLatestMat = 0;
   
$where_clause = "course='{$course->id} AND action LIKE '%add%' ORDER BY id DESC";
if ($result = get_record_select('log',$where_clause,'time')){
$dateNewMaterial = $result->time;
}

$dateLatestView = 0;

$where_clause = "userid= {$USER->id} AND action like 'view%' AND course= {$course->id} ORDER BY id DESC";
if ($result = get_record_select('log',$where_clause,'time')){
$dateNewMaterial = $result->time;
}

$newsicon = "";
//we compare the dates, if the access date is previous to the
if ($dateLatestMat > $dateLatestView){
// comparo si la fecha de acceso es menor a la fecha que se agrego el recurso
$newsicon = " <img src=\"{$CFG->pixpath}/i/new.gif\" title=\"".get_string('userhashiddenassignments', 'role')."\" alt=\"".get_string('hiddenassign')."\" class=\"hide-show-image\"/>";
}

//END_MOD

    $linkcss = $course->visible ? '' : ' class="dimmed" ';

    echo '<div class="coursebox clearfix">';
    echo '<div class="info">';
    echo '<div class="name"><a title="'.get_string('entercourse').'"'.
        $linkcss.' href="'.$CFG->wwwroot.'/course/view.php?id='.$course->id.'">'.
        highlight($highlightterms, format_string($course->fullname)).$newsicon.'</a></div>';
Adjunto PrtScr_capture.jpg
En respuesta a Xavier Paz

Re: Notificaciones

de Wenceslao Fernández -
Me parece una funcionalidad muy interesante. Así que he votado para que se incluya en el código de Moodle. Espero que se anime más gente a hacerlo.

Salu2

W
En respuesta a Wenceslao Fernández

Re: Notificaciones

de Fabian Muñoz -
A mi me pareció una funcion interesante por eso me puse a investigar como programarla, pensando en que si un alumno tiene 10 cursos, evitar que este accediendo curso por curso para verificar si existe algun recurso nuevo.

Espero que les sirva y que la consideren como funcion primitiva en moodle

Saludos y gracias por la ayuda =)


En respuesta a Fabian Muñoz

Re: Notificaciones

de Xavier Paz -
Desde mi punto de vista, lo mejor es que con muy pocos cambios, apenas unas líneas extra en una única función de un solo archivo, te ofrece una funcionalidad muy útil, y además no merma en exceso el rendimiento.