views.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. from django.core.urlresolvers import reverse as django_reverse
  2. from django import forms
  3. from django.utils.translation import ugettext as _
  4. from misago.admin import site
  5. from misago.core.admin.widgets import *
  6. from misago.forms import Form
  7. from misago.models import ThemeAdjustment
  8. from misago.utils.strings import slugify
  9. from misago.core.admin.clients.forms import ThemeAdjustmentForm
  10. def reverse(route, target=None):
  11. if target:
  12. return django_reverse(route, kwargs={'target': target.pk, 'slug': slugify(target.theme)})
  13. return django_reverse(route)
  14. """
  15. Views
  16. """
  17. class List(ListWidget):
  18. admin = site.get_action('clients')
  19. id = 'list'
  20. columns = (
  21. ('theme', _("Theme")),
  22. )
  23. nothing_checked_message = _('You have to check at least one adjustment.')
  24. actions = (
  25. ('delete', _("Delete selected adjustments"), _("Are you sure you want to delete selected theme adjustments?")),
  26. )
  27. def get_item_actions(self, item):
  28. return (
  29. self.action('pencil', _("Edit Adjustment"), reverse('admin_clients_edit', item)),
  30. self.action('remove', _("Delete Adjustment"), reverse('admin_clients_delete', item), post=True, prompt=_("Are you sure you want to delete this adjustment?")),
  31. )
  32. def action_delete(self, items, checked):
  33. ThemeAdjustment.objects.filter(id__in=checked).delete()
  34. return Message(_('Selected adjustment have been deleted successfully.'), 'success'), reverse('admin_clients')
  35. class New(FormWidget):
  36. admin = site.get_action('clients')
  37. id = 'new'
  38. fallback = 'admin_clients'
  39. form = ThemeAdjustmentForm
  40. submit_button = _("Set Adjustment")
  41. def get_form_instance(self, form, model, initial, post=False):
  42. if post:
  43. return form(model, self.request.POST, request=self.request, initial=self.get_initial_data(model))
  44. return form(model, request=self.request, initial=self.get_initial_data(model))
  45. def get_new_url(self, model):
  46. return reverse('admin_clients_new')
  47. def get_edit_url(self, model):
  48. return reverse('admin_clients_edit', model)
  49. def submit_form(self, form, target):
  50. new_adjustment = ThemeAdjustment.objects.create(
  51. theme=form.cleaned_data['theme'],
  52. useragents='\r\n'.join(form.cleaned_data['useragents']),
  53. )
  54. return new_adjustment, Message(_('New adjustment has been created.'), 'success')
  55. class Edit(FormWidget):
  56. admin = site.get_action('clients')
  57. id = 'edit'
  58. name = _("Edit Adjustment")
  59. fallback = 'admin_clients'
  60. form = ThemeAdjustmentForm
  61. target_name = 'theme'
  62. notfound_message = _('Requested adjustment could not be found.')
  63. submit_fallback = True
  64. def get_url(self, model):
  65. return reverse('admin_clients_edit', model)
  66. def get_edit_url(self, model):
  67. return self.get_url(model)
  68. def get_form_instance(self, form, model, initial, post=False):
  69. if post:
  70. return form(model, self.request.POST, request=self.request, initial=self.get_initial_data(model))
  71. return form(model, request=self.request, initial=self.get_initial_data(model))
  72. def get_initial_data(self, model):
  73. return {
  74. 'theme': model.theme,
  75. 'useragents': model.useragents,
  76. }
  77. def submit_form(self, form, target):
  78. target.theme = form.cleaned_data['theme']
  79. target.useragents = '\r\n'.join(form.cleaned_data['useragents'])
  80. target.save(force_update=True)
  81. return target, Message(_('Adjustment using theme "%(name)s" has been saved.') % {'name': target.theme}, 'success')
  82. class Delete(ButtonWidget):
  83. admin = site.get_action('clients')
  84. id = 'delete'
  85. fallback = 'admin_clients'
  86. notfound_message = _('Requested adjustment could not be found.')
  87. def action(self, target):
  88. target.delete()
  89. return Message(_('Adjustment using theme "%(name)s" has been deleted.') % {'name': target.theme}, 'success'), False