mirror of https://github.com/interlegis/sapl.git
Browse Source
- Adiciona botão "Editar com OnlyOffice" na página de confirmação de proposição - Permite que usuários com permissão de protocolo editem o documento durante a confirmação - Adiciona validação de hash para segurança do link de confirmação - Corrige permissão de download para permitir acesso a usuários do protocolopull/3858/head
5 changed files with 269 additions and 4 deletions
@ -0,0 +1,123 @@ |
|||
{% extends "base.html" %} |
|||
{% load i18n %} |
|||
{% load static %} |
|||
|
|||
{% block base_content %} |
|||
<div class="container-fluid"> |
|||
<div class="row"> |
|||
<div class="col-12"> |
|||
<h2>{% trans "Editor de Texto - Confirmação de Proposição" %}</h2> |
|||
<hr> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="row"> |
|||
<div class="col-12"> |
|||
<div class="alert alert-info"> |
|||
<strong>{% trans "Tipo:" %}</strong> {{ proposicao.tipo }}<br> |
|||
<strong>{% trans "Ementa:" %}</strong> {{ proposicao.descricao }}<br> |
|||
<strong>{% trans "Autor:" %}</strong> {{ proposicao.autor }} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="row"> |
|||
<div class="col-12"> |
|||
<div id="onlyoffice-placeholder" style="height: 600px; border: 1px solid #ccc;"> |
|||
<div class="text-center" style="padding-top: 250px;"> |
|||
<i class="fa fa-spinner fa-spin fa-3x"></i> |
|||
<p>{% trans "Carregando editor..." %}</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="row mt-3"> |
|||
<div class="col-12"> |
|||
<button id="btn-salvar-voltar" class="btn btn-success" onclick="salvarEVoltar()"> |
|||
<i class="fa fa-save"></i> {% trans "Salvar e Voltar" %} |
|||
</button> |
|||
<a href="{{ voltar_url }}" class="btn btn-secondary"> |
|||
<i class="fa fa-arrow-left"></i> {% trans "Voltar sem Salvar" %} |
|||
</a> |
|||
<div class="alert alert-info mt-3"> |
|||
<i class="fa fa-info-circle"></i> |
|||
{% trans "Use o botão 'Salvar e Voltar' para garantir que o documento seja salvo antes de sair. Se usar Ctrl+S, aguarde a confirmação de salvamento antes de sair." %} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<script type="text/javascript" src="{{ onlyoffice_url }}/web-apps/apps/api/documents/api.js"></script> |
|||
|
|||
<script type="text/javascript"> |
|||
var docEditor = null; |
|||
var documentSaved = false; |
|||
var returnUrl = "{{ voltar_url }}"; |
|||
|
|||
function salvarEVoltar() { |
|||
var btn = document.getElementById('btn-salvar-voltar'); |
|||
btn.disabled = true; |
|||
btn.innerHTML = '<i class="fa fa-spinner fa-spin"></i> Salvando...'; |
|||
|
|||
if (docEditor) { |
|||
// Força o salvamento do documento |
|||
docEditor.requestClose(); |
|||
} |
|||
|
|||
// Aguarda um tempo para o callback ser processado e redireciona |
|||
setTimeout(function() { |
|||
window.location.href = returnUrl; |
|||
}, 3000); |
|||
} |
|||
|
|||
// Carrega a configuração do OnlyOffice |
|||
fetch('{{ config_url }}') |
|||
.then(response => response.json()) |
|||
.then(config => { |
|||
console.log('OnlyOffice Config:', config); |
|||
|
|||
// Adiciona eventos à configuração |
|||
config.events = { |
|||
'onDocumentReady': function() { |
|||
console.log('Documento pronto para edição'); |
|||
}, |
|||
'onError': function(event) { |
|||
console.error('Erro no OnlyOffice:', event); |
|||
alert('Ocorreu um erro ao carregar o editor. Por favor, tente novamente.'); |
|||
}, |
|||
'onWarning': function(event) { |
|||
console.warn('Aviso do OnlyOffice:', event); |
|||
}, |
|||
'onDocumentStateChange': function(event) { |
|||
// event.data = true quando há alterações não salvas |
|||
console.log('Estado do documento:', event.data ? 'Alterações pendentes' : 'Salvo'); |
|||
documentSaved = !event.data; |
|||
}, |
|||
'onRequestClose': function() { |
|||
console.log('Editor fechado, redirecionando...'); |
|||
} |
|||
}; |
|||
|
|||
// Inicializa o editor |
|||
docEditor = new DocsAPI.DocEditor("onlyoffice-placeholder", config); |
|||
}) |
|||
.catch(error => { |
|||
console.error('Erro ao carregar configuração:', error); |
|||
document.getElementById('onlyoffice-placeholder').innerHTML = |
|||
'<div class="alert alert-danger m-5">' + |
|||
'<strong>Erro:</strong> Não foi possível carregar o editor. ' + |
|||
'Verifique se o servidor OnlyOffice está rodando.' + |
|||
'</div>'; |
|||
}); |
|||
|
|||
// Aviso antes de sair se houver alterações não salvas |
|||
window.addEventListener('beforeunload', function(e) { |
|||
if (!documentSaved && docEditor) { |
|||
e.preventDefault(); |
|||
e.returnValue = 'Você tem alterações não salvas. Deseja realmente sair?'; |
|||
return e.returnValue; |
|||
} |
|||
}); |
|||
</script> |
|||
{% endblock %} |
|||
Loading…
Reference in new issue