Resolução de problema: log de acesso dos capítulos do módulo book (livro)

Resolução de problema: log de acesso dos capítulos do módulo book (livro)

por Wagner Tadeu -
Número de respostas: 0

Olá a todos, seguem abaixo as instruções para que o log apresente na coluna "Informação" o título do capítulo que o aluno acessou, não apenas o nome do livro.

Passos:

1º Faça backup dos arquivos da pasta /moodle/mod/book e do seu banco de dados.

2º No arquivo view.php (do módulo book), aproximadamente na linha 98, faça a seguinte substituição:

add_to_log($course->id, 'book', 'view', 'view.php?id='.$cm->id.'&chapterid='.$chapter->id, $book->id, $cm->id);

Para:

add_to_log($course->id, 'book', 'view', 'view.php?id='.$cm->id.'&chapterid='.$chapter->id, $chapter->id, $cm->id);

Com isso, na coluna "Info" da tabela mdl_log, para cada acesso, o Moodle gravará o id do capítulo, não apenas o id do livro.

3º Na tabela mdl_log_display (lembrando que mdl é o prefixo definido na instalação do Moodle), devemos alterar o registro:

module: 'book'
action: 'view'
mtable: 'book'
field: 'name'

Para:

mtable: 'book_chapters'
field: 'title'

Os demais campos deverão permanecer como estavam. Com esta implementação, o moodle colocará o título do capítulo na coluna informação, quando emitirmos o relatório dos acessos.

4º Devemos atualizar os registros do log, pois a coluna info não possui mais a informação esperada, agora lá deverá ter o id o capítulo, para isso, devemos executar a seguinte atualização (sintaxe para MySQL):

update mdl_log set info = substring(url,locate('chapterid=',url)+10)  where module = 'book' and action = 'view';

5º Agora por último, deveremos corrigir o relatório outline, pois com estas implementações, não apresentará mais os acessos do livro por aluno:

- No arquivo lib.php (dentro de /mod/book/), deveremos alterar a função function book_user_outline($course, $user, $mod, $book):

if ($logs = get_records_select("log", "userid='$user->id' AND module='book' 
                                           AND action='view' AND info='$book->id'", "time ASC")) {
...

}

Devemos alterar para:

    if ($logs = get_records_select("log", "userid='$user->id' AND module='book'
                                           AND action='view' AND cmid='$mod->id'", "time ASC")) {
...

}

Desta forma, o Moodle utilizará o campo "cmid" para contar os acessos do aluno, neste campo contém o id do mdl_course_module correspondente do livro inserido no curso.

Como informação final, segue o resumo das alterações:

Arquivos:

- moodle/mod/book/view.php - função "add_to_log()";
- moodle/mod/book/lib.php - função "book_user_outline()";
- registros da tabela mdl_log_display;
- registros da tabela mdl_log para corrigir as entradas antigas;

 

Abraços!

Wagner Tadeu

Contagem das avaliações:  -