Através do comando SQL você pode:
- Consultar histórico de mensagens enviadas;
- Pesquisar conteúdo das mensagens;
- Apagar mensagens que ainda não foram lidas;
- Pesquisar usuário que mais enviaram ou receberam mensagens.
As mensagens do Moodle são organizadas em duas tabelas:
- mdl_message – Tabela que registra as mensagens enviadas
- mdl_message_read - Tabela que registra as mensagens lidas. Armazena o histórico das mensagens.
Quando uma mensagem é enviada, é armazenada na tabela mdl_message. Quando o destinatário recebe, ou seja, visualiza na tela, a mensagem é transferida para a tabela mdl_message_read. Na tabela mdl_message só ficam as mensagens que ainda não foram lidas. Já a tabela mdl_message_read só ficam as mensagens que já foram lidas.
Agora que já entendeu como funciona as tabelas, vamos ver os comandos SQL.
1- Consultar todas as mensagens enviadas que ainda não foram lidas.
SELECT m.id,m.timecreated, r.firstname, r.lastname,d.firstname, d.lastname, m.message FROM mdl_user r INNER JOIN mdl_message m ON r.id=m.useridfrom INNER JOIN mdl_user d ON d.id=m.useridto
Essa consultar retorna os seguintes campos:
- m.id - Id da mensagem
- m.timecreated – Data do envio da mensagem
- r.firstname e r.lastname – Nome do remitente
- d.firstname e d.lastname – Nome do destinatário
- m.message – Texto da mensagem
2- Consultar todas as mensagens lidas – Histórico de mensagens.
SELECT m.id,m.timecreated, m.timeread,r.firstname, r.lastname,d.firstname,d.lastname, m.message,m.mailed FROM mdl_user r INNER JOIN mdl_message_read m ON r.id=m.useridfrom INNER JOIN mdl_user d ON d.id=m.useridto
Essa consultar retorna os seguintes campos:
- m.id - Id da mensagem
- m.timecreated – Data do envio da mensagem
- m.timeread – Data da leitura da mensagem
- r.firstname e r.lastname – Nome do remitente
- d.firstname e d.lastname – Nome do destinatário
- m.message – Texto da mensagem
- m.mailed – Controle de envio de mensagem por e-mail
3 - Monitorar as mensagens enviadas por um determinado usuário que ainda não foram lidas
SELECT m.id,m.timecreated, d.firstname, d.lastname, m.message FROM mdl_message m INNER JOIN mdl_user d ON d.id=m.useridto WHERE m.useridfrom=?
Passe o parâmetro id do usuário em m.useridfrom=?
Essa consultar retorna os seguintes campos:
- m.id - Id da mensagem
- m.timecreated – Data do envio da mensagem
- d.firstname e d.lastname – Nome do destinatário
- m.message – Texto da mensagem
4 - Monitorar histórico das mensagens enviadas por um determinado usuário. Mensagens lidas pelos destinatários.
SELECT m.id,m.timecreated, m.timeread, d.firstname, d.lastname, m.message, m.mailed FROM mdl_message_read m INNER JOIN mdl_user d ON d.id=m.useridto WHERE m.useridfrom=?
Passe o parâmetro id do usuário em m.useridfrom=?
Essa consultar retorna os seguintes campos:
- m.id - Id da mensagem
- m.timecreated – Data do envio da mensagem
- m.timeread – Data da leitura da mensagem
- d.firstname e d.lastname – Nome do destinatário
- m.message – Texto da mensagem
- m.mailed – Controle de envio de mensagem por e-mail
5- Pesquisar o conteúdo das mensagens enviadas no histórico das mensagens pela palavra-chave
SELECT m.id,m.timecreated, m.timeread,r.firstname, r.lastname,d.firstname,d.lastname, m.message,m.mailed FROM mdl_user r INNER JOIN mdl_message_read m ON r.id=m.useridfrom INNER JOIN mdl_user d ON d.id=m.useridto WHERE m.message LIKE '%texto da pesquisa%'
Passe o texto a ser pesquisado no comando LIKE '%texto da pesquisa%'
Essa consultar retorna os mesmos campos da pesquisa do item 2.
6- Lista de usuários que mais enviarem as mensagens
SELECT r.firstname, r.lastname,d.firstname, COUNT(m.useridfrom) FROM mdl_user r INNER JOIN mdl_message_read m ON r.id=m.useridfrom INNER JOIN mdl_user d ON d.id=m.useridto GROUP BY r.firstname, r.lastname,d.firstname ORDER BY COUNT(m.useridfrom) DESC
Essa consulta retorna uma lista de usuários (remetentes) e quantidade de mensagens enviadas pela ordem decrescente. Lista os usuários que mais enviaram as mensagens.
Essa consulta é feita no histórico de mensagens. Para efetuá-la nas mensagens recentes, ou seja, ainda não lidas, basta substituir a tabela mdl_message_read para mdl_message e mantar o restante de código inalterado.
7- Lista de usuários que mais receberam mensagens
SELECT d.firstname, d.lastname,d.firstname, COUNT(m.useridto) FROM mdl_user d INNER JOIN mdl_message_read m ON d.id=m.useridto GROUP BY d.firstname, d.lastname,d.firstname ORDER BY COUNT(m.useridto) DESC
Essa consulta retorna uma lista de usuários (destinatários) e quantidade de mensagem recebidas pela ordem decrescente. Lista os usuários que mais receberam as mensagens.
Essa consulta é feita no histórico de mensagens. Para efetuá-la nas mensagens recentes, ou seja, ainda não lida, basta substituir a tabela mdl_message_read para mdl_message e mantar o restante de código inalterado.
8 – Apagar as mensagens enviada que ainda não foram lidas
DELETE FROM mdl_message
9 – Apagar o histórico das mensagens. Mensagens lidas
DELETE FROM mdl_message_read
Essas dicas ajudam você a desvendar como é organizado as mensagens no Moodle na camada de base de dados. Isso é tudo que você precisa para mapear erros ou falha do Moodle e também para para planejar integração com outros sistemas.