profile.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from django.contrib.auth import get_user_model
  2. from django.shortcuts import redirect, render as django_render
  3. from misago.core.shortcuts import get_object_or_404, validate_slug
  4. from misago.users import online
  5. def profile_view(f):
  6. def decorator(*args, **kwargs):
  7. relations = ('rank', 'online_tracker', 'ban_cache')
  8. queryset = get_user_model().objects.select_related(*relations)
  9. profile = get_object_or_404(queryset, id=kwargs.pop('user_id'))
  10. validate_slug(profile, kwargs.pop('user_slug'))
  11. kwargs['profile'] = profile
  12. return f(*args, **kwargs)
  13. return decorator
  14. def render(request, template, context=None):
  15. context = context or {}
  16. if request.user.is_authenticated():
  17. authenticateds_profile = context['profile'].pk == request.user.pk
  18. else:
  19. authenticateds_profile = False
  20. context['authenticateds_profile'] = authenticateds_profile
  21. user_acl = request.user.acl
  22. if request.user.is_authenticated():
  23. if authenticateds_profile:
  24. context['show_email'] = True
  25. else:
  26. context['show_email'] = user_acl['can_see_users_emails']
  27. else:
  28. context['show_email'] = False
  29. context['state'] = online.state_for_acl(context['profile'], user_acl)
  30. return django_render(request, template, context)
  31. @profile_view
  32. def user_posts(request, profile=None, page=0):
  33. return render(request, 'misago/profile/posts.html', {'profile': profile})
  34. @profile_view
  35. def user_threads(request, profile=None, page=0):
  36. return render(request, 'misago/profile/threads.html', {'profile': profile})