2 bug fixes in editor views
authorĎÚβĨŐÚŚ Dod <thedod@protonmail.ch>
Tue, 26 Jun 2018 13:28:29 +0000 (09:28 -0400)
committerBoris Bobrov <breton@cynicmansion.ru>
Thu, 28 Jun 2018 20:54:06 +0000 (22:54 +0200)
* `WTForms` instances get `__init__`-ed with `defaults` as `kwargs`.
  The first arg is a `request.form` (which is what one must supply if
  this is a `POST` and must *not* supply otherwise).
  The content of that form (empty on `GET`) has higher priority than
  the defaults (which makes the user get an empty form).

* Fix `edit_profile()` to allow changing `location` from a non-blank
  value to blank (i.e. removing the location).

(cherry picked from commit 75f3e23b92392b9bd309fab4c1a52fd38d453627)

mediagoblin/edit/views.py

index 17aea9229446015e91a55ff273786b5e6b76f44a..a296a18416099ef31b8643dfbd3f4c6ae9eda67a 100644 (file)
@@ -1,4 +1,4 @@
-# GNU MediaGoblin -- federated, autonomous media hosting
+
 # Copyright (C) 2011, 2012 MediaGoblin contributors.  See AUTHORS.
 #
 # This program is free software: you can redistribute it and/or modify
@@ -70,7 +70,7 @@ def edit_media(request, media):
         license=media.license)
 
     form = forms.EditForm(
-        request.form,
+        request.method=='POST' and request.form or None,
         **defaults)
 
     if request.method == 'POST' and form.validate():
@@ -219,7 +219,8 @@ def edit_profile(request, url_user=None):
     else:
         location = user.get_location.name
 
-    form = forms.EditProfileForm(request.form,
+    form = forms.EditProfileForm(
+        request.method == 'POST' and request.form or None,
         url=user.url,
         bio=user.bio,
         location=location)
@@ -235,6 +236,8 @@ def edit_profile(request, url_user=None):
             location = user.get_location
             location.name = six.text_type(form.location.data)
             location.save()
+        else:
+            user.location = None
 
         user.save()
 
@@ -260,7 +263,8 @@ EMAIL_VERIFICATION_TEMPLATE = (
 @require_active_login
 def edit_account(request):
     user = request.user
-    form = forms.EditAccountForm(request.form,
+    form = forms.EditAccountForm(
+        request.method == 'POST' and request.form or None,
         wants_comment_notification=user.wants_comment_notification,
         license_preference=user.license_preference,
         wants_notifications=user.wants_notifications)
@@ -358,7 +362,7 @@ def edit_collection(request, collection):
         description=collection.description)
 
     form = forms.EditCollectionForm(
-        request.form,
+        request.method == 'POST' and request.form or None,
         **defaults)
 
     if request.method == 'POST' and form.validate():
@@ -454,7 +458,8 @@ def verify_email(request):
 @require_active_login
 def change_email(request):
     """ View to change the user's email """
-    form = forms.ChangeEmailForm(request.form)
+    form = forms.ChangeEmailForm(
+        request.method == 'POST' and request.form or None)
     user = request.user
 
     # If no password authentication, no need to enter a password
@@ -511,7 +516,8 @@ def edit_metadata(request, media):
     if not media.state == u'processed':
         return render_404(request)
 
-    form = forms.EditMetaDataForm(request.form)
+    form = forms.EditMetaDataForm(
+        request.method == 'POST' and request.form or None)
     if request.method == "POST" and form.validate():
         metadata_dict = dict([(row['identifier'],row['value'])
                             for row in form.media_metadata.data])