Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • devel
  • fo
  • fo-base
  • honza/add-contestant
  • honza/kolo-vs-soutez
  • honza/mr6
  • honza/mr7
  • honza/mra
  • honza/mrd
  • honza/mrf
  • honza/submit-images
  • jh-stress-test-wip
  • jirka/typing
  • jk/issue-196
  • jk/issue-96
  • master
  • mj/submit-images
  • shorten-schools
18 results

Target

Select target project
  • mj/mo-submit
1 result
Select Git revision
  • devel
  • fo
  • fo-base
  • honza/add-contestant
  • honza/kolo-vs-soutez
  • honza/mr6
  • honza/mr7
  • honza/mra
  • honza/mrd
  • honza/mrf
  • honza/submit-images
  • jh-stress-test-wip
  • jirka/typing
  • jk/issue-196
  • jk/issue-96
  • master
  • mj/submit-images
  • shorten-schools
18 results
Show changes
Showing
with 161 additions and 224 deletions
......@@ -3,7 +3,7 @@
{% block title %}Editace kola {{ round.round_code() }}{% endblock %}
{% block breadcrumbs %}
{{ contest_breadcrumbs(round=round, action="Editace") }}
{{ ctx.breadcrumbs(action="Editace") }}
{% endblock %}
{% block body %}
......
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}Seznam účastníků kola {{ round.round_code() }}{% endblock %}
{% block breadcrumbs %}
{{ contest_breadcrumbs(round=round, action="Seznam účastníků" if table else "E-maily", table=False if table else True) }}
{% endblock %}
{% set id = round.round_id %}
{% block body %}
<div class="form-frame">
<form action="" method="GET" class="form form-inline" role="form">
<div class="form-row">
{{ wtf.form_field(filter.contest_place, placeholder='Kód', size=8) }}
{{ wtf.form_field(filter.participation_place, placeholder='Kód', size=8) }}
{{ wtf.form_field(filter.school, placeholder='Kód', size=8) }}
{{ wtf.form_field(filter.participation_state) }}
</div>
<div class="form-row" style="margin-top: 5px;">
<div class="btn-group">
{{ wtf.form_field(filter.submit, class='btn btn-primary') }}
{% if table %}
<button class="btn btn-default" name="format" value="cs_csv" title="Stáhnout celý výsledek v CSV">↓ CSV</button>
<button class="btn btn-default" name="format" value="tsv" title="Stáhnout celý výsledek v TSV">↓ TSV</button>
{% endif %}
</div>
{% if table %}
<div style="float: right">
Stránka {{ filter.offset.data // filter.limit.data + 1}} z {{ (count / filter.limit.data)|round(0, 'ceil')|int }}:
<div class="btn-group">
{% if filter.offset.data > 0 %}
{{ wtf.form_field(filter.previous) }}
{% else %}
<button class="btn" disabled>Předchozí</button>
{% endif %}
{% if count > filter.offset.data + filter.limit.data %}
{{ wtf.form_field(filter.next) }}
{% else %}
<button class="btn" disabled>Další</button>
{% endif %}
</div>
<input type="hidden" name="offset" value="{{filter.offset.data}}">
<input type="hidden" name="limit" value="{{filter.limit.data}}">
</div>
{% set max = filter.offset.data + filter.limit.data if filter.offset.data + filter.limit.data < count else count %}
{% if count > 0 %}
Zobrazuji záznamy <b>{{filter.offset.data + 1}}</b><b>{{ max }}</b> z <b>{{count}} nalezených účastníků</b>.
{% else %}
<b>Nebyly nalezeny žádné záznamy účastníků.</b>
{% endif %}
{% else %}
Celkem <b>{{count|inflected('nalezený účastník', 'nalezení účastníci', 'nalezených účastníků')}}</b>.
{% endif %}
</div>
</form>
</div>
{% if table %}
{% include 'parts/org_participants_table_actions.html' %}
{% if form_actions %}
<br>
<i>Upozornění: Můžete editovat jen účastníky soutěžící v oblastech, ke kterým máte právo.</i>
{% endif %}
{% else %}
{% include 'parts/org_participants_emails.html' %}
{% endif %}
{% endblock %}
......@@ -3,7 +3,7 @@
{% block title %}{{ round.name }} {{ round.round_code() }} – zprávičky{% endblock %}
{% block breadcrumbs %}
{{ contest_breadcrumbs(round=round, action='Zprávičky') }}
{{ ctx.breadcrumbs(action='Zprávičky') }}
{% endblock %}
{% block body %}
......
......@@ -5,7 +5,7 @@
{% if task %}Editace úlohy {{ task.code }} {{ task.name }}{% else %}Nová úloha{% endif %}
{% endblock %}
{% block breadcrumbs %}
{{ contest_breadcrumbs(round=round, task=task, action="Nová úloha" if not task else None) }}
{{ ctx.breadcrumbs(action="Nová úloha" if not ctx.task else None) }}
{% endblock %}
{% block body %}
......
......@@ -14,7 +14,7 @@
</thead>
{% for r in rounds %}
<tr>
<td><a href='{{ url_for('org_round', id=r.round_id) }}'>{{ r.round_code() }}</a>
<td><a href='{{ url_for('org_round', round_id=r.round_id) }}'>{{ r.round_code() }}</a>
<td>{{ r.year }}
<td>{{ r.category }}
<td>{{ r.seq }}{{ r.part_code() }}
......@@ -23,4 +23,10 @@
<td class='rstate-{{r.state.name}}'>{{ r.state.friendly_name() }}
{% endfor %}
</table>
{% if history %}
<p><a class='btn btn-default' href='{{ url_for('org_rounds') }}'>Aktuální ročník</a>
{% else %}
<p><a class='btn btn-default' href='{{ url_for('org_rounds_history') }}'>Všechny ročníky</a>
{% endif %}
{% endblock %}
......@@ -4,14 +4,14 @@
{{ round.round_code() }}: Výsledky pro {{ round.name|lower }} kategorie {{ round.category }}{% if contest %} {{ contest.place.name_locative() }}{% endif %}
{% endblock %}
{% block breadcrumbs %}
{{ contest_breadcrumbs(round=round, contest=contest, action="Výsledky oblasti" if contest else "Výsledky kola") }}
{{ ctx.breadcrumbs(action="Výsledky oblasti" if contest else "Výsledky kola") }}
{% endblock %}
{% block pretitle %}
<div class="btn-group pull-right">
{% if contest %}
<a class="btn btn-default" href="{{ url_for('org_contest_solutions', id=contest.contest_id) }}">Odevzdaná řešení</a>
<a class="btn btn-default" href="{{ url_for('org_score', round_id=round.round_id) }}">Výsledky kola</a>
<a class="btn btn-default" href="{{ ctx.url_for('org_contest_solutions') }}">Odevzdaná řešení</a>
<a class="btn btn-default" href="{{ ctx.url_for('org_score', ct_id=None) }}">Výsledky kola</a>
{% endif %}
</div>
{% endblock %}
......@@ -42,7 +42,7 @@
{% if group_rounds|length > 1 %}
<p>Toto je <b>sdílená výsledková listina</b> pro několik kol:
{% for r in group_rounds %}{% if loop.index > 1 %}, {% endif %}<a href="{{ url_for('org_round', id=r.round_id) }}">{{ r.round_code() }} {{ r.name }}</a>{% endfor %}.
{% for r in group_rounds %}{% if loop.index > 1 %}, {% endif %}<a href="{{ url_for('org_round', round_id=r.round_id) }}">{{ r.round_code() }} {{ r.name }}</a>{% endfor %}.
Jsou v ní započítány body ze všech úloh těchto kol.</p>
{% endif %}
......
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}{{ sc.user.full_name() }} – řešení úlohy {{ sc.task.code }} {{ sc.task.name }}{% endblock %}
{% set allow_edit_points=rights.can_edit_points() %}
{% set allow_upload_solutions=rights.can_upload_solutions() %}
{% set allow_upload_feedback=rights.can_upload_feedback() %}
{% block title %}{{ ctx.user.full_name() }} – řešení úlohy {{ ctx.task.code }} {{ ctx.task.name }}{% endblock %}
{% block breadcrumbs %}
{{ contest_breadcrumbs(round=sc.round, contest=sc.contest, site=sc.site, task=sc.task, user=sc.user, action="Detail řešení") }}
{{ ctx.breadcrumbs(action="Detail řešení") }}
{% endblock %}
{% block body %}
{% set site_id = sc.site.place_id if sc.site else None %}
<table class="data">
<tr><th>Účastník<td>{{ sc.user|pion_link(sc.contest.contest_id) }}{{ sc.user|user_flags }}
<tr><th>Úloha<td><a href='{{ url_for('org_contest_task', contest_id=sc.contest.contest_id, site_id=site_id, task_id=sc.task.task_id) }}'>{{ sc.task.code }} {{ sc.task.name }}</a>
<tr><th>Účastník<td>{{ ctx.user|pion_link(ctx.contest.contest_id) }}{{ ctx.user|user_flags }}
<tr><th>Úloha<td><a href='{{ ctx.url_for('org_contest_task') }}'>{{ ctx.task.code }} {{ ctx.task.name }}</a>
{% if solution %}
<tr><th>Body<td>
{{ solution.points|decimal|none_value(Markup('<span class="unknown">?</span>')) }}
{% if sc.task.max_points is not none %}<span class="hint"> / {{ sc.task.max_points|decimal }}</span>{% endif %}
{% if ctx.task.max_points is not none %}<span class="hint"> / {{ ctx.task.max_points|decimal }}</span>{% endif %}
<tr title="Viditelná účastníkovi po uzavření kola">
<th>Poznámka k řešení:<td style="white-space: pre-line;">{{ solution.note|or_dash }}</td>
<tr title="Viditelná jen organizátorům">
......@@ -63,12 +66,12 @@ Existuje více než jedna verze řešení, finální je podbarvená.
{% set active_sol_id = None %}
{% endif %}
{% for p in sol_papers %}
{% set late = p.check_deadline(sc.round) %}
{% set late = p.check_deadline(ctx.round) %}
<tr{% if p.paper_id == active_sol_id %} class='sol-active'{% endif %}>
<td{% if late %} class='sol-warn'{% endif %}>{{ p.uploaded_at|timeformat }}
<td>{% if p.is_broken() %}nekorektní PDF{% else %}{{ p.pages|or_dash }}{% endif %}
<td>{{ p.bytes|or_dash }}
<td>{% if p.uploaded_by_obj == sc.user %}<i>účastník</i>{% else %}{{ p.uploaded_by_obj|user_link }}{% endif %}
<td>{% if p.uploaded_by_obj == ctx.user %}<i>účastník</i>{% else %}{{ p.uploaded_by_obj|user_link }}{% endif %}
<td>{% if late %}<span class='sol-warn'>({{ late }})</span> {% endif %}{{ p.note }}
{% if p.is_fixed() %}Automaticky opravené nekorektní PDF.{% endif %}
<td><div class="btn-group">
......@@ -165,21 +168,21 @@ Existuje více než jedna verze oprav, finální je podbarvená.
</div>
{% else %}
<p>Žádné odevzdané řešení. {% if form and sc.allow_edit_points %}Můžete ho založit pomocí formuláře níže.{% endif %}
<p>Žádné odevzdané řešení. {% if form and allow_edit_points %}Můžete ho založit pomocí formuláře níže.{% endif %}
{% endif %}
{% if form and (sc.allow_edit_points or sc.allow_upload_feedback or sc.allow_upload_solutions) %}
{% if form and (allow_edit_points or allow_upload_feedback or allow_upload_solutions) %}
<form method="post" class="form-horizontal" enctype="multipart/form-data">
<div class="form-frame">
{{ form.csrf_token }}
{% set action = 'Uložit' if solution else 'Založit řešení' %}
{% if sc.allow_edit_points %}
{% if allow_edit_points %}
{% if solution %}
<h3 style="margin-top: 10px;">Hodnocení řešení</h3>
{% else %}
<h3>Založit řešení</h3>
<p><i>Můžete rovnou vyplnit i poznámky a přidělené body
{%- if sc.allow_upload_feedback or sc.allow_upload_solutions %}, případně rovnou nahrát i soubor řešení nebo opravy{% endif %}.
{%- if allow_upload_feedback or allow_upload_solutions %}, případně rovnou nahrát i soubor řešení nebo opravy{% endif %}.
</i></p>
{% endif %}
{{ wtf.form_field(form.note, form_type='horizontal', horizontal_columns=('sm', 2, 10), rows=4)}}
......@@ -187,13 +190,13 @@ Existuje více než jedna verze oprav, finální je podbarvená.
{{ wtf.form_field(form.points, form_type='horizontal', horizontal_columns=('sm', 2, 10) )}}
{{ wtf.form_field(
form.submit, form_type='horizontal', class='btn btn-primary', horizontal_columns=('sm', 2, 10),
value=action + (' bez nahrání souboru' if sc.allow_upload_feedback or sc.allow_upload_solutions else '')
value=action + (' bez nahrání souboru' if allow_upload_feedback or allow_upload_solutions else '')
)}}
{% endif %}
{% if sc.allow_upload_feedback or sc.allow_upload_solutions %}
{% if allow_upload_feedback or allow_upload_solutions %}
{% if solution %}
<h3>Nahrání souboru</h3>
{% if sc.allow_edit_points %}
{% if allow_edit_points %}
<p><i>Lze najednou editovat řešení (například zadat body) i nahrát soubor, použijte tlačítka na spodku formuláře.</i></p>
{% endif %}
{% else %}
......@@ -203,10 +206,10 @@ Existuje více než jedna verze oprav, finální je podbarvená.
{{ wtf.form_field(form.file_note, form_type='horizontal', horizontal_columns=('sm', 2, 10)) }}
<div class="form-group">
<div class="btn btn-group col-sm-offset-2">
{% if sc.allow_upload_solutions %}
{% if allow_upload_solutions %}
{{ wtf.form_field(form.submit_sol, class='btn btn-primary', value=action + ' a nahrát soubor jako řešení' )}}
{% endif %}
{% if sc.allow_upload_feedback %}
{% if allow_upload_feedback %}
{{ wtf.form_field(form.submit_fb, class='btn btn-success', value=action + ' a nahrát soubor jako opravu' )}}
{% endif %}
</div>
......@@ -214,7 +217,7 @@ Existuje více než jedna verze oprav, finální je podbarvená.
{% endif %}
</div>
{% if solution and not solution.final_submit and not solution.final_feedback and sc.allow_create_solutions %}
{% if solution and not solution.final_submit and not solution.final_feedback and allow_create_solutions %}
<div class="form-frame">
<h3 style="margin-top: 10px;">Smazání řešení</h3>
<p>Toto řešení zatím neobsahuje žádný soubor. Pokud bylo přidáno omylem, můžete ho smazat.</p>
......
......@@ -24,7 +24,7 @@
<form method=POST class='btn-group' onsubmit='return confirm("Poslat účastníkovi e-mail s odkazem na vytvoření hesla?");'>
{{ resend_invite_form.csrf_token }}
<button class="btn btn-default" type='submit' name='resend_invite' value='yes'>
{% if user.last_login_at %}Resetovat heslo{% else %}Znovu poslat zvací e-mail{% endif %}
Znovu poslat zvací e-mail
</button>
</form>
{% endif %}
......@@ -43,7 +43,7 @@
<table class="data full">
<thead>
<tr>
<th>Ročník<th>Škola<th>Třída<th>Rok narození
<th>Ročník<th>Škola<th>Třída<th>Rok narození<th>Akce
</tr>
</thead>
{% for participant in participants %}
......@@ -52,6 +52,7 @@
<td><a href="{{ url_for('org_place', id=participant.school) }}">{{ participant.school_place.name }}</a>
<td>{{ participant.grade }}
<td>{{ participant.birth_year }}
<td><a class="btn btn-xs btn-primary" href="{{ url_for('org_user_participant_edit', user_id=user.user_id, year=participant.year) }}">Editovat</a>
</tr>
{% endfor %}
</table>
......@@ -78,9 +79,9 @@
{% endif %}
<td>{{ pion.state.friendly_name() }}
<td><div class="btn-group">
<a class="btn btn-xs btn-primary" href="{{ url_for('org_contest_user', contest_id=contest.contest_id, user_id=user.user_id) }}">Odevzdané úlohy</a>
<a class="btn btn-xs btn-default" href="{{ url_for('org_contest', id=contest.contest_id) }}">Stránka soutěže</a>
<a class="btn btn-xs btn-default" href="{{ url_for('org_round', id=round.round_id) }}">Stránka kola</a>
<a class="btn btn-xs btn-primary" href="{{ url_for('org_contest_user', ct_id=contest.contest_id, user_id=user.user_id) }}">Odevzdané úlohy</a>
<a class="btn btn-xs btn-default" href="{{ url_for('org_contest', ct_id=contest.contest_id) }}">Stránka soutěže</a>
<a class="btn btn-xs btn-default" href="{{ url_for('org_round', round_id=round.round_id) }}">Stránka kola</a>
{% if g.user.is_admin %}
<a class="btn btn-xs btn-default" href="{{ log_url('participant', user.user_id) }}">Historie</a>
{% endif %}
......
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}Editace registrace soutěžícího {{ user.full_name() }} v {{ year }}. ročníku{% endblock %}
{% block body %}
{{ wtf.quick_form(form, form_type='horizontal', button_map={'submit': 'primary'}) }}
{% endblock %}
......@@ -20,7 +20,7 @@
{{ wtf.form_field(filter.round_seq) }}
</div>
<div class="col-sm-2">
{{ wtf.form_field(filter.contest_site_code, placeholder='Kód') }}
{{ wtf.form_field(filter.contest_site, placeholder='Kód') }}
</div>
<div class="col-sm-2">
{{ wtf.form_field(filter.participation_state) }}
......@@ -32,7 +32,7 @@
{{ wtf.form_field(filter.year) }}
</div>
<div class="col-sm-2">
{{ wtf.form_field(filter.school_code, placeholder='Kód') }}
{{ wtf.form_field(filter.school, placeholder='Kód') }}
</div>
<div class="col-sm-3">
{{ wtf.form_field(filter.search_name, placeholder='Libovolná část jména') }}
......
<h3>E-mailové adresy</h3>
{% if emails %}
<pre>{{ emails|join('\n')|escape }}</pre>
<textarea id="emails-textarea" style="display: none">{{ emails|join('\n')|escape }}</textarea>
<p>
<a class="btn btn-primary" href="{{ mailto_link }}">Vytvořit e-mail pro {{ count|inflected("adresáta", "adresáty", "adresátů") }}</a>
<button class="btn btn-default" id="copy-emails">Zkopírovat všechny adresy do schránky</button>
<script type="text/javascript">
var ta = document.getElementById('emails-textarea');
document.getElementById('copy-emails').addEventListener('click', function () {
ta.style.display = 'block';
ta.select();
document.execCommand('copy', false);
ta.style.display = 'none';
});
</script>
</p>
<p>E-mailové adresy účastníků prosím vkládejte do pole pro <b>skrytou kopii (Bcc)</b>, ať si navzájem nevidí své e-maily.</p>
{% else %}<i>Žádné e-mailové adresy k vypsání.</i>{% endif %}
{% if action_form %}
<form action="" method="POST" class="form form-horizontal" role="form">
{% endif %}
{{ table.to_html() }}
<a class="btn btn-primary pull-right"
title="Zobrazí emailové adresy ve snadno zkopírovatelném formátu"
href="{{ url_for('org_contest_list_emails', id=id, site_id=site_id, **request.args) if contest else url_for('org_round_list_emails', id=id, **request.args) }}">
Vypsat e-mailové adresy
</a>
{% if action_form %}
{{ action_form.csrf_token }}
<h3>Provést akci</h3>
<div class="form-frame">
<div class="form-group">
<label class="control-label col-sm-2">Provést akci na:</label>
<div class="col-sm-5 radio">
<label>
<input id="action_on-0" name="action_on" type="radio" value="all" required{% if action_form.action_on.data == 'all' %} checked{% endif %}>
všech vyfiltrovaných účastnících
</label>
</div><div class="col-sm-5 radio">
<label>
<input id="action_on-1" name="action_on" type="radio" value="checked" required{% if action_form.action_on.data == 'checked' %} checked{% endif %}>
pouze zaškrtnutých účastnících
</label>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="participation_state">Stav účasti</label>
<div class="col-sm-6">{{ wtf.form_field(action_form.participation_state, form_type='inline') }}</div>
<div class="col-sm-4">{{ wtf.form_field(action_form.set_participation_state, form_type='inline', class='btn btn-primary') }}</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="participation_place">Soutěžní místo</label>
<div class="col-sm-6">{{ wtf.form_field(action_form.participation_place, form_type='inline', placeholder='Kód místa') }}</div>
<div class="col-sm-4">{{ wtf.form_field(action_form.set_participation_place, form_type='inline', class='btn btn-primary') }}</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="contest_place">
{{ round.get_level().name|capitalize }}
</label>
<div class="col-sm-6">
{{ wtf.form_field(action_form.contest_place, form_type='inline', placeholder='Kód místa') }}
<p class="help-block">
{{ round.get_level().name_locative("V tomto", "V této", "V tomto") }} musí existovat soutěž pro {{ round.name|lower }} kategorie {{ round.category }}.
</p>
</div>
<div class="col-sm-4">{{ wtf.form_field(action_form.set_contest, form_type='inline', class='btn btn-primary', value='Přesunout do ' + round.get_level().name_genitive('jiného', 'jiné', 'jiného')) }}</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="contest_place">Smazání účasti</label>
<div class="col-sm-6"><p class="help-block">Dojde ke smazání účasti v tomto kole, ne účastníka z ročníku.</p></div>
<div class="col-sm-4">{{ wtf.form_field(action_form.remove_participation, form_type='inline', class='btn btn-danger') }}</div>
</div>
</div>
</form>
{% else %}
<p>
<i>Nemáte právo k editaci účastníků v {{ round.get_level().name_locative("v tomto", "v této", "v tomto") }}.</i>
</p>
{% endif %}
......@@ -5,9 +5,9 @@ To se hodí, pokud se nechystáte do systému nahrávat soubory řešení, ale j
bylo možné vyplnit body. Pokud nějaké řešení založíte omylem, lze toto prázdné řešení smazat v jeho detailu.
{% else %}
Historii všech odevzdání, oprav a bodů pro každé řešení naleznete v jeho detailu.
{% if sc.allow_upload_feedback or sc.allow_edit_points %}Tamtéž můžete odevzdávat nové verze a změnit, které řešení/oprava je
finální (ve výchozím stavu poslední nahrané).{% elif sc.allow_upload_solutions %}Tamtéž můžete odevzdat nové řešení.{% endif %}
{% if for_task and sc.allow_create_solutions %} Hromadně založit řešení pro více řešitelů můžete pomocí tlačítek pod tabulkou.{% endif %}
{% if rights.can_upload_feedback() or ctx.can_edit_points() %}Tamtéž můžete odevzdávat nové verze a změnit, které řešení/oprava je
finální (ve výchozím stavu poslední nahrané).{% elif rights.can_upload_solutions() %}Tamtéž můžete odevzdat nové řešení.{% endif %}
{% if for_task and rights.can_create_solutions() %} Hromadně založit řešení pro více řešitelů můžete pomocí tlačítek pod tabulkou.{% endif %}
{% endif %}
</i></p>
......@@ -24,8 +24,8 @@ finální (ve výchozím stavu poslední nahrané).{% elif sc.allow_upload_solut
<th>Finální oprava
<th>Poznámky
<th>Přidělené body
{% if not for_user and not site and sc.allow_edit_points and not points_form %}
<a title="Editovat body" href="{{ url_for('org_contest_task_points', contest_id=contest.contest_id, task_id=task.task_id) }}" class="icon pull-right"></a>
{% if not for_user and not site and rights.can_edit_points() and not points_form %}
<a title="Editovat body" href="{{ ctx.url_for('org_contest_task_points') }}" class="icon pull-right"></a>
{% endif %}
<th>Akce
</tr>
......@@ -40,7 +40,7 @@ finální (ve výchozím stavu poslední nahrané).{% elif sc.allow_upload_solut
<tr>
{% endif %}
<td>{% if for_user %}
<a href='{{ url_for('org_contest_task', contest_id=ct_id, task_id=task.task_id) }}'>{{ task.code }} {{ task.name }}</a>
<a href='{{ ctx.url_for('org_contest_task', task_id=task.task_id) }}'>{{ task.code }} {{ task.name }}</a>
{% else %}
{{ u|pion_link(contest.contest_id) }}{{ u|user_flags }}</a>
{% endif %}
......@@ -105,7 +105,7 @@ finální (ve výchozím stavu poslední nahrané).{% elif sc.allow_upload_solut
{% else %}–{% endif %}
{% endif %}
<td><div class="btn-group">
<a class="btn btn-xs btn-primary" href="{{ url_for('org_submit_list', contest_id=ct_id, user_id=u.user_id, task_id=task.task_id, site_id=site_id) }}">Detail</a>
<a class="btn btn-xs btn-primary" href="{{ ctx.url_for('org_submit_list', user_id=u.user_id, task_id=task.task_id, site_id=ctx.site_id) }}">Detail</a>
</div>
</tr>
{% endfor %}
......
{% if not sc.allow_upload_solutions and sc.round.state == RoundState.running %}
{% if not ctx.rights.can_upload_solutions() and ctx.round.state == RoundState.running %}
<p class='alert alert-warning'>
Soutěž stále běží. Odevzdané úlohy se ještě mohou měnit.
</p>
{% endif %}
{% if not sc.allow_upload_feedback and sc.round.state == RoundState.grading %}
{% if not ctx.rights.can_upload_feedback() and ctx.round.state == RoundState.grading %}
<p class='alert alert-warning'>
Opravování stále běží. Opravené úlohy a body se ještě mohou měnit.
</p>
......
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}Nastavení nového hesla{% endblock %}
{% block body %}
<form method="POST" class="form form-horizontal" action="">
{{ form.csrf_token }}
{{ form.token() }}
{{ wtf.form_field(form.email, form_type='horizontal') }}
{{ wtf.form_field(form.passwd, form_type='horizontal') }}
<div class="btn-group col-lg-offset-2">
{{ wtf.form_field(form.submit, class="btn btn-primary") }}
{{ wtf.form_field(form.cancel) }}
</div>
</form>
{% endblock %}
{% extends "base.html" %}
{% block title %}Uživatel {{ g.user.full_name() }}{% endblock %}
{% block title %}Uživatel {{ user.full_name() }}{% endblock %}
{% block body %}
<h3>Osobní údaje</h3>
<table class=table>
<tr><th>Jméno<td>{{ user.first_name }}
<tr><th>Příjmení<td>{{ user.last_name }}
<tr><th>E-mail<td>{{ user.email }}
{% if pant %}
<tr><th>Škola<td>{{ pant.school_place.name }}
<tr><th>Ročník<td>{{ pant.grade }}
<tr><th>Rok narození<td>{{ pant.birth_year }}
{% endif %}
</table>
<p><a class='btn btn-primary' href='{{ url_for('user_settings_change') }}'>Změnit e-mail nebo heslo</a>
<p>Pokud potřebujete změnit jiné údaje, ozvěte se svému učiteli nebo garantovi.
Neuspějete-li u nich, napište správci OSMO (kontakt viz patička stránky).
{% if user.is_admin or user.is_org %}
<h3>Práva</h3>
{% if g.user.is_admin %}
{% if user.is_admin %}
<p>Správce systému
{% endif %}
{% if g.user.is_org %}
{% if user.is_org %}
<p>Organizátor s následujícími rolemi:
<table class=data>
<table class=table>
<tr>
<th>Role
<th>Oblast
......@@ -25,8 +45,7 @@
{% endfor %}
</table>
{% endif %}
{% if not g.user.is_admin and not g.user.is_org %}
<p>Běžný uživatel
{% endif %}
{% endblock %}
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}Změna osobních údajů{% endblock %}
{% block body %}
{{ wtf.quick_form(form, form_type='horizontal', button_map={'submit': 'primary'}) }}
{% endblock %}
......@@ -17,7 +17,30 @@
{% endblock %}
{% block body %}
{% if state == RoundState.preparing %}
{% if round.ct_tasks_start is not none %}
{% if round.ct_submit_end is not none %}
<p class="small"><i>Od {{ round.ct_tasks_start|time_and_timedelta }} do {{ round.ct_submit_end|time_and_timedelta }}.</i></p>
{% else %}
<p class="small"><i>Od {{ round.ct_tasks_start|time_and_timedelta }}.</i></p>
{% endif %}
{% else %}
{% if round.ct_submit_end is not none %}
<p class="small"><i>Do {{ round.ct_submit_end|time_and_timedelta }}.</i></p>
{% endif %}
{% endif %}
{% if part_state == PartState.registered %}
<p>
Vaše přihláška do této soutěže <b>dosud nebyla potvrzena organizátory.</b>
Vyčkejte prosím.
{% set state = RoundState.preparing %}
</p>
{% elif part_state == PartState.refused %}
<p>
Vaše přihláška do této soutěže <b>byla odmítnuta organizátory.</b>
{% set state = RoundState.preparing %}
</p>
{% elif state == RoundState.preparing %}
<p>
Soutěžní kolo se <b>připravuje</b>{% if round.ct_tasks_start and round.ct_tasks_start > g.now %},
začne <b>{{ round.ct_tasks_start|time_and_timedelta }}</b>{% endif %}.
......@@ -52,12 +75,12 @@ Pokud si s tvorbou PDF nevíte rady, zkuste se podívat do <a href='https://docs
<p>Soutěž se nachází v neznámém stavu. To by se nemělo stát :)
{% endif %}
{% if state != RoundState.preparing %}
{% if contest.ct_task_statement_available() %}
<p>Můžete si stáhnout <a href='{{ url_for('user_task_statement', id=contest.contest_id) }}'>zadání úloh</a>.
{% endif %}
{% if state != RoundState.preparing %}
<h3>Úlohy</h3>
<table class="table table-bordered table-hover">
......
......@@ -25,7 +25,6 @@
{% if contest.ct_task_statement_available() %}
<a class='btn btn-xs btn-success' href='{{ url_for('user_task_statement', id=contest.contest_id) }}'>Zadání</a>
{% endif %}
{% if state != RoundState.preparing %}
<a class='btn btn-xs btn-primary' href='{{ url_for('user_contest', id=contest.contest_id) }}'>
{% if state == RoundState.running %}
Odevzdat řešení
......@@ -37,11 +36,12 @@
Detail kola
{% endif %}
</a>
{% endif %}
{% endfor %}
</table>
{% else %}
<p>Momentálně se neúčastníte žádného kola MO.
{% endif %}
<p><a class="btn btn-primary" href="{{ url_for('user_join') }}">Přihlásit se do další kategorie</a>
{% endblock %}
{% extends "base.html" %}
{% block title %}Přihláška do MO{% endblock %}
{% block body %}
{% if available_rounds %}
<p>Zde si můžete vybrat, do kterých kategorií olympíády se přihlásíte.
<table class="table">
<thead>
<tr>
<th>Kategorie
<th>Popis
<th>Kolo
<th>Termíny
<th>Odkazy
<tbody>
{% for round in available_rounds %}
<tr>
<td><b>{{ round.category }}</b>
<td>{{ round.enroll_advert }}</b>
<td>{{ round.name }}
<td>{{ round.format_times() }}
{% if round.round_id in pcrs_by_round_id %}
<td>Již přihlášen
{% else %}
<td><a href='{{ url_for('user_join_round', round_id=round.round_id) }}' class='btn btn-xs btn-primary'>Přihlásit se</a>
{% endif %}
{% endfor %}
</table>
{% else %}
<p>V tomto školním roce zatím nejsou otevřené žádné kategorie olympiády.
Zkuste to prosím později.
{% endif %}
{% if pcrs_by_round_id %}
{# Není-li účastník přihlášen v žádné soutěží, user_index přesměrovává zpět na tuto stránku. #}
<p><a class="btn btn-default" href="{{ url_for('user_index') }}">Zpět</a>
{% endif %}
{% endblock %}