Improve history collection and add link to history page

Save individual field changes into revision comment and display this
comment on the history page. Now we're ready to add a link at the
bottom of every page so the history is easily visible.

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
This commit is contained in:
Paul Eggleton 2013-05-25 13:39:17 +01:00
parent 5a07f0422d
commit d1b875a76b
4 changed files with 67 additions and 18 deletions

1
TODO
View File

@ -7,7 +7,6 @@ TODO:
Later:
* Breadcrumbs / fix tab navigation?
* Detailed change history page [Paul working on this]
* Ability for reviewers to comment before publishing a layer?
* Add link to the all layers and all recipes tables from the layer details page?
* Prevent SMTP failures from breaking submission process

View File

@ -25,6 +25,8 @@ from django.contrib.auth.decorators import login_required
from reversion.models import Revision
import simplesearch
import settings
from django.dispatch import receiver
import reversion
def edit_layernote_view(request, template_name, slug, pk=None):
@ -339,3 +341,44 @@ class EditProfileFormView(UpdateView):
def get_success_url(self):
return reverse('frontpage')
@receiver(reversion.pre_revision_commit)
def annotate_revision(sender, **kwargs):
ignorefields = ['vcs_last_rev', 'vcs_last_fetch', 'vcs_last_commit']
versions = kwargs.pop('versions')
instances = kwargs.pop('instances')
changelist = []
for ver, inst in zip(versions, instances):
currentVersion = ver.field_dict
modelmeta = ver.content_type.model_class()._meta
if ver.type == reversion.models.VERSION_DELETE:
changelist.append("Deleted %s: %s" % (modelmeta.verbose_name.lower(), ver.object_repr))
else:
pastver = reversion.get_for_object(inst)
if pastver and ver.type != reversion.models.VERSION_ADD:
pastVersion = pastver[0].field_dict
changes = set(currentVersion.items()) - set(pastVersion.items())
changedVars = [var[0] for var in changes]
fieldchanges = []
for field in changedVars:
if field not in ignorefields:
modelfield = modelmeta.get_field(field)
newvalue = currentVersion[field]
if modelfield.choices:
for v in modelfield.choices:
if v[0] == newvalue:
newvalue = v[1]
break
fieldchanges.append("%s to '%s'" % (modelfield.verbose_name.lower(), newvalue))
if fieldchanges:
changelist.append("Changed %s %s %s" % (modelmeta.verbose_name.lower(), ver.object_repr, ", ".join(fieldchanges)))
else:
changelist.append("Added %s: %s" % (modelmeta.verbose_name.lower(), ver.object_repr))
comment = '\n'.join(changelist)
if not comment:
comment = 'No changes'
revision = kwargs.pop('revision')
revision.comment = comment
revision.save()
kwargs['revision'] = revision

View File

@ -95,7 +95,8 @@
{% block footer %}
<hr />
<div class="footer">
<a href="{% url about %}">about this site</a>
<a href="{% url history_list %}">change history</a>
&bull; <a href="{% url about %}">about this site</a>
</div>
{% endblock %}

View File

@ -32,23 +32,29 @@
<tbody>
{% for revision in revisions %}
<tr>
<td>{{ revision.date_created|timesince }} ago</td>
<td>{{ revision.user }}</td>
<td>
{% for version in revision.version_set.all %}
{% if version.type = 0 %}
Added
{% elif version.type = 1 %}
Changed
{% elif version.type = 2 %}
Deleted
{% if revision.comment != 'No changes' %}
<tr>
<td>{{ revision.date_created|timesince }} ago</td>
<td>{{ revision.user }}</td>
<td>
{% if revision.comment %}
{{ revision.comment|linebreaksbr }}
{% else %}
{% for version in revision.version_set.all %}
{% if version.type = 0 %}
Added
{% elif version.type = 1 %}
Changed
{% elif version.type = 2 %}
Deleted
{% endif %}
{{ version.content_type.name.lower }}: {{ version.object_repr }}
<br>
{% endfor %}
{% endif %}
{{ version.content_type.name.lower }}: {{ version.object_repr }}
<br>
{% endfor %}
</td>
</tr>
</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>