def post(self, request, **kwargs): if not request.user.has_perm("user.edit"): raise PermissionDenied() user = self.object = self.get_object() if "add_group" in request.POST: self.group_form = GroupAddForm(request.POST) if self.group_form.is_valid(): user.groups.add(self.group_form.cleaned_data["add_group"]) return HttpResponseRedirect(self.get_success_url() + "#groups") if "remove_group" in request.POST: form = GroupRemoveForm(request.POST) if form.is_valid(): user.groups.remove(form.cleaned_data["remove_group"]) return HttpResponseRedirect(self.get_success_url() + "#groups") if "remove_user" in request.POST: remove_user(user, request) return HttpResponseRedirect(self.get_success_url() + "#groups") return super().post(request, **kwargs)
def get_context_data(self, **kwargs): """Create context for rendering page.""" context = super().get_context_data(**kwargs) user = self.object request = self.request allowed_project_ids = request.user.allowed_project_ids # Filter all user activity all_changes = Change.objects.last_changes( request.user).filter(user=user) # Last user activity last_changes = all_changes[:10] # Filter where project is active user_translation_ids = set( all_changes.values_list("translation", flat=True)) user_translations = (Translation.objects.prefetch().filter( id__in=user_translation_ids, component__project_id__in=allowed_project_ids, ).order()) context["page_profile"] = user.profile context["last_changes"] = last_changes.preload() context["last_changes_url"] = urlencode({"user": user.username}) context["page_user_translations"] = prefetch_stats(user_translations) context["page_owned_projects"] = prefetch_project_flags( prefetch_stats( user.owned_projects.filter( id__in=allowed_project_ids).order())) context["page_watched_projects"] = prefetch_project_flags( prefetch_stats( user.watched_projects.filter( id__in=allowed_project_ids).order())) context["user_languages"] = user.profile.all_languages[:7] context["group_form"] = self.group_form or GroupAddForm() context["page_user_groups"] = user.groups.prefetch_related( "defining_project").order() return context
class UserPage(UpdateView): model = User template_name = "accounts/user.html" slug_field = "username" slug_url_kwarg = "user" context_object_name = "page_user" form_class = UserEditForm group_form = None def post(self, request, **kwargs): if not request.user.has_perm("user.edit"): raise PermissionDenied() user = self.object = self.get_object() if "add_group" in request.POST: self.group_form = GroupAddForm(request.POST) if self.group_form.is_valid(): user.groups.add(self.group_form.cleaned_data["add_group"]) return HttpResponseRedirect(self.get_success_url() + "#groups") if "remove_group" in request.POST: form = GroupRemoveForm(request.POST) if form.is_valid(): user.groups.remove(form.cleaned_data["remove_group"]) return HttpResponseRedirect(self.get_success_url() + "#groups") if "remove_user" in request.POST: remove_user(user, request) return HttpResponseRedirect(self.get_success_url() + "#groups") return super().post(request, **kwargs) def form_valid(self, form): """If the form is valid, save the associated model.""" self.object = form.save(self.request) return HttpResponseRedirect(self.get_success_url()) def get_context_data(self, **kwargs): """Create context for rendering page.""" context = super().get_context_data(**kwargs) user = self.object request = self.request allowed_project_ids = request.user.allowed_project_ids # Filter all user activity all_changes = Change.objects.last_changes( request.user).filter(user=user) # Last user activity last_changes = all_changes[:10] # Filter where project is active user_translation_ids = set( all_changes.values_list("translation", flat=True)) user_translations = (Translation.objects.prefetch().filter( id__in=user_translation_ids, component__project_id__in=allowed_project_ids, ).order()) context["page_profile"] = user.profile context["last_changes"] = last_changes.preload() context["last_changes_url"] = urlencode({"user": user.username}) context["page_user_translations"] = prefetch_stats(user_translations) context["page_owned_projects"] = prefetch_project_flags( prefetch_stats( user.owned_projects.filter( id__in=allowed_project_ids).order())) context["page_watched_projects"] = prefetch_project_flags( prefetch_stats( user.watched_projects.filter( id__in=allowed_project_ids).order())) context["user_languages"] = user.profile.all_languages[:7] context["group_form"] = self.group_form or GroupAddForm() context["page_user_groups"] = user.groups.prefetch_related( "defining_project").order() return context