diff --git a/src/main/webapp/app/scanexam/voircopie/voircopie.component.ts b/src/main/webapp/app/scanexam/voircopie/voircopie.component.ts index af8617f3..03e3d9ef 100644 --- a/src/main/webapp/app/scanexam/voircopie/voircopie.component.ts +++ b/src/main/webapp/app/scanexam/voircopie/voircopie.component.ts @@ -139,7 +139,6 @@ export class VoirCopieComponent implements OnInit, AfterViewInit { constructor( protected applicationConfigService: ApplicationConfigService, private http: HttpClient, - public examService: ExamService, public studentService: StudentService, protected activatedRoute: ActivatedRoute, @@ -331,6 +330,7 @@ export class VoirCopieComponent implements OnInit, AfterViewInit { this.router.navigateByUrl('/copie/' + this.uuid + '/' + q); } } + @HostListener('window:keydown.shift.ArrowRight', ['$event']) nextQuestion(event: KeyboardEvent): void { event.preventDefault(); @@ -551,7 +551,13 @@ export class VoirCopieComponent implements OnInit, AfterViewInit { width: finalW, height: finalH, }) - .subscribe(res => resolve({ i: new ImageData(new Uint8ClampedArray(res), finalW, finalH), w: finalW, h: finalH })); + .subscribe(res => + resolve({ + i: new ImageData(new Uint8ClampedArray(res), finalW, finalH), + w: finalW, + h: finalH, + }), + ); }); } @@ -615,44 +621,28 @@ export class VoirCopieComponent implements OnInit, AfterViewInit { const examName = this.exam!.name!; const questionNumero = this.questions![0].numero!; const url = window.location.href; - const ten = `Dear Prof,%0D%0A -My name is ${firsName} ${lastName},%0D%0A -I have the exam ${examName}. Looking at the answer key for this question ${questionNumero} available here (${url}), I could not understand my mistake.%0D%0A -%0D%0A%0D%0A -///EXPLAIN YOUR PROBLEM///%0D%0A -%0D%0A%0D%0A -Thank you in advance for the time taken to answer this email.%0D%0A -Best regards,%0D%0A -${firsName} -`; - const tfr = `Bonjour,%0D%0A -je m'appelle ${firsName} ${lastName},%0D%0A -J'ai passé l'examen ${examName}. En regardant le corrigé de la question ${questionNumero} accessible ici (${url}), je ne comprends pas mon erreur.%0D%0A -%0D%0A%0D%0A -///EXPLIQUER VOTRE PROBLEME///%0D%0A -%0D%0A%0D%0A -Merci par avance pour le temps pris pour répondre à cet email.%0D%0A -Cordialement,%0D%0A -${firsName} -`; + let emailSubject: string; + let emailBody: string; if (this.translateService.currentLang === 'fr') { - this.email = - 'mailto:' + - emails.filter(e => e !== undefined && e !== '').join(',') + - "?subject=Retour sur l'examen " + - this.exam!.name + - '&body=' + - tfr; + emailSubject = "Retour sur l'examen "; + emailBody = frenchMessageBody(firsName, lastName, examName, questionNumero, url); + } else if (this.translateService.currentLang === 'pt') { + emailSubject = 'Esclarecimentos sobre a avaliacao '; + emailBody = portugueseMessageBody(firsName, lastName, examName, questionNumero, url); } else { - this.email = - 'mailto:' + - emails.filter(e => e !== undefined && e !== '').join(',') + - '?subject=Feedback on your ewam ' + - this.exam!.name + - '&body=' + - ten; + emailSubject = 'Review of the on your exam '; + emailBody = englishMessageBody(firsName, lastName, examName, questionNumero, url); } + + this.email = + 'mailto:' + + emails.filter(e => e !== undefined && e !== '').join(',') + + '?subject=' + + emailSubject + + this.exam!.name + + '&body=' + + emailBody; } else { this.email = ''; } @@ -688,3 +678,46 @@ ${firsName} this.displayBasic = true; } } + +function englishMessageBody(firsName: string, lastName: string, examName: string, questionNumero: number, url: string) { + return `Dear Prof,%0D%0A +My name is ${firsName} ${lastName},%0D%0A +I have the exam ${examName}. Looking at the answer key for this question ${questionNumero} available here (${url}), I could not understand my mistake.%0D%0A +%0D%0A%0D%0A +///EXPLAIN YOUR PROBLEM///%0D%0A +%0D%0A%0D%0A +Thank you in advance for the time taken to answer this email.%0D%0A +Best regards,%0D%0A +${firsName} +`; +} + +function frenchMessageBody(firsName: string, lastName: string, examName: string, questionNumero: number, url: string) { + return `Bonjour,%0D%0A +je m'appelle ${firsName} ${lastName},%0D%0A +J'ai passé l'examen ${examName}. En regardant le corrigé de la question ${questionNumero} accessible ici (${url}), je ne comprends pas mon erreur.%0D%0A +%0D%0A%0D%0A +///EXPLIQUER VOTRE PROBLEME///%0D%0A +%0D%0A%0D%0A +Merci par avance pour le temps pris pour répondre à cet email.%0D%0A +Cordialement,%0D%0A +${firsName} +`; +} + +function portugueseMessageBody(firsName: string, lastName: string, examName: string, questionNumero: number, url: string) { + return `Caro professor, %0D%0A + +Eu me chamo ${firsName} ${lastName} e fiz a prova ${examName}. +Após uma ampla e detalhada análise da correção da questão ${questionNumero}, disponível aqui (${url}), eu não consegui entender o meu erro.%0D%0A + +%0D%0A%0D%0A +///EXPLIQUE SEU PROBLEMA///%0D%0A +%0D%0A%0D%0A + +Desde já agradeço pelo tempo dedicado a responder este email.%0D%0A + +Atenciosamente,%0D%0A +${firsName} +`; +} diff --git a/src/main/webapp/i18n/fr/scanexammodule.json b/src/main/webapp/i18n/fr/scanexammodule.json index cdca922a..a1011dde 100644 --- a/src/main/webapp/i18n/fr/scanexammodule.json +++ b/src/main/webapp/i18n/fr/scanexammodule.json @@ -14,11 +14,11 @@ "total": "Total", "titleSummary": "État courant de la correction de l'examen :", "errorExamId": "Numéro de l'examen invalide", - "align": "Aligner scans", + "align": "Redresser scans", "gobackexam": "Retourner à l'examen", "gobackcorrection": "Retourner à la correction", "gobackue": "Retourner au module", - "alignscan": "Alignement des scans", + "alignscan": "Aligner les scans", "alignscanalgo": "Algorithme d'alignement", "alignscanbrpage": "Nombre de page à utiliser dans le template d'examen", "selectmove": "Sélectionner et déplacer des formes/textes", diff --git a/src/main/webapp/i18n/pt/exam.json b/src/main/webapp/i18n/pt/exam.json index ebf63405..7ed37c7e 100644 --- a/src/main/webapp/i18n/pt/exam.json +++ b/src/main/webapp/i18n/pt/exam.json @@ -21,9 +21,9 @@ "name": "Nome da avaliação:", "template": "Modelo de avaliação", "idzone": "Idzone", - "namezone": "Zona do sobrenome", - "firstnamezone": "Zona do nome", - "notezone": "Zona da nota", + "namezone": "Região do sobrenome", + "firstnamezone": "Região do nome", + "notezone": "Região da nota", "scanfile": "Documento digitalizado dos estudantes", "question": "Questão", "course": "Disciplina" diff --git a/src/main/webapp/i18n/pt/global.json b/src/main/webapp/i18n/pt/global.json index d6094c79..ad6ea693 100644 --- a/src/main/webapp/i18n/pt/global.json +++ b/src/main/webapp/i18n/pt/global.json @@ -18,7 +18,7 @@ "finalResult": "Final Result", "studentResponse": "Resposta ao Estudante", "comments": "Comentários", - "zone": "Zona", + "zone": "Região", "questionType": "Tipo de Questão", "textComment": "Texto de comentário", "gradedComment": "Comentário com nota", @@ -42,7 +42,7 @@ "configuration": "Configuração", "logs": "Logs", "apidocs": "API", - "database": "Base de données", + "database": "Base de dados", "jhipster-needle-menu-add-admin-element": "JHipster will add additional menu entries here (do not translate!)" }, "language": "Idioma" @@ -56,8 +56,8 @@ "newpassword.placeholder": "Nova senha", "confirmpassword.label": "Confirmação da nova senha", "confirmpassword.placeholder": "Confirmação da nova senha", - "email.label": "Email", - "email.placeholder": "Seu email" + "email.label": "E-mail", + "email.placeholder": "Seu e-mail" }, "messages": { "info": { diff --git a/src/main/webapp/i18n/pt/scanexammodule.json b/src/main/webapp/i18n/pt/scanexammodule.json index 9fac65f3..b38f6e05 100644 --- a/src/main/webapp/i18n/pt/scanexammodule.json +++ b/src/main/webapp/i18n/pt/scanexammodule.json @@ -22,13 +22,13 @@ "alignscanalgo": "Algoritmo de alinhamento", "alignscanbrpage": "Quantidade de páginas no modelo de avaliação", "selectmove": "Selecionar e mover formas/textos", - "erase": "Exclua a forma/texto clicando (Se você excluir uma pergunta, isto excluirá também todas as correções desta pergunta. ⚠️ Não há como voltar atrás!)", + "erase": "Excluir região ou texto (Se você excluir uma pergunta, isto excluirá também todas as correções desta pergunta. ⚠️ Não há como voltar atrás!)", "nom": "SOBRENOME", "prenom": "NOME", - "ine": "N° Matrícula", - "question": "QUESTÃO", + "ine": "N° Matrícula (clique e arraste)", + "question": "Definir uma nova região de resposta (clique e arraste)", "freedrawing": "Desenho livre", - "clearcanvas": "Apagar a lona, excluir todas as formas e textos.", + "clearcanvas": "Apagar todas as anotações, excluir todas as regiões e textos.", "bindcopies": "Associar estudantes e provas", "assistance": "Assistência", "assistanceTooltip": "Habilita a IA para detecção automática de nomes", @@ -148,9 +148,9 @@ "mailbody": "Corpo do e-mail :", "mailtooltip": "as variáveis ${firstname}, ${url}, ${lastname} e ${nota} podem ser usadas no corpo do e-mail", "mailabibody": "Corpo do e-mail para as ABI :", - "envoiemail": "Envia e-mail aos estudantes", + "envoiemail": "Enviar e-mail aos estudantes", "resultatstudents": "Resultado dos estudantes", - "envoimailstudent": "Envia e-mail aos estudantes", + "envoimailstudent": "Enviar e-mail aos estudantes", "exportexcel": "Exportação Excel", "exportcsv": "Exportação CSV", "showstat": "Ver as estatísticas", @@ -257,7 +257,7 @@ "removeallbinding": "Excluir todas as associações", "removeallbindingtooltip": "⚠️ somente se a correção ainda não começou", "noneval": "não avaliada", - "voir": "Reverificar", + "voir": "Verificar", "voirtooltip": "Acesso à visualização correção", "partialalignscan": "Seleção de páginas", "partialalignscanstartpage": "primeira página", @@ -346,8 +346,8 @@ "accessdocumentation": "Abertura da documentação", "exportpdfok": "Exportação bem-sucedida", "exportpdfokdetails": "Todas as provas foram exportadas em formato PDF (se não recebeu nada, habilte as janelas popup no navegador)", - "envoiabi": "Envia um e-mail aos ausentes:", - "envoipdf": "Envia a prova anotada em formato PDF:", + "envoiabi": "Enviar um e-mail aos ausentes:", + "envoipdf": "Enviar a prova anotada em formato PDF:", "lienelevepdf": "Link da prova anotada", "pdf": "PDF", "reloadscan": "Recarregar um novo documento digitalizado (substituição ou fusão)", @@ -377,9 +377,9 @@ "cleancachesessionend": " para limpar a memória tampão deste navegador", "cleancachesessiondone": "A limpeza da memória tampão foi efetuada, tente se conectar novamente", "libelle": "Título da questão", - "libelletooltip": "Attribui um título a uma pergunta", + "libelletooltip": "Atribui um título a uma pergunta", "gotolistquestion": "Retornar à lista de questões (resumo do estado da correção)", - "sendirectemail": "Envia um email com os resultados a este estudante", + "sendirectemail": "Enviar um e-mail com os resultados a este estudante", "envoimailpersonal": "Enviar Email", "concatenation": "Fusão (concatenação) com o PDF carregado anteriormente:", "concatenationTooltip": "Permite escolher entre fundir as provas digitalizadas com as do novo documento, ou substitui-las totalmente pelas do novo documento(se selecionado, quer dizer concatenação)", @@ -394,22 +394,22 @@ "validaterecognizedTooltip": "Associa o estudante reconhecido e esta prova. Esta ação é acessível pelo atalho de teclado Ctrl + Enter", "gotonextnonboundsheet": "Ir à próxima prova não associada a um estudante", "gotopreviousnonboundsheet": "Ir à prova anterior não associada a um estudante", - "numeroTooltip": "Número da questão para esta zona. Várias zonas podem ser associadas ao menos número", + "numeroTooltip": "Número da questão para esta região. Várias regiões podem ser associadas à mesma questão", "questionpointtooltip": "Quantidade de pontos associados a esta questão", "typequestionTooltip": "Tipo de questão (QME para as questões de múltipla escolha, de tipo casa de seleção ou manual para as questões que serão avaliadas manualmente pelo corretor", - "manualgradetypequestionTooltip": "Quando uma questão é avaliada manualmente pelo corretor, este último pode ou atribuir uma nota exata para uma resposta, ou por comentários que atribuem ou retiram pontos. O interesse deste tipo de avaliação é de poder ponderar as notas atribuídas a um comentário durante a correção e atualizar dinamicamente sua escala", + "manualgradetypequestionTooltip": "Quando um corretor corrige manualmente uma questão, ele pode atribuir uma nota exata (direta), usar comentários positivos e negativos, para adicionar ou retirar pontos, respectivamente.
O corretor pode também fazer uma correção híbrida, onde ele atribui a cada comentário uma porcentagem positiva ou negativa. O interesse deste tipo de correção é poder ponderar as notas atribuídas a um comentário durante a correção e modificar a escala dinamicamente.", "nbrepageintemplateTooltip": "Quantidade de páginas por provas. (Este valor é calculado automaticamente a partir da quantidade de páginas do modelo.) ⚠️ A quantidade de páginas digitalizadas deve ser exatamente igual à quantidade de provas digitalizadas multiplicada pela quantidade de páginas do modelo)", "showmappingTooltip": "Ver os pontos de interesse que foram usados para fazer o alinhamento. Isso geralmente o ajuda a entender por que os problemas durante a digitalização das cópias causaram dificuldades durante o alinhamento das cópias.", "showLayoutOptionsTooltip": "Modificar certas opções associadas ao algorítmo de detecção dos nomes nas provas", "showPaginatorTooltip": "Navega entre as provas digitalizadas para atribui-las a um ou mais estudantes desta disciplina", "showFullPageTooltip": "Visualiza a prova digitalizada (numa janela modal)", - "factorTooltip": "Aumentar a tamanho das zonas (nome, sobrenome, matrícula)", + "factorTooltip": "Aumentar a tamanho das regiões (nome, sobrenome, matrícula)", "gotonextnonboundsheetTooltip": "Associa este estudante reconhecido a esta prova", "showLayoutOptionsCorrectionTooltip": "Modifica certas opções associadas à correção de provas", "showPaginatorQuestionCorrectionTooltip": "Navegar entre as questões desta prova. Ctrl + ⬇️ (Mac: Cmd + ⬇️) ou Ctrl + ⬆ (Mac: Cmd + ⬆)", "showPaginatorCopieCorrectionTooltip": "Navegar entre as provas para esta mesma questão. Ctrl + ⬅️ (Mac: Cmd + ⬅️) ou Ctrl + ➡️ (Mac: Cmd + ➡️)", "noAlignTooltip": "Trabalhar com uma prova não alinhada (útil quando o processo de alinhamento deu errado)", - "factorQuestionTooltip": "Permite aumentar a tamanho das zonas de resposta para esta questão (útil se o estudante escreveu fora das zonas)", + "factorQuestionTooltip": "Permite aumentar a tamanho das regiões de resposta para esta questão (útil se o estudante escrever fora das regiões)", "shiftPageQuestionTooltip": "Permite deslocar as páginas (útil se faltar uma página ou se uma folha se inseriu durante a digitalização). ⚠️ É melhor e mais confortável limpar o PDF no momento do carregamento para visualizar as vinhetas", "starAnswerTooltip": "Permite marcar esta resposta como uma excelente resposta. A resposta será então usada para criar um gabarito. Várias respostas podem ser marcadas como excelentes", "worstAnswerTooltip": "Permite marcar esta resposta como péssima, para encontrá-la rapidamente durante a correção na disciplina por exemplo, para explicar por que esta resposta estava errada", @@ -420,16 +420,16 @@ "nbreClusterTooltip": "Fixe o quantidade de clusters visés pelo algorítmo de clustering", "showresultLienProfTooltip": "Permite retornar à visualização de correção para este estudante", "showresultLienEleveTooltip": "Visualização do ponto de vista do aluno após envio da correção (também é útil para gérer a envio dos resultados sem passar pelo plateforme", - "showresultLienPdfTooltip": "Permite visualizar o pdf anotado que será généré se voce choisissez de joindre este pdf à a email de resultado", + "showresultLienPdfTooltip": "Permite visualizar o pdf anotado que será gerado se voce escolher de anexar este pdf ao e-mail de retorno", "envoiemailTooltip": "Permite configurar e em seguida enviar um email aos estudantes com o resultado desta avaliação", "exportExcelTooltip": "Permite d'exportar o tabela abaixo ao formato Excel. Esta exportação contém também os dados brutos de cada questão.", "exportCSVTooltip": "Permite d'exportar o tabela abaixo ao formato CSV. Esta exportação contém também os dados brutos de cada questão.", "voirStatistiquesTooltip": "Permite d'obtenir uma visualização offrant um certain quantidade de estatísticas para este avaliação. Estatísticas, por estudante, por questão, etc.", "voirReponsesRepresentativeTooltip": "Permite listar as respostas marcadas como excelente ou como péssima para cada uma dos questões", - "envoiemailPdfTooltip": "Se selecionado, um pdf anotado da prova da estudante será jointe a este e-mail. ⚠️ o tamanho de cada email será maior.", + "envoiemailPdfTooltip": "Se selecionado, um pdf anotado da prova da estudante será jointe a este e-mail. ⚠️ o tamanho de cada e-mail será maior.", "envoiemailAbsentTooltip": "Se selecionado, um e-mail será enviado aos estudantes ausentes nesta avaliação.", "envoiemailActionTooltip": "Inicia o envio de e-mail à cada estudante, usando o corpo do message acima", - "statToggleValueTooltip": "Permite mudar entre as valeurs brutos ou as valeurs normalizados", + "statToggleValueTooltip": "Permite mudar entre os valores brutos ou os valores normalizados", "voirCopieStatistiquesTooltip": "Permite retornar para a visualização correção para este estudante", "voirCopieFullPageTooltip": "Permite visualizar a prova digitalizada para este estudante (numa janela modal)", "pasdepageassociee": "Nenhuma prova para associar", @@ -440,7 +440,7 @@ "nbreCore": "Quantidade de núcleos usados", "nbreCoreTooltip": "Quanto mais núcleos forem usados durante o alinhamento, mais memória será usada. Reduza a quantidade de núcloes se esta etapa solicitar demais o nevagador", "showAlignementOptionsTooltip": "Permite modificar certas opções associadas ao algorítmo de alinhamento das provas", - "editCommentTooltip": "Edição dos valeurs deste comentário (mesmo se o titulo ou a descrição não foram definidos anteriormente)", + "editCommentTooltip": "Edição dos valores deste comentário (mesmo se o titulo ou a descrição não foram definidos anteriormente)", "epaisseur": "Espessura do traço : ", "epaisseurTooltip": "Permite ajustar a espessura do traço", "fontsize": "Tamanho da fonte: ", @@ -453,7 +453,7 @@ "gotoCorrectionTooltipView": "Visualizar a correção, somente para professores", "editquestionTooltip": "Permite a edição das propriedades da questão para atualizar o escala", "firsthelpTitle": "Algumas dicas", - "firsthelpdetail": "Esta vista lhe dá acesso a 6 etapas importantes do processo de avaliação.

De modo geral, se houver um problema nesse ponto, duas causas são possíveis: ou a memória tampão local foi corrompida,ou a quantidade de provas associadas não corresponde à razão quantidade de páginas na memória tampão / quantidade de páginas no modelo. É possível visualizar o estado da memória tampão clicando no ícone informação na parte superior desta página.

", + "firsthelpdetail": "Esta vista lhe dá acesso a 6 etapas importantes do processo de avaliação.
  • 1a etapa (Anotar o modelo) permite a identificação das regiões de interesse para a avaliação e também construir uma escala de avaliação.
  • 2a e 3a etapas (Carregar as provas digitalizadas e endireitar as images) permite o carregamento de um documento PDF com as provas digitalizadas e preencher a memória tampão local com todas as imagens alinhadas e não alinhadas das provas. A memória tampão é então sincronizada com o servidor e ficará disponível para ser descarregada em outros dispositivos (p. ex. tablete) ou por outros corretores.Se necessário, a memória tampão pode ser criada novamente a qualquer momento e sem nenhum risco de perda de dados. É sempre possível de recomeçar a 2a etapa e reconstituir a memória tampão, clicando em Analisar a partir do PDF,e em seguida refazer a 3a etapa (endireitamento das páginas). A cada uma destas etapas, pode-se visualizar o estado da memória tampão observando a parte vinheta presente da 2a etapa, memória tampão das imagens não alinhadas e a 3a etapa, memória tampão das imagens alinhadas.
  • A 4a etapa associa as provas digitalizadas aos estudantes presentes la lista que foi importada durante a criação da disciplina.
  • Para chegar à 5a etapa (Corrigir prova) e à 6a etapa (Ver resultados), é preciso satisfazer a seguinte condição:
    quantidade de páginas não-alinhadas == quantidade de páginas alinhadas equantidade de associações página-estudante == quantidade de páginas alinhadas / quantidade de páginas do modelo.
    (Por exemplo, se o modelo tiver 3 páginas e o documento PDF tiver 12 páginas, correspondendo então à 12 imagens alinhadas e 12 imagens não-alinhadas na memória tampão e que houver 4 provas associadas, é possível começar a correção)Se esta condição não for cumprida, então não será possível passar à etapa de correção nem à etapa de resultado

De modo geral, se houver um problema nesse ponto, duas causas são possíveis: ou a memória tampão local foi corrompida,ou a quantidade de provas associadas não corresponde à razão quantidade de páginas na memória tampão / quantidade de páginas no modelo. É possível visualizar o estado da memória tampão clicando no ícone informação na parte superior desta página.

", "info": "Informação sobre a memória tampão da avaliação", "infodetail": "Mostra informações sobre a memória tampão da avaliação para entender por quê não é possível começar a correção", "showInfoExamTitle": "Informações sobre o estado da memória tampão desta avaliação", @@ -526,7 +526,7 @@ "suppressioncopie": "Exclusão prova {{page}}", "suppressioncopieTooltip": "Limpa todas as páginas desta prova da memória tampão. É possível voltar atrás, recomeçando a análise a partir do PDF", "rotationcopie": "Giro prova {{page}}", - "rotationcopieTooltip": "Esta ação permet de girar em 180° todas as páginas desta prova da memória tampão", + "rotationcopieTooltip": "Gira em 180° todas as páginas desta prova que estão na memória tampão", "moreoperation": "Operações suplementares", "moreoperationTooltip": "Esse botão permite que você execute ações mais complexas (em lotes) em imagens PDF (exclusão por número de página, rotação por número de página, etc.).", "removeallperpage": "Exclusão por número de página de cada prova",