|
@ -1093,6 +1093,7 @@ class DispositivoView(TextView): |
|
|
|
|
|
|
|
|
class TextEditView(CompMixin, TemplateView): |
|
|
class TextEditView(CompMixin, TemplateView): |
|
|
template_name = 'compilacao/text_edit.html' |
|
|
template_name = 'compilacao/text_edit.html' |
|
|
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
|
|
|
def has_permission(self): |
|
|
def has_permission(self): |
|
|
self.object = self.ta |
|
|
self.object = self.ta |
|
@ -1112,6 +1113,13 @@ class TextEditView(CompMixin, TemplateView): |
|
|
# TODO - implementar logging de ação de usuário |
|
|
# TODO - implementar logging de ação de usuário |
|
|
self.object.editing_locked = False |
|
|
self.object.editing_locked = False |
|
|
self.object.privacidade = STATUS_TA_EDITION |
|
|
self.object.privacidade = STATUS_TA_EDITION |
|
|
|
|
|
valid, error_msg = valida_html(self.object.ementa) |
|
|
|
|
|
if not valid: |
|
|
|
|
|
messages.error( |
|
|
|
|
|
request, _('Texto mal formado %s', error_msg)) |
|
|
|
|
|
return redirect(to=reverse_lazy( |
|
|
|
|
|
'sapl.compilacao:ta_text', kwargs={ |
|
|
|
|
|
'ta_id': self.object.id})) |
|
|
self.object.save() |
|
|
self.object.save() |
|
|
messages.success(request, _( |
|
|
messages.success(request, _( |
|
|
'Texto Articulado desbloqueado com sucesso.')) |
|
|
'Texto Articulado desbloqueado com sucesso.')) |
|
@ -1142,11 +1150,25 @@ class TextEditView(CompMixin, TemplateView): |
|
|
if 'lock' in request.GET: |
|
|
if 'lock' in request.GET: |
|
|
self.object.editing_locked = True |
|
|
self.object.editing_locked = True |
|
|
self.object.privacidade = STATUS_TA_PUBLIC |
|
|
self.object.privacidade = STATUS_TA_PUBLIC |
|
|
|
|
|
valid, error_msg = valida_html(self.object.ementa) |
|
|
|
|
|
if not valid: |
|
|
|
|
|
messages.error( |
|
|
|
|
|
request, _('Texto mal formado %s', error_msg)) |
|
|
|
|
|
return redirect(to=reverse_lazy( |
|
|
|
|
|
'sapl.compilacao:ta_text_notificacoes', kwargs={ |
|
|
|
|
|
'ta_id': self.object.id})) |
|
|
self.object.save() |
|
|
self.object.save() |
|
|
messages.success(request, _( |
|
|
messages.success(request, _( |
|
|
'Texto Articulado publicado com sucesso.')) |
|
|
'Texto Articulado publicado com sucesso.')) |
|
|
else: |
|
|
else: |
|
|
self.object.temp_check_migrations = True |
|
|
self.object.temp_check_migrations = True |
|
|
|
|
|
valid, error_msg = valida_html(self.object.ementa) |
|
|
|
|
|
if not valid: |
|
|
|
|
|
messages.error( |
|
|
|
|
|
request, _('Texto mal formado %s', error_msg)) |
|
|
|
|
|
return redirect(to=reverse_lazy( |
|
|
|
|
|
'sapl.compilacao:ta_text_notificacoes', kwargs={ |
|
|
|
|
|
'ta_id': self.object.id})) |
|
|
self.object.save() |
|
|
self.object.save() |
|
|
messages.success(request, _( |
|
|
messages.success(request, _( |
|
|
'Texto Articulado Checado...')) |
|
|
'Texto Articulado Checado...')) |
|
@ -1369,6 +1391,9 @@ class TextEditView(CompMixin, TemplateView): |
|
|
e.inicio_vigencia = ta.data |
|
|
e.inicio_vigencia = ta.data |
|
|
e.inicio_eficacia = ta.data |
|
|
e.inicio_eficacia = ta.data |
|
|
e.texto = ta.ementa |
|
|
e.texto = ta.ementa |
|
|
|
|
|
valid, error_msg = valida_html(d.texto) |
|
|
|
|
|
if not valid: |
|
|
|
|
|
pass # TODO: mensagem de erro? |
|
|
e.dispositivo_pai = a |
|
|
e.dispositivo_pai = a |
|
|
e.save() |
|
|
e.save() |
|
|
|
|
|
|
|
@ -3024,6 +3049,9 @@ class DispositivoDinamicEditView( |
|
|
|
|
|
|
|
|
d_texto = d.texto |
|
|
d_texto = d.texto |
|
|
d.texto = texto.strip() |
|
|
d.texto = texto.strip() |
|
|
|
|
|
valid, error_msg = valida_html(d.texto) |
|
|
|
|
|
if not valid: |
|
|
|
|
|
pass # TODO: mensagem de erro? |
|
|
d.texto_atualizador = texto_atualizador.strip() |
|
|
d.texto_atualizador = texto_atualizador.strip() |
|
|
|
|
|
|
|
|
d.visibilidade = not visibilidade or visibilidade == 'True' |
|
|
d.visibilidade = not visibilidade or visibilidade == 'True' |
|
@ -3521,3 +3549,17 @@ class TextNotificacoesView(CompMixin, ListView, FormView): |
|
|
type_notificacoes = [type_notificacoes, ] |
|
|
type_notificacoes = [type_notificacoes, ] |
|
|
|
|
|
|
|
|
return self.get_notificacoes(result, type_notificacoes) |
|
|
return self.get_notificacoes(result, type_notificacoes) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def valida_html(html): |
|
|
|
|
|
import logging |
|
|
|
|
|
from lxml import etree |
|
|
|
|
|
from io import StringIO |
|
|
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
try: |
|
|
|
|
|
if len(html.strip()) > 0: |
|
|
|
|
|
etree.parse(StringIO(html), etree.HTMLParser(recover=False)) |
|
|
|
|
|
return True, None |
|
|
|
|
|
except Exception as e: |
|
|
|
|
|
logger.error("HTML mal formado %s (%s)", html, str(e)) |
|
|
|
|
|
return False, str(e) |