PCv5/app/forms/search.py

64 lines
2.8 KiB
Python

from flask_login import current_user
from flask_wtf import FlaskForm
from wtforms.validators import InputRequired, Optional
from wtforms.fields import StringField, SubmitField, SelectField, SelectMultipleField, DateField
from app.models.forum import Forum
# TODO: compléter le formulaire de recherche avancée
class SearchForm(FlaskForm):
class Meta:
csrf = False
q = StringField('Rechercher', validators=[InputRequired()])
class AdvancedSearchForm(SearchForm):
def generate_choices():
choices = {'Forum': [
('all-forum', 'Tous les forums'),
('news-forum', 'Actualités'),
('help-and-questions-forum', 'Aide et questions'),
('projects-forum', 'Forum des projets'),
('community-forum', 'Vie communautaire'),
], 'Programmes': [
('all-programs', 'Tous les programmes'),
('games-programs', 'Jeux'),
('utilities-programs', 'Utilitaires'),
('software-programs', 'Logiciels')
], 'Utilisateurs': [
('all-users', 'Tous les utilisateurs')
], 'Tutoriels': [
('all-tutorials', 'Tous les tutoriels'),
('basic-tutorials', 'Basic'),
('c-cpp-tutorials', 'C/C++'),
('arduino-tutorials', 'Arduino'),
('python-tutorials', 'Python')
], 'Sprites': [
('all-sprites', 'Tous les sprites'),
('characters-sprites', 'Personnages'),
('environnement-sprites', 'Environnements'),
('objects-sprites', 'Objets'),
('interfaces-sprites', 'Interfaces')
]}
# Forum reserved for admins and moderators
f = Forum.query.filter_by(prefix='admin').first()
if (current_user.is_authenticated and current_user.can_access_forum(f)):
choices['Forum'].append(('administration-forum', 'Administration'))
# Forum reserved to members of CreativeCalc
f = Forum.query.filter_by(prefix='creativecalc').first()
if (current_user.is_authenticated and current_user.can_access_forum(f)):
choices['Forum'].append(('creativecalc-forum', 'CreativeCalc'))
return choices
sortBy = SelectField('Trier',
choices={'Pertinence': ['Pertinence'],
'Date': ['Date croissante',
'Date décroissante'],
'Ordre Alphabétique': [
'Alphabétique croissant',
'Alphabétique décroissant',]},
validators=[Optional()])
date = DateField('Date de publication', validators=[Optional()])
scope = SelectMultipleField('', choices=generate_choices, validators=[Optional()])
submit = SubmitField('Affiner la recherche')