admin.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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 (RanksList, NewRank, EditRank,
  7. DeleteRank, MoveDownRank,
  8. MoveUpRank, DefaultRank, RankUsers)
  9. from misago.users.views.admin.users import (UsersList, NewUser, EditUser,
  10. DeleteThreadsStep, DeletePostsStep,
  11. DeleteAccountStep)
  12. from misago.users.views.admin.warnings import (WarningsList, NewWarning,
  13. EditWarning, MoveDownWarning,
  14. MoveUpWarning, 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<user_id>\d+)/$', EditUser.as_view(), name='edit'),
  43. url(r'^delete-threads/(?P<user_id>\d+)/$', DeleteThreadsStep.as_view(), name='delete_threads'),
  44. url(r'^delete-posts/(?P<user_id>\d+)/$', DeletePostsStep.as_view(), name='delete_posts'),
  45. url(r'^delete-account/(?P<user_id>\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<rank_id>\d+)/$', EditRank.as_view(), name='edit'),
  53. url(r'^default/(?P<rank_id>\d+)/$', DefaultRank.as_view(), name='default'),
  54. url(r'^move/down/(?P<rank_id>\d+)/$', MoveDownRank.as_view(), name='down'),
  55. url(r'^move/up/(?P<rank_id>\d+)/$', MoveUpRank.as_view(), name='up'),
  56. url(r'^users/(?P<rank_id>\d+)/$', RankUsers.as_view(), name='users'),
  57. url(r'^delete/(?P<rank_id>\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<ban_id>\d+)/$', EditBan.as_view(), name='edit'),
  66. url(r'^delete/(?P<ban_id>\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<warning_id>\d+)/$', EditWarning.as_view(), name='edit'),
  74. url(r'^move/down/(?P<warning_id>\d+)/$', MoveDownWarning.as_view(), name='down'),
  75. url(r'^move/up/(?P<warning_id>\d+)/$', MoveUpWarning.as_view(), name='up'),
  76. url(r'^delete/(?P<warning_id>\d+)/$', DeleteWarning.as_view(), name='delete'),
  77. )
  78. def register_navigation_nodes(self, site):
  79. site.add_node(name=_("Users"),
  80. icon='fa fa-users',
  81. parent='misago:admin',
  82. after='misago:admin:index',
  83. namespace='misago:admin:users',
  84. link='misago:admin:users:accounts:index')
  85. site.add_node(name=_("User Accounts"),
  86. icon='fa fa-users',
  87. parent='misago:admin:users',
  88. namespace='misago:admin:users:accounts',
  89. link='misago:admin:users:accounts:index')
  90. site.add_node(name=_("Ranks"),
  91. icon='fa fa-graduation-cap',
  92. parent='misago:admin:users',
  93. after='misago:admin:users:accounts:index',
  94. namespace='misago:admin:users:ranks',
  95. link='misago:admin:users:ranks:index')
  96. site.add_node(name=_("Bans"),
  97. icon='fa fa-lock',
  98. parent='misago:admin:users',
  99. after='misago:admin:users:ranks:index',
  100. namespace='misago:admin:users:bans',
  101. link='misago:admin:users:bans:index')
  102. site.add_node(name=_("Warning levels"),
  103. icon='fa fa-exclamation-triangle',
  104. parent='misago:admin:users',
  105. after='misago:admin:users:bans:index',
  106. namespace='misago:admin:users:warnings',
  107. link='misago:admin:users:warnings:index')