get changeset for session/user and show it in ediutr in top right corner
This commit is contained in:
parent
172189a90b
commit
f55ea561bd
5 changed files with 62 additions and 1 deletions
|
@ -5,7 +5,9 @@ from django.conf import settings
|
|||
from django.core.exceptions import ObjectDoesNotExist, ValidationError
|
||||
from django.db import models
|
||||
from django.db.models import Q
|
||||
from django.utils.functional import cached_property
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import ungettext_lazy
|
||||
|
||||
|
||||
class ChangeSet(models.Model):
|
||||
|
@ -21,6 +23,49 @@ class ChangeSet(models.Model):
|
|||
verbose_name_plural = _('Change Sets')
|
||||
default_related_name = 'changesets'
|
||||
|
||||
@classmethod
|
||||
def qs_base(cls):
|
||||
return cls.objects.prefetch_related('changes').select_related('author')
|
||||
|
||||
@classmethod
|
||||
def get_for_request(cls, request):
|
||||
qs_base = cls.qs_base().filter(applied__isnull=True)
|
||||
changeset_pk = request.session.get('changeset_pk', None)
|
||||
if changeset_pk is not None:
|
||||
if request.user.is_authenticated():
|
||||
qs = qs_base.filter(Q(author__isnull=True) | Q(author=request.user))
|
||||
else:
|
||||
qs = qs_base.filter(author__isnull=True)
|
||||
|
||||
changeset = qs.filter(pk=changeset_pk).first()
|
||||
if changeset is not None:
|
||||
if changeset.author_id is None and request.user.is_authenticated():
|
||||
changeset.author = request.user
|
||||
changeset.save()
|
||||
return changeset
|
||||
|
||||
new_changeset = cls()
|
||||
|
||||
if request.user.is_authenticated():
|
||||
changeset = qs_base.filter(Q(author=request.user)).order_by('-created').first()
|
||||
if changeset is not None:
|
||||
request.session['changeset_pk'] = changeset.pk
|
||||
return changeset
|
||||
|
||||
new_changeset.author = request.user
|
||||
|
||||
new_changeset.save()
|
||||
request.session['changeset_pk'] = new_changeset.pk
|
||||
return new_changeset
|
||||
|
||||
@cached_property
|
||||
def undeleted_changes_count(self):
|
||||
return len([True for change in self.changes.all() if change.deletes_change_id is None])
|
||||
|
||||
@property
|
||||
def count_display(self):
|
||||
return ungettext_lazy('%(num)d Change', '%(num)d Changes', 'num') % {'num': self.undeleted_changes_count}
|
||||
|
||||
|
||||
class Change(models.Model):
|
||||
ACTIONS = (
|
||||
|
|
|
@ -68,6 +68,9 @@ body:not(.map-enabled) #sidebar {
|
|||
left:15px;
|
||||
top:23px;
|
||||
}
|
||||
nav.navbar .navbar-nav > li > a {
|
||||
color:#666666;
|
||||
}
|
||||
|
||||
/* sidebar contents */
|
||||
#sidebar form.creation-lock .btn.btn-primary {
|
||||
|
@ -112,7 +115,7 @@ legend {
|
|||
right: 8px;
|
||||
top: 8px;
|
||||
}
|
||||
[data-levels], [data-sublevels] {
|
||||
[data-levels], [data-sublevels], [data-changeset] {
|
||||
display:none;
|
||||
}
|
||||
form button.invisiblesubmit {
|
||||
|
|
|
@ -143,6 +143,11 @@ editor = {
|
|||
return;
|
||||
}
|
||||
|
||||
var changeset = content.find('span[data-changeset]');
|
||||
if (changeset.length) {
|
||||
$('.changeset a').text(changeset.text());
|
||||
}
|
||||
|
||||
var geometry_url = content.find('[data-geometry-url]');
|
||||
if (geometry_url.length) {
|
||||
geometry_url = geometry_url.attr('data-geometry-url');
|
||||
|
|
|
@ -6,6 +6,9 @@
|
|||
<noscript>
|
||||
<div id="noscript">{% trans 'Without Javascript' %}</div>
|
||||
</noscript>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li class="changeset"><a href="#">{{ request.changeset.count_display }}</a></li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
{% block subheader %}
|
||||
|
|
|
@ -7,9 +7,11 @@ from django.core.exceptions import FieldDoesNotExist, PermissionDenied
|
|||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.urls import reverse
|
||||
from django.utils.html import escape
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.views.decorators.cache import never_cache
|
||||
|
||||
from c3nav.editor.models import ChangeSet
|
||||
from c3nav.mapdata.models import Level, Space
|
||||
from c3nav.mapdata.models.base import EDITOR_FORM_MODELS
|
||||
|
||||
|
@ -17,10 +19,13 @@ from c3nav.mapdata.models.base import EDITOR_FORM_MODELS
|
|||
def sidebar_view(func):
|
||||
@wraps(func)
|
||||
def with_ajax_check(request, *args, **kwargs):
|
||||
request.changeset = ChangeSet.get_for_request(request)
|
||||
|
||||
response = func(request, *args, **kwargs)
|
||||
if request.is_ajax() or 'ajax' in request.GET:
|
||||
if isinstance(response, HttpResponseRedirect):
|
||||
return render(request, 'editor/redirect.html', {'target': response['location']})
|
||||
response.write('<span data-changeset>%s</span>' % escape(request.changeset.count_display))
|
||||
return response
|
||||
return render(request, 'editor/map.html', {'content': response.content})
|
||||
return never_cache(with_ajax_check)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue