admin.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. from django.conf.urls import url
  2. from django.contrib import admin as djadmin
  3. from django.contrib.auth import get_user_model
  4. from django.utils.translation import ugettext_lazy as _
  5. from misago.users.views.admin.bans import BansList, NewBan, EditBan, DeleteBan
  6. from misago.users.views.admin.ranks import (
  7. RanksList, NewRank, EditRank, DeleteRank, MoveDownRank, MoveUpRank,
  8. DefaultRank, RankUsers)
  9. from misago.users.views.admin.users import (
  10. UsersList, NewUser, EditUser, DeleteThreadsStep, DeletePostsStep,
  11. DeleteAccountStep)
  12. from misago.users.views.admin.warnings import (
  13. WarningsList, NewWarning, EditWarning, MoveDownWarning, MoveUpWarning,
  14. DeleteWarning)
  15. class UserAdmin(djadmin.ModelAdmin):
  16. actions = None
  17. list_display = ('username', 'email', 'is_staff', 'is_superuser')
  18. search_fields = ('username', 'email')
  19. list_filter = ('groups', 'is_staff', 'is_superuser')
  20. readonly_fields = ('username', 'email', 'is_staff', 'is_superuser')
  21. fieldsets = (
  22. (_('User data'),
  23. {'fields': ('username', 'email', 'is_staff', 'is_superuser')}),
  24. (_('Change Django Permissions'),
  25. {'fields': ('groups', 'user_permissions')}),
  26. )
  27. def has_add_permission(self, request):
  28. return False
  29. def has_delete_permission(self, request, obj=None):
  30. return False
  31. djadmin.site.register(get_user_model(), UserAdmin)
  32. class MisagoAdminExtension(object):
  33. def register_urlpatterns(self, urlpatterns):
  34. # Users section
  35. urlpatterns.namespace(r'^users/', 'users')
  36. # Accounts
  37. urlpatterns.namespace(r'^accounts/', 'accounts', 'users')
  38. urlpatterns.patterns('users:accounts',
  39. url(r'^$', UsersList.as_view(), name='index'),
  40. url(r'^(?P<page>\d+)/$', UsersList.as_view(), name='index'),
  41. url(r'^new/$', NewUser.as_view(), name='new'),
  42. url(r'^edit/(?P<pk>\d+)/$', EditUser.as_view(), name='edit'),
  43. url(r'^delete-threads/(?P<pk>\d+)/$', DeleteThreadsStep.as_view(), name='delete-threads'),
  44. url(r'^delete-posts/(?P<pk>\d+)/$', DeletePostsStep.as_view(), name='delete-posts'),
  45. url(r'^delete-account/(?P<pk>\d+)/$', DeleteAccountStep.as_view(), name='delete-account'),
  46. )
  47. # Ranks
  48. urlpatterns.namespace(r'^ranks/', 'ranks', 'users')
  49. urlpatterns.patterns('users:ranks',
  50. url(r'^$', RanksList.as_view(), name='index'),
  51. url(r'^new/$', NewRank.as_view(), name='new'),
  52. url(r'^edit/(?P<pk>\d+)/$', EditRank.as_view(), name='edit'),
  53. url(r'^default/(?P<pk>\d+)/$', DefaultRank.as_view(), name='default'),
  54. url(r'^move/down/(?P<pk>\d+)/$', MoveDownRank.as_view(), name='down'),
  55. url(r'^move/up/(?P<pk>\d+)/$', MoveUpRank.as_view(), name='up'),
  56. url(r'^users/(?P<pk>\d+)/$', RankUsers.as_view(), name='users'),
  57. url(r'^delete/(?P<pk>\d+)/$', DeleteRank.as_view(), name='delete'),
  58. )
  59. # Bans
  60. urlpatterns.namespace(r'^bans/', 'bans', 'users')
  61. urlpatterns.patterns('users:bans',
  62. url(r'^$', BansList.as_view(), name='index'),
  63. url(r'^(?P<page>\d+)/$', BansList.as_view(), name='index'),
  64. url(r'^new/$', NewBan.as_view(), name='new'),
  65. url(r'^edit/(?P<pk>\d+)/$', EditBan.as_view(), name='edit'),
  66. url(r'^delete/(?P<pk>\d+)/$', DeleteBan.as_view(), name='delete'),
  67. )
  68. # Warnings
  69. urlpatterns.namespace(r'^warnings/', 'warnings', 'users')
  70. urlpatterns.patterns('users:warnings',
  71. url(r'^$', WarningsList.as_view(), name='index'),
  72. url(r'^new/$', NewWarning.as_view(), name='new'),
  73. url(r'^edit/(?P<pk>\d+)/$', EditWarning.as_view(), name='edit'),
  74. url(r'^move/down/(?P<pk>\d+)/$', MoveDownWarning.as_view(), name='down'),
  75. url(r'^move/up/(?P<pk>\d+)/$', MoveUpWarning.as_view(), name='up'),
  76. url(r'^delete/(?P<pk>\d+)/$', DeleteWarning.as_view(), name='delete'),
  77. )
  78. def register_navigation_nodes(self, site):
  79. site.add_node(
  80. name=_("Users"),
  81. icon='fa fa-users',
  82. parent='misago:admin',
  83. after='misago:admin:index',
  84. namespace='misago:admin:users',
  85. link='misago:admin:users:accounts:index',
  86. )
  87. site.add_node(
  88. name=_("User Accounts"),
  89. icon='fa fa-users',
  90. parent='misago:admin:users',
  91. namespace='misago:admin:users:accounts',
  92. link='misago:admin:users:accounts:index',
  93. )
  94. site.add_node(
  95. name=_("Ranks"),
  96. icon='fa fa-graduation-cap',
  97. parent='misago:admin:users',
  98. after='misago:admin:users:accounts:index',
  99. namespace='misago:admin:users:ranks',
  100. link='misago:admin:users:ranks:index',
  101. )
  102. site.add_node(
  103. name=_("Bans"),
  104. icon='fa fa-lock',
  105. parent='misago:admin:users',
  106. after='misago:admin:users:ranks:index',
  107. namespace='misago:admin:users:bans',
  108. link='misago:admin:users:bans:index',
  109. )
  110. site.add_node(
  111. name=_("Warning levels"),
  112. icon='fa fa-exclamation-triangle',
  113. parent='misago:admin:users',
  114. after='misago:admin:users:bans:index',
  115. namespace='misago:admin:users:warnings',
  116. link='misago:admin:users:warnings:index',
  117. )