TODO.txt 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. Alterações iTarefa:
  2. --> quando o aluno tentava acessar uma atividade que foi removida, era gerado um bug
  3. :: com as alterações, o aluno recebe um alerta.
  4. SOLUÇÃO:
  5. * locallib.php
  6. função: view_iassign_current()
  7. if (!$iassign_statement_activity_item) {
  8. print $OUTPUT->header();
  9. \core\notification::error(get_string('activity_not_found', 'iassign'));
  10. print $OUTPUT->footer();
  11. exit;
  12. }
  13. --> quando o aluno finalizava uma tarefa no iFractions, a tela do iMA ficava preta
  14. problema: ao carregar a página inicial, o iTarefa entrega um código para acessar o ilm_security,
  15. mas com a finalização da atividade, o mesmo código era mantido, portanto, não tinha como acessar,
  16. pois o código do ilm_security só pode ser usado uma única vez.
  17. SOLUÇÃO:
  18. * iFractions/index.html:
  19. função: finish_redirect()
  20. parent.location.reload(true); // Ao passar o "true", o navegador não usa o cache e busca um novo código ilm_security
  21. --> manter selecionado o iLM que foi usado recentemente para criar a última atividade, a fim de melhorar a usabilidade e produtividade
  22. * arquivo alterado: iassign_form.php
  23. --> Gerenciamento de arquivos:
  24. 1. Criação da atividade:
  25. - O campo itemid passa a receber o statementid.
  26. - Função: new_iassign //locallib.php
  27. // IGOR: itemid do arquivo é o mesmo que o id do statemente registrado acima:
  28. $itemid = $id;
  29. 2. Alteração da atividade:
  30. - Atualmente, o arquivo anterior é removido, mas não remove também as entradas de diretórios.
  31. 3. Exclusão da atividade:
  32. - O iTarefa não removia as entradas do files, que estão associadas àquela atividade excluída.
  33. - Para corrigir, as linhas abaixo foram adicionadas:
  34. função deleteyes: // locallib.php
  35. $fs = get_file_storage();
  36. $fs->delete_area_files(
  37. $iassign->context->id,
  38. 'mod_iassign',
  39. 'exercise',
  40. $this->activity->id
  41. );
  42. 4. Cópia de atividade:
  43. - Com a alteração feita para a criação, a cópia também passou a registrar o itemid com o statementid.
  44. 5. Mover atividade:
  45. - Para preservar o itemid do arquivo, a seguinte linha foi atualizada:
  46. função move_activity: //locallib.php
  47. $newfile = $fs->create_file_from_storedfile(array('contextid' => $id_context, 'component' => 'mod_iassign', 'filearea' => 'exercise', 'itemid' => $iassign_id), $value);
  48. 5. No update:
  49. ..> Testar na nossa base:
  50. if ($oldversion < 2020102800) {
  51. // 1. encontrar os contextos dos arquivos do itarefa:
  52. $iassign_contexts_list = $DB->get_records_sql("SELECT contextid FROM {files} f " .
  53. " WHERE component='mod_iassign'");
  54. // 2. compor um array com todos os contextos encontrados:
  55. $contexts = array();
  56. foreach ($iassign_contexts_list as $iassign_context_item) {
  57. array_push($contexts, $iassign_context_item->contextid);
  58. }
  59. // 3. encontrar todas as atividades do itarefa, em que o arquivo não tenha o mesmo id do statement:
  60. $iassign_statement_list = $DB->get_records_sql("SELECT * FROM {iassign_statement} s " .
  61. " WHERE s.id != s.file");
  62. $fs = get_file_storage();
  63. // 4. percorrer o conjunto de atividades:
  64. foreach ($iassign_statement_list as $iassign_statement_activity_item) {
  65. // 5. encontrar o arquivo, considerando os possíveis contextos:
  66. $files = array();
  67. foreach ($contexts as $context) {
  68. $files = $fs->get_area_files($context, 'mod_iassign', 'exercise', $iassign_statement_activity_item->file);
  69. // 6. se o arquivo for encontrado, fazer uma cópia do conteúdo,
  70. // com o itemid novo, atualizar o iassign_statement, e apagar o arquivo antigo:
  71. if ($files) {
  72. foreach ($files as $value) {
  73. if ($value != null && $value->get_filename() != ".") {
  74. // 6.A. Fazer uma cópia:
  75. $newfile = $fs->create_file_from_storedfile(array('contextid' => $context, 'component' => 'mod_iassign', 'filearea' => 'exercise', 'itemid' => $iassign_statement_activity_item->id), $value);
  76. // 6.B. Atualizar o registro da atividade para o arquivo novo:
  77. $update_entry = new stdClass();
  78. $update_entry->id = $iassign_statement_activity_item->id;
  79. $update_entry->file = $newfile->get_itemid();
  80. $DB->update_record("iassign_statement", $update_entry);
  81. // 6.C. Remover o arquivo antigo:
  82. $value->delete();
  83. } else if ($value != null && $value->get_filename() == ".") {
  84. // 6.C.I. Remover também os indicadores de diretório:
  85. $value->delete();
  86. }
  87. }
  88. break;
  89. }
  90. }
  91. }
  92. } // if ($oldversion < 2020102800)
  93. 09/11/2020:
  94. :: editingbehavior ::
  95. editingbehavior = 0: para iGeom, iHanoi => ter que clicar no "Refazer atividade" : desabilita botao "enviar" ao entrar em atividade feita
  96. editingbehavior = 1: para iVProg => permite continuar edicao (do ponto que parou) : deixa habilitado o botao "enviar" em qq situacao
  97. title do botão
  98. editingbehavior = 2: para iFraction => não tem o botão enviar, o envio é contínuo
  99. :: submissionbehavior ::
  100. se editingbehavior=0, entao: trocar 'title' para
  101. 'Este iMA nao permite continuar edicao de solucao enviada.
  102. Para editar, por favor, clique no botao 'Refazer atividade'"
  103. iassign_ilm: 2 novos campos 'editingbehavior' e 'submissionbehavior'
  104. Sendo:
  105. id name version type editingbehavior description url extension parent file_jar file_class width height enable timemodified author timecreated evaluate reevaluate
  106. editingbehavior = 0: para iGeom, iHanoi => ter que clicar no "Refazer atividade" : desabilita botao "enviar" ao entrar em atividade feita
  107. editingbehavior = 1: para iVProg => permite continuar edicao (do ponto que parou) : deixa habilitado o botao "enviar" em qq situacao
  108. submissionbehavior = 0: para iGeom, iVprog, iHanoi => NAO trocar de pagina
  109. submissionbehavior = 1: para iFractions => ao finalizar deve invocar iTarefa.finish_and_redirect()
  110. :: iassign_allsubmissions ::
  111. Criar nova tabela 'iassign_allsubmissions'. Se a atividade estiver marcada para gravar todas, qdo aluno clicar no "avaliar", gravar nova entrada.
  112. No formulario para criar atividade, se o iMA for do tipo (1,0), mostrar opcao para gravar tudo
  113. No 'locallib', sempre que o aluno clicar no "avaliar"
  114. No iVProg
  115. -> mensagem de fechar a janela com edição
  116. -->> AFAZERES:
  117. iassign_ilm: 2 novos campos 'editingbehavior' e 'submissionbehavior'
  118. Sendo:
  119. id name version type editingbehavior description url extension parent file_jar file_class width height enable timemodified author timecreated evaluate reevaluate
  120. editingbehavior = 0: para iGeom, iHanoi, iFractions => ter que clicar no "Refazer atividade" : desabilita botao "enviar" ao entrar em atividade feita
  121. editingbehavior = 1: para iVProg => permite continuar edicao (do ponto que parou) : deixa habilitado o botao "enviar" em qq situacao
  122. @Igor:
  123. Finalizada a implementação do 'editingbehavior'
  124. submissionbehavior = 0: para iGeom, iVprog, iHanoi => NAO trocar de pagina
  125. submissionbehavior = 1: para iFractions => ao finalizar deve invocar iTarefa.finish_and_redirect()
  126. Criar nova tabela 'iassign_allsubmissions'. Se a atividade estiver marcada para gravar todas, qdo aluno clicar no "avaliar", gravar nova entrada.
  127. No formulario para criar atividade, se o iMA for do tipo (1,0), mostrar opcao para gravar tudo
  128. No 'locallib', sempre que o aluno clicar no "avaliar"
  129. TODO
  130. 1. 1 tabela nova: iassign_allsubmissions
  131. @Igor:
  132. Campos na tabela iassign_allsubmissions:
  133. 1. id
  134. 2. iassign_statementid
  135. 3. userid
  136. 4. timecreated
  137. 5. grade
  138. 6. answer
  139. 2. 2 campos novos na tabela 'iassign_ilm': editingbehavior, submissionbehavior
  140. 3. 1 campo novo na tabela 'iassign_statement': store_all_submissions
  141. iMA:
  142. - getEvaluation(): tem que chamar o 'getEvaluation()' do iTarefa
  143. iTarefa:
  144. - Alterar com sua funcao 'getEvaluation()' com eventual codigo para gravar (senao ela e' vazia)
  145. 30/11/2020:
  146. --> tabela ilm:
  147. - action_button
  148. 0: submission desabilitado
  149. 1: padrão. submission habilitado.
  150. --> se o ima possui autoavaliador e é do tipo exercício,
  151. trocar o rótulo do botão para 'Avaliar':
  152. 'roda o avaliador e envia o registro,
  153. clicando no avaliar, automaticamente vai ser registrado'
  154. Verificar se a nota é maior ou menor