Add a simple changelog to the events #26

Merged
heinzel merged 7 commits from changelog into master 2020-11-03 12:34:30 +01:00
2 changed files with 115 additions and 21 deletions
Showing only changes of commit 10ea6affaf - Show all commits

View File

@@ -1,6 +1,7 @@
{% extends 'dav_events/base.html' %} {% extends 'dav_events/base.html' %}
{% load bootstrap3 %} {% load bootstrap3 %}
{% load i18n %} {% load i18n %}
{% load dav_events %}
{% block head-title %}{{ event }} - {{ block.super }}{% endblock head-title %} {% block head-title %}{{ event }} - {{ block.super }}{% endblock head-title %}
@@ -188,35 +189,77 @@
<div class="row"> <div class="row">
<div class="col-sm-12"> <div class="col-sm-12">
{{ event.render_as_html }} {{ event.render_as_html }}
<div class="panel panel-default"> <div class="row">
<div class="panel-body"> <div class="col-sm-7">
<div class="row"> <div class="panel-group" id="log-accordion" role="tablist" aria-multiselectable="true">
<div class="col-sm-7"> <div class="panel panel-default">
<h5>Status-Log</h5> <div id="headingStatusLog" class="panel-heading" role="tab">
{% for flag in event.flags.all %} <h5 class="panel-title">
<div class="row"> <a role="button" href="#collapseStatusLog" data-toggle="collapse"
<div class="col-sm-5"> data-parent="#log-accordion" aria-expanded="true"
<span class="text-{{ flag.status.bootstrap_context|default:'default' }}">{% bootstrap_icon 'check' %}</span> aria-controls="collapseStatusLog">
<strong>{{ flag.status.label }}:</strong> Status-Log
</div> </a>
<div class="col-sm-7"> </h5>
{{ flag.timestamp|date:'l, d. F Y, H:i' }} {% trans 'Uhr' %}<br /> </div>
{% trans 'von' %} {{ flag.user.get_full_name|default:flag.user }} <div id="collapseStatusLog" class="panel-collapse collapse in"
role="tabpanel" aria-labelledby="headingStatusLog">
<div class="panel-body">
{% for flag in event.flags.all %}
<div class="row">
<div class="col-sm-4">
<span class="text-{{ flag.status.bootstrap_context|default:'default' }}">{% bootstrap_icon 'check' %}</span>
<strong>{{ flag.status.label }}:</strong>
</div>
<div class="col-sm-8">
{{ flag.timestamp|date:'l, d. F Y, H:i' }} {% trans 'Uhr' %}<br />
{% trans 'von' %} {{ flag.user.get_full_name|default:flag.user }}
</div>
</div>
{% endfor %}
</div> </div>
</div> </div>
{% endfor %}
</div> </div>
<div class="col-sm-5"> <div class="panel panel-default">
<h5>{% trans 'Veröffentlichung' %}</h5> <div id="headingChangeLog" class="panel-heading" role="tab">
<h5 class="panel-title">
<a role="button" href="#collapseChangeLog" data-toggle="collapse"
data-parent="#log-accordion" aria-expanded="true"
aria-controls="collapseChangeLog">
Change-Log
</a>
</h5>
</div>
<div id="collapseChangeLog" class="panel-collapse collapse"
role="tabpanel" aria-labelledby="headingChangeLog">
<div class="panel-body">
{% render_event_changelog event %}
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-5">
{% if event.internal_note %}
<div class="panel panel-danger">
<div class="panel-heading">
<h5 class="panel-title">{% trans 'Bearbeitungshinweis' %}</h5>
</div>
<div class="panel-body">
<div><small>{{ event.internal_note|linebreaksbr }}</small></div>
</div>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h5 class="panel-title">{% trans 'Veröffentlichung' %}</h5>
</div>
<div class="panel-body">
{% if event.planned_publication_date %} {% if event.planned_publication_date %}
{{ event.planned_publication_date|date:'l, d. F Y' }} {{ event.planned_publication_date|date:'l, d. F Y' }}
{% else %} {% else %}
{% trans 'Unverzüglich' %} {% trans 'Unverzüglich' %}
{% endif %} {% endif %}
{% if event.internal_note %}
<h5 style="margin-top: 1em;">{% trans 'Bearbeitungshinweis' %}</h5>
<div class="well well-sm"><small>{{ event.internal_note|linebreaksbr }}</small></div>
{% endif %}
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,6 +1,9 @@
import json
from django import template from django import template
from django.utils.html import format_html from django.utils.html import format_html
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils import timezone
from django.utils.translation import ugettext as _
from ..models.eventstatus import EventStatus, get_or_create_event_status from ..models.eventstatus import EventStatus, get_or_create_event_status
@@ -30,3 +33,51 @@ def render_event_status(event, show_void=True):
context=context) context=context)
return mark_safe(html) return mark_safe(html)
@register.simple_tag
def render_event_changelog(event):
change_templ = u'<li class="list-group-item">\n' \
u'\t<p class="list-group-item-heading">{timestamp}' \
u' - ' \
u' {user}</p>\n' \
u'\t{content}\n' \
u'</li>\n'
subchange_templ = u'<li class="list-group-item">\n' \
u'\t{field}:{separator1}\n' \
u'\t<span style="background-color: #ffe0e0;">{refer}</span>\n' \
u'\t{separator2}\n' \
u'\t<span style="background-color: #e0ffe0;">{current}</span>\n' \
u'</li>\n'
if event.changes.exists():
html = u'<ul class="list-group">\n'
for change in event.changes.all():
username = change.user.get_full_name()
if not username:
username = change.user
content_html = u'<ul class="list-group">'
subchanges = json.loads(change.content)
for subchange in subchanges:
field_label = event._meta.get_field(subchange['field']).verbose_name
if len(subchange['refer']) + len(subchange['current']) > 20:
separator1 = u'<br />'
separator2 = u'<br />'
else:
separator1 = u' '
separator2 = u' -&gt; '
content_html += format_html(subchange_templ,
field=field_label,
separator1=mark_safe(separator1),
refer=subchange['refer'],
separator2=mark_safe(separator2),
current=subchange['current'])
content_html += u'</ul>'
html += format_html(change_templ,
timestamp=timezone.localtime(change.timestamp).strftime('%Y-%m-%d %H:%M:%S %Z'),
user=username,
content=mark_safe(content_html))
html += u'</ul>\n'
else:
html = _(u'No entries')
return mark_safe(html)