editdetails.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from django import forms
  2. from rest_framework.response import Response
  3. from misago.users.profilefields import profilefields, serialize_profilefields_data
  4. def edit_details_endpoint(request, user):
  5. if request.method == "GET":
  6. return get_form_description(request, user)
  7. return submit_form(request, user)
  8. def get_form_description(request, user):
  9. groups = []
  10. for group in profilefields.get_fields_groups():
  11. group_fields = []
  12. for field in group["fields"]:
  13. if field.is_editable(request, user):
  14. group_fields.append(field.get_form_field_json(request, user))
  15. if group_fields:
  16. groups.append({"name": group["name"], "fields": group_fields})
  17. return Response(groups)
  18. def submit_form(request, user):
  19. fields = []
  20. for field in profilefields.get_fields():
  21. if field.is_editable(request, user):
  22. fields.append(field)
  23. form = DetailsForm(request.data, request=request, user=user)
  24. if form.is_valid():
  25. profilefields.update_user_profile_fields(request, user, form)
  26. user.save(update_fields=["profile_fields"])
  27. return Response(serialize_profilefields_data(request, profilefields, user))
  28. return Response(form.errors, status=400)
  29. class DetailsForm(forms.Form):
  30. def __init__(self, *args, **kwargs):
  31. self.request = kwargs.pop("request")
  32. self.user = kwargs.pop("user")
  33. super().__init__(*args, **kwargs)
  34. profilefields.add_fields_to_form(self.request, self.user, self)
  35. def clean(self):
  36. data = super().clean()
  37. return profilefields.clean_form(self.request, self.user, self, data)