Skip to content

Commit

Permalink
Add view for kicking users; #232
Browse files Browse the repository at this point in the history
  • Loading branch information
quantum5 committed Sep 3, 2016
1 parent b1172d5 commit d7891cf
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
2 changes: 2 additions & 0 deletions dmoj/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,8 @@ def paged_list_view(view, name):
url(r'^/join$', organization.JoinOrganization.as_view(), name='join_organization'),
url(r'^/leave$', organization.LeaveOrganization.as_view(), name='leave_organization'),
url(r'^/edit$', organization.EditOrganization.as_view(), name='edit_organization'),
url(r'^/kick$', organization.KickUserWidgetView.as_view(), name='organization_user_kick'),

url(r'^/request$', organization.RequestJoinOrganization.as_view(), name='request_organization'),
url(r'^/request/(?P<pk>\d+)$', organization.OrganizationRequestDetail.as_view(),
name='request_organization_detail'),
Expand Down
28 changes: 26 additions & 2 deletions judge/views/organization.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,21 @@
from django.db.models import Count, Max
from django.forms import Form, modelformset_factory
from django.http import HttpResponseRedirect, Http404
from django.shortcuts import get_object_or_404
from django.utils.translation import ugettext as _, ugettext_lazy, ungettext
from django.views.generic import DetailView, ListView, View, UpdateView, FormView
from django.views.generic.detail import SingleObjectMixin, SingleObjectTemplateResponseMixin
from reversion import revisions

from judge.forms import EditOrganizationForm
from judge.models import Organization, OrganizationRequest
from judge.models import Organization, OrganizationRequest, Profile
from judge.utils.ranker import ranker
from judge.utils.views import generic_message, TitleMixin

__all__ = ['OrganizationList', 'OrganizationHome', 'OrganizationUsers', 'OrganizationMembershipChange',
'JoinOrganization', 'LeaveOrganization', 'EditOrganization', 'RequestJoinOrganization',
'OrganizationRequestDetail', 'OrganizationRequestView', 'OrganizationRequestLog']
'OrganizationRequestDetail', 'OrganizationRequestView', 'OrganizationRequestLog',
'KickUserWidgetView']


class OrganizationMixin(object):
Expand Down Expand Up @@ -277,3 +279,25 @@ def dispatch(self, request, *args, **kwargs):
except PermissionDenied:
return generic_message(request, _("Can't edit organization"),
_('You are not allowed to edit this organization.'), status=403)


class KickUserWidgetView(LoginRequiredMixin, OrganizationMixin, View):
def post(self, request, *args, **kwargs):
organization = get_object_or_404(Organization, key=kwargs['key'])
if not self.can_edit_organization(organization):
return generic_message(request, _("Can't edit organization"),
_('You are not allowed to kick people from this organization.'), status=403)

try:
user = Profile.objects.get(id=request.POST.get('user', None))
except Profile.DoesNotExist:
return generic_message(request, _("Can't kick user"),
_('The user you are trying to kick does not exist!'), status=400)

if not organization.members.filter(id=user.id).exists():
return generic_message(request, _("Can't kick user"),
_('The user you are trying to kick is not in organization: %s.') %
organization.name, status=400)

organization.members.remove(user)
return HttpResponseRedirect(reverse('organization_users', args=[organization.key]))

0 comments on commit d7891cf

Please sign in to comment.