Start working on arbitrary user fields

This commit is contained in:
Kevin Chung
2020-08-14 17:32:17 -04:00
parent 5215db995f
commit bf8095ed60
3 changed files with 62 additions and 5 deletions

View File

@@ -4,13 +4,30 @@ from wtforms.validators import InputRequired
from CTFd.forms import BaseForm
from CTFd.forms.fields import SubmitField
from CTFd.models import Fields
class RegistrationForm(BaseForm):
name = StringField("User Name", validators=[InputRequired()])
email = EmailField("Email", validators=[InputRequired()])
password = PasswordField("Password", validators=[InputRequired()])
submit = SubmitField("Submit")
def RegistrationForm(*args, **kwargs):
class _RegistrationForm(BaseForm):
name = StringField("User Name", validators=[InputRequired()])
email = EmailField("Email", validators=[InputRequired()])
password = PasswordField("Password", validators=[InputRequired()])
submit = SubmitField("Submit")
@property
def extra(self):
fields = []
new_fields = Fields.query.all()
for field in new_fields:
entry = (field.name, getattr(self, field.name))
fields.append(entry)
return fields
new_fields = Fields.query.all()
for field in new_fields:
setattr(_RegistrationForm, field.name, StringField(field.name))
return _RegistrationForm(*args, **kwargs)
class LoginForm(BaseForm):

View File

@@ -781,3 +781,35 @@ class TeamComments(Comments):
class PageComments(Comments):
__mapper_args__ = {"polymorphic_identity": "page"}
page_id = db.Column(db.Integer, db.ForeignKey("pages.id", ondelete="CASCADE"))
class Fields(db.Model):
__tablename__ = "fields"
id = db.Column(db.Integer, primary_key=True)
# Name of the field. Used as label.
name = db.Column(db.Text)
# What type of field it is (user or team)
type = db.Column(db.String(80), default="standard")
# The actual type of field (text, boolean)
field_type = db.Column(db.String(80))
# Help text used for the input
description = db.Column(db.Text)
# Required on form submission
required = db.Column(db.Boolean)
# show_on_profile
public = db.Column(db.Boolean)
# User can edit this field in settings. All fields should be edittable by an admin
editable = db.Column(db.Boolean)
__mapper_args__ = {"polymorphic_identity": "standard", "polymorphic_on": type}
class UserFields(Comments):
__mapper_args__ = {"polymorphic_identity": "user"}

View File

@@ -37,6 +37,14 @@
{{ form.password(class="form-control", value=password) }}
</div>
{{ form.nonce() }}
{% for k, v in form.extra %}
<div class="form-group">
<b>{{ v.label }}</b>
{{ v(class="form-control") }}
</div>
{% endfor %}
<div class="row pt-3">
<div class="col-md-12">
{{ form.submit(class="btn btn-md btn-primary btn-outlined float-right") }}