123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- from django.conf.urls import url
- from django.conf.urls import url
- from django.contrib import admin as djadmin
- from django.contrib.auth import get_user_model
- from django.db import transaction
- from django.utils.translation import ugettext_lazy as _
- from misago.acl.models import Role
- from misago.users.views.admin.bans import BansList, NewBan, EditBan, DeleteBan
- from misago.users.views.admin.ranks import (RanksList, NewRank, EditRank,
- DeleteRank, MoveDownRank,
- MoveUpRank, DefaultRank)
- from misago.users.views.admin.users import UsersList, NewUser, EditUser
- from misago.users.views.admin.warnings import (WarningsList, NewWarning,
- EditWarning, MoveDownWarning,
- MoveUpWarning, DeleteWarning)
- class UserAdmin(djadmin.ModelAdmin):
- actions = None
- list_display = ('username', 'email', 'is_staff', 'is_superuser')
- search_fields = ('username', 'email')
- list_filter = ('groups', 'is_staff', 'is_superuser')
- readonly_fields = ('username', 'email', 'is_staff', 'is_superuser')
- fieldsets = (
- (_('User data'),
- {'fields': ('username', 'email', 'is_staff', 'is_superuser')}),
- (_('Misago permissions'),
- {'fields': ('rank', 'roles')}),
- (_('Change Django Permissions'),
- {'fields': ('groups', 'user_permissions')}),
- )
- def has_add_permission(self, request):
- return False
- def has_delete_permission(self, request, obj=None):
- return False
- def save_related(self, request, form, formsets, change):
- with transaction.atomic():
- obj = form.instance
- obj.roles.clear()
- obj.roles.add(*form.cleaned_data['roles'])
- member_role = Role.objects.get(special_role='authenticated')
- if not member_role.pk in [r.pk for r in form.cleaned_data['roles']]:
- obj.roles.add(member_role)
- # Update ACL key
- obj.update_acl_key()
- obj.save(update_fields=['acl_key'])
- obj.groups.clear()
- if form.cleaned_data['groups']:
- obj.groups.add(*form.cleaned_data['groups'])
- obj.user_permissions.clear()
- if form.cleaned_data['user_permissions']:
- obj.user_permissions.add(*form.cleaned_data['user_permissions'])
- djadmin.site.register(get_user_model(), UserAdmin)
- class MisagoAdminExtension(object):
- def register_urlpatterns(self, urlpatterns):
- # Users section
- urlpatterns.namespace(r'^users/', 'users')
- # Accounts
- urlpatterns.namespace(r'^accounts/', 'accounts', 'users')
- urlpatterns.patterns('users:accounts',
- url(r'^$', UsersList.as_view(), name='index'),
- url(r'^(?P<page>\d+)/$', UsersList.as_view(), name='index'),
- url(r'^new/$', NewUser.as_view(), name='new'),
- url(r'^edit/(?P<user_id>\d+)/$', EditUser.as_view(), name='edit'),
- )
- # Ranks
- urlpatterns.namespace(r'^ranks/', 'ranks', 'users')
- urlpatterns.patterns('users:ranks',
- url(r'^$', RanksList.as_view(), name='index'),
- url(r'^new/$', NewRank.as_view(), name='new'),
- url(r'^edit/(?P<rank_id>\d+)/$', EditRank.as_view(), name='edit'),
- url(r'^default/(?P<rank_id>\d+)/$', DefaultRank.as_view(), name='default'),
- url(r'^move/down/(?P<rank_id>\d+)/$', MoveDownRank.as_view(), name='down'),
- url(r'^move/up/(?P<rank_id>\d+)/$', MoveUpRank.as_view(), name='up'),
- url(r'^delete/(?P<rank_id>\d+)/$', DeleteRank.as_view(), name='delete'),
- )
- # Bans
- urlpatterns.namespace(r'^bans/', 'bans', 'users')
- urlpatterns.patterns('users:bans',
- url(r'^$', BansList.as_view(), name='index'),
- url(r'^(?P<page>\d+)/$', BansList.as_view(), name='index'),
- url(r'^new/$', NewBan.as_view(), name='new'),
- url(r'^edit/(?P<ban_id>\d+)/$', EditBan.as_view(), name='edit'),
- url(r'^delete/(?P<ban_id>\d+)/$', DeleteBan.as_view(), name='delete'),
- )
- # Warnings
- urlpatterns.namespace(r'^warnings/', 'warnings', 'users')
- urlpatterns.patterns('users:warnings',
- url(r'^$', WarningsList.as_view(), name='index'),
- url(r'^new/$', NewWarning.as_view(), name='new'),
- url(r'^edit/(?P<warning_id>\d+)/$', EditWarning.as_view(), name='edit'),
- url(r'^move/down/(?P<warning_id>\d+)/$', MoveDownWarning.as_view(), name='down'),
- url(r'^move/up/(?P<warning_id>\d+)/$', MoveUpWarning.as_view(), name='up'),
- url(r'^delete/(?P<warning_id>\d+)/$', DeleteWarning.as_view(), name='delete'),
- )
- def register_navigation_nodes(self, site):
- site.add_node(name=_("Users"),
- icon='fa fa-users',
- parent='misago:admin',
- after='misago:admin:index',
- namespace='misago:admin:users',
- link='misago:admin:users:accounts:index')
- site.add_node(name=_("User Accounts"),
- icon='fa fa-users',
- parent='misago:admin:users',
- namespace='misago:admin:users:accounts',
- link='misago:admin:users:accounts:index')
- site.add_node(name=_("Ranks"),
- icon='fa fa-graduation-cap',
- parent='misago:admin:users',
- after='misago:admin:users:accounts:index',
- namespace='misago:admin:users:ranks',
- link='misago:admin:users:ranks:index')
- site.add_node(name=_("Bans"),
- icon='fa fa-lock',
- parent='misago:admin:users',
- after='misago:admin:users:ranks:index',
- namespace='misago:admin:users:bans',
- link='misago:admin:users:bans:index')
- site.add_node(name=_("Warning levels"),
- icon='fa fa-exclamation-triangle',
- parent='misago:admin:users',
- after='misago:admin:users:bans:index',
- namespace='misago:admin:users:warnings',
- link='misago:admin:users:warnings:index')
|