Skip to content
Snippets Groups Projects
Select Git revision
  • 866a98b550c48c0d0bffbc57282af8dc9f40610e
  • devel default
  • master
  • fo
  • jirka/typing
  • fo-base
  • mj/submit-images
  • jk/issue-96
  • jk/issue-196
  • honza/add-contestant
  • honza/mr7
  • honza/mrf
  • honza/mrd
  • honza/mra
  • honza/mr6
  • honza/submit-images
  • honza/kolo-vs-soutez
  • jh-stress-test-wip
  • shorten-schools
19 results

org_solution_table.html

Blame
  • org_solution_table.html 5.95 KiB
    {#
        Rozhraní:
    
        - ctx
        - rights
        - round
        - contest
        - for_user (máme vypsat submity účastníka pro všechny úlohy)
        - for_task (máme vypsat submity všech účastníků pro jednu úlohu)
        - rows:
    	- režim for_user: dvojice (Task, Solution)
    	- režit for_task: dvojice (Participation, Solution)
        - edit_form
        - edit_errors (jen když máme edit_form)
    #}
    {% set edit_points = edit_form and rights.can_edit_points() %}
    {% set edit_create = edit_form and rights.can_create_solutions() %}
    {% set edit = edit_points or edit_create %}
    
    {% if edit_form %}
    <p><i>
    {% if edit_points %}
    Zde můžete bodovat odevzdaná řešení.
    {% else %}
    Zde můžete zakládat a rušit odevzdaná řešení.
    {% endif %}
    Prázdná hodnota ve sloupečku „Přidělené body“ znamená „neobodováno“,
    hodnota X znamená „řešení nebylo odevzdáno“,
    P znamená „prázdný protokol, který neobsahuje řešení“.
    {% if edit_create %}
    Smazáním X založíte nové řešení – to se hodí, pokud se nechystáte do systému nahrávat soubory řešení,
    ale jen chcete řešení vytvořit, aby jim bylo možné vyplnit body.
    Pokud nějaké řešení založíte omylem, lze toto prázdné řešení smazat přepsáním bodů zpět na X.
    {% endif %}
    </i></p>
    <p><i>
    Změny uložíte tlačítkem na spodku tabulky.
    {% else %}
    Historii všech odevzdání, oprav a bodů pro každé řešení naleznete v jeho detailu.
    {% if rights.can_upload_feedback() or 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 %}
    Hromadné úpravy můžete provádět pomocí tlačítka Editovat pod tabulkou.
    {% endif %}
    </i></p>
    
    <p><i>Legenda: <span class='sol-warn icon'>⚠</span> odevzdané po termínu,
    	<span class="icon">🛈</span> nahráno někým jiným než řešitelem, <span class="icon">🗐</span> existuje více verzí. Symboly po najetí myší zobrazí bližší informace.
    </i></p>
    
    <table class="data full">
    	<thead>
    		<tr>
    			<th>{% if for_user %}Úloha{% else %}Účastník{% endif %}
    			{% if for_task %}<th>Stav účasti{% endif %}
    			<th>Finální řešení
    			<th>Finální oprava
    			<th>Poznámky
    			<th>Přidělené body
    				{% if not for_user and edit_points and not edit_form %}
    				<a title="Editovat body" href="{{ ctx.url_for('org_contest_task_edit') }}" class="icon pull-right">✎</a>
    				{% endif %}
    			<th>Akce
    		</tr>
    	</thead>
    {% set tabindex = namespace(value=1) %}
    {% for obj, sol in rows %}
    	{% set u = for_user or obj.user %}
    	{% set task = for_task or obj %}
    	{% if for_task %}
    	<tr class="state-{{ obj.state.name }}">
    	{% else %}
    	<tr>
    	{% endif %}
    		<td>{% if for_user %}
    			<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 %}
    		{% if for_task %}<td>{{ obj.state.friendly_name() }}{% endif %}
    		{% if sol %}
    		<td>{% if sol.final_submit_obj %}
    			{% set p = sol.final_submit_obj %}
    			{% set late = p.check_deadline(round) %}
    			{% if late %}<span class='sol-warn icon' title="{{ late }}">⚠</span>{% endif %}
    			<a href='{{ paper_link(u, p) }}'>
    				{{- p.uploaded_at|timeformat }}
    				{% if p.is_broken() %}
    					(nekorektní PDF)
    				{% elif p.pages != None %}
    					({{ p.pages|inflected('strana', 'strany', 'stran') }})
    				{% endif %}
    			</a>
    			{% if p.uploaded_by_obj != u %}
    				<a href="{{ url_for('org_user', id=p.uploaded_by) }}" title="nahrál {{ p.uploaded_by_obj.full_name() }}" class="icon">🛈</a>
    			{% endif %}
    			{% set key = (obj.task_id if for_user else obj.user_id, "solution") %}
    			{% if key in paper_counts and paper_counts[key] > 1 %}
    				<span title="Celkem {{ paper_counts[key]|inflected('verze', 'verze', 'verzí') }}" class="icon">🗐</span>
    			{% endif %}
    		    {% else %}–{% endif %}
    		<td>{% if sol.final_feedback_obj %}
    			{% set p = sol.final_feedback_obj %}
    			<a title="nahrál {{ p.uploaded_by_obj.full_name() }}" href='{{ paper_link(u, p) }}'>
    				{{ (p.uploaded_at if p else None)|timeformat }}
    				{% if p.is_broken() %}
    					(nekorektní PDF)
    				{% elif p.pages != None %}
    					({{ p.pages|inflected('strana', 'strany', 'stran') }})
    				{% endif %}
    			</a>
    			{% set key = (obj.task_id if for_user else obj.user_id, "feedback") %}
    			{% if key in paper_counts and paper_counts[key] > 1 %}
    				<span title="Celkem {{ paper_counts[key]|inflected('verze', 'verze', 'verzí') }}" class="icon">🗐</span>
    			{% endif %}
    		    {% else %}–{% endif %}
    		<td class="text-center">
    			{% if sol.note %}<span class="icon" title="Poznámka pro řešitele: {{ sol.note }}">🗩</span>{% endif %}
    			{% if sol.org_note %} <span class="icon" title="Interní poznámka: {{ sol.org_note }}">🗩</span>{% endif %}
    		{% else %}
    		<td colspan="3" class="text-center">–
    		{% endif %}
    		<td class="text-center">
    			{% if edit %}
    				{% set key = u.user_id | string %}
    				{% set def_pts = sol | sol_editable_points %}
    				{% set new_pts = request_form.get("points_{}".format(key)) %}
    				{% set err = edit_errors[key] %}
    				<input
    					type="text" class="form-control{% if err %} has-error{% endif %}" name="points_{{u.user_id}}"
    					value="{{ new_pts|none_value(def_pts) }}"
    					oninput="this.classList.toggle('modified', this.value != '{{ def_pts }}')"
    					size="4" tabindex={{ tabindex.value }} autofocus
    					data-sol="{% if sol %}1{% else %}0{% endif %}"
    					{% if not edit_create %}
    						disabled
    					{% endif %}
    					{% if err %}
    						title="{{ err }}"
    					{% endif %}
    				>
    				{% set tabindex.value = tabindex.value + 1 %}
    			{% else %}
    				{{ sol|sol_display_points }}
    			{% endif %}
    		<td><div class="btn-group">
    				<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 %}
    </table>
    
    {% include "parts/org_solution_js.html" %}