trophies: ADD hidden parameter, FIX admin panel
This commit is contained in:
parent
a2feb37dce
commit
1b17234623
|
@ -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
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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 ###
|
Loading…
Reference in New Issue