lists.py 1.2 KB

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