diff --git a/VERSION b/VERSION index 1a46c7f1..f314d020 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.10.8 +0.10.9 diff --git a/core/contextprocessors.py b/core/contextprocessors.py index 479e82ed..9ef6d9d4 100644 --- a/core/contextprocessors.py +++ b/core/contextprocessors.py @@ -1,4 +1,5 @@ from django.conf import settings +from django.utils.translation import ugettext as _ def globals(request): @@ -17,3 +18,12 @@ def globals(request): ctx.update(request.globals) return ctx + + +def auto_logged_out(request): + if hasattr(request, 'auto_logged_out') and request.auto_logged_out: + return { + 'splash_message': _('For security reasons, you have been automatically logged out due to inactivity.') + } + + return {} diff --git a/core/middleware.py b/core/middleware.py index 8040688e..d6792826 100644 --- a/core/middleware.py +++ b/core/middleware.py @@ -61,7 +61,7 @@ def process_request(self, request): last_visit = datetime.strptime(request.session['last_visit'], '%Y-%m-%d %H:%M:%S') if now - last_visit > timedelta(0, settings.AUTO_LOGOUT_DELAY * 60, 0): auth.logout(request) - return redirect('/accounts/logout?timeout=1') + request.auto_logged_out = True request.session['last_visit'] = now.strftime('%Y-%m-%d %H:%M:%S') diff --git a/core/views.py b/core/views.py index 7ae3e787..5d9642d7 100644 --- a/core/views.py +++ b/core/views.py @@ -332,10 +332,11 @@ def jsonize_issue(issue): 'name': issue.name, 'polity': issue.polity.slug, 'polity_name': issue.polity.name, - 'issue_num': '%d/%d' % (issue.issue_num, issue.issue_year), + 'issue_num': ('%d/%d' % (issue.issue_num, issue.issue_year)) if issue.issue_num else None, 'state': issue.issue_state(), 'created': issue.created.strftime(dt_format), 'ended': issue.deadline_votes.strftime(dt_format), + 'archived': issue.archived, } # We only include this field if the issue has been processed because diff --git a/issue/models.py b/issue/models.py index 76442c1f..0c9ebfbe 100644 --- a/issue/models.py +++ b/issue/models.py @@ -9,13 +9,24 @@ from django.utils import timezone -class IssueManager(models.Manager): - def get_queryset(self): - return super(IssueManager, self).get_queryset().filter(archived=False) - +# A mixin for containing methods that need to be in both the queryset and the +# manager. We need IssueManager.get_queryset to filter out archived issues +# automatically, and since a corresponding default-queryset function does not +# seem to exist in QuerySet, we cannot simply use IssueQuerySet.as_manager() +# as is commonly recommended. Instead, this class is used as an extra +# constructor for both IssueManager and IssueQuerySet. +class IssueMixin(): def recent(self): return self.filter(deadline_votes__gt=timezone.now() - timezone.timedelta(days=settings.RECENT_ISSUE_DAYS)) +class IssueManager(models.Manager, IssueMixin): + def get_queryset(self): + return IssueQuerySet(self.model, using=self._db).filter(archived=False) + +# Inherits from IssueMixin. +class IssueQuerySet(models.QuerySet, IssueMixin): + pass + class Issue(models.Model): objects = IssueManager() diff --git a/wasa2il/settings.py b/wasa2il/settings.py index 33000aa4..5257ebcc 100644 --- a/wasa2il/settings.py +++ b/wasa2il/settings.py @@ -146,6 +146,7 @@ 'django.contrib.messages.context_processors.messages', 'django.template.context_processors.request', 'core.contextprocessors.globals', + 'core.contextprocessors.auto_logged_out', 'polity.contextprocessors.polities', ], }, diff --git a/wasa2il/templates/base.html b/wasa2il/templates/base.html index a6522c69..b67e553d 100644 --- a/wasa2il/templates/base.html +++ b/wasa2il/templates/base.html @@ -110,6 +110,8 @@ {% block dialog %}{% endblock %} + {% include 'splash-message.html' %} +
{% comment %} {% block breadcrumbs %} diff --git a/wasa2il/templates/registration/logout.html b/wasa2il/templates/registration/logout.html index 37a1552b..c38b29dc 100644 --- a/wasa2il/templates/registration/logout.html +++ b/wasa2il/templates/registration/logout.html @@ -7,10 +7,6 @@

{% trans "Logged out" %}

- {% if request.GET.timeout %} -

{% trans 'For security reasons, you have been automatically logged out due to inactivity.' %}

- {% endif %} -

{% trans "We hope you'll be back soon. It'd be fun!" %}

{% trans "Log in" %} diff --git a/wasa2il/templates/splash-message.html b/wasa2il/templates/splash-message.html new file mode 100644 index 00000000..eda93fc2 --- /dev/null +++ b/wasa2il/templates/splash-message.html @@ -0,0 +1,23 @@ +{% load i18n %} + +{% if splash_message %} + + + +
+ {{ splash_message }} +
+ +{% endif %}