Added state property to role model.
This can be used when for instance a member has been removed from a club or a when a program has been marked inactive. Certain roles would then be shown on the upcoming roles page marked as previous roles. This would give us the archiving capability that was shown in the mockup.
Patch by: Lennard de Rijk
Reviewd by: to-be-reviewed
from django.contrib.auth.models import User, Groupfrom django.core.exceptions import PermissionDeniedfrom django import templatefrom django.shortcuts import render_to_response, get_object_or_404from django.template import RequestContextfrom django.utils.html import escapefrom django.http import HttpResponseRedirectfrom django.utils.translation import ugettext, ugettext_lazy as _from django.contrib.auth.forms import UserCreationForm, UserChangeForm, AdminPasswordChangeFormfrom django.contrib import adminclass GroupAdmin(admin.ModelAdmin): search_fields = ('name',) ordering = ('name',) filter_horizontal = ('permissions',)class UserAdmin(admin.ModelAdmin): fieldsets = ( (None, {'fields': ('username', 'password')}), (_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}), (_('Permissions'), {'fields': ('is_staff', 'is_active', 'is_superuser', 'user_permissions')}), (_('Important dates'), {'fields': ('last_login', 'date_joined')}), (_('Groups'), {'fields': ('groups',)}), ) form = UserChangeForm add_form = UserCreationForm change_password_form = AdminPasswordChangeForm list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff') list_filter = ('is_staff', 'is_superuser') search_fields = ('username', 'first_name', 'last_name', 'email') ordering = ('username',) filter_horizontal = ('user_permissions',) def __call__(self, request, url): # this should not be here, but must be due to the way __call__ routes # in ModelAdmin. if url is None: return self.changelist_view(request) if url.endswith('password'): return self.user_change_password(request, url.split('/')[0]) return super(UserAdmin, self).__call__(request, url) def add_view(self, request): if not self.has_change_permission(request): raise PermissionDenied if request.method == 'POST': form = self.add_form(request.POST) if form.is_valid(): new_user = form.save() msg = _('The %(name)s "%(obj)s" was added successfully.') % {'name': 'user', 'obj': new_user} self.log_addition(request, new_user) if "_addanother" in request.POST: request.user.message_set.create(message=msg) return HttpResponseRedirect(request.path) elif '_popup' in request.REQUEST: return self.response_add(request, new_user) else: request.user.message_set.create(message=msg + ' ' + ugettext("You may edit it again below.")) return HttpResponseRedirect('../%s/' % new_user.id) else: form = self.add_form() return render_to_response('admin/auth/user/add_form.html', { 'title': _('Add user'), 'form': form, 'is_popup': '_popup' in request.REQUEST, 'add': True, 'change': False, 'has_add_permission': True, 'has_delete_permission': False, 'has_change_permission': True, 'has_file_field': False, 'has_absolute_url': False, 'auto_populated_fields': (), 'opts': self.model._meta, 'save_as': False, 'username_help_text': self.model._meta.get_field('username').help_text, 'root_path': self.admin_site.root_path, 'app_label': self.model._meta.app_label, }, context_instance=template.RequestContext(request)) def user_change_password(self, request, id): if not request.user.has_perm('auth.change_user'): raise PermissionDenied user = get_object_or_404(self.model, pk=id) if request.method == 'POST': form = self.change_password_form(user, request.POST) if form.is_valid(): new_user = form.save() msg = ugettext('Password changed successfully.') request.user.message_set.create(message=msg) return HttpResponseRedirect('..') else: form = self.change_password_form(user) return render_to_response('admin/auth/user/change_password.html', { 'title': _('Change password: %s') % escape(user.username), 'form': form, 'is_popup': '_popup' in request.REQUEST, 'add': True, 'change': False, 'has_delete_permission': False, 'has_change_permission': True, 'has_absolute_url': False, 'opts': self.model._meta, 'original': user, 'save_as': False, 'show_save': True, 'root_path': self.admin_site.root_path, }, context_instance=RequestContext(request))admin.site.register(Group, GroupAdmin)admin.site.register(User, UserAdmin)