Skip to content
Snippets Groups Projects
Commit ed52663f authored by Martin Mareš's avatar Martin Mareš
Browse files

Hledání na orgovské hlavní stránce

Původní formulář na hledání místa jsem zrušil, protože už máme lepší
hledání v sekci Místa.

Adminské hledání user IDček jsem nahradil obecnějším hledátkem
objektů podle ID pro adminy.
parent c00bb27f
No related branches found
No related tags found
1 merge request!128Místa: hledání a další drobná vylepšení
from collections import defaultdict from collections import defaultdict
from dataclasses import dataclass, field from dataclasses import dataclass, field
from flask import render_template, redirect, url_for, request, flash, g from flask import render_template, redirect, url_for, request, flash, g
import re
from sqlalchemy import and_, or_, tuple_, not_ from sqlalchemy import and_, or_, tuple_, not_
from sqlalchemy.orm import aliased, joinedload from sqlalchemy.orm import aliased, joinedload
from typing import List, Set, Optional, Tuple, DefaultDict from typing import List, Set, Optional, Tuple, DefaultDict
...@@ -39,15 +40,11 @@ def org_index(): ...@@ -39,15 +40,11 @@ def org_index():
else: else:
flash(f'Místo s kódem {code} neexistuje', 'danger') flash(f'Místo s kódem {code} neexistuje', 'danger')
if 'uid' in request.args: # Univerzální hledátko pro správce
try: if 'search' in request.args:
uid = int(request.args['uid']) search_result = magic_search(request.args['search'])
user = mo.users.user_by_uid(uid) if search_result is not None:
if user is not None: return search_result
return redirect(user_url(user))
flash(f'Uživatel s ID {uid} neexistuje', 'danger')
except ValueError:
flash('ID uživatele musí být číslo', 'danger')
# Soutěže, ke kterým máme nějakou roli # Soutěže, ke kterým máme nějakou roli
sess = db.get_session() sess = db.get_session()
...@@ -220,6 +217,35 @@ school_export_columns = ( ...@@ -220,6 +217,35 @@ school_export_columns = (
) )
def magic_search(query: str):
search = re.fullmatch(r'([cpru])(\d{1,9})', request.args['search'])
if not search:
flash('Chybná syntaxe dotazu', 'danger')
return None
what, id = search[1], int(search[2])
sess = db.get_session()
if what == 'c':
contest = sess.query(db.Contest).get(id)
if contest is not None:
return redirect(url_for('org_contest', ct_id=id))
elif what == 'p':
place = sess.query(db.Place).get(id)
if place is not None:
return redirect(url_for('org_place', id=id))
elif what == 'r':
round = sess.query(db.Round).get(id)
if round is not None:
return redirect(url_for('org_round', round_id=id))
elif what == 'u':
user = mo.users.user_by_uid(id)
if user is not None:
return redirect(user_url(user))
flash('Nenalezeno', 'danger')
return None
@app.route('/org/export/schools') @app.route('/org/export/schools')
def org_export_schools(): def org_export_schools():
sess = db.get_session() sess = db.get_session()
......
...@@ -80,17 +80,15 @@ ...@@ -80,17 +80,15 @@
{% endif %} {% endif %}
<h3>Rychlé hledání</h3>
<form method=GET action="" class='form form-inline' role=form>
<input class='form-control' name=place placeholder='Kód místa'></input>
<input class='btn btn-primary' type="submit" value='Vyhledat'>
</form>
{% if g.user.is_admin %} {% if g.user.is_admin %}
<h3>Univerzální hledátko</h3>
<form method=GET action="" class='form form-inline' role=form> <form method=GET action="" class='form form-inline' role=form>
<input class='form-control' name=uid placeholder='ID uživatele'></input> <input class='form-control' name=search placeholder='cID pID rID uID' autofocus></input>
<input class='btn btn-primary' type="submit" value='Vyhledat'> <input class='btn btn-primary' type="submit" value='Vyhledat'>
</form> </form>
{% endif %} {% endif %}
{% endblock %} {% endblock %}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment