Simulados e Questões - Decreto Estadual nº 43.245/2004
Carregando...

Decreto Estadual nº 43.245/2004 (Regulamento Disciplinar da Brigada Militar do Estado do Rio Grande do Sul)

Faça login e assine para usar o filtro de questões.
Questão 5 de 10

    
`).removeClass('hidden'); // Inicializar as abas new bootstrap.Tab(document.querySelector(`#estatisticasTabs_${questaoId} .nav-link.active`)); // Coletar dados das alternativas const ordemAtual = { a: $questao.find('.opcao[data-opcao="a"] .opcao-texto').text().trim(), b: $questao.find('.opcao[data-opcao="b"] .opcao-texto').text().trim(), c: $questao.find('.opcao[data-opcao="c"] .opcao-texto').text().trim(), d: $questao.find('.opcao[data-opcao="d"] .opcao-texto').text().trim(), e: $questao.find('.opcao[data-opcao="e"] .opcao-texto').text().trim() }; // Carregar estatísticas $.ajax({ url: 'estatisticas_questao.php', method: 'POST', data: { questao_id: questaoId, ordem_atual_a: ordemAtual.a, ordem_atual_b: ordemAtual.b, ordem_atual_c: ordemAtual.c, ordem_atual_d: ordemAtual.d, ordem_atual_e: ordemAtual.e }, success: function(response) { try { const data = typeof response === 'string' ? JSON.parse(response) : response; if (data.success) { // Atualizar apenas o conteúdo da aba individual const $individualPane = $(`#individual_${questaoId}`); $individualPane.html(`
Distribuição das Respostas por Alternativa
Taxa de Acerto Individual
Taxa de Acerto Geral
Seu Histórico de Respostas
Data/Hora Alternativa Escolhida Resultado
`); // Criar mapeamento entre resposta salva e letra atual const mapeamentoRespostas = {}; for (const [letra, texto] of Object.entries(data.ordem_atual)) { data.alternativas.forEach(alt => { if (alt.resposta_usuario === texto) { mapeamentoRespostas[texto] = letra.toUpperCase(); } }); } // Gráfico de alternativas if (data.alternativas && data.alternativas.length > 0) { const alternativasCtx = document.getElementById(`alternativasChart_${questaoId}`).getContext('2d'); new Chart(alternativasCtx, { type: 'bar', data: { labels: data.alternativas.map(a => `Alternativa ${mapeamentoRespostas[a.resposta_usuario] || '?'}`), datasets: [{ label: 'Percentual de Escolha', data: data.alternativas.map(a => parseFloat(a.percentual)), backgroundColor: 'rgba(54, 162, 235, 0.5)', borderColor: 'rgba(54, 162, 235, 1)', borderWidth: 1 }] }, options: { responsive: true, scales: { y: { beginAtZero: true, max: 100, ticks: { callback: function(value) { return value + '%'; } } } }, plugins: { legend: { display: false }, tooltip: { callbacks: { title: function(context) { return `Alternativa ${context[0].label.split(' ')[1]}`; }, label: function(context) { return `${context.raw.toFixed(1)}% das respostas`; } } } } } }); // Adiciona nota explicativa const $cardBody = $(`#alternativasChart_${questaoId}`).parent(); $cardBody.append(`
Nota: As letras das alternativas mudam dinamicamente pois as opções são apresentadas em ordem aleatória a cada vez que a página é carregada.
`); } else { $(`#alternativasChart_${questaoId}`).parent().html( '

Nenhuma resposta registrada ainda

' ); } // Gráfico de acertos individuais if (data.estatisticas_gerais) { const acertosCtx = document.getElementById(`acertosChart_${questaoId}`).getContext('2d'); new Chart(acertosCtx, { type: 'pie', data: { labels: ['Acertos', 'Erros'], datasets: [{ data: [ parseInt(data.estatisticas_gerais.total_acertos) || 0, parseInt(data.estatisticas_gerais.total_erros) || 0 ], backgroundColor: [ 'rgba(75, 192, 192, 0.5)', 'rgba(255, 99, 132, 0.5)' ], borderColor: [ 'rgba(75, 192, 192, 1)', 'rgba(255, 99, 132, 1)' ], borderWidth: 1 }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'bottom' }, tooltip: { callbacks: { label: function(context) { const value = context.raw; return `${context.label}: ${value} resposta${value !== 1 ? 's' : ''}`; } } } } } }); } else { $(`#acertosChart_${questaoId}`).parent().html( '

Nenhuma resposta registrada ainda

' ); } // Gráfico de acertos gerais if (data.estatisticas_gerais) { const acertosGeraisCtx = document.getElementById(`acertosGeraisChart_${questaoId}`).getContext('2d'); new Chart(acertosGeraisCtx, { type: 'pie', data: { labels: ['Acertos Gerais', 'Erros Gerais'], datasets: [{ data: [ parseFloat(data.estatisticas_gerais.percentual_acertos) || 0, parseFloat(data.estatisticas_gerais.percentual_erros) || 0 ], backgroundColor: [ 'rgba(75, 192, 192, 0.5)', 'rgba(255, 99, 132, 0.5)' ], borderColor: [ 'rgba(75, 192, 192, 1)', 'rgba(255, 99, 132, 1)' ], borderWidth: 1 }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'bottom' }, tooltip: { callbacks: { label: function(context) { const value = context.raw; const total = data.estatisticas_gerais.total_respostas; const count = context.dataIndex === 0 ? data.estatisticas_gerais.total_acertos : data.estatisticas_gerais.total_erros; return `${value.toFixed(1)}% (${count} respostas)`; }, afterLabel: function(context) { const total = data.estatisticas_gerais.total_respostas; const alunos = data.estatisticas_gerais.total_alunos; if (context.dataIndex === 0) { return `Total de alunos: ${alunos}`; } return ''; } } }, title: { display: true, text: `Total de ${data.estatisticas_gerais.total_respostas} respostas`, position: 'bottom', padding: { top: 10, bottom: 0 }, font: { size: 12 } } } } }); } else { $(`#acertosGeraisChart_${questaoId}`).parent().html( '

Nenhuma resposta registrada ainda

' ); } // Preencher histórico const $historico = $(`#historicoRespostas_${questaoId}`); $historico.empty(); if (data.historico && data.historico.length > 0) { data.historico.forEach(h => { const letraAtual = mapeamentoRespostas[h.resposta_usuario] || '?'; $historico.append(` ${h.data_resposta} Alternativa ${letraAtual} ${h.esta_correta == 1 ? 'Correta' : 'Incorreta'} `); }); } else { $historico.append(` Nenhuma resposta registrada ainda `); } // Inicializar tooltips var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')) tooltipTriggerList.map(function (tooltipTriggerEl) { return new bootstrap.Tooltip(tooltipTriggerEl) }); } else { $estatisticasConteudo.html(`
Não foi possível carregar as estatísticas: ${data.error || 'Erro desconhecido'}
`); } } catch (e) { $estatisticasConteudo.html(`
Erro ao processar estatísticas

Detalhes: ${e.message}

${response}
`); } }, error: function(xhr, status, error) { $estatisticasConteudo.html(`
Erro ao carregar estatísticas

Status: ${status}

Erro: ${error}

${xhr.responseText}
`); } }); } else { $estatisticasConteudo.addClass('hidden'); } }, 300)); var questoes_base64 = "W3siaWQiOjI5NDYzLCJxbGVnX2lkIjoiUUxFRy0yOTQ2MyIsImVudW5jaWFkbyI6Ik8gc3VwZXJpb3IgaGllclx1MDBlMXJxdWljbyBkZXZlIGV2aXRhciBpbnRlcmZlcmlyIG5hcyByZWxhXHUwMGU3XHUwMGY1ZXMgZW50cmUgc2V1cyBzdWJvcmRpbmFkb3MuIiwib3BjYW9fYSI6IkVycmFkbyIsIm9wY2FvX2IiOiJDZXJ0byIsIm9wY2FvX2MiOiIiLCJvcGNhb19kIjoiIiwib3BjYW9fZSI6IiIsInJlc3Bvc3RhX2NvcnJldGEiOiJBIiwiZXhwbGljYWNhbyI6Ik8gc3VwZXJpb3IgdGVtIG8gZGV2ZXIgZGUgaW5jZW50aXZhciBlIG1hbnRlciBhIGhhcm1vbmlhIGVudHJlIHN1Ym9yZGluYWRvcy48YnI+IiwidGV4dG9fbGVpIjoiQXJ0LiAxXHUwMGJhLCBcdTAwYTcgMlx1MDBiYSAtIEluY3VtYmUgYW8gc3VwZXJpb3IgaGllclx1MDBlMXJxdWljbyBpbmNlbnRpdmFyIGUgbWFudGVyIGEgaGFybW9uaWEgZSBhIGFtaXphZGUgZW50cmUgc2V1cyBzdWJvcmRpbmFkb3MuPGJyPiIsInN1YmRpdmlzYW9faWQiOiI1MF8xXzEiLCJsZWdpc2xhY2FvX2lkIjo1MCwidXBkYXRlZF9hdCI6IjIwMjUtMDMtMjYgMjM6MDE6MTMiLCJoaWVyYXJxdWlhX2NvbXBsZXRhIjoiUmlvIEdyYW5kZSBkbyBTdWwgPiBEZWNyZXRvIEVzdGFkdWFsIG5cdTAwYmEgNDMuMjQ1XC8yMDA0IC0gUmVndWxhbWVudG8gRGlzY2lwbGluYXIgZGEgQnJpZ2FkYSBNaWxpdGFyIGRvIEVzdGFkbyBkbyBSaW8gR3JhbmRlIGRvIFN1bCA+IFRcdTAwZWR0dWxvIEkgLSBEaXNwb3NpXHUwMGU3XHUwMGY1ZXMgR2VyYWlzID4gQ2FwXHUwMGVkdHVsbyBJIC0gRGlzcG9zaVx1MDBlN1x1MDBmNWVzIFByZWxpbWluYXJlcyJ9XQ=="; var questoes = JSON.parse(atob(questoes_base64)); // Função para carregar estatísticas gerais function carregarEstatisticas(questaoId) { if (!usuarioLogado) { mostrarAlertaLogin('as estatísticas'); return; } if (false) { $.ajax({ url: 'estatisticas_questao.php', method: 'POST', data: { questao_id: questaoId }, success: function(response) { // Processar e exibir estatísticas } }); } else { // Exibir mensagem para usuários não logados $('.estatisticas-conteudo').html(`
Faça login para ver estatísticas detalhadas.
`); } } function carregarEstatisticasGerais(questaoId) { // Usar as variáveis já calculadas no PHP const estatisticas = { total_questoes: 702, corretas: 0, erradas: 0, nao_respondidas: 702 }; renderizarEstatisticasGerais(estatisticas, questaoId); } function renderizarEstatisticasGerais(estatisticas, questaoId) { const $conteudoGeral = $(`#geral_${questaoId}`); // Verifica se é um bloco de questões erradas const isBlocoQuestoesErradas = false; let htmlBotoes = `
`; if (!isBlocoQuestoesErradas) { htmlBotoes += `
`; } $conteudoGeral.html(` ${htmlBotoes}
Distribuição das Respostas
Taxa de Acerto do Bloco
Progresso do Bloco
`); renderizarDistribuicaoRespostas(estatisticas, `distribuicaoRespostasChart_${questaoId}`); renderizarTaxaAcerto(estatisticas, `taxaAcertoChart_${questaoId}`); renderizarProgressoBloco(estatisticas, `progressoBlocoChart_${questaoId}`); $(document).on('click', '#duplicarBloco', function() { duplicarBloco(76); $('#modalOpcoesBloco').modal('hide'); }); $(document).on('click', '#reiniciarBloco', function() { reiniciarBloco(76); $('#modalOpcoesBloco').modal('hide'); }); $(document).on('click', '#criarBlocoErros', function() { criarBlocoErradas(76); $('#modalOpcoesBloco').modal('hide'); }); function criarBlocoErradas(blocoId) { $.ajax({ url: 'criar_bloco_erros.php', method: 'POST', data: { bloco_id: blocoId }, dataType: 'json', success: function(response) { if (response.success) { alert(`Novo bloco criado com sucesso! Contém ${response.total_questoes} questões erradas. Redirecionando...`); window.location.href = response.novo_bloco_url; } else { alert('Erro ao criar o bloco: ' + response.error); } }, error: function() { alert('Erro ao comunicar com o servidor'); } }); } } function renderizarDistribuicaoRespostas(estatisticas, elementId) { const ctx = document.getElementById(elementId).getContext('2d'); new Chart(ctx, { type: 'pie', data: { labels: ['Corretas', 'Erradas', 'Não Respondidas'], datasets: [{ data: [ estatisticas.corretas, estatisticas.erradas, estatisticas.nao_respondidas ], backgroundColor: ['#28a745', '#dc3545', '#6c757d'] }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'bottom' }, tooltip: { callbacks: { label: function(context) { const label = context.label || ''; const value = context.raw; const total = estatisticas.total_questoes; const percentage = ((value / total) * 100).toFixed(1); return `${label}: ${value} (${percentage}%)`; } } } } } }); } function renderizarTaxaAcerto(estatisticas, elementId) { const ctx = document.getElementById(elementId).getContext('2d'); const totalRespondidas = estatisticas.corretas + estatisticas.erradas; const percentualAcertos = totalRespondidas > 0 ? (estatisticas.corretas / totalRespondidas * 100).toFixed(1) : 0; const percentualErros = totalRespondidas > 0 ? (estatisticas.erradas / totalRespondidas * 100).toFixed(1) : 0; new Chart(ctx, { type: 'doughnut', data: { labels: ['Acertos', 'Erros'], datasets: [{ data: [percentualAcertos, percentualErros], backgroundColor: ['#28a745', '#dc3545'] }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'bottom' }, tooltip: { callbacks: { label: function(context) { const label = context.label || ''; const value = parseFloat(context.raw).toFixed(1); return `${label}: ${value}%`; } } } } } }); } function renderizarProgressoBloco(estatisticas, elementId) { const ctx = document.getElementById(elementId).getContext('2d'); const respondidas = estatisticas.corretas + estatisticas.erradas; const percentualRespondidas = (respondidas / estatisticas.total_questoes * 100).toFixed(1); const percentualNaoRespondidas = (100 - percentualRespondidas).toFixed(1); new Chart(ctx, { type: 'doughnut', data: { labels: ['Respondidas', 'Não Respondidas'], datasets: [{ data: [percentualRespondidas, percentualNaoRespondidas], backgroundColor: ['#17a2b8', '#6c757d'] }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'bottom' }, tooltip: { callbacks: { label: function(context) { const label = context.label || ''; const value = parseFloat(context.raw).toFixed(1); const count = label === 'Respondidas' ? respondidas : estatisticas.nao_respondidas; return `${label}: ${value}% (${count} questões)`; } } } } } }); } // Função para garantir que o botão seja visível function mostrarBotaoCriarBloco() { $('#criarBlocoErros').show(); } // Chamar a função quando a aba geral for mostrada $('#geral-tab').on('shown.bs.tab', function (e) { mostrarBotaoCriarBloco(); }); // Chamar a função também quando o documento estiver pronto mostrarBotaoCriarBloco(); // Manipulador de clique para o botão $(document).on('click', '#criarBlocoErros', function() { const blocoId = 76; $.ajax({ url: 'criar_bloco_erros.php', method: 'POST', data: { bloco_id: blocoId }, dataType: 'json', success: function(response) { if (response.success) { alert('Novo bloco criado com sucesso! Redirecionando...'); window.location.href = response.novo_bloco_url; } else { alert('Erro ao criar o bloco: ' + response.error); } }, error: function() { alert('Erro ao comunicar com o servidor'); } }); }); // Manipulador de clique para o botão "Duplicar Bloco" $(document).on('click', '#duplicarBloco', function() { const blocoId = 76; if (confirm("Tem certeza que deseja duplicar este bloco?")) { $.ajax({ url: 'duplicar_bloco.php', method: 'POST', data: { bloco_id: blocoId }, dataType: 'json', success: function(response) { if (response.success) { alert('Bloco duplicado com sucesso! Redirecionando...'); window.location.href = response.novo_bloco_url; } else { alert('Erro ao duplicar o bloco: ' + response.error); } }, error: function() { alert('Erro ao comunicar com o servidor'); } }); } }); // Manipulador de clique para o botão "Reiniciar Bloco" $(document).on('click', '#reiniciarBloco', function() { const blocoId = 76; if (confirm("Tem certeza que deseja reiniciar este bloco? Todas as suas respostas serão apagadas.")) { $.ajax({ url: 'reiniciar_bloco.php', method: 'POST', data: { bloco_id: blocoId }, dataType: 'json', success: function(response) { if (response.success) { alert('Bloco reiniciado com sucesso! A página será recarregada.'); window.location.reload(); } else { alert('Erro ao reiniciar o bloco: ' + response.error); } }, error: function() { alert('Erro ao comunicar com o servidor'); } }); } }); function selectOption(letter) { // Usar seletor mais direto e eficiente const $questao = $('.questao:not(.hidden)'); const $opcao = $questao.find(`.opcao[data-opcao="${letter}"]`); // Verificar existência antes de manipular if ($opcao.length) { handleOptionClick($opcao); } } function proximaQuestaoNaoResolvida() { const tipoSelecionado = $('#tipoQuestoes').val(); const $questoesFiltradas = tipoSelecionado === 'todas' ? $('.questao') : $(`.questao[data-tipo-questao="${tipoSelecionado}"]`); let proximo = (questaoAtualIndex + 1) % $questoesFiltradas.length; while (proximo !== questaoAtualIndex) { const $questao = $questoesFiltradas.eq(proximo); if (!$questao.data('respondida')) { questaoAtualIndex = $questoes.index($questao); showQuestion(questaoAtualIndex); return; } proximo = (proximo + 1) % $questoesFiltradas.length; } alert('Todas as questões já foram resolvidas!'); } function proximaQuestaoAleatoriaNaoResolvida() { const tipoSelecionado = $('#tipoQuestoes').val(); const $questoesFiltradas = tipoSelecionado === 'todas' ? $('.questao') : $(`.questao[data-tipo-questao="${tipoSelecionado}"]`); const ehAssinanteOuAdmin = false; const limiteQuestoes = ehAssinanteOuAdmin ? $questoesFiltradas.length : Math.min(10, $questoesFiltradas.length); let naoResolvidas = $questoesFiltradas.filter(function(index) { return index < limiteQuestoes && !$(this).data('respondida'); }); if (naoResolvidas.length > 0) { let aleatorio = Math.floor(Math.random() * naoResolvidas.length); questaoAtualIndex = $questoesFiltradas.index(naoResolvidas[aleatorio]); showQuestion(questaoAtualIndex); } else { // Se todas as questões disponíveis foram resolvidas, seleciona uma aleatória dentro do limite let aleatorio = Math.floor(Math.random() * limiteQuestoes); questaoAtualIndex = aleatorio; showQuestion(questaoAtualIndex); alert('Todas as questões disponíveis já foram resolvidas. Selecionando uma aleatória.'); } } function atualizarIndicadorAtalhos() { if (editorAtivo) { $('.atalhos-status').removeClass('hidden').text('Atalhos desativados - Editor ativo'); } else { $('.atalhos-status').addClass('hidden'); } } function handleKeyPress(letter) { const currentTime = new Date().getTime(); if (currentTime - lastKeyPressTime < doubleClickThreshold) { // Duplo clique simulado const $opcao = $('.questao:not(.hidden) .opcao[data-opcao="' + letter + '"]'); $opcao.toggleClass('descartada'); if ($opcao.hasClass('descartada') && $opcao.hasClass('selected')) { $opcao.removeClass('selected'); $opcao.find('input[type="radio"]').prop('checked', false); } } else { // Clique simples selectOption(letter); } lastKeyPressTime = currentTime; } const keyHandlers = { 37: () => document.getElementById('btn-prev').click(), // Seta para esquerda 39: () => document.getElementById('btn-next').click(), // Seta para direita 78: () => document.getElementById('btn-proxima-nao-resolvida').click(), // Tecla N 77: () => document.getElementById('btn-proxima-aleatoria-nao-resolvida').click(), // Tecla M 82: () => $('.questao:not(.hidden) .responder').click(), // Tecla R 88: () => $('.questao:not(.hidden) .explicacao').click(), // Tecla X 13: () => $('.questao:not(.hidden) .responder').click(), // Enter 65: () => handleKeyPress('a'), // A 66: () => handleKeyPress('b'), // B 67: () => handleKeyPress('c'), // C 68: () => handleKeyPress('d'), // D 69: () => handleKeyPress('e'), // E 49: () => handleKeyPress('a'), // 1 50: () => handleKeyPress('b'), // 2 51: () => handleKeyPress('c'), // 3 52: () => handleKeyPress('d'), // 4 53: () => handleKeyPress('e'), // 5 97: () => handleKeyPress('a'), // Numpad 1 98: () => handleKeyPress('b'), // Numpad 2 99: () => handleKeyPress('c'), // Numpad 3 100: () => handleKeyPress('d'), // Numpad 4 101: () => handleKeyPress('e'), // Numpad 5 }; // Handler para teclas $(document).on('keydown', throttle(function(e) { // Verifica se algum modal está aberto ou se o campo de pesquisa está ativo if ($('.modal.show').length > 0 || campoPesquisaAtivo) { // Se algum modal estiver aberto ou o campo de pesquisa estiver ativo, não processa os atalhos return; } const handler = keyHandlers[e.which]; if (handler) { e.preventDefault(); handler(); } }, 50)); // Adicione um handler para o clique fora do editor $(document).on('click', function(e) { if (!$(e.target).closest('.anotacoes-conteudo').length && !$(e.target).closest('.anotacoes').length) { editorAtivo = false; } }); // Modifique o handler de salvar anotação $(document).on('click', '.salvar-anotacao', function() { const $questao = $(this).closest('.questao'); const questaoId = $questao.data('questao-id'); const editor = editors[questaoId]; if (editor) { $.ajax({ url: 'salvar_anotacao.php', method: 'POST', data: { questao_id: questaoId, conteudo: editor.getData() }, success: function(response) { const data = JSON.parse(response); if (data.success) { mostrarAlerta('Anotação salva com sucesso!', 'success'); // Desativa o editor após salvar editorAtivo = false; } } }); } }); // Carregar respostas salvas (se houver) $questoes.each(function() { const $questao = $(this); const respostaUsuario = $questao.data('resposta-usuario'); if (respostaUsuario) { $questao.find(`input[value="${respostaUsuario}"]`).prop('checked', true); $questao.data('respondida', true); estatisticas.resolvidas++; // Aqui você pode adicionar lógica para determinar se a resposta estava correta // e atualizar estatisticas.corretas e estatisticas.erradas } }); atualizarEstatisticas(); updateNavigationButtons(); let editors = {}; let editor = null; let questaoAtualId = null; // Handler para o botão de anotações $(document).on('click', '.anotacoes', function() { if (!usuarioLogado) { mostrarAlertaLogin('as anotações'); return; } const $questao = $(this).closest('.questao'); questaoAtualId = $questao.data('questao-id'); // Mostrar o modal $('#modalAnotacoes').modal('show'); // Inicializar o editor se ainda não foi inicializado if (!editor) { ClassicEditor .create(document.querySelector('#editor'), { toolbar: [ 'heading', '|', 'bold', 'italic', 'link', 'bulletedList', 'numberedList', '|', 'blockQuote', 'insertTable', '|', 'undo', 'redo' ], placeholder: 'Digite suas anotações aqui...' }) .then(newEditor => { editor = newEditor; carregarAnotacao(questaoAtualId); }) .catch(error => { }); } else { carregarAnotacao(questaoAtualId); } }); // Função para carregar anotações function carregarAnotacao(questaoId) { if (!usuarioLogado) { mostrarAlertaLogin('as anotações'); return; } // Mostrar loading $('#editorLoading').removeClass('d-none'); editor.setData(''); // Limpa o editor enquanto carrega $.ajax({ url: 'carregar_anotacao.php', method: 'POST', data: { questao_id: questaoId }, success: function(response) { try { const data = JSON.parse(response); if (data.success) { // Se houver conteúdo, carrega no editor if (data.conteudo) { editor.setData(data.conteudo); } else { editor.setData(''); // Se não houver conteúdo, deixa vazio } } else { editor.setData('Erro ao carregar anotação.'); } } catch (e) { editor.setData('Erro ao processar resposta do servidor.'); } }, error: function(xhr, status, error) { editor.setData('Erro ao se comunicar com o servidor.'); }, complete: function() { $('#editorLoading').addClass('d-none'); } }); } // Função para salvar anotações function salvarAnotacao(questaoId, conteudo) { if (!usuarioLogado) { mostrarAlertaLogin('salvar anotações'); return; } if (false) { $.ajax({ url: 'salvar_anotacao.php', method: 'POST', data: { questao_id: questaoId, conteudo: conteudo }, success: function(response) { // Processar resposta } }); } else { mostrarAlerta('Faça login para salvar anotações', 'info'); } } // Salvar anotação $(document).on('click', '.salvar-anotacao-modal', function() { if (!usuarioLogado) { mostrarAlertaLogin('salvar anotações'); return; } if (editor && questaoAtualId) { const conteudo = editor.getData(); $.ajax({ url: 'salvar_anotacao.php', method: 'POST', data: { questao_id: questaoAtualId, conteudo: conteudo }, success: function(response) { try { const data = JSON.parse(response); if (data.success) { mostrarAlerta('Anotação salva com sucesso!', 'success'); $('#modalAnotacoes').modal('hide'); } } catch (e) { } }, error: function(xhr, status, error) { mostrarAlerta('Erro ao salvar anotação', 'danger'); } }); } }); // Limpar editor quando o modal for fechado $('#modalAnotacoes').on('hidden.bs.modal', function() { if (editor) { editor.setData(''); } questaoAtualId = null; }); // Função auxiliar para mostrar alertas function mostrarAlerta(mensagem, tipo) { const $alerta = $(` `); $('body').append($alerta); setTimeout(() => $alerta.alert('close'), 3000); } // Handler para o botão de editar nas anotações listadas $(document).on('click', '.editar-anotacao', function() { const questaoId = $(this).data('questao-id'); // Fechar o modal de todas as anotações $('#modalTodasAnotacoes').modal('hide'); // Esperar um pouco para evitar problemas com múltiplos modais setTimeout(() => { // Atualizar o questaoAtualId questaoAtualId = questaoId; // Mostrar o modal de edição $('#modalAnotacoes').modal('show'); // Se o editor já existe, carregar a anotação if (editor) { carregarAnotacao(questaoId); } else { // Se o editor ainda não existe, criar e depois carregar a anotação ClassicEditor .create(document.querySelector('#editor'), { toolbar: [ 'heading', '|', 'bold', 'italic', 'link', 'bulletedList', 'numberedList', '|', 'blockQuote', 'insertTable', '|', 'undo', 'redo' ], placeholder: 'Digite suas anotações aqui...' }) .then(newEditor => { editor = newEditor; carregarAnotacao(questaoId); }) .catch(error => { }); } }, 300); // Espera 300ms para evitar problemas com a transição dos modais }); // Ver todas as anotações $(document).on('click', '.ver-todas-anotacoes', function() { if (!usuarioLogado) { mostrarAlertaLogin('ver todas as anotações'); return; } $('#modalAnotacoes').modal('hide'); // Mostrar loading const $lista = $('.anotacoes-lista'); $lista.html(`
Carregando...
Carregando anotações...
`); // Mostra o modal com o loading $('#modalTodasAnotacoes').modal('show'); $.ajax({ url: 'listar_anotacoes.php', method: 'POST', data: { bloco_id: 76 }, success: function(response) { try { const data = typeof response === 'string' ? JSON.parse(response) : response; if (data.success) { $lista.empty(); if (data.anotacoes && data.anotacoes.length > 0) { data.anotacoes.forEach(anotacao => { $lista.append(`
${anotacao.identificador}

${anotacao.enunciado}

${anotacao.conteudo}
Última atualização: ${new Date(anotacao.atualizado_em).toLocaleString()}
`); }); } else { $lista.html(`
Nenhuma anotação encontrada para este bloco.
`); } } else { $lista.html(`
${data.error || 'Erro ao carregar anotações'}
`); } } catch (e) { $lista.html(`
Erro ao processar as anotações
`); } }, error: function(xhr, status, error) { $lista.html(`
Erro ao carregar anotações: ${error}
`); } }); }); }); // Handler para o botão de reportar erro $(document).on('click', '.reportar-erro', function() { const $questao = $(this).closest('.questao'); const questaoId = $questao.data('questao-id'); // Limpar o campo de texto antes de mostrar o modal $('#descricaoErro').val(''); // Mostrar o modal $('#modalReportarErro').modal('show'); // Handler para o botão de enviar reporte $('#enviarReporte').off('click').on('click', function() { const descricao = $('#descricaoErro').val().trim(); if (!descricao) { alert('Por favor, descreva o erro encontrado.'); return; } // Desabilitar o botão durante o envio $(this).prop('disabled', true); $.ajax({ url: 'salvar_reporte.php', method: 'POST', data: { questao_id: questaoId, descricao: descricao }, success: function(response) { try { const data = typeof response === 'string' ? JSON.parse(response) : response; if (data.success) { // Mostrar mensagem de sucesso mostrarAlerta('Reporte enviado com sucesso!', 'success'); // Fechar o modal $('#modalReportarErro').modal('hide'); // Limpar o campo de texto $('#descricaoErro').val(''); } else { mostrarAlerta('Erro ao enviar reporte: ' + (data.error || 'Erro desconhecido'), 'danger'); } } catch (e) { mostrarAlerta('Erro ao processar resposta do servidor', 'danger'); } }, error: function(xhr, status, error) { mostrarAlerta('Erro ao comunicar com o servidor', 'danger'); }, complete: function() { // Reabilitar o botão após o envio (sucesso ou erro) $('#enviarReporte').prop('disabled', false); } }); }); }); // Função para mostrar alertas function mostrarAlerta(mensagem, tipo) { const $alerta = $(` `); $('body').append($alerta); setTimeout(() => $alerta.alert('close'), 3000); } // Limpar o campo de texto quando o modal for fechado $('#modalReportarErro').on('hidden.bs.modal', function() { $('#descricaoErro').val(''); $('#enviarReporte').prop('disabled', false); }); -->