trophies: ADD hidden parameter, FIX admin panel

This commit is contained in:
Darks 2020-07-20 19:35:05 +02:00
parent a2feb37dce
commit 1b17234623
Signed by: Darks
GPG Key ID: F61F10FA138E797C
9 changed files with 129 additions and 23 deletions

View File

@ -8,147 +8,180 @@
name: Membre de CreativeCalc
is_title: True
description: Membre de l'association qui gère Planète Casio !
hidden: True
-
name: Membre d'honneur
is_title: True
description: Gloire, honneur et déférence sont dûs.
hidden: True
-
name: Grand Manitou
is_title: True
description: Le seul. L'unique. Le GRAND MANITOU.
hidden: True
-
name: Gourou
is_title: True
description: Possède des trophées obscurs.
hidden: True
-
name: Grand Maître des traits d'esprit
is_title: True
description: Inégalé pour l'heure.
hidden: True
# Number of posts of any kind
-
name: Premiers mots
is_title: False
description: Écrire 20 messages.
hidden: False
-
name: Beau parleur
is_title: False
description: Écrire 500 messages.
hidden: False
-
name: Plume infaillible
is_title: False
description: Écrire 1500 messages.
hidden: False
-
name: Romancier émérite
is_title: True
description: Écrire 5000 messages !
hidden: False
# Number of posted tutorials
-
name: Pédagogue
is_title: False
description: Élaborer 5 tutoriels.
hidden: False
-
name: Encyclopédie vivante
is_title: False
description: Élaborer 10 tutoriels.
hidden: False
-
name: Guerrier du savoir
is_title: True
description: Élaborer 25 tutoriels !
hidden: False
# Account age (awarded on login only)
-
name: Initié
is_title: False
description: Être membre pendant 1 mois.
hidden: False
-
name: Aficionado
is_title: False
description: Être membre pendant 1 an.
hidden: False
-
name: Veni, vidi, casii
is_title: False
description: Être membre pendant 2 ans.
hidden: False
-
name: Papy Casio
is_title: True
description: Être membre pendant 5 ans.
hidden: False
-
name: Vétéran mythique
is_title: True
description: Être membre pendant 10 ans !
hidden: False
# Number of "good" programs
-
name: Programmeur du dimanche
is_title: False
description: Publier 5 prorammes.
hidden: False
-
name: Codeur invétéré
is_title: False
description: Publier 10 programmes.
hidden: False
-
name: Je code donc je suis
is_title: True
description: Publier 20 programmes !
hidden: False
# Number of posted tests
-
name: Testeur
is_title: False
description: Partager 5 tests.
hidden: False
-
name: Grand joueur
is_title: False
description: Partager 25 tests.
hidden: False
-
name: Hard tester
is_title: True
description: Partager 100 tests !
hidden: False
# Number of event participations
-
name: Participant
is_title: False
description: Participer à un événement du site.
hidden: False
-
name: Concourant encore
is_title: False
description: Participer à 5 événements du site.
hidden: False
-
name: Concurrent de l'extrême
is_title: True
description: Participer à 15 événements du site !
hidden: False
# Number of posted art
-
name: Dessinateur en herbe
is_title: False
description: Publier 5 assets graphiques.
hidden: False
-
name: Open pixel
is_title: False
description: Publier 30 assets graphiques.
hidden: False
-
name: Roi du pixel
is_title: True
description: Publier 100 assets graphiques !
hidden: False
# Miscellaneous automatically awarded
-
name: Actif
is_title: False
description: Être présent 30 jours de suite.
hidden: False
-
name: Artiste
is_title: False
description: Modifier son avatar.
hidden: False
-
name: Maître du code
is_title: True
description: Être décoré 5 fois du label de qualité !
hidden: False
-
name: Bourreau des cœurs
is_title: True
description: Foudroyer les cœurs à 5 reprises !
hidden: False

View File

@ -6,7 +6,7 @@ from flask_wtf.file import FileField # Cuz' wtforms' FileField is shitty
class TrophyForm(FlaskForm):
name = StringField(
'Nom',
'Nom',
validators=[
DataRequired(),
],
@ -14,15 +14,25 @@ class TrophyForm(FlaskForm):
icon = FileField(
'Icône',
)
desc = StringField(
'Description'
)
title = BooleanField(
'Titre',
description='Un titre peut être affiché en dessous du pseudo.',
'Titre',
description='Un titre peut être affiché en dessous du pseudo.',
validators=[
Optional(),
],
)
hidden = BooleanField(
'Caché',
description='Le trophée n\'est pas affiché grisé dans la page de profil',
validators=[
Optional(),
],
)
css = StringField(
'CSS',
'CSS',
description='CSS appliqué au titre, le cas échéant.',
)
submit = SubmitField(
@ -31,10 +41,10 @@ class TrophyForm(FlaskForm):
class DeleteTrophyForm(FlaskForm):
delete = BooleanField(
'Confirmer la suppression',
'Confirmer la suppression',
validators=[
DataRequired(),
],
],
description='Attention, cette opération est irréversible!',
)
submit = SubmitField(

View File

@ -17,13 +17,16 @@ class Trophy(db.Model):
name = db.Column(db.Unicode(64), index=True)
# Description
description = db.Column(db.UnicodeText, index=True)
# Hidden by default
hidden = db.Column(db.Boolean, default=False)
owners = db.relationship('Member', secondary=lambda: TrophyMember,
back_populates='trophies')
def __init__(self, name, description):
def __init__(self, name, description, hidden=False):
self.name = name
self.description = description
self.hidden = hidden
def __repr__(self):
return f'<Trophy: {self.name}>'
@ -36,9 +39,10 @@ class Title(Trophy):
id = db.Column(db.Integer, db.ForeignKey('trophy.id'), primary_key=True)
css = db.Column(db.UnicodeText)
def __init__(self, name, description, css=""):
def __init__(self, name, description, hidden=False, css=""):
self.name = name
self.description = description
self.hidden = hidden
self.css = css
def __repr__(self):

View File

@ -14,9 +14,11 @@ def adm_trophies():
if form.validate_on_submit():
is_title = form.title.data
if is_title:
trophy = Title(form.name.data, form.css.data)
trophy = Title(form.name.data, form.desc.data,
form.hidden.data, form.css.data)
else:
trophy = Trophy(form.name.data)
trophy = Trophy(form.name.data, form.desc.data,
form.hidden.data)
db.session.add(trophy)
db.session.commit()
flash(f'Nouveau {["trophée", "titre"][is_title]} ajouté', 'ok')
@ -39,10 +41,14 @@ def adm_edit_trophy(trophy_id):
is_title = form.title.data != ""
if is_title:
trophy.name = form.name.data
trophy.description = form.desc.data
trophy.title = form.title.data
trophy.hidden = form.hidden.data
trophy.css = form.css.data
else:
trophy.name = form.name.data
trophy.description = form.desc.data
trophy.hidden = form.hidden.data
db.session.merge(trophy)
db.session.commit()
flash(f'{["Trophée", "Titre"][is_title]} modifié', 'ok')

View File

@ -17,12 +17,6 @@
<div><a href="{{ url_for('adm_edit_account', user_id=member.id) }}">Modifier le compte</a></div>
{% endif %}
{% endif %}
<!-- <div>Membre depuis le {{ member.register_date|date('%Y-%m-%d') }}</div>
{% if member.birthday %}
<div>Anniversaire le {{ member.birthday|date('%Y-%M-%d') }}</div>
{% endif %} -->
</div>
<div style="padding:30px;">
<div style="font-size:115%;font-style:italic;margin-bottom:15px;">
@ -50,7 +44,7 @@
<h2>Trophées</h2>
<div class="trophies">
{% for t in trophies %}
{% for t in trophies if t in member.trophies or t.hidden == False %}
<div class="trophy {{ '' if t in member.trophies else 'disabled' }}">
<img src="{{ url_for('static', filename='images/fa_124.png') }}">
<div>

View File

@ -17,17 +17,32 @@
<span class="msgerror">{{ error }}</span>
{% endfor %}
</div>
<div>
{{ form.desc.label }}
{{ form.desc(value=trophy.description) }}
{% for error in form.desc.errors %}
<span class="msgerror">{{ error }}</span>
{% endfor %}
</div>
<div>
{{ form.hidden.label }}
{{ form.hidden(checked=trophy.hidden) }}
<div class=desc>{{ form.hidden.description }}</div>
{% for error in form.hidden.errors %}
<span class="msgerror">{{ error }}</span>
{% endfor %}
</div>
<div>
{{ form.title.label }}
{{ form.title() }}
<div class=desc>{{ form.title.description }}</div>
<div class=desc>{{ form.title.description }}</div>
{% for error in form.title.errors %}
<span class="msgerror">{{ error }}</span>
{% endfor %}
</div>
<div>
{{ form.css.label }}
<div class=desc>{{ form.css.description }}</div>
<div class=desc>{{ form.css.description }}</div>
{{ form.css(value=trophy.css) }}
{% for error in form.css.errors %}
<span class="msgerror">{{ error }}</span>

View File

@ -44,17 +44,32 @@
<span class="msgerror">{{ error }}</span>
{% endfor %}
</div>
<div>
{{ form.desc.label }}
{{ form.desc }}
{% for error in form.desc.errors %}
<span class="msgerror">{{ error }}</span>
{% endfor %}
</div>
<div>
{{ form.hidden.label }}
{{ form.hidden }}
<div class=desc>{{ form.hidden.description }}</div>
{% for error in form.hidden.errors %}
<span class="msgerror">{{ error }}</span>
{% endfor %}
</div>
<div>
{{ form.title.label }}
{{ form.title }}
<div class=desc>{{ form.title.description }}</div>
<div class=desc>{{ form.title.description }}</div>
{% for error in form.title.errors %}
<span class="msgerror">{{ error }}</span>
{% endfor %}
</div>
<div>
{{ form.css.label }}
<div class=desc>{{ form.css.description }}</div>
<div class=desc>{{ form.css.description }}</div>
{{ form.css }}
{% for error in form.css.errors %}
<span class="msgerror">{{ error }}</span>

View File

@ -174,9 +174,10 @@ def create_trophies():
description = t.get("description", "")
if t["is_title"]:
trophy = Title(t["name"], description, t.get("css", ""))
trophy = Title(t["name"], description, t["hidden"],
t.get("css", ""))
else:
trophy = Trophy(t["name"], description)
trophy = Trophy(t["name"], description, t["hidden"])
db.session.add(trophy)
db.session.commit()

View File

@ -0,0 +1,28 @@
"""Added `hidden` property for trophies
Revision ID: 6fd4c15b8a7b
Revises: b659d4c2a5d1
Create Date: 2020-07-20 19:29:18.465491
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '6fd4c15b8a7b'
down_revision = 'b659d4c2a5d1'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('trophy', sa.Column('hidden', sa.Boolean(), nullable=True))
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column('trophy', 'hidden')
# ### end Alembic commands ###