Show event change log on event detail page
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
{% extends 'dav_events/base.html' %}
|
||||
{% load bootstrap3 %}
|
||||
{% load i18n %}
|
||||
{% load dav_events %}
|
||||
|
||||
{% block head-title %}{{ event }} - {{ block.super }}{% endblock head-title %}
|
||||
|
||||
@@ -188,35 +189,77 @@
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
{{ event.render_as_html }}
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-sm-7">
|
||||
<h5>Status-Log</h5>
|
||||
<div class="panel-group" id="log-accordion" role="tablist" aria-multiselectable="true">
|
||||
<div class="panel panel-default">
|
||||
<div id="headingStatusLog" class="panel-heading" role="tab">
|
||||
<h5 class="panel-title">
|
||||
<a role="button" href="#collapseStatusLog" data-toggle="collapse"
|
||||
data-parent="#log-accordion" aria-expanded="true"
|
||||
aria-controls="collapseStatusLog">
|
||||
Status-Log
|
||||
</a>
|
||||
</h5>
|
||||
</div>
|
||||
<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-5">
|
||||
<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-7">
|
||||
<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 class="panel panel-default">
|
||||
<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">
|
||||
<h5>{% trans 'Veröffentlichung' %}</h5>
|
||||
{% 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 %}
|
||||
{{ event.planned_publication_date|date:'l, d. F Y' }}
|
||||
{% else %}
|
||||
{% trans 'Unverzüglich' %}
|
||||
{% 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>
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import json
|
||||
from django import template
|
||||
from django.utils.html import format_html
|
||||
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
|
||||
|
||||
@@ -30,3 +33,51 @@ def render_event_status(event, show_void=True):
|
||||
context=context)
|
||||
|
||||
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' -> '
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user