7 |
7 |
import collections
|
8 |
8 |
|
9 |
9 |
|
|
10 |
from datetime import datetime
|
10 |
11 |
from django.conf import settings
|
11 |
12 |
from django.shortcuts import render_to_response, render
|
12 |
13 |
from django.template.loader import render_to_string, select_template
|
13 |
14 |
from django.views.generic.edit import UpdateView, FormView
|
14 |
15 |
from django.views.generic import RedirectView, TemplateView
|
15 |
16 |
from django.views.generic.base import View
|
|
17 |
from django.views.generic.list import ListView
|
16 |
18 |
from django.contrib.auth import SESSION_KEY
|
17 |
19 |
from django import http, shortcuts
|
18 |
20 |
from django.core import mail, signing
|
... | ... | |
21 |
23 |
from django.contrib import messages
|
22 |
24 |
from django.utils.translation import ugettext as _
|
23 |
25 |
from django.contrib.auth import logout as auth_logout
|
24 |
|
from django.contrib.auth import REDIRECT_FIELD_NAME
|
|
26 |
from django.contrib.auth import REDIRECT_FIELD_NAME, get_user_model
|
|
27 |
from django.contrib.contenttypes.models import ContentType
|
25 |
28 |
from django.http import (HttpResponseRedirect, HttpResponseForbidden,
|
26 |
29 |
HttpResponse)
|
27 |
30 |
from django.core.exceptions import PermissionDenied
|
... | ... | |
37 |
40 |
|
38 |
41 |
|
39 |
42 |
from . import (utils, app_settings, forms, compat, decorators, constants, models, cbv, hooks)
|
|
43 |
from authentic2_journal.models import Reference, Line
|
40 |
44 |
|
41 |
45 |
|
42 |
46 |
logger = logging.getLogger(__name__)
|
... | ... | |
613 |
617 |
|
614 |
618 |
logged_in = never_cache(LoggedInView.as_view())
|
615 |
619 |
|
|
620 |
|
|
621 |
class UserProfileJournal(ListView, FormView):
|
|
622 |
model = Line
|
|
623 |
form_class = forms.EventTimewindowForm
|
|
624 |
paginate_by = 10
|
|
625 |
|
|
626 |
def get_queryset(self):
|
|
627 |
timewindow = {}
|
|
628 |
for qs_param, qs_suffix in {'after': 'gte', 'before': 'lte'}.items():
|
|
629 |
delimiter = self.request.GET.get(qs_param)
|
|
630 |
if delimiter:
|
|
631 |
try:
|
|
632 |
dt = datetime.strptime(delimiter, '%d/%m/%Y %H:%M:%S')
|
|
633 |
except:
|
|
634 |
logger.info('UserProfileJournal wrong %s timestamp query '
|
|
635 |
'string parameter: %s' % (qs_param, delimiter))
|
|
636 |
else:
|
|
637 |
timewindow.update({'timestamp__%s' % qs_suffix: dt})
|
|
638 |
"""
|
|
639 |
Timestamp consistency allows for time window filtering on Reference
|
|
640 |
objects directly
|
|
641 |
"""
|
|
642 |
return [ref.line for ref in Reference.objects.filter(
|
|
643 |
target_id=self.request.user.pk,
|
|
644 |
target_ct=ContentType.objects.get_for_model(get_user_model()),
|
|
645 |
**timewindow)]
|
|
646 |
|
|
647 |
def get_template_names(self):
|
|
648 |
return [
|
|
649 |
'profiles/user_profile_journal.html',
|
|
650 |
'authentic2/user_profile_journal.html',
|
|
651 |
]
|
|
652 |
|
|
653 |
user_profile_journal = login_required(UserProfileJournal.as_view())
|
|
654 |
|
|
655 |
|
616 |
656 |
def csrf_failure_view(request, reason=""):
|
617 |
657 |
messages.warning(request, _('The page is out of date, it was reloaded for you'))
|
618 |
658 |
return HttpResponseRedirect(request.get_full_path())
|
619 |
|
-
|