Working implementation

This commit is contained in:
Kevin Chung
2020-08-16 23:14:59 -04:00
parent cd12d5df7e
commit 7601a52c3b
5 changed files with 38 additions and 2 deletions

View File

@@ -276,7 +276,7 @@ class Users(db.Model):
# Relationship for Teams
team_id = db.Column(db.Integer, db.ForeignKey("teams.id"))
fields = db.relationship(
field_entries = db.relationship(
"FieldEntries", foreign_keys="FieldEntries.user_id", lazy="joined"
)
@@ -313,6 +313,10 @@ class Users(db.Model):
elif user_mode == "users":
return self
@property
def fields(self):
return self.get_fields(admin=False)
@property
def solves(self):
return self.get_solves(admin=False)
@@ -338,6 +342,12 @@ class Users(db.Model):
else:
return None
def get_fields(self, admin=False):
if admin:
return self.field_entries
return [entry for entry in self.field_entries if entry.field.public]
def get_solves(self, admin=False):
from CTFd.utils import get_config
@@ -828,3 +838,11 @@ class FieldEntries(db.Model):
user = db.relationship("Users", foreign_keys="FieldEntries.user_id")
field = db.relationship("Fields", foreign_keys="FieldEntries.field_id")
@hybrid_property
def name(self):
return self.field.name
@hybrid_property
def description(self):
return self.field.description

View File

@@ -51,7 +51,7 @@ class UserSchema(ma.ModelSchema):
)
country = field_for(Users, "country", validate=[validate_country_code])
password = field_for(Users, "password")
fields = Nested(FieldEntriesSchema, partial=True, many=True)
fields = Nested(FieldEntriesSchema, partial=True, many=True, attribute="field_entries")
@pre_load
def validate_name(self, data):

View File

@@ -132,6 +132,12 @@
</h2>
{% endif %}
{% for field in user.get_fields(true) %}
<h3 class="d-block">
{{ field.name }}: {{ field.value }}
</h3>
{% endfor %}
<h3 id="team-place" class="text-center">
{% if place %}
{{ place }}

View File

@@ -39,6 +39,12 @@
</h3>
{% endif %}
{% for field in user.fields %}
<h3 class="d-inline-block">
{{ field.name }}: {{ field.value }}
</h3>
{% endfor %}
<div>
<h2 class="text-center">
{% if account.place %}

View File

@@ -39,6 +39,12 @@
</h3>
{% endif %}
{% for field in user.get_fields() %}
<h3 class="d-block">
{{ field.name }}: {{ field.value }}
</h3>
{% endfor %}
<div>
<h2 class="text-center">
{% if account.place %}