profile.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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. from misago.users.sites import user_profile
  6. def profile_view(f):
  7. def decorator(*args, **kwargs):
  8. relations = ('rank', 'online_tracker', 'ban_cache')
  9. queryset = get_user_model().objects.select_related(*relations)
  10. profile = get_object_or_404(queryset, id=kwargs.pop('user_id'))
  11. validate_slug(profile, kwargs.pop('user_slug'))
  12. kwargs['profile'] = profile
  13. return f(*args, **kwargs)
  14. return decorator
  15. def render(request, template, context):
  16. context['pages'] = user_profile.get_pages(request, context['profile'])
  17. for page in context['pages']:
  18. if page['is_active']:
  19. context['active_page'] = page
  20. break
  21. if request.user.is_authenticated():
  22. authenticateds_profile = context['profile'].pk == request.user.pk
  23. else:
  24. authenticateds_profile = False
  25. context['authenticateds_profile'] = authenticateds_profile
  26. user_acl = request.user.acl
  27. if request.user.is_authenticated():
  28. if authenticateds_profile:
  29. context['show_email'] = True
  30. else:
  31. context['show_email'] = user_acl['can_see_users_emails']
  32. else:
  33. context['show_email'] = False
  34. context['state'] = online.state_for_acl(context['profile'], user_acl)
  35. return django_render(request, template, context)
  36. @profile_view
  37. def user_posts(request, profile=None, page=0):
  38. return render(request, 'misago/profile/posts.html', {'profile': profile})
  39. @profile_view
  40. def user_threads(request, profile=None, page=0):
  41. return render(request, 'misago/profile/threads.html', {'profile': profile})