views.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. from django.core.urlresolvers import reverse as django_reverse
  2. from django.utils.translation import ugettext as _
  3. from misago.admin import site
  4. from misago.admin.widgets import *
  5. from misago.utils import slugify
  6. from misago.security.admin.qatest.forms import QATestForm
  7. from misago.security.models import QATest
  8. def reverse(route, target=None):
  9. if target:
  10. return django_reverse(route, kwargs={'target': target.pk, 'slug': slugify(target.question)})
  11. return django_reverse(route)
  12. """
  13. Views
  14. """
  15. class List(ListWidget):
  16. """
  17. List QA Tests
  18. """
  19. admin = site.get_action('qa')
  20. id = 'list'
  21. columns=(
  22. ('question', _("Question"), 50),
  23. ('helptext', _("Help")),
  24. )
  25. default_sorting = 'question'
  26. sortables={
  27. 'question': 1,
  28. 'helptext': 1,
  29. }
  30. filters = ['question', 'helptext']
  31. filters_layout = []
  32. empty_message = _('No Question and Answer tests have been found. Change search criteria and try again.')
  33. nothing_checked_message = _('You have to check at least one test.')
  34. actions=(
  35. ('delete', _("Delete selected"), _("Are you sure you want to delete selected questions?")),
  36. )
  37. def get_item_actions(self, request, item):
  38. return (
  39. self.action('pencil', _("Edit Test"), reverse('admin_qa_edit', item)),
  40. self.action('remove', _("Delete Test"), reverse('admin_qa_delete', item), post=True, prompt=_("Are you sure you want to delete this test?")),
  41. )
  42. def action_delete(self, request, items, checked):
  43. QATest.objects.filter(id__in=checked).delete()
  44. return BasicMessage(_('Selected Q&A Tests have been deleted successfully.'), 'success'), reverse('admin_qa')
  45. class New(FormWidget):
  46. """
  47. Create New QA Test
  48. """
  49. admin = site.get_action('qa')
  50. id = 'new'
  51. fallback = 'admin_qa'
  52. form = QATestForm
  53. submit_button = _("Save Test")
  54. def get_new_url(self, request, model):
  55. return reverse('admin_qa_new')
  56. def get_edit_url(self, request, model):
  57. return reverse('admin_qa_edit', model)
  58. def submit_form(self, request, form, target):
  59. new_test = QATest(
  60. question=form.cleaned_data['question'],
  61. helptext=form.cleaned_data['helptext'],
  62. answers=form.cleaned_data['answers'],
  63. )
  64. new_test.save(force_insert=True)
  65. return new_test, BasicMessage(_('New Q&A Test "%(name)s" has been saved.' % {'name': form.cleaned_data['question']}), 'success')
  66. class Edit(FormWidget):
  67. """
  68. Edit QA Test
  69. """
  70. admin = site.get_action('qa')
  71. id = 'edit'
  72. name = _("Edit QA Test")
  73. fallback = 'admin_qa'
  74. form = QATestForm
  75. target_name = 'question'
  76. notfound_message = _('Requested Question and Answer test could not be found.')
  77. submit_fallback = True
  78. def get_url(self, request, model):
  79. return reverse('admin_qa_edit', model)
  80. def get_edit_url(self, request, model):
  81. return self.get_url(request, model)
  82. def get_initial_data(self, request, model):
  83. return {
  84. 'question': model.question,
  85. 'helptext': model.helptext,
  86. 'answers': model.answers,
  87. }
  88. def submit_form(self, request, form, target):
  89. old_question = target.question
  90. target.question = form.cleaned_data['question']
  91. target.helptext = form.cleaned_data['helptext']
  92. target.answers = form.cleaned_data['answers']
  93. target.save(force_update=True)
  94. return target, BasicMessage(_('Changes in Q&A Test "%(name)s" have been saved.' % {'name': old_question}), 'success')
  95. class Delete(ButtonWidget):
  96. """
  97. Delete QA Test
  98. """
  99. admin = site.get_action('qa')
  100. id = 'delete'
  101. fallback = 'admin_qa'
  102. notfound_message = _('Requested Question and Answer test could not be found.')
  103. def action(self, request, target):
  104. target.delete()
  105. return BasicMessage(_('Q&A Test "%(name)s" has been deleted.' % {'name': target.question}), 'success'), False