lists.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from misago.acl import add_acl
  2. from misago.forums.models import Forum
  3. __all__ = ['get_forums_list', 'get_forum_path']
  4. def get_forums_list(user, parent=None):
  5. if not user.acl['visible_forums']:
  6. return []
  7. if parent:
  8. queryset = parent.get_descendants().order_by('lft')
  9. else:
  10. queryset = Forum.objects.all_forums()
  11. queryset_with_acl = queryset.filter(id__in=user.acl['visible_forums'])
  12. forums_dict = {}
  13. forums_list = []
  14. parent_level = parent.level + 1 if parent else 1
  15. for forum in queryset_with_acl:
  16. forum.is_read = True
  17. forum.subforums = []
  18. forums_dict[forum.pk] = forum
  19. forums_list.append(forum)
  20. if forum.level > parent_level:
  21. forums_dict[forum.parent_id].subforums.append(forum)
  22. add_acl(user, forums_list)
  23. flat_list = []
  24. for forum in forums_list:
  25. if forum.role != "category" or forum.subforums:
  26. flat_list.append(forum)
  27. return flat_list
  28. def get_forum_path(forum):
  29. forums_dict = Forum.objects.get_cached_forums_dict()
  30. forum_path = []
  31. while forum.level > 0:
  32. forum_path.append(forum)
  33. forum = forums_dict[forum.parent_id]
  34. return [f for f in reversed(forum_path)]