views.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. from django.contrib import messages
  2. from django.utils.translation import ugettext_lazy as _
  3. from misago.acl import cachebuster
  4. from misago.admin.views import generic
  5. from misago.forums.models import Forum
  6. from misago.forums.forms import ForumFormFactory
  7. class ForumAdmin(generic.AdminBaseMixin):
  8. root_link = 'misago:admin:forums:nodes:index'
  9. Model = Forum
  10. templates_dir = 'misago/admin/forums'
  11. message_404 = _("Requested forum does not exist.")
  12. def get_target(self, kwargs):
  13. target = super(ForumAdmin, self).get_target(kwargs)
  14. if target.pk and target.tree_id != 1:
  15. raise Forum.DoesNotExist()
  16. else:
  17. return target
  18. class ForumsList(ForumAdmin, generic.ListView):
  19. ordering = (('lft', None),)
  20. def get_queryset(self):
  21. return Forum.objects.all_forums()
  22. def process_context(self, request, context):
  23. context['items'] = [f for f in context['items']]
  24. levels_lists = {}
  25. for i, item in enumerate(context['items']):
  26. item.level_range = range(item.level - 1)
  27. item.first = False
  28. item.last = False
  29. levels_lists.setdefault(item.level, []).append(item)
  30. for level_items in levels_lists.values():
  31. level_items[0].first = True
  32. level_items[-1].last = True
  33. return context
  34. class ForumFormMixin(object):
  35. def create_form_type(self, request, target):
  36. return ForumFormFactory(target)
  37. def handle_form(self, form, request, target):
  38. if form.instance.pk:
  39. if form.instance.parent_id != form.cleaned_data['new_parent'].pk:
  40. form.instance.move_to(form.cleaned_data['new_parent'],
  41. position='last-child')
  42. form.instance.save()
  43. else:
  44. form.instance.insert_at(form.cleaned_data['new_parent'],
  45. position='last-child',
  46. save=True)
  47. cachebuster.invalidate()
  48. messages.success(request, self.message_submit % target.name)
  49. class NewForum(ForumFormMixin, ForumAdmin, generic.ModelFormView):
  50. message_submit = _('New forum "%s" has been saved.')
  51. class EditForum(ForumFormMixin, ForumAdmin, generic.ModelFormView):
  52. message_submit = _('Forum "%s" has been edited.')
  53. class EditForum(ForumFormMixin, ForumAdmin, generic.ModelFormView):
  54. message_submit = _('Forum "%s" has been deleted.')
  55. class MoveUpForum(ForumAdmin, generic.ButtonView):
  56. def button_action(self, request, target):
  57. try:
  58. other_target = target.get_previous_sibling()
  59. except Forum.DoesNotExist:
  60. other_target = None
  61. if other_target:
  62. Forum.objects.move_node(target, other_target, 'left')
  63. message = _('Forum "%s" has been moved up.') % target.name
  64. messages.success(request, message)
  65. class MoveDownForum(ForumAdmin, generic.ButtonView):
  66. def button_action(self, request, target):
  67. try:
  68. other_target = target.get_next_sibling()
  69. except Forum.DoesNotExist:
  70. other_target = None
  71. if other_target:
  72. Forum.objects.move_node(target, other_target, 'right')
  73. message = _('Forum "%s" has been moved down.') % target.name
  74. messages.success(request, message)