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.
Bom dia. Temos uma plataforma em regime experimental, porém a direção da escola já deseja usá-la para aplicação de provas. Creio que não sei como bloquear estas mensagens e/ou saber se os alunos já usam este recurso. Mesmo com o tutorial acima não sei como usar estes comandos para retornar um relatório de mensagens enviadas. Onde digito estes comandos?
ResponderExcluirDigite o comando em um terminal de acesos ao banco de dados. Você pode usar qualquer cliente SQL de banco de dados.
ExcluirOlá, utilizamos o Moodle 1.9 e precisamos bloquear qualquer tipo de comunicação dentro do Moodle com determinado grupo de participantes. Criei uma função onde o aluno só possui permissão para ver o conteúdo do curso e as atividades. Todas as outras permissões foram bloqueadas. Porém, o aluno ainda consegue acessar seu perfil quando clica em seu nome no canto superior direito em "Você acessou como ---". E no perfil consegue acessar o sistema de mensagens. Em Administração do site -> Segurança -> Políticas do site, o sistema de mensagens está ativado e isso prevalece ao bloqueio de envio de mensagens na função do aluno. Não posso desativar o sistema, pois afetará todos os usuários do site. Agradeço qualquer ajuda.
ResponderExcluirA permissão do moodle que possibilita o usuário a enviar mensagem é moodle/site:sendmessage
ExcluirSe essa permissão for inabilitada no perfil Usuário Autenticado nenhum aluno consegue enviar mensagem interna. Quanto a possibilidade de desativar essa função para um grupo específico de usuário, acredito que seja possível. No entanto, não consegui chegar a esse resultado nas pesquisas que fiz. Mesmo inabilitando a permissão moodle/site:sendmessage no perfil do usuário e configurando a sobreposição de permissão não tive sucesso. Caso alguém consegua isso, me avise.
De momento, a alternativa que vejo é hack no código para que apenas um determinado grupo de usuário seja inabilitado para enviar mensagem interna.
Badiu, obrigado pela tentativa.
ExcluirTambém não encontramos solução e como tínhamos urgência desse serviço, "duplicamos" o Moodle no datacenter para ser utilizado pelo grupo de alunos sem comunicação, desativando o sistema de mensagens.
Abraços!
Oi Gente! Não sei se a nossa solução meio que "forçada" servirá para o que vocês estão necessitando.
ExcluirPara que um usuário não possa bloquear um outro usuário do Moodle (Ex: para que um estudante não possa bloquear um tutor), fizemos o seguinte procedimento:
* Identificamos a função que possibilita o bloqueio.
Caminho no Moodle: moodle/message/index.php? viewing=unread&blockcontact
* Dentro do arquivo comentar da linha: 134 à 137.
Nas mensagens pessoais o ícone que representa o bloqueio ainda aparecerá, mas não executará a sua função.
Desta mesma forma acredito que poderá ser bloqueada a funcionalidade envio de mensagens, no arquivo: moodle/message/index.php
Dá uma procurada com carinho.