Fix some user feedback form handling
sheesh i don't see how this hasn't been more broken for some time now...
This commit is contained in:
parent
fda7230bce
commit
243c69b231
|
@ -923,6 +923,16 @@ class Form(object):
|
||||||
# https://docs.pylonsproject.org/projects/pyramid/en/latest/api/request.html#pyramid.request.Request.is_xhr
|
# https://docs.pylonsproject.org/projects/pyramid/en/latest/api/request.html#pyramid.request.Request.is_xhr
|
||||||
if self.request.is_xhr:
|
if self.request.is_xhr:
|
||||||
controls = self.request.json_body.items()
|
controls = self.request.json_body.items()
|
||||||
|
|
||||||
|
# TODO: why in the hell is this necessary? some colander forms
|
||||||
|
# won't validate if a `None` sneaks its way through? note, in
|
||||||
|
# particular this was needed to allow anonymous user feedback
|
||||||
|
controls = [[key, val] for key, val in controls]
|
||||||
|
for i in range(len(controls)):
|
||||||
|
key, value = controls[i]
|
||||||
|
if value is None:
|
||||||
|
controls[i][1] = ''
|
||||||
|
|
||||||
else:
|
else:
|
||||||
controls = self.request.POST.items()
|
controls = self.request.POST.items()
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@ from __future__ import unicode_literals, absolute_import
|
||||||
import six
|
import six
|
||||||
|
|
||||||
import rattail
|
import rattail
|
||||||
|
from rattail.db import model
|
||||||
from rattail.batch import consume_batch_id
|
from rattail.batch import consume_batch_id
|
||||||
from rattail.mail import send_email
|
from rattail.mail import send_email
|
||||||
from rattail.util import OrderedDict
|
from rattail.util import OrderedDict
|
||||||
|
@ -45,13 +46,28 @@ from tailbone.views import View
|
||||||
from tailbone.util import set_app_theme
|
from tailbone.util import set_app_theme
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@colander.deferred
|
||||||
|
def validate_user(node, kw):
|
||||||
|
session = kw['session']
|
||||||
|
def validate(node, value):
|
||||||
|
import ipdb; ipdb.set_trace()
|
||||||
|
user = session.query(model.User).get(value)
|
||||||
|
if not user:
|
||||||
|
raise colander.Invalid(node, "User not found")
|
||||||
|
return user.uuid
|
||||||
|
return validate
|
||||||
|
|
||||||
|
|
||||||
class Feedback(colander.Schema):
|
class Feedback(colander.Schema):
|
||||||
"""
|
"""
|
||||||
Form schema for user feedback.
|
Form schema for user feedback.
|
||||||
"""
|
"""
|
||||||
referrer = colander.SchemaNode(colander.String())
|
referrer = colander.SchemaNode(colander.String())
|
||||||
|
|
||||||
user = colander.SchemaNode(forms.types.UserType())
|
user = colander.SchemaNode(colander.String(),
|
||||||
|
# missing=colander.null,
|
||||||
|
validator=validate_user)
|
||||||
|
|
||||||
user_name = colander.SchemaNode(colander.String(),
|
user_name = colander.SchemaNode(colander.String(),
|
||||||
missing=colander.null)
|
missing=colander.null)
|
||||||
|
@ -161,11 +177,13 @@ class CommonView(View):
|
||||||
"""
|
"""
|
||||||
Generic view to handle the user feedback form.
|
Generic view to handle the user feedback form.
|
||||||
"""
|
"""
|
||||||
form = forms.Form(schema=Feedback(), request=self.request)
|
schema = Feedback().bind(session=Session())
|
||||||
|
form = forms.Form(schema=schema, request=self.request)
|
||||||
if form.validate(newstyle=True):
|
if form.validate(newstyle=True):
|
||||||
data = dict(form.validated)
|
data = dict(form.validated)
|
||||||
if data['user']:
|
if data['user']:
|
||||||
data['user_url'] = self.request.route_url('users.view', uuid=data['user'].uuid)
|
data['user'] = Session.query(model.User).get(data['user'])
|
||||||
|
data['user_url'] = self.request.route_url('users.view', uuid=data['user'])
|
||||||
data['client_ip'] = self.request.client_addr
|
data['client_ip'] = self.request.client_addr
|
||||||
send_email(self.rattail_config, 'user_feedback', data=data)
|
send_email(self.rattail_config, 'user_feedback', data=data)
|
||||||
return {'ok': True}
|
return {'ok': True}
|
||||||
|
|
Loading…
Reference in a new issue