Add a simple changelog to the events #26
@@ -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>
|
||||||
|
|||||||
@@ -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' -> '
|
||||||
|
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