|
@@ -0,0 +1,250 @@
|
|
|
+Alterações iTarefa:
|
|
|
+
|
|
|
+--> quando o aluno tentava acessar uma atividade que foi removida, era gerado um bug
|
|
|
+:: com as alterações, o aluno recebe um alerta.
|
|
|
+
|
|
|
+SOLUÇÃO:
|
|
|
+* locallib.php
|
|
|
+ função: view_iassign_current()
|
|
|
+ if (!$iassign_statement_activity_item) {
|
|
|
+ print $OUTPUT->header();
|
|
|
+ \core\notification::error(get_string('activity_not_found', 'iassign'));
|
|
|
+ print $OUTPUT->footer();
|
|
|
+ exit;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+--> quando o aluno finalizava uma tarefa no iFractions, a tela do iMA ficava preta
|
|
|
+problema: ao carregar a página inicial, o iTarefa entrega um código para acessar o ilm_security,
|
|
|
+mas com a finalização da atividade, o mesmo código era mantido, portanto, não tinha como acessar,
|
|
|
+pois o código do ilm_security só pode ser usado uma única vez.
|
|
|
+
|
|
|
+SOLUÇÃO:
|
|
|
+* iFractions/index.html:
|
|
|
+ função: finish_redirect()
|
|
|
+ parent.location.reload(true); // Ao passar o "true", o navegador não usa o cache e busca um novo código ilm_security
|
|
|
+
|
|
|
+
|
|
|
+--> manter selecionado o iLM que foi usado recentemente para criar a última atividade, a fim de melhorar a usabilidade e produtividade
|
|
|
+* arquivo alterado: iassign_form.php
|
|
|
+
|
|
|
+--> Gerenciamento de arquivos:
|
|
|
+
|
|
|
+1. Criação da atividade:
|
|
|
+- O campo itemid passa a receber o statementid.
|
|
|
+- Função: new_iassign //locallib.php
|
|
|
+ // IGOR: itemid do arquivo é o mesmo que o id do statemente registrado acima:
|
|
|
+ $itemid = $id;
|
|
|
+
|
|
|
+2. Alteração da atividade:
|
|
|
+- Atualmente, o arquivo anterior é removido, mas não remove também as entradas de diretórios.
|
|
|
+
|
|
|
+3. Exclusão da atividade:
|
|
|
+- O iTarefa não removia as entradas do files, que estão associadas àquela atividade excluída.
|
|
|
+- Para corrigir, as linhas abaixo foram adicionadas:
|
|
|
+
|
|
|
+função deleteyes: // locallib.php
|
|
|
+
|
|
|
+ $fs = get_file_storage();
|
|
|
+ $fs->delete_area_files(
|
|
|
+ $iassign->context->id,
|
|
|
+ 'mod_iassign',
|
|
|
+ 'exercise',
|
|
|
+ $this->activity->id
|
|
|
+ );
|
|
|
+
|
|
|
+4. Cópia de atividade:
|
|
|
+- Com a alteração feita para a criação, a cópia também passou a registrar o itemid com o statementid.
|
|
|
+
|
|
|
+5. Mover atividade:
|
|
|
+- Para preservar o itemid do arquivo, a seguinte linha foi atualizada:
|
|
|
+
|
|
|
+função move_activity: //locallib.php
|
|
|
+$newfile = $fs->create_file_from_storedfile(array('contextid' => $id_context, 'component' => 'mod_iassign', 'filearea' => 'exercise', 'itemid' => $iassign_id), $value);
|
|
|
+
|
|
|
+
|
|
|
+5. No update:
|
|
|
+
|
|
|
+..> Testar na nossa base:
|
|
|
+
|
|
|
+if ($oldversion < 2020102800) {
|
|
|
+ // 1. encontrar os contextos dos arquivos do itarefa:
|
|
|
+ $iassign_contexts_list = $DB->get_records_sql("SELECT contextid FROM {files} f " .
|
|
|
+ " WHERE component='mod_iassign'");
|
|
|
+ // 2. compor um array com todos os contextos encontrados:
|
|
|
+ $contexts = array();
|
|
|
+ foreach ($iassign_contexts_list as $iassign_context_item) {
|
|
|
+ array_push($contexts, $iassign_context_item->contextid);
|
|
|
+ }
|
|
|
+ // 3. encontrar todas as atividades do itarefa, em que o arquivo não tenha o mesmo id do statement:
|
|
|
+ $iassign_statement_list = $DB->get_records_sql("SELECT * FROM {iassign_statement} s " .
|
|
|
+ " WHERE s.id != s.file");
|
|
|
+ $fs = get_file_storage();
|
|
|
+
|
|
|
+ // 4. percorrer o conjunto de atividades:
|
|
|
+ foreach ($iassign_statement_list as $iassign_statement_activity_item) {
|
|
|
+
|
|
|
+ // 5. encontrar o arquivo, considerando os possíveis contextos:
|
|
|
+ $files = array();
|
|
|
+ foreach ($contexts as $context) {
|
|
|
+
|
|
|
+ $files = $fs->get_area_files($context, 'mod_iassign', 'exercise', $iassign_statement_activity_item->file);
|
|
|
+
|
|
|
+ // 6. se o arquivo for encontrado, fazer uma cópia do conteúdo,
|
|
|
+ // com o itemid novo, atualizar o iassign_statement, e apagar o arquivo antigo:
|
|
|
+ if ($files) {
|
|
|
+ foreach ($files as $value) {
|
|
|
+ if ($value != null && $value->get_filename() != ".") {
|
|
|
+ // 6.A. Fazer uma cópia:
|
|
|
+ $newfile = $fs->create_file_from_storedfile(array('contextid' => $context, 'component' => 'mod_iassign', 'filearea' => 'exercise', 'itemid' => $iassign_statement_activity_item->id), $value);
|
|
|
+
|
|
|
+ // 6.B. Atualizar o registro da atividade para o arquivo novo:
|
|
|
+ $update_entry = new stdClass();
|
|
|
+ $update_entry->id = $iassign_statement_activity_item->id;
|
|
|
+ $update_entry->file = $newfile->get_itemid();
|
|
|
+ $DB->update_record("iassign_statement", $update_entry);
|
|
|
+
|
|
|
+ // 6.C. Remover o arquivo antigo:
|
|
|
+ $value->delete();
|
|
|
+ } else if ($value != null && $value->get_filename() == ".") {
|
|
|
+ // 6.C.I. Remover também os indicadores de diretório:
|
|
|
+ $value->delete();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ } // if ($oldversion < 2020102800)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+09/11/2020:
|
|
|
+
|
|
|
+
|
|
|
+:: editingbehavior ::
|
|
|
+
|
|
|
+editingbehavior = 0: para iGeom, iHanoi => ter que clicar no "Refazer atividade" : desabilita botao "enviar" ao entrar em atividade feita
|
|
|
+editingbehavior = 1: para iVProg => permite continuar edicao (do ponto que parou) : deixa habilitado o botao "enviar" em qq situacao
|
|
|
+title do botão
|
|
|
+editingbehavior = 2: para iFraction => não tem o botão enviar, o envio é contínuo
|
|
|
+
|
|
|
+:: submissionbehavior ::
|
|
|
+
|
|
|
+se editingbehavior=0, entao: trocar 'title' para
|
|
|
+'Este iMA nao permite continuar edicao de solucao enviada.
|
|
|
+Para editar, por favor, clique no botao 'Refazer atividade'"
|
|
|
+
|
|
|
+
|
|
|
+iassign_ilm: 2 novos campos 'editingbehavior' e 'submissionbehavior'
|
|
|
+
|
|
|
+Sendo:
|
|
|
+ id name version type editingbehavior description url extension parent file_jar file_class width height enable timemodified author timecreated evaluate reevaluate
|
|
|
+ editingbehavior = 0: para iGeom, iHanoi => ter que clicar no "Refazer atividade" : desabilita botao "enviar" ao entrar em atividade feita
|
|
|
+ editingbehavior = 1: para iVProg => permite continuar edicao (do ponto que parou) : deixa habilitado o botao "enviar" em qq situacao
|
|
|
+
|
|
|
+ submissionbehavior = 0: para iGeom, iVprog, iHanoi => NAO trocar de pagina
|
|
|
+ submissionbehavior = 1: para iFractions => ao finalizar deve invocar iTarefa.finish_and_redirect()
|
|
|
+
|
|
|
+
|
|
|
+:: iassign_allsubmissions ::
|
|
|
+
|
|
|
+Criar nova tabela 'iassign_allsubmissions'. Se a atividade estiver marcada para gravar todas, qdo aluno clicar no "avaliar", gravar nova entrada.
|
|
|
+
|
|
|
+No formulario para criar atividade, se o iMA for do tipo (1,0), mostrar opcao para gravar tudo
|
|
|
+No 'locallib', sempre que o aluno clicar no "avaliar"
|
|
|
+
|
|
|
+
|
|
|
+No iVProg
|
|
|
+
|
|
|
+-> mensagem de fechar a janela com edição
|
|
|
+
|
|
|
+
|
|
|
+-->> AFAZERES:
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+iassign_ilm: 2 novos campos 'editingbehavior' e 'submissionbehavior'
|
|
|
+Sendo:
|
|
|
+ id name version type editingbehavior description url extension parent file_jar file_class width height enable timemodified author timecreated evaluate reevaluate
|
|
|
+
|
|
|
+ editingbehavior = 0: para iGeom, iHanoi, iFractions => ter que clicar no "Refazer atividade" : desabilita botao "enviar" ao entrar em atividade feita
|
|
|
+
|
|
|
+ editingbehavior = 1: para iVProg => permite continuar edicao (do ponto que parou) : deixa habilitado o botao "enviar" em qq situacao
|
|
|
+
|
|
|
+
|
|
|
+ @Igor:
|
|
|
+ Finalizada a implementação do 'editingbehavior'
|
|
|
+
|
|
|
+
|
|
|
+ submissionbehavior = 0: para iGeom, iVprog, iHanoi => NAO trocar de pagina
|
|
|
+ submissionbehavior = 1: para iFractions => ao finalizar deve invocar iTarefa.finish_and_redirect()
|
|
|
+
|
|
|
+
|
|
|
+Criar nova tabela 'iassign_allsubmissions'. Se a atividade estiver marcada para gravar todas, qdo aluno clicar no "avaliar", gravar nova entrada.
|
|
|
+
|
|
|
+No formulario para criar atividade, se o iMA for do tipo (1,0), mostrar opcao para gravar tudo
|
|
|
+No 'locallib', sempre que o aluno clicar no "avaliar"
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+TODO
|
|
|
+
|
|
|
+1. 1 tabela nova: iassign_allsubmissions
|
|
|
+
|
|
|
+ @Igor:
|
|
|
+ Campos na tabela iassign_allsubmissions:
|
|
|
+ 1. id
|
|
|
+ 2. iassign_statementid
|
|
|
+ 3. userid
|
|
|
+ 4. timecreated
|
|
|
+ 5. grade
|
|
|
+ 6. answer
|
|
|
+
|
|
|
+
|
|
|
+2. 2 campos novos na tabela 'iassign_ilm': editingbehavior, submissionbehavior
|
|
|
+
|
|
|
+3. 1 campo novo na tabela 'iassign_statement': store_all_submissions
|
|
|
+
|
|
|
+iMA:
|
|
|
+- getEvaluation(): tem que chamar o 'getEvaluation()' do iTarefa
|
|
|
+iTarefa:
|
|
|
+- Alterar com sua funcao 'getEvaluation()' com eventual codigo para gravar (senao ela e' vazia)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+30/11/2020:
|
|
|
+--> tabela ilm:
|
|
|
+- action_button
|
|
|
+ 0: submission desabilitado
|
|
|
+ 1: padrão. submission habilitado.
|
|
|
+
|
|
|
+--> se o ima possui autoavaliador e é do tipo exercício,
|
|
|
+trocar o rótulo do botão para 'Avaliar':
|
|
|
+ 'roda o avaliador e envia o registro,
|
|
|
+ clicando no avaliar, automaticamente vai ser registrado'
|
|
|
+ Verificar se a nota é maior ou menor
|
|
|
+
|