mirror of
https://github.com/aljazceru/CTFd.git
synced 2026-02-14 02:34:23 +01:00
Start working on arbitrary user fields
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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"}
|
||||
@@ -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") }}
|
||||
|
||||
Reference in New Issue
Block a user