Mostrando postagens com marcador Mensagem. Mostrar todas as postagens
Mostrando postagens com marcador Mensagem. Mostrar todas as postagens

segunda-feira, 25 de outubro de 2010

Explorar Mensagem do Moodle com Comando SQL

A Plataforma Moodle tem um sistema de envio de mensagem interna. Caso você precise explorar   esse sistema sem usar a interface do Moodle, será necessário escrever comando SQL para comunicar diretamente com a base de dados.

    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.