Obtener los identificadores de los posts no leidos en los foros

Obtener los identificadores de los posts no leidos en los foros

de David Rodríguez Aguiar -
Número de respuestas: 2

Hola a to2:

   Buscando en Moodle he encontrado una función que devuelve un array con el número de posts no leidos para cada discusión de un foro determinado. Esta función se muestra a continuación:

function forum_count_unread_replies($forum="0") { 

    global $CFG, $USER;

    if ($forum) {
        $forumselect = ' AND d.forum = ''.$forum.''';
    }

    /// First, get a count of all replies to each discussion [of the forum].
    if ($disc_replies = get_records_sql('SELECT p.discussion, (count(*)) as replies '
                                   .'   FROM '.$CFG->prefix.'forum_posts p, '
                                   .'        '.$CFG->prefix.'forum_discussions d '
                                   .'   WHERE p.parent > 0 '
                                   .'       AND p.discussion = d.id '
                                   .$forumselect
                                   .'   GROUP BY p.discussion')) {

        /// Then, go through the logs for each discussion that the user had read, and recount the replies
        /// since that access.
        foreach ($disc_replies as $reply) {
            if ($read_disc = get_record_sql('SELECT l.info AS discussion, MAX(l.time) AS lastread '
                                     .' FROM '.$CFG->prefix.'log l'
                                     .' WHERE l.module = 'forum''
                                     .'     AND l.action =  'view discussion''
                                     .'     AND l.userid = '.$USER->id
                                     .'     AND l.info = ''.$reply->discussion.'''
                                     .' GROUP BY discussion')) {

                $disc_reply = get_record_sql('SELECT p.discussion, (count(*)) as replies '
                                           .'   FROM '.$CFG->prefix.'forum_posts p '
                                           .'   WHERE p.discussion = '.$reply->discussion
                                           .'       AND p.modified > '.$read_disc->lastread
                                           .'   GROUP BY p.discussion');

                $disc_replies[$reply->discussion]->replies = (int)$disc_reply->replies;
            }
        }
    }

 return ($disc_replies);
}

   Pues bien, me gustaría que si a alguién se le ocurre como obtener los identificadores de esos posts no leídos, en lugar de simplemente el número, pudiese y quisiese publicarlo aquí. Yo le he dado y le sigo dando muchas vueltas pero no hay forma de que lo logre hasta ahora.

   Estaría eternamente agradecido.

Salu2,

David Rguez.

Promedio de valoraciones: -
En respuesta a David Rodríguez Aguiar

Re: Obtener los identificadores de los posts no leidos en los foros

de Eloy Lafuente (stronk7) -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodle HQ Imagen de Moodlers de gran ayuda Imagen de Testers
Hola David,

la función que has puesto arriba no te calcula los mensajes que no has leído, ya que esa información no se almacena en Moodle.

Lo que hace es decirte el número de mensajes nuevos que hay en una discusión desde la última vez que la has visitado (esto sí se almacena en Moodle).

No sé si esa información te vale. Supongo que se podría modificar para que, en vez de hacerte la cuenta, te devuelva un vetor de identificadores. Pero ten claro a lo que corresponden!!

Ciao sonrisa