Merge branch 'master' of atrey.karlin.mff.cuni.cz:/akce/MaM/MaMweb/mamweb
Conflicts: mamweb/templates/menu.html seminar/templates/seminar/novinky.html seminar/views.py
This commit is contained in:
commit
d64cd84e6a
42 changed files with 584 additions and 330 deletions
|
@ -18,7 +18,7 @@ SITE_ID = 1
|
||||||
ROOT_URLCONF = 'mamweb.urls'
|
ROOT_URLCONF = 'mamweb.urls'
|
||||||
WSGI_APPLICATION = 'mamweb.wsgi.application'
|
WSGI_APPLICATION = 'mamweb.wsgi.application'
|
||||||
|
|
||||||
APPEND_SLASH = False
|
APPEND_SLASH = True
|
||||||
|
|
||||||
# Internationalization
|
# Internationalization
|
||||||
# https://docs.djangoproject.com/en/1.7/topics/i18n/
|
# https://docs.djangoproject.com/en/1.7/topics/i18n/
|
||||||
|
|
16
mamweb/static/css/bootstrap.css
vendored
16
mamweb/static/css/bootstrap.css
vendored
|
@ -1403,11 +1403,11 @@ pre code {
|
||||||
width: 970px;
|
width: 970px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@media (min-width: 1200px) {
|
/*@media (min-width: 1200px) {
|
||||||
.container {
|
.container {
|
||||||
width: 1170px;
|
width: 1170px;
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
.container-fluid {
|
.container-fluid {
|
||||||
padding-right: 15px;
|
padding-right: 15px;
|
||||||
padding-left: 15px;
|
padding-left: 15px;
|
||||||
|
@ -1896,7 +1896,7 @@ pre code {
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@media (min-width: 1200px) {
|
/*@media (min-width: 1200px) {
|
||||||
.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
|
.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
@ -2053,7 +2053,7 @@ pre code {
|
||||||
.col-lg-offset-0 {
|
.col-lg-offset-0 {
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
table {
|
table {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
@ -6232,7 +6232,7 @@ button.close {
|
||||||
display: inline-block !important;
|
display: inline-block !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@media (min-width: 1200px) {
|
/*@media (min-width: 1200px) {
|
||||||
.visible-lg {
|
.visible-lg {
|
||||||
display: block !important;
|
display: block !important;
|
||||||
}
|
}
|
||||||
|
@ -6261,7 +6261,7 @@ button.close {
|
||||||
.visible-lg-inline-block {
|
.visible-lg-inline-block {
|
||||||
display: inline-block !important;
|
display: inline-block !important;
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
.hidden-xs {
|
.hidden-xs {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
|
@ -6277,11 +6277,11 @@ button.close {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@media (min-width: 1200px) {
|
/*@media (min-width: 1200px) {
|
||||||
.hidden-lg {
|
.hidden-lg {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
.visible-print {
|
.visible-print {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,18 @@ table .border-b {
|
||||||
border: solid 2px;
|
border: solid 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div.container {
|
||||||
|
background-color: #fff8eb;
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.content {
|
||||||
|
padding: 15px 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
/* Comments */
|
/* Comments */
|
||||||
|
|
||||||
|
@ -43,36 +55,17 @@ table .border-b {
|
||||||
|
|
||||||
/* Headline & Header */
|
/* Headline & Header */
|
||||||
|
|
||||||
#headline {
|
|
||||||
padding: 6px 10px;
|
|
||||||
font-size: 150%;
|
|
||||||
font-weight: 400;
|
|
||||||
background: #00c322; /* @mamgreen */
|
|
||||||
}
|
|
||||||
|
|
||||||
#header {
|
#header {
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: -1;
|
font-size: 250%;
|
||||||
|
background: url("../images/header-bg.png") no-repeat left top;
|
||||||
|
height: 353px;
|
||||||
|
top: -1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header-lg {
|
|
||||||
font-size: 250%;
|
|
||||||
background-color: rgba(255,195,0,0.8);
|
|
||||||
height: 220px;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
.header-md {
|
|
||||||
font-size: 250%;
|
|
||||||
background-color: rgba(255,195,0,0.8);
|
|
||||||
height: 220px;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
#header img.logo {
|
#header img.logo {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 25px;
|
top: 20px;
|
||||||
left: 25px;
|
left: 45px;
|
||||||
height: 110px;
|
|
||||||
}
|
}
|
||||||
#header h1 {
|
#header h1 {
|
||||||
font-size: 130%;
|
font-size: 130%;
|
||||||
|
@ -91,9 +84,10 @@ table .border-b {
|
||||||
/* Menu */
|
/* Menu */
|
||||||
|
|
||||||
#menu {
|
#menu {
|
||||||
background: #00c322; /* @mamgreen */
|
position: relative;
|
||||||
border-bottom-left-radius: 8px;
|
top: -1px;
|
||||||
border-bottom-right-radius: 8px;
|
background: url("../images/menu-bg-vertical.png") no-repeat left top, url("../images/menu-bg-horizontal.png") repeat-x left top;
|
||||||
|
background-color: #ffb52d;
|
||||||
}
|
}
|
||||||
#menu ul {
|
#menu ul {
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
|
@ -117,36 +111,41 @@ table .border-b {
|
||||||
#menu a {
|
#menu a {
|
||||||
display: block;
|
display: block;
|
||||||
padding: 8px 10px;
|
padding: 8px 10px;
|
||||||
color: black;
|
color: #006400;
|
||||||
}
|
}
|
||||||
#menu a:hover {
|
#menu a:hover {
|
||||||
background: #ffb000;
|
background: url("../images/submenu-bg-vertical.png") no-repeat left top, url("../images/submenu-bg-horizontal.png") repeat-x left top;
|
||||||
border-bottom-left-radius: 8px;
|
background-color: #ffa500;
|
||||||
border-bottom-right-radius: 8px;
|
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
color: #003c00;
|
||||||
|
}
|
||||||
|
#menu a.selected {
|
||||||
|
color: #003c00;
|
||||||
}
|
}
|
||||||
|
|
||||||
#submenu {
|
#submenu {
|
||||||
/*border: 1px solid black;*/
|
position: relative;
|
||||||
|
top: -1px;
|
||||||
|
background: url("../images/submenu-bg-vertical.png") no-repeat left top, url("../images/submenu-bg-horizontal.png") repeat-x left top;
|
||||||
|
background-color: #ffa500;
|
||||||
}
|
}
|
||||||
#submenu ul {
|
#submenu ul {
|
||||||
padding: 0px 0px;
|
padding: 0px 15px;
|
||||||
margin: 20px 0px 20px 0px;
|
font-size: 150%;
|
||||||
background: #00c322; /* @mamgreen */
|
font-weight: 400;
|
||||||
border-radius: 8px;
|
|
||||||
list-style-position: inside;
|
|
||||||
width: 100%;
|
|
||||||
}
|
}
|
||||||
#submenu li {
|
#submenu li {
|
||||||
border-radius: 0px;
|
padding: 6px 20px;
|
||||||
padding: 6px 15px;
|
display: inline-block;
|
||||||
margin-right: 0px;
|
|
||||||
font-size: 120%;
|
|
||||||
}
|
}
|
||||||
#submenu li:hover {
|
#submenu li>a {
|
||||||
background: #ffb000;
|
color: #003c00;
|
||||||
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
#submenu li:first-child {
|
#submenu li>a:hover {
|
||||||
|
color: #3c003c;
|
||||||
|
}
|
||||||
|
/*#submenu li:first-child {
|
||||||
border-top-left-radius: 7px;
|
border-top-left-radius: 7px;
|
||||||
border-top-right-radius: 7px;
|
border-top-right-radius: 7px;
|
||||||
padding-top: 8px;
|
padding-top: 8px;
|
||||||
|
@ -156,9 +155,6 @@ table .border-b {
|
||||||
border-bottom-right-radius: 7px;
|
border-bottom-right-radius: 7px;
|
||||||
padding-bottom: 8px;
|
padding-bottom: 8px;
|
||||||
}
|
}
|
||||||
#submenu li>a {
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
#submenu li>a:hover {
|
#submenu li>a:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}*/
|
||||||
|
|
BIN
mamweb/static/images/header-bg.png
Normal file
BIN
mamweb/static/images/header-bg.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 679 KiB |
BIN
mamweb/static/images/logo.png
Normal file
BIN
mamweb/static/images/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 50 KiB |
BIN
mamweb/static/images/menu-bg-horizontal.png
Normal file
BIN
mamweb/static/images/menu-bg-horizontal.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 239 B |
BIN
mamweb/static/images/menu-bg-vertical.png
Normal file
BIN
mamweb/static/images/menu-bg-vertical.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 572 B |
BIN
mamweb/static/images/submenu-bg-horizontal.png
Normal file
BIN
mamweb/static/images/submenu-bg-horizontal.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 239 B |
BIN
mamweb/static/images/submenu-bg-vertical.png
Normal file
BIN
mamweb/static/images/submenu-bg-vertical.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 653 B |
|
@ -3,7 +3,12 @@
|
||||||
{% load staticfiles %}
|
{% load staticfiles %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h2>{% block nadpis1 %}Požadovaná stránka nenalezena{% endblock%}</h2>
|
<h2>
|
||||||
|
{% block nadpis1a %}{% block nadpis1b %}
|
||||||
|
Požadovaná stránka nenalezena
|
||||||
|
{% endblock %}{% endblock%}
|
||||||
|
</h2>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Tuto stránku jsme na našem servru nenalezli.
|
Tuto stránku jsme na našem servru nenalezli.
|
||||||
Zkuste přejít na <a href="/">titulní stránku</a>
|
Zkuste přejít na <a href="/">titulní stránku</a>
|
||||||
|
|
|
@ -3,7 +3,12 @@
|
||||||
{% load staticfiles %}
|
{% load staticfiles %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h2>{% block nadpis1 %}O-jo-jo-jo-joj{% endblock %}</h2>
|
<h2>
|
||||||
|
{% block nadpis1a %}{% block nadpis1b %}
|
||||||
|
O-jo-jo-jo-joj
|
||||||
|
{% endblock %}{% endblock %}
|
||||||
|
</h2>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Chybička se vloudila.
|
Chybička se vloudila.
|
||||||
Zkuste přejít na <a href="/">titulní stránku</a>
|
Zkuste přejít na <a href="/">titulní stránku</a>
|
||||||
|
|
|
@ -16,10 +16,22 @@
|
||||||
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}fluent_comments/css/ajaxcomments.css" />
|
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}fluent_comments/css/ajaxcomments.css" />
|
||||||
<script type="text/javascript" src="{{ STATIC_URL }}fluent_comments/js/ajaxcomments.js"></script>
|
<script type="text/javascript" src="{{ STATIC_URL }}fluent_comments/js/ajaxcomments.js"></script>
|
||||||
|
|
||||||
|
{# nastavení MathJaxu, aby nahrazoval i matiku obalenou jednoduchými $ #}
|
||||||
|
<script type="text/x-mathjax-config">
|
||||||
|
MathJax.Hub.Config({
|
||||||
|
tex2jax: {
|
||||||
|
inlineMath: [['$','$'], ['\\(','\\)']],
|
||||||
|
processEscapes: true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript"
|
||||||
|
src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
|
||||||
|
</script>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body class='{% if user.is_authenticated %}org-logged-in{% endif %}'>
|
<body class='{% if user.is_staff %}org-logged-in{% endif %}'>
|
||||||
{# TODO predelat pro pouze pro orgy (misto pro prihlasene) #}
|
{% if user.is_staff %}
|
||||||
{% if user.is_authenticated %}
|
|
||||||
<div class="login-bar" style='background: #F80;'>
|
<div class="login-bar" style='background: #F80;'>
|
||||||
{% if view.object %}
|
{% if view.object %}
|
||||||
Objekt {{ view.object }}: {{ view.object }}
|
Objekt {{ view.object }}: {{ view.object }}
|
||||||
|
@ -35,48 +47,44 @@
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class='row'>
|
<div class='row'>
|
||||||
<div class='col-md-12'>
|
<div class='col-md-12'>
|
||||||
<div id="headline">
|
<a href='/'>
|
||||||
Studentský korespondenční seminář a časopis MFF UK
|
<div id="header">
|
||||||
</div>
|
<img class="logo" src="{% static 'images/logo.png' %}" />
|
||||||
</div>
|
<!--<h1>{% block nadpis1b %}Nadpis 1. úrovně{% endblock %}</h1>-->
|
||||||
</div>
|
</div>
|
||||||
<div class='row'>
|
</a>
|
||||||
<div class='col-md-12'>
|
</div>
|
||||||
<div id="header">
|
|
||||||
<div class='header-lg visible-lg-block'>
|
|
||||||
<img class="logo" src="{% static 'images/logocb.png' %}" />
|
|
||||||
<h1>{% block nadpis1 %}Nadpis 1. úrovně{% endblock %}</h1>
|
|
||||||
<img class="header" src="{% static 'images/liska6.png' %}" />
|
|
||||||
<!--<a href="/">Korespondenční seminář M&M</a>-->
|
|
||||||
</div>
|
|
||||||
<div class='header-md visible-md-block'>
|
|
||||||
<img class="logo" src="{% static 'images/logocb.png' %}" />
|
|
||||||
<h1>Nadpis 1. úrovně</h1>
|
|
||||||
<img class="header" src="{% static 'images/liska6.png' %}" />
|
|
||||||
<!--<a href="/">Korespondenční seminář M&M</a>-->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class='row'>
|
<div class='row'>
|
||||||
<div class='col-md-12' style=''>
|
<div class='col-md-12' style=''>
|
||||||
<div id='menu'>
|
<div id='menu'>
|
||||||
{% include "menu.html" %}
|
{# ============= MENU ============== #}
|
||||||
|
<ul>
|
||||||
|
<li class="{% block menu_uvod %}{% endblock %}"><a href="/co-je-MaM/uvod/">Co je M&M</a>
|
||||||
|
<li class="{% block menu_soustredeni %}{% endblock %}"><a href="{% url 'seminar_seznam_soustredeni' %}">Soustředění</a>
|
||||||
|
<li class="{% block menu_zadani %}{% endblock %}"><a href="/zadani/aktualni/">Zadání</a>
|
||||||
|
<li class="{% block menu_clanky %}{% endblock %}"><a href="/clanky/uvod/">Články</a>
|
||||||
|
<li class="{% block menu_archiv %}{% endblock %}"><a href="/archiv/cisla/">Archiv</a>
|
||||||
|
<li class="{% block menu_odevzdat %}{% endblock %}">{#<a href="/odevzdat-reseni/muj-ucet">#}Odeslat řešení{#</a>#}
|
||||||
|
</ul>
|
||||||
|
{# ======== KONEC MENU =============#}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class='row'>
|
<div class='row'>
|
||||||
<div class='col-md-3'>
|
<div class='col-md-12'>
|
||||||
<div id='submenu'>
|
<div id='submenu'>
|
||||||
{% block submenu %}
|
{% block submenu %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class='col-md-9'>
|
</div>
|
||||||
{% block content %}
|
<div class='row content'>
|
||||||
{% endblock content %}
|
<div class='col-md-12'>
|
||||||
</div>
|
{% block content %}
|
||||||
</div>
|
{% endblock content %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="{% static 'js/bootstrap.js' %}"></script>
|
<script src="{% static 'js/bootstrap.js' %}"></script>
|
||||||
<script src="{% static 'js/jquery.jcarousel-core.js' %}" type="text/javascript"></script>
|
<script src="{% static 'js/jquery.jcarousel-core.js' %}" type="text/javascript"></script>
|
||||||
|
|
|
@ -3,27 +3,102 @@
|
||||||
{% block title %}{{ flatpage.title }}{% endblock title %}
|
{% block title %}{{ flatpage.title }}{% endblock title %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h2>{% block nadpis1 %}{{ flatpage.title }}{% endblock %}</h2>
|
<h2>
|
||||||
|
{% block nadpis1a %}{% block nadpis1b%}
|
||||||
|
{{ flatpage.title }}
|
||||||
|
{% endblock %}{% endblock %}
|
||||||
|
</h2>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
{{ flatpage.content }}
|
{{ flatpage.content }}
|
||||||
</div>
|
</div>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|
||||||
|
{# nahraj spravne submenu #}
|
||||||
{% block submenu %}
|
{% block submenu %}
|
||||||
|
{# co-je-MaM #}
|
||||||
{% if "/co-je-MaM/" in flatpage.url %}
|
{% if "/co-je-MaM/" in flatpage.url %}
|
||||||
{% include "seminar/cojemam/submenu.html" %}
|
{% if "/uvod/" in flatpage.url %}
|
||||||
|
{% with "uvod" as selected %}
|
||||||
|
{% include "seminar/cojemam/submenu.html" %}
|
||||||
|
{% endwith %}
|
||||||
|
{% elif "jak-resit" in flatpage.url %}
|
||||||
|
{% with "jak-resit" as selected %}
|
||||||
|
{% include "seminar/cojemam/submenu.html" %}
|
||||||
|
{% endwith %}
|
||||||
|
{% elif "FAQ" in flatpage.url %}
|
||||||
|
{% with "FAQ" as selected %}
|
||||||
|
{% include "seminar/cojemam/submenu.html" %}
|
||||||
|
{% endwith %}
|
||||||
|
{% else %}
|
||||||
|
{% include "seminar/cojemam/submenu.html" %}
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{# soustredeni #}
|
||||||
{% if "/soustredeni/" in flatpage.url %}
|
{% if "/soustredeni/" in flatpage.url %}
|
||||||
{% include "seminar/soustredeni/submenu.html" %}
|
{% if "/pripravujeme/" in flatpage.url %}
|
||||||
|
{% with "pripravujeme" as selected %}
|
||||||
|
{% include "seminar/soustredeni/submenu.html" %}
|
||||||
|
{% endwith %}
|
||||||
|
{% else %}
|
||||||
|
{% with "uvod" as selected %}
|
||||||
|
{% include "seminar/soustredeni/submenu.html" %}
|
||||||
|
{% endwith %}
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{# zadani #}
|
||||||
{% if "/zadani/" in flatpage.url %}
|
{% if "/zadani/" in flatpage.url %}
|
||||||
{% include "seminar/zadani/submenu.html" %}
|
{% if "/ulohy/" in flatpage.url %}
|
||||||
|
{% with "ulohy" as selected %}
|
||||||
|
{% include "seminar/zadani/submenu.html" %}
|
||||||
|
{% endwith %}
|
||||||
|
{% elif "/aktualni-cislo/" in flatpage.url %}
|
||||||
|
{% with "aktualni-cislo" as selected %}
|
||||||
|
{% include "seminar/zadani/submenu.html" %}
|
||||||
|
{% endwith %}
|
||||||
|
{% elif "/vysledkove-listiny/" in flatpage.url %}
|
||||||
|
{% with "vysledkove-listiny" as selected %}
|
||||||
|
{% include "seminar/zadani/submenu.html" %}
|
||||||
|
{% endwith %}
|
||||||
|
{% else %}
|
||||||
|
{% include "seminar/zadani/submenu.html" %}
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{# clanky #}
|
||||||
{% if "/clanky/" in flatpage.url %}
|
{% if "/clanky/" in flatpage.url %}
|
||||||
{% include "seminar/clanky/submenu.html" %}
|
{% if "/uvod/" in flatpage.url %}
|
||||||
|
{% with "uvod" as selected %}
|
||||||
|
{% include "seminar/clanky/submenu.html" %}
|
||||||
|
{% endwith %}
|
||||||
|
{% elif "/org/" in flatpage.url %}
|
||||||
|
{% with "org" as selected %}
|
||||||
|
{% include "seminar/clanky/submenu.html" %}
|
||||||
|
{% endwith %}
|
||||||
|
{% elif "/resitel/" in flatpage.url %}
|
||||||
|
{% with "resitel" as selected %}
|
||||||
|
{% include "seminar/clanky/submenu.html" %}
|
||||||
|
{% endwith %}
|
||||||
|
{% else %}
|
||||||
|
{% include "seminar/clanky/submenu.html" %}
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{# archiv #}
|
||||||
{% if "/archiv/" in flatpage.url %}
|
{% if "/archiv/" in flatpage.url %}
|
||||||
{% include "seminar/archiv/submenu.html" %}
|
{% if "/ulohy/" in flatpage.url %}
|
||||||
|
{% with "ulohy" as selected %}
|
||||||
|
{% include "seminar/archiv/submenu.html" %}
|
||||||
|
{% endwith %}
|
||||||
|
{% else %}
|
||||||
|
{% include "seminar/archiv/submenu.html" %}
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
{# zvirazneni menu #}
|
||||||
|
{% block menu_uvod %}{% if "/co-je-MaM/" in flatpage.url %}selected{% endif %}{% endblock %}
|
||||||
|
{% block menu_soustredeni %}{% if "/soustredeni/" in flatpage.url %}selected{% endif %}{% endblock %}
|
||||||
|
{% block menu_zadani %}{% if "/zadani/" in flatpage.url %}selected{% endif %}{% endblock %}
|
||||||
|
{% block menu_clanky %}{% if "/clanky/" in flatpage.url %}selected{% endif %}{% endblock %}
|
||||||
|
{% block menu_archiv %}{% if "/archiv/" in flatpage.url %}selected{% endif %}{% endblock %}
|
||||||
|
|
||||||
|
{# TODO zvirazneni submenu #}
|
||||||
|
|
|
@ -360,8 +360,34 @@ class NovinkyAdminForm(forms.ModelForm):
|
||||||
model = Novinky
|
model = Novinky
|
||||||
exclude = []
|
exclude = []
|
||||||
|
|
||||||
|
def zverejnit_novinky(modeladmin, request, queryset):
|
||||||
|
''' zverejni vybrane novinky '''
|
||||||
|
for novinka in queryset:
|
||||||
|
novinka.zverejneno = True
|
||||||
|
novinka.save()
|
||||||
|
zverejnit_novinky.short_description = 'Zveřejnit vybané novinky'
|
||||||
|
|
||||||
|
def zneverejnit_novinky(modeladmin, request, queryset):
|
||||||
|
''' zneverejni vybrane novinky'''
|
||||||
|
for novinka in queryset:
|
||||||
|
novinka.zverejneno = False
|
||||||
|
novinka.save()
|
||||||
|
zneverejnit_novinky.short_description = 'Zneveřejnit vybrané novinky'
|
||||||
|
|
||||||
|
|
||||||
class NovinkyAdmin(admin.ModelAdmin):
|
class NovinkyAdmin(admin.ModelAdmin):
|
||||||
form = NovinkyAdminForm
|
form = NovinkyAdminForm
|
||||||
|
list_display = ['datum', 'autor', 'text', 'zverejneno', 'obrazek']
|
||||||
|
actions = [zverejnit_novinky, zneverejnit_novinky]
|
||||||
|
|
||||||
|
# předvyplnění přihlášeného uživatele jako autora novinky
|
||||||
|
def formfield_for_foreignkey(self, db_field, request, **kwargs):
|
||||||
|
if db_field.name == 'autor':
|
||||||
|
kwargs['initial'] = request.user.id
|
||||||
|
return super(NovinkyAdmin, self).formfield_for_foreignkey(
|
||||||
|
db_field, request, **kwargs
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
admin.site.register(Novinky, NovinkyAdmin)
|
admin.site.register(Novinky, NovinkyAdmin)
|
||||||
|
|
||||||
|
|
|
@ -453,6 +453,9 @@ class Problem(SeminarModelBase):
|
||||||
return force_unicode(u"t%s" % (self.kod,))
|
return force_unicode(u"t%s" % (self.kod,))
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
|
def nazev_typu(self):
|
||||||
|
return dict(self.TYP_CHOICES)[self.typ]
|
||||||
|
|
||||||
def verejne(self):
|
def verejne(self):
|
||||||
return (self.cislo_zadani and self.cislo_zadani.verejne())
|
return (self.cislo_zadani and self.cislo_zadani.verejne())
|
||||||
verejne.boolean = True
|
verejne.boolean = True
|
||||||
|
@ -466,6 +469,9 @@ class Problem(SeminarModelBase):
|
||||||
else:
|
else:
|
||||||
return reverse('admin:seminar_problemnavrh_change', args=(self.id, ))
|
return reverse('admin:seminar_problemnavrh_change', args=(self.id, ))
|
||||||
|
|
||||||
|
def body_v_zavorce(self):
|
||||||
|
return u"({}\u2009b)".format(self.body) if self.body else ""
|
||||||
|
|
||||||
|
|
||||||
@reversion.register(ignore_duplicate_revisions=True)
|
@reversion.register(ignore_duplicate_revisions=True)
|
||||||
@python_2_unicode_compatible
|
@python_2_unicode_compatible
|
||||||
|
@ -756,7 +762,7 @@ class Organizator(models.Model):
|
||||||
null = True, blank = True)
|
null = True, blank = True)
|
||||||
foto = models.ImageField('Fotografie organizátora',
|
foto = models.ImageField('Fotografie organizátora',
|
||||||
upload_to='image_organizatori/velke/%Y/', null = True, blank = True,
|
upload_to='image_organizatori/velke/%Y/', null = True, blank = True,
|
||||||
help_text = 'Vlož fotografii organizátora o libovoné velikosti')
|
help_text = 'Vlož fotografii organizátora o libovolné velikosti')
|
||||||
foto_male = models.ImageField(upload_to='image_organizatori/male/%Y/',
|
foto_male = models.ImageField(upload_to='image_organizatori/male/%Y/',
|
||||||
null = True, blank = True, editable = False)
|
null = True, blank = True, editable = False)
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block submenu %}
|
{% block menu_archiv %}selected{% endblock %}
|
||||||
{% include "seminar/archiv/submenu.html" %}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
|
|
8
seminar/templates/seminar/archiv/base_cisla.html
Normal file
8
seminar/templates/seminar/archiv/base_cisla.html
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{% extends "seminar/archiv/base.html" %}
|
||||||
|
|
||||||
|
{% block submenu %}
|
||||||
|
{% with "cisla" as selected %}
|
||||||
|
{% include "seminar/archiv/submenu.html" %}
|
||||||
|
{% endwith %}
|
||||||
|
{% endblock %}
|
||||||
|
|
8
seminar/templates/seminar/archiv/base_temata.html
Normal file
8
seminar/templates/seminar/archiv/base_temata.html
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{% extends "seminar/archiv/base.html" %}
|
||||||
|
|
||||||
|
{% block submenu %}
|
||||||
|
{% with "temata" as selected %}
|
||||||
|
{% include "seminar/archiv/submenu.html" %}
|
||||||
|
{% endwith %}
|
||||||
|
{% endblock %}
|
||||||
|
|
10
seminar/templates/seminar/archiv/base_ulohy.html
Normal file
10
seminar/templates/seminar/archiv/base_ulohy.html
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{% extends "seminar/archiv/base.html" %}
|
||||||
|
|
||||||
|
{% block menu_archiv %}selected{% endblock %}
|
||||||
|
|
||||||
|
{% block submenu %}
|
||||||
|
{% with "ulohy" as selected %}
|
||||||
|
{% include "seminar/archiv/submenu.html" %}
|
||||||
|
{% endwith %}
|
||||||
|
{% endblock %}
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
{% extends "seminar/archiv/base.html" %}
|
{% extends "seminar/archiv/base_cisla.html" %}
|
||||||
|
|
||||||
{% block submenu %}
|
|
||||||
{% include "seminar/archiv/submenu.html" %}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div>
|
<div>
|
||||||
<h2>{% block nadpis1 %}Archiv čísel {% endblock %}</h2>
|
<h2>
|
||||||
|
{% block nadpis1a %}{% block nadpis1b %}
|
||||||
|
Archiv čísel
|
||||||
|
{% endblock %}{% endblock %}
|
||||||
|
</h2>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
{% for r in object_list %}
|
{% for r in object_list %}
|
||||||
|
|
|
@ -1,22 +1,26 @@
|
||||||
{% extends "seminar/archiv/base.html" %}
|
{% extends "seminar/archiv/base_cisla.html" %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div>
|
<div>
|
||||||
<h2>{% block nadpis1 %}Číslo {{ cislo }}{% endblock%}</h2>
|
<h2>
|
||||||
|
{% block nadpis1a %}{% block nadpis1b %}
|
||||||
|
Číslo {{ cislo }}
|
||||||
|
{% endblock %}{% endblock %}
|
||||||
|
</h2>
|
||||||
|
|
||||||
<p><a href='{{ cislo.rocnik.verejne_url }}'>Ročník {{ cislo.rocnik }}</a>
|
<p><a href='{{ cislo.rocnik.verejne_url }}'>Ročník {{ cislo.rocnik }}</a>
|
||||||
|
|
||||||
<h3>Zadané problémy</h3>
|
<h3>Zadané problémy</h3>
|
||||||
<ul>
|
<ul>
|
||||||
{% for p in v_cisle_zadane %}
|
{% for p in v_cisle_zadane %}
|
||||||
<li><a href='{{ p.verejne_url }}'>{{ p.kod_v_rocniku }} {{ p.nazev }} ({{ p.body }}b)</a>
|
<li><a href='{{ p.verejne_url }}'>{{ p.kod_v_rocniku }} {{ p.nazev }} {{ p.body_v_zavorce }}</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h3>Řešené problémy</h3>
|
<h3>Řešené problémy</h3>
|
||||||
<ul>
|
<ul>
|
||||||
{% for p in resene_problemy %}
|
{% for p in resene_problemy %}
|
||||||
<li><a href='{{ p.verejne_url }}'>{{ p.kod_v_rocniku }} {{ p.nazev }} ({{ p.body }}b)</a>
|
<li><a href='{{ p.verejne_url }}'>{{ p.kod_v_rocniku }} {{ p.nazev }} {{ p.body_v_zavorce }}</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
@ -32,19 +36,23 @@
|
||||||
<th class='border-r'>#
|
<th class='border-r'>#
|
||||||
<th class='border-r'>Jméno
|
<th class='border-r'>Jméno
|
||||||
{% for p in problemy %}
|
{% for p in problemy %}
|
||||||
<th class='border-r'><a href="{{ p.verejne_url }}">{{ p.cislo_zadani.cislo }}.{{ p.kod }}</a>
|
<th class='border-r'><a href="{{ p.verejne_url }}">{{ p.kod_v_rocniku }}</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<th class='border-r'>Sum<sup>-1</sup>
|
<th class='border-r'>Za číslo</sup>
|
||||||
<th class='border-r'>Celkem
|
<th class='border-r'>Za ročník
|
||||||
<th class='border-r'>Odjakživa
|
<th class='border-r'>Odjakživa
|
||||||
{% for rv in vysledkovka %}
|
{% for rv in vysledkovka %}
|
||||||
<tr>
|
<tr>
|
||||||
<td class='border-r'>{{ rv.poradi }}
|
<td class='border-r'>{% autoescape off %}{{ rv.poradi }}{% endautoescape %}
|
||||||
<th class='border-r'> {{ rv.titul }} <sup>MM</sup> {{ rv.resitel.plne_jmeno }}
|
<th class='border-r'>
|
||||||
{% for b in rv.body %}
|
{% if rv.titul %}
|
||||||
|
{{ rv.titul }}<sup>MM</sup>
|
||||||
|
{% endif %}
|
||||||
|
{{ rv.resitel.plne_jmeno }}
|
||||||
|
{% for b in rv.body_ulohy %}
|
||||||
<td class='border-r'>{{ b }}
|
<td class='border-r'>{{ b }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<td class='border-r'>{{ rv.body_minule }}
|
<td class='border-r'>{{ rv.body_cislo }}
|
||||||
<td class='border-r'><b>{{ rv.body_celkem_rocnik }}</b>
|
<td class='border-r'><b>{{ rv.body_celkem_rocnik }}</b>
|
||||||
<td class='border-r'>{{ rv.body_celkem_odjakziva }}
|
<td class='border-r'>{{ rv.body_celkem_odjakziva }}
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -1,11 +1,15 @@
|
||||||
{% extends "seminar/archiv/base.html" %}
|
{% extends "seminar/archiv/base_ulohy.html" %}
|
||||||
|
|
||||||
{% load comments %}
|
{% load comments %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div>
|
<div>
|
||||||
{% if problem.cislo_zadani %}
|
{% if problem.cislo_zadani %}
|
||||||
<h2>{% block nadpis1 %}Problém {{ problem.kod_v_rocniku }}: {{ problem.nazev }}{% endblock %}</h2>
|
<h2>
|
||||||
|
{% block nadpis1a %}{% block nadpis1b %}
|
||||||
|
{{ problem.nazev_typu }} {{ problem.kod_v_rocniku }}: {{ problem.nazev }} {{ problem.body_v_zavorce }}
|
||||||
|
{% endblock %}{% endblock %}
|
||||||
|
</h2>
|
||||||
|
|
||||||
<p>Zadáno v čísle <a href='{{ problem.cislo_zadani.verejne_url }}'>{{ problem.cislo_zadani.kod }}</a>.
|
<p>Zadáno v čísle <a href='{{ problem.cislo_zadani.verejne_url }}'>{{ problem.cislo_zadani.kod }}</a>.
|
||||||
{% if problem.cislo_reseni %}
|
{% if problem.cislo_reseni %}
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
{% extends "seminar/archiv/base.html" %}
|
{% extends "seminar/archiv/base_cisla.html" %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div>
|
<div>
|
||||||
<h2>{% block nadpis1 %} Ročník {{ rocnik.roman }} {% endblock %}</h2>
|
<h2>
|
||||||
|
{% block nadpis1a %}{% block nadpis1b %}
|
||||||
|
Ročník {{ rocnik.roman }}
|
||||||
|
{% endblock %}{% endblock %}
|
||||||
|
</h2>
|
||||||
|
|
||||||
<p>Ročník číslo {{ rocnik.rocnik }} ({{ rocnik.prvni_rok }}/{{ rocnik.druhy_rok }})
|
<p>Ročník číslo {{ rocnik.rocnik }} ({{ rocnik.prvni_rok }}/{{ rocnik.druhy_rok }})
|
||||||
|
|
||||||
|
@ -12,6 +16,15 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
{% if temata_v_rocniku %}
|
||||||
|
<h3>Témata</h3>
|
||||||
|
<ul>
|
||||||
|
{% for tema in temata_v_rocniku %}
|
||||||
|
<li><a href="{{ tema.verejne_url }}">{{ tema.kod_v_rocniku }}: {{ tema.nazev }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if vysledkovka %}
|
{% if vysledkovka %}
|
||||||
<h3>Výsledkovka</h3>
|
<h3>Výsledkovka</h3>
|
||||||
<table class='vysledkovka'>
|
<table class='vysledkovka'>
|
||||||
|
@ -30,11 +43,15 @@
|
||||||
|
|
||||||
{% for rv in vysledkovka %}
|
{% for rv in vysledkovka %}
|
||||||
<tr>
|
<tr>
|
||||||
<td class='border-r'>{{ rv.poradi }}
|
<td class='border-r'>{% autoescape off %}{{ rv.poradi }}{% endautoescape %}
|
||||||
<th class='border-r'> {{ rv.resitel.titul }} <sup>MM</sup> {{ rv.resitel.plne_jmeno }}
|
<th class='border-r'>
|
||||||
|
{% if rv.titul %}
|
||||||
|
{{ rv.titul }}<sup>MM</sup>
|
||||||
|
{% endif %}
|
||||||
|
{{ rv.resitel.plne_jmeno }}
|
||||||
<td class='border-r'>{{ rv.resitel.rocnik }}
|
<td class='border-r'>{{ rv.resitel.rocnik }}
|
||||||
<td class='border-r'>{{ rv.body_odjakziva }}
|
<td class='border-r'>{{ rv.body_odjakziva }}
|
||||||
{% for b in rv.body %}
|
{% for b in rv.body_cisla %}
|
||||||
<td class='border-r'>{{ b }}
|
<td class='border-r'>{{ b }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<td class='border-r'><b>{{ rv.body_rocnik }}</b>
|
<td class='border-r'><b>{{ rv.body_rocnik }}</b>
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
{% with "/archiv" as cesta %}
|
{% with "/archiv" as cesta %}
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="{{cesta}}/cisla/">Čísla</a>
|
<li class="{% if selected == "cisla" %}selected{% endif %}"><a href="{{cesta}}/cisla/">Čísla</a>
|
||||||
<li><a href="{{cesta}}/temata/">Témata</a>
|
<li class="{% if selected == "temata" %}selected{% endif %}"><a href="{{cesta}}/temata/">Témata</a>
|
||||||
<li><a href="{{cesta}}/ulohy/">Úlohy</a>
|
<li class="{% if selected == "ulohy" %}selected{% endif %}"><a href="{{cesta}}/ulohy/">Úlohy</a>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
|
|
23
seminar/templates/seminar/archiv/temata.html
Normal file
23
seminar/templates/seminar/archiv/temata.html
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
{% extends "seminar/archiv/base_temata.html" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h2>
|
||||||
|
{% block nadpis1a %}{% block nadpis1b %}
|
||||||
|
Archiv témat
|
||||||
|
{% endblock %}{% endblock%}
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
{% for tema in object_list %}
|
||||||
|
{% with tema.cislo_zadani.rocnik.rocnik as rocnik %}
|
||||||
|
{% ifchanged rocnik %}
|
||||||
|
{% if not forloop.first %}</ul>{% endif %}
|
||||||
|
<h3>{{ rocnik }}. ročník</h3>
|
||||||
|
<ul>
|
||||||
|
{% endifchanged %}
|
||||||
|
<li>
|
||||||
|
<a href="{{ tema.verejne_url }}">{{ tema.kod_v_rocniku }}: {{ tema.nazev }}</a>
|
||||||
|
{% endwith %}
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
{% endblock content %}
|
|
@ -1,5 +1,7 @@
|
||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block menu_clanky %}selected{% endblock %}
|
||||||
|
|
||||||
{% block submenu %}
|
{% block submenu %}
|
||||||
{% include "seminar/clanky/submenu.html" %}
|
{% include "seminar/clanky/submenu.html" %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
{% with "/clanky" as cesta %}
|
{% with "/clanky" as cesta %}
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="{{cesta}}/uvod/">Úvod</a>
|
<li class="{% if selected == "uvod" %}selected{% endif %}"><a href="{{cesta}}/uvod/">Úvod</a>
|
||||||
<li><a href="{{cesta}}/org/">Organizátorské články</a>
|
<li class="{% if selected == "org" %}selected{% endif %}"><a href="{{cesta}}/org/">Organizátorské články</a>
|
||||||
<li><a href="{{cesta}}/resitel/">Řešitelské články</a>
|
<li class="{% if selected == "resitel" %}selected{% endif %}"><a href="{{cesta}}/resitel/">Řešitelské články</a>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
|
|
|
@ -1,22 +1,25 @@
|
||||||
{% extends "seminar/cojemam/base.html" %}
|
{% extends "seminar/cojemam/base.html" %}
|
||||||
{% block nadpis1 %}
|
{% block nadpis1a %}{% block nadpis1b %}
|
||||||
{% if aktivni %}
|
{% if aktivni %}
|
||||||
Organizátoři
|
Organizátoři
|
||||||
{% else %}
|
{% else %}
|
||||||
Vysloužilí organizátoři
|
Vysloužilí organizátoři
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock%}
|
{% endblock%}{% endblock%}
|
||||||
|
|
||||||
|
{% block menu_uvod %}selected{% endblock %}
|
||||||
|
{% block submenu %}
|
||||||
|
{% with "org" as selected %}
|
||||||
|
{% include "seminar/cojemam/submenu.html" %}
|
||||||
|
{% endwith %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div>
|
<div>
|
||||||
|
{% if not aktivni %}
|
||||||
|
<a href="/co-je-MaM/organizatori/">Aktivní organizátoři</a>
|
||||||
|
{% endif %}
|
||||||
{% for org in object_list %}
|
{% for org in object_list %}
|
||||||
<!--
|
|
||||||
{% if org.user.is_active %}
|
|
||||||
<b>Aktivní</b>
|
|
||||||
{% else %}
|
|
||||||
Není aktivní
|
|
||||||
{% endif %}
|
|
||||||
-->
|
|
||||||
<h2>
|
<h2>
|
||||||
{{org.user.first_name}}
|
{{org.user.first_name}}
|
||||||
{% if org.prezdivka %}
|
{% if org.prezdivka %}
|
||||||
|
@ -31,13 +34,13 @@
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<ul>
|
<ul>
|
||||||
{#TODO časovat dle rodu #}
|
<li>
|
||||||
{% if org.organizuje_od_roku %}
|
{% if aktivni %}
|
||||||
<li>{% if aktivni %}Organizuje{% else %}Organizoval{% endif %} od roku {{org.organizuje_od_roku}}
|
Organizuje od roku {{org.organizuje_od_roku}}
|
||||||
{% endif %}
|
{% else %}
|
||||||
{% if org.organizuje_do_roku %}
|
{#TODO časovat dle rodu #}
|
||||||
<li>{% if aktivni %}Organizuje{% else %}Organizoval{% endif %} do roku {{org.organizuje_do_roku}}
|
Organizoval v letech {{org.organizuje_od_roku}}–{{org.organizuje_do_roku}}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if org.studuje %}
|
{% if org.studuje %}
|
||||||
<li>Studuje: {{org.studuje}}
|
<li>Studuje: {{org.studuje}}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -53,6 +56,8 @@
|
||||||
|
|
||||||
{% if aktivni%}
|
{% if aktivni%}
|
||||||
<a href="organizovali/">Vysloužilí organizátoři</a>
|
<a href="organizovali/">Vysloužilí organizátoři</a>
|
||||||
|
{% else %}
|
||||||
|
<a href="/co-je-MaM/organizatori/">Aktivní organizátoři</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
{% with "/co-je-MaM" as cesta %}
|
{% with "/co-je-MaM" as cesta %}
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="{{cesta}}/uvod/">Úvod</a>
|
<li class="{% if selected == "uvod" %}selected{% endif %}"><a href="{{cesta}}/uvod/">Úvod</a>
|
||||||
<li><a href="{{cesta}}/jak-resit/">Jak řešit</a>
|
<li class="{% if selected == "jak-resit" %}selected{% endif %}"><a href="{{cesta}}/jak-resit/">Jak řešit</a>
|
||||||
<li><a href="{{cesta}}/organizatori/">Organizátoři</a>
|
<li class="{% if selected == "org" %}selected{% endif %}"><a href="{{cesta}}/organizatori/">Organizátoři</a>
|
||||||
<li><a href="{{cesta}}/FAQ/">FAQ</a>
|
<li class="{% if selected == "FAQ" %}selected{% endif %}"><a href="{{cesta}}/FAQ/">FAQ</a>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
|
|
|
@ -1,15 +1,32 @@
|
||||||
{% extends 'base.html' %}
|
{% for novinka in object_list %}
|
||||||
Před začátkem bloku.
|
{# pripravene div-y na stylovani#}
|
||||||
{% block body %}
|
<div>
|
||||||
Tady bude začátek.
|
{# datum #}
|
||||||
{% for novinka in novinky %}
|
<div><b>{{novinka.datum}}</b></div>
|
||||||
{% if novinka.datum > pred_2_mesici and novinka.zverejneno %}
|
{# text #}
|
||||||
<p>
|
{{ novinka.text | safe }}
|
||||||
Tady bude novinka.
|
{# obrazek #}
|
||||||
{{ novinka.text }}
|
{% if novinka.obrazek %}
|
||||||
</p>
|
<div>
|
||||||
<img src='{{ novinka.obrazek }}'>
|
<img src='{{novinka.obrazek.url}}'
|
||||||
{% endif %}
|
height='
|
||||||
{% endfor%}
|
{% if novinka.obrazek.height > 200 %} {# vyska obrazku natvrdo #}
|
||||||
Tady bude konec.
|
200
|
||||||
{% endblock %}
|
{% else %}
|
||||||
|
{{novinka.obrazek.height}}
|
||||||
|
{% endif%}
|
||||||
|
'>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{# autor #}
|
||||||
|
{% if user.is_staff %}
|
||||||
|
<div>{{novinka.autor.first_name}}
|
||||||
|
{% if novinka.autor.organizator.prezdivka%}
|
||||||
|
„{{novinka.autor.organizator.prezdivka}}“
|
||||||
|
{% endif %}
|
||||||
|
{{novinka.autor.last_name}}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endfor%}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,12 @@
|
||||||
{% load staticfiles %}
|
{% load staticfiles %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h2>{% block nadpis1 %}Tady se pracuje{% endblock%}</h2>
|
<h2>
|
||||||
|
{% block nadpis1a %}{% block nadpis1b %}
|
||||||
|
Tady se pracuje
|
||||||
|
{% endblock %}{% endblock %}
|
||||||
|
</h2>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Na této stránce velmi intenzivně pracujeme.
|
Na této stránce velmi intenzivně pracujeme.
|
||||||
Za dočasnou nedostupnost se omlouváme.
|
Za dočasnou nedostupnost se omlouváme.
|
||||||
|
|
|
@ -1,8 +1,19 @@
|
||||||
{% extends "seminar/soustredeni/base.html" %}
|
{% extends "seminar/soustredeni/base.html" %}
|
||||||
|
|
||||||
|
{% block menu_soustredeni %}selected{% endblock %}
|
||||||
|
{% block submenu %}
|
||||||
|
{% with "probehlo" as selected %}
|
||||||
|
{% include "seminar/soustredeni/submenu.html" %}
|
||||||
|
{% endwith %}
|
||||||
|
{% endblock submenu %}
|
||||||
|
|
||||||
{% block content %}{% if user.is_authenticated %}{# PRACUJE SE STRANKA #}
|
{% block content %}{% if user.is_authenticated %}{# PRACUJE SE STRANKA #}
|
||||||
|
|
||||||
<h1>{% block nadpis1 %}Soustředění{% endblock %}</h1>
|
<h2>
|
||||||
|
{% block nadpis1a %}{% block nadpis1b %}
|
||||||
|
Soustředění
|
||||||
|
{% endblock %}{% endblock %}
|
||||||
|
</h2>
|
||||||
|
|
||||||
{# Projdi vsechna soustredeni #}
|
{# Projdi vsechna soustredeni #}
|
||||||
{% for soustredeni in object_list %}
|
{% for soustredeni in object_list %}
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
{% with "/soustredeni" as cesta %}
|
{% with "/soustredeni" as cesta %}
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="{{cesta}}/uvod/">Úvod</a>
|
<li class="{% if selected == "uvod" %}selected{% endif %}"><a href="{{cesta}}/">Úvod</a>
|
||||||
<li><a href="{{cesta}}/pripravujeme/">Připravujeme</a>
|
<li class="{% if selected == "pripravujeme" %}selected{% endif %}"><a href="{{cesta}}/pripravujeme/">Připravujeme</a>
|
||||||
<li><a href="{{cesta}}/probehlo/">Proběhlo</a>
|
<li class="{% if selected == "probehlo" %}selected{% endif %}"><a href="{{cesta}}/probehlo/">Proběhlo</a>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
|
|
13
seminar/templates/seminar/stare_novinky.html
Normal file
13
seminar/templates/seminar/stare_novinky.html
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<h2>
|
||||||
|
{% block nadpis1a %}{% block nadpis1b %}
|
||||||
|
Archiv novinek
|
||||||
|
{% endblock %}{% endblock %}
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
{% include 'seminar/novinky.html' %}
|
||||||
|
|
||||||
|
{% endblock %}
|
|
@ -2,7 +2,11 @@
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div>
|
<div>
|
||||||
<h2>{% block nadpis1 %}Stav databáze{% endblock %}</h2>
|
<h2>
|
||||||
|
{% block nadpis1a %}{% block nadpis1b %}
|
||||||
|
Stav databáze
|
||||||
|
{% endblock %}{% endblock %}
|
||||||
|
</h2>
|
||||||
|
|
||||||
<h3>Řešitelé</h3>
|
<h3>Řešitelé</h3>
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,20 @@
|
||||||
Trala!
|
|
||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
HU!
|
|
||||||
{% block novinky %}
|
{% block content %}
|
||||||
Tady bude nadpis pro novinky.
|
|
||||||
{% include 'novinky.html' %}
|
{# Uvitaci text #}
|
||||||
|
<h2>
|
||||||
|
{% block nadpis1a %}{% block nadpis1b %}
|
||||||
|
Tož vitajte!
|
||||||
|
{% endblock %}{% endblock %}
|
||||||
|
</h2>
|
||||||
|
<p> Uvítací text či-co.</p>
|
||||||
|
|
||||||
|
{# Novinky #}
|
||||||
|
<h2>Novinky</h2>
|
||||||
|
{% include 'seminar/novinky.html' %}
|
||||||
|
|
||||||
|
<a href='/stare-novinky/'>Archiv novinek</a>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,8 +1,19 @@
|
||||||
{% extends "seminar/zadani/base.html" %}
|
{% extends "seminar/zadani/base.html" %}
|
||||||
|
|
||||||
|
{% block submenu %}
|
||||||
|
{% with "aktualni" as selected %}
|
||||||
|
{% include 'seminar/zadani/submenu.html' %}
|
||||||
|
{% endwith %}
|
||||||
|
{% endblock submenu %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div>
|
<div>
|
||||||
<h2>{% block nadpis1 %}Aktuální zadání{% endblock %}</h2>
|
<h2>
|
||||||
|
{% block nadpis1a %}{% block nadpis1b %}
|
||||||
|
Aktuální zadání
|
||||||
|
{% endblock %}{% endblock %}
|
||||||
|
</h2>
|
||||||
|
|
||||||
{% with nastaveni.aktualni_cislo as ac %}
|
{% with nastaveni.aktualni_cislo as ac %}
|
||||||
|
|
||||||
{% if ac.zadane_problemy.all %}
|
{% if ac.zadane_problemy.all %}
|
||||||
|
@ -18,9 +29,7 @@
|
||||||
{# publikace jednotlivych zadani #}
|
{# publikace jednotlivych zadani #}
|
||||||
{% for problem in sada %}
|
{% for problem in sada %}
|
||||||
{# TODO použít {{problem.kod_v_rocniku}} ? vrací 4.u1 místo 4.1 #}
|
{# TODO použít {{problem.kod_v_rocniku}} ? vrací 4.u1 místo 4.1 #}
|
||||||
<h4>{{problem.cislo_zadani.cislo}}.{{problem.kod}} {{problem.nazev}}
|
<h4>{{problem.cislo_zadani.cislo}}.{{problem.kod}} {{problem.nazev}} {{ problem.body_v_zavorce }}</h4>
|
||||||
{# nezobrazuj body, pokud nejsou zadane #}
|
|
||||||
{% if problem.body %}({{problem.body}}b){% endif %}</h4>
|
|
||||||
{% autoescape off %}{{problem.text_zadani}}{% endautoescape %}
|
{% autoescape off %}{{problem.text_zadani}}{% endautoescape %}
|
||||||
<hr>
|
<hr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -28,12 +37,7 @@
|
||||||
Aktuálně nejsou zadané žádné úlohy k řešení.
|
Aktuálně nejsou zadané žádné úlohy k řešení.
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
<h3>Témata</h3>
|
<a href="/zadani/temata/"><h3>Témata</h3></a>
|
||||||
{% for tema in temata %}
|
|
||||||
<h4>Téma {{tema.kod}}: {{tema.nazev}}</h4>
|
|
||||||
<a href=""><span style="color:red">Stránka tématu</span></a>
|
|
||||||
{% autoescape off %}{{tema.text_zadani}}{% endautoescape %}
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
|
|
||||||
|
|
|
@ -1,26 +1,38 @@
|
||||||
{% extends "seminar/zadani/base.html" %}
|
{% extends "seminar/zadani/base.html" %}
|
||||||
|
|
||||||
|
{% block submenu %}
|
||||||
|
{% with "temata" as selected %}
|
||||||
|
{% include 'seminar/zadani/submenu.html' %}
|
||||||
|
{% endwith %}
|
||||||
|
{% endblock submenu %}
|
||||||
|
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% with nastaveni.aktualni_rocnik as ar %}
|
{% with nastaveni.aktualni_rocnik as ar %}
|
||||||
<div>
|
<div>
|
||||||
<h2>{% block nadpis1 %}Témata{% endblock %}</h2>
|
<h2>
|
||||||
|
{% block nadpis1a %}{% block nadpis1b %}
|
||||||
|
Témata
|
||||||
|
{% endblock %}{% endblock %}
|
||||||
|
</h2>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Témata obvykle představují složitější problémy, než samostatné úlohy. Navíc
|
Témata jsou hlavním obsahem časopisu M&M. Obvykle představují
|
||||||
v jejich zadání je vždy prostor pro tvůrčí rozšíření. Nad nápady
|
složitější a obecnější problémy než samostatné úlohy. Navíc je v jejich
|
||||||
k tématům můžeš přemýšlet celý rok až do termínu odeslání šestého
|
zadání vždy prostor pro tvůrčí rozšíření. Za pěkný článek k tématu lze
|
||||||
čísla. Pokud tě něco napadne, napiš nám o tom článek. My došlé články
|
získat třeba i 20 bodů, určitě se tedy vyplatí se tématy zabývat.
|
||||||
revidujeme, hodnotíme a ty nejzajímavější uveřejňujeme zde na webu,
|
|
||||||
případně i v někerém z čísel časopisu. Můžeš také reagovat na
|
|
||||||
články ostatních řešitelů. Za pěkný článek k tématu lze získat třeba i
|
|
||||||
20 bodů, určitě se tedy vyplatí jimi zabývat. Pokud nevíš, jak takový
|
|
||||||
článek napsat, podívej se na náš <span style="color:red">návod</span>.{# TODO odkaz #}
|
|
||||||
</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
<a href="/co-je-MaM/jak-resit/">Jak řešit téma?</a>
|
||||||
|
</p>
|
||||||
|
{% if temata %}
|
||||||
<p>
|
<p>
|
||||||
Letos jsme pro tebe připravili tato témata:
|
Letos jsme pro tebe připravili tato témata:
|
||||||
</p>
|
</p>
|
||||||
|
{% endif %}
|
||||||
{% for problem in temata %}
|
{% for problem in temata %}
|
||||||
{# TODO použít {{problem.kod_v_rocniku}} ? vrací t4 místo 4 #}
|
{# TODO použít {{problem.kod_v_rocniku}} ? vrací t4 místo 4 #}
|
||||||
<h3>Téma {{problem.kod}}: {{problem.nazev}}</h3>
|
<a href="{{problem.verejne_url}}"><h3>Téma {{problem.kod}}: {{problem.nazev}}</h3></a>
|
||||||
{% autoescape off %}{{problem.text_zadani}}{% endautoescape %}
|
{% autoescape off %}{{problem.text_zadani}}{% endautoescape %}
|
||||||
<hr>
|
<hr>
|
||||||
{% empty %}
|
{% empty %}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block menu_zadani %}selected{% endblock %}
|
||||||
|
|
||||||
{% block submenu %}
|
{% block submenu %}
|
||||||
{% include 'seminar/zadani/submenu.html' %}
|
{% include 'seminar/zadani/submenu.html' %}
|
||||||
{% endblock submenu %}
|
{% endblock submenu %}
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
{% with "/zadani" as cesta %}
|
{% with "/zadani" as cesta %}
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="{{cesta}}/aktualni/">Aktuální zadání</a>
|
<li class="{% if selected == "aktualni" %}selected{% endif %}"><a href="{{cesta}}/aktualni/">Aktuální zadání</a>
|
||||||
<li><a href="{{cesta}}/ulohy/">Úlohy</a>
|
<li class="{% if selected == "ulohy" %}selected{% endif %}"><a href="{{cesta}}/ulohy/">Úlohy</a>
|
||||||
<li><a href="{{cesta}}/temata/">Témata</a>
|
<li class="{% if selected == "temata" %}selected{% endif %}"><a href="{{cesta}}/temata/">Témata</a>
|
||||||
<li><a href="{{cesta}}/aktualni-cislo/">Aktuální číslo</a>
|
<li class="{% if selected == "aktualni-cislo" %}selected{% endif %}"><a href="{{cesta}}/aktualni-cislo/">Aktuální číslo</a>
|
||||||
<li><a href="{{cesta}}/vysledkove-listiny/">Výsledkové listiny</a>
|
<li class="{% if selected == "vysledkove-listiny" %}selected{% endif %}"><a href="{{cesta}}/vysledkove-listiny/">Výsledkové listiny</a>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
|
|
|
@ -7,18 +7,20 @@ urlpatterns = patterns('',
|
||||||
url(r'^co-je-MaM/organizatori/organizovali/$', views.CojemamOrganizatoriStariView.as_view(), name='stari_organizatori'),
|
url(r'^co-je-MaM/organizatori/organizovali/$', views.CojemamOrganizatoriStariView.as_view(), name='stari_organizatori'),
|
||||||
|
|
||||||
url(r'^archiv/cisla/$', views.CislaView.as_view()),
|
url(r'^archiv/cisla/$', views.CislaView.as_view()),
|
||||||
|
url(r'^archiv/temata/$', views.ArchivTemataView.as_view()),
|
||||||
|
|
||||||
url(r'^rocnik/(?P<rocnik>\d+)/$', views.RocnikView.as_view(), name='seminar_rocnik'),
|
url(r'^rocnik/(?P<rocnik>\d+)/$', views.RocnikView.as_view(), name='seminar_rocnik'),
|
||||||
url(r'^cislo/(?P<rocnik>\d+)\.(?P<cislo>[0-9-]+)/$', views.CisloView.as_view(), name='seminar_cislo'),
|
url(r'^cislo/(?P<rocnik>\d+)\.(?P<cislo>[0-9-]+)/$', views.CisloView.as_view(), name='seminar_cislo'),
|
||||||
url(r'^problem/(?P<pk>\d+)/$', views.ProblemView.as_view(), name='seminar_problem'),
|
url(r'^problem/(?P<pk>\d+)/$', views.ProblemView.as_view(), name='seminar_problem'),
|
||||||
|
|
||||||
url(r'^soustredeni/$', views.SoustredeniListView.as_view(),
|
url(r'^soustredeni/probehlo/$', views.SoustredeniListView.as_view(),
|
||||||
name = 'seminar_seznam_soustredeni'),
|
name = 'seminar_seznam_soustredeni'),
|
||||||
url(r'^soustredeni/(?P<pk>\d+)/$', views.SoustredeniView.as_view(), name='seminar_soustredeni'),
|
url(r'^soustredeni/(?P<pk>\d+)/$', views.SoustredeniView.as_view(), name='seminar_soustredeni'),
|
||||||
|
|
||||||
url(r'^zadani/aktualni/$', views.AktualniZadaniView, name='seminar_aktualni_zadani'),
|
url(r'^zadani/aktualni/$', views.AktualniZadaniView, name='seminar_aktualni_zadani'),
|
||||||
url(r'^zadani/temata/$', views.TemataView, name='seminar_temata'),
|
url(r'^zadani/temata/$', views.ZadaniTemataView, name='seminar_temata'),
|
||||||
url(r'^$', views.TitulniStranaView.as_view(), name='titulni_strana'),
|
url(r'^$', views.TitulniStranaView.as_view(), name='titulni_strana'),
|
||||||
|
url(r'^stare-novinky/$', views.StareNovinkyView.as_view(), name='stare_novinky'),
|
||||||
|
|
||||||
url(r'^stav$', views.StavDatabazeView, name='stav_databaze'),
|
url(r'^stav$', views.StavDatabazeView, name='stav_databaze'),
|
||||||
|
|
||||||
|
|
204
seminar/views.py
204
seminar/views.py
|
@ -11,15 +11,16 @@ from .models import Problem, Cislo, Reseni, Nastaveni, Rocnik, Soustredeni, Orga
|
||||||
from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva
|
from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva
|
||||||
from . import utils
|
from . import utils
|
||||||
|
|
||||||
import datetime
|
from datetime import timedelta, date
|
||||||
|
from itertools import groupby
|
||||||
|
|
||||||
|
|
||||||
def AktualniZadaniView(request):
|
def AktualniZadaniView(request):
|
||||||
nastaveni = get_object_or_404(Nastaveni)
|
nastaveni = get_object_or_404(Nastaveni)
|
||||||
problemy = Problem.objects.filter(cislo_zadani=nastaveni.aktualni_cislo).filter(stav = 'zadany')
|
problemy = Problem.objects.filter(cislo_zadani=nastaveni.aktualni_cislo).filter(stav = 'zadany')
|
||||||
ulohy = problemy.filter(typ = 'uloha')
|
ulohy = problemy.filter(typ = 'uloha').order_by('kod')
|
||||||
serialy = problemy.filter(typ = 'serial')
|
serialy = problemy.filter(typ = 'serial').order_by('kod')
|
||||||
temata = problemy.filter(typ = 'tema')
|
temata = problemy.filter(typ = 'tema').order_by('kod')
|
||||||
jednorazove_problemy = [ulohy, serialy]
|
jednorazove_problemy = [ulohy, serialy]
|
||||||
return render(request, 'seminar/zadani/AktualniZadani.html',
|
return render(request, 'seminar/zadani/AktualniZadani.html',
|
||||||
{'nastaveni': nastaveni,
|
{'nastaveni': nastaveni,
|
||||||
|
@ -28,11 +29,11 @@ def AktualniZadaniView(request):
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
def TemataView(request):
|
def ZadaniTemataView(request):
|
||||||
nastaveni = get_object_or_404(Nastaveni)
|
nastaveni = get_object_or_404(Nastaveni)
|
||||||
return render(request, 'seminar/zadani/Temata.html',
|
return render(request, 'seminar/zadani/Temata.html',
|
||||||
{
|
{
|
||||||
'temata': Problem.objects.filter(typ=Problem.TYP_TEMA, cislo_zadani__rocnik=nastaveni.aktualni_rocnik),
|
'temata': Problem.objects.filter(typ=Problem.TYP_TEMA, stav=Problem.STAV_ZADANY, cislo_zadani__rocnik=nastaveni.aktualni_rocnik).order_by('kod'),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -40,19 +41,17 @@ def TemataView(request):
|
||||||
|
|
||||||
class TitulniStranaView(generic.ListView):
|
class TitulniStranaView(generic.ListView):
|
||||||
model = Novinky
|
model = Novinky
|
||||||
template_name='seminar/novinky.html'
|
template_name='seminar/titulnistrana.html'
|
||||||
|
queryset = Novinky.objects.filter(zverejneno=True).order_by('-datum')[:5]
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
#def get_context_data(self, **kwargs):
|
||||||
context = super(TitulniStranaView, self).get_context_data(**kwargs)
|
# context = super(TitulniStranaView, self).get_context_data(**kwargs)
|
||||||
context['pred_2_mesici'] = (datetime.date.today() - datetime.timedelta(2*365/12)).isoformat()
|
# return context
|
||||||
#ulozi datum pred dvema mesici
|
|
||||||
#elegantneji mozne pomoci dateutil:
|
|
||||||
'''
|
|
||||||
from dateutil.relativedelta import relativedelta
|
|
||||||
|
|
||||||
date.today() + relativedelta(month=-2)
|
class StareNovinkyView(generic.ListView):
|
||||||
'''
|
model = Novinky
|
||||||
return context
|
template_name = 'seminar/stare_novinky.html'
|
||||||
|
queryset = Novinky.objects.filter(zverejneno=True).order_by('-datum')
|
||||||
|
|
||||||
### Co je M&M
|
### Co je M&M
|
||||||
|
|
||||||
|
@ -61,7 +60,7 @@ class TitulniStranaView(generic.ListView):
|
||||||
class CojemamOrganizatoriView(generic.ListView):
|
class CojemamOrganizatoriView(generic.ListView):
|
||||||
model = Organizator
|
model = Organizator
|
||||||
template_name='seminar/cojemam/organizatori.html'
|
template_name='seminar/cojemam/organizatori.html'
|
||||||
queryset = Organizator.objects.filter(user__is_active=True).order_by('user__first_name')
|
queryset = Organizator.objects.exclude(organizuje_do_roku__isnull=False, organizuje_do_roku__lt=date.today().year).order_by('user__first_name')
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(CojemamOrganizatoriView, self).get_context_data(**kwargs)
|
context = super(CojemamOrganizatoriView, self).get_context_data(**kwargs)
|
||||||
context['aktivni'] = True
|
context['aktivni'] = True
|
||||||
|
@ -70,7 +69,7 @@ class CojemamOrganizatoriView(generic.ListView):
|
||||||
class CojemamOrganizatoriStariView(generic.ListView):
|
class CojemamOrganizatoriStariView(generic.ListView):
|
||||||
model = Organizator
|
model = Organizator
|
||||||
template_name='seminar/cojemam/organizatori.html'
|
template_name='seminar/cojemam/organizatori.html'
|
||||||
queryset = Organizator.objects.filter(user__is_active=False)
|
queryset = Organizator.objects.filter(organizuje_do_roku__isnull=False, organizuje_do_roku__lt=date.today().year).order_by('-organizuje_do_roku')
|
||||||
|
|
||||||
### Archiv
|
### Archiv
|
||||||
|
|
||||||
|
@ -78,6 +77,26 @@ class CislaView(generic.ListView):
|
||||||
model = Rocnik
|
model = Rocnik
|
||||||
template_name='seminar/archiv/cisla.html'
|
template_name='seminar/archiv/cisla.html'
|
||||||
|
|
||||||
|
|
||||||
|
def sloupec_s_poradim(vysledky):
|
||||||
|
# počet řešitelů ve výsledkovce nad aktuálním
|
||||||
|
lepsich_resitelu = 0
|
||||||
|
|
||||||
|
poradi_l = []
|
||||||
|
# projdeme skupiny řešitelů se stejným počtem bodů
|
||||||
|
for skupina in (list(x) for _, x in groupby(vysledky, lambda x: x.body)):
|
||||||
|
|
||||||
|
# připravíme si obsahy buněk ve sloupci pořadí pro skupinu
|
||||||
|
if len(skupina) == 1:
|
||||||
|
poradi_l += ["{}.".format(lepsich_resitelu + 1)]
|
||||||
|
# je-li účastníků se stejným počtem bodů víc, pořadí (rozsah X.-Y.) je jen u prvního
|
||||||
|
else:
|
||||||
|
poradi_l += ["{}.–{}.".format(lepsich_resitelu + 1, lepsich_resitelu + len(skupina))] + [""] * (len(skupina)-1)
|
||||||
|
lepsich_resitelu += len(skupina)
|
||||||
|
|
||||||
|
return poradi_l
|
||||||
|
|
||||||
|
|
||||||
class RocnikView(generic.DetailView):
|
class RocnikView(generic.DetailView):
|
||||||
model = Rocnik
|
model = Rocnik
|
||||||
template_name = 'seminar/archiv/rocnik.html'
|
template_name = 'seminar/archiv/rocnik.html'
|
||||||
|
@ -99,73 +118,45 @@ class RocnikView(generic.DetailView):
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(RocnikView, self).get_context_data(**kwargs)
|
context = super(RocnikView, self).get_context_data(**kwargs)
|
||||||
|
|
||||||
cisla_v_rocniku = VysledkyKCisluZaRocnik.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).order_by('-cislo')
|
cisla_v_rocniku = VysledkyKCisluZaRocnik.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).order_by('cislo')
|
||||||
#vyberu vsechny verejne vysledky z rocniku
|
#vyberu vsechny verejne vysledky z rocniku
|
||||||
#pokud žádné nejsou, výsledkovka se nezobrazí
|
#pokud žádné nejsou, výsledkovka se nezobrazí
|
||||||
if cisla_v_rocniku:
|
if cisla_v_rocniku:
|
||||||
vysledky = cisla_v_rocniku.filter(cislo = cisla_v_rocniku[0].cislo).order_by('-body', 'resitel__prijmeni', 'resitel__jmeno').select_related('resitel')
|
vysledky = list(cisla_v_rocniku.filter(cislo = cisla_v_rocniku[0].cislo).order_by('-body', 'resitel__prijmeni', 'resitel__jmeno').select_related('resitel'))
|
||||||
#vybere vsechny vysledky z posledniho verejneho cisla a setridi sestupne dle bodu
|
#vybere vsechny vysledky z posledniho verejneho cisla a setridi sestupne dle bodu
|
||||||
vysledky_resitele = {}
|
|
||||||
stejne_body = {}
|
|
||||||
konec_rozmezi = {}
|
|
||||||
vysledkovka = []
|
vysledkovka = []
|
||||||
posledni_body = 100000
|
|
||||||
predchozi_poradi = None
|
|
||||||
body_minule = None
|
|
||||||
|
|
||||||
for vi in range(len(vysledky)):
|
# doplníme některé údaje do řádků výsledkovky pro řešitele ve skupině
|
||||||
v = vysledky[vi]
|
for poradi, v in zip(sloupec_s_poradim(vysledky), vysledky):
|
||||||
rv = RadekVysledkovky()
|
v.poradi = poradi
|
||||||
rv.resitel = v.resitel
|
v.resitel.rocnik = v.resitel.rocnik(context['rocnik'])
|
||||||
|
|
||||||
verejne_vysl_odjakziva = VysledkyKCisluOdjakziva.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).filter(cislo = cisla_v_rocniku[0].cislo)
|
verejne_vysl_odjakziva = VysledkyKCisluOdjakziva.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).filter(cislo = cisla_v_rocniku[0].cislo)
|
||||||
rv.body_odjakziva = verejne_vysl_odjakziva.filter(resitel = rv.resitel)[0].body
|
|
||||||
rv.resitel.titul = rv.resitel.get_titul(rv.body_odjakziva)
|
v.body_odjakziva = verejne_vysl_odjakziva.filter(resitel = v.resitel)[0].body
|
||||||
rv.resitel.rocnik = rv.resitel.rocnik(context['rocnik'])
|
v.titul = v.resitel.get_titul(v.body_odjakziva)
|
||||||
rv.body = []*len(context['rocnik'].verejna_cisla())
|
v.body_rocnik = v.body
|
||||||
|
v.body_cisla = []
|
||||||
|
|
||||||
#pokud pro dany rok a cislo nema resitel vysledky, ma defaultne 0
|
#pokud pro dany rok a cislo nema resitel vysledky, ma defaultne 0
|
||||||
for cis in context['rocnik'].verejna_cisla():
|
for cis in context['rocnik'].verejna_cisla():
|
||||||
if cis.verejna_vysledkovka:
|
if cis.verejna_vysledkovka:
|
||||||
print cis
|
body_za_cislo = VysledkyZaCislo.objects.filter(cislo__rocnik = context['rocnik']).filter(cislo = cis).filter(resitel = v.resitel)
|
||||||
body_za_cislo = VysledkyZaCislo.objects.filter(cislo__rocnik = context['rocnik']).filter(cislo = cis).filter(resitel = rv.resitel)
|
|
||||||
#seznam vysledku se spravnym rocnikem a cislem pro resitele
|
#seznam vysledku se spravnym rocnikem a cislem pro resitele
|
||||||
#zobrazim jen je-li vysledkovka verejna
|
#zobrazim jen je-li vysledkovka verejna
|
||||||
if body_za_cislo:
|
if body_za_cislo:
|
||||||
rv.body.append(body_za_cislo[0].body)
|
v.body_cisla.append(body_za_cislo[0].body)
|
||||||
#neprazdne vysledky by mely obsahovat prave jeden vysledek
|
#neprazdne vysledky by mely obsahovat prave jeden vysledek
|
||||||
else:
|
else:
|
||||||
rv.body.append(0)
|
v.body_cisla.append(0)
|
||||||
#resitel nema za cislo body
|
#resitel nema za cislo body
|
||||||
rv.poradi = ''
|
|
||||||
#defaultni poradi je prazdne - kvuli sdilenym mistum
|
vysledkovka.append(v)
|
||||||
rv.body_rocnik = v.body
|
|
||||||
rv.body_na_zacatku = rv.body_odjakziva - rv.body_rocnik
|
temata_v_rocniku = Problem.objects.filter(typ=Problem.TYP_TEMA, cislo_zadani__rocnik=context['rocnik'])
|
||||||
#body za minule rocniky
|
|
||||||
if posledni_body > v.body:
|
|
||||||
if stejne_body.get(posledni_body):
|
|
||||||
#pokud uz jsme predtim narazili na stejny pocet bodu
|
|
||||||
konec_rozmezi[posledni_body] = int(predchozi_poradi.poradi) + stejne_body[posledni_body]
|
|
||||||
#druha hranice sdilenych pozic - zacatek + pocet lidi se stejnymi body
|
|
||||||
predchozi_poradi.poradi = '{0}. -- {1}.'.format(predchozi_poradi.poradi,konec_rozmezi[posledni_body])
|
|
||||||
#predchozi radek ktery menil pocty bodu bude mit rozsah, pokud bylo vice radku se stejnym poctem bodu
|
|
||||||
elif predchozi_poradi :
|
|
||||||
predchozi_poradi.poradi = '{0}.'.format(predchozi_poradi.poradi)
|
|
||||||
#pokud nebyl rozsah hodnot, vypisu, pridam tecku za cislo
|
|
||||||
posledni_body = v.body
|
|
||||||
rv.poradi = vi + 1
|
|
||||||
#poradi se meni jen u resitele s rozdilnym poctem bodu nez mel minuly
|
|
||||||
predchozi_poradi = rv
|
|
||||||
elif posledni_body == v.body:
|
|
||||||
if not stejne_body.get(v.body):
|
|
||||||
stejne_body[v.body] = 1
|
|
||||||
#pokud klic neexistuje, zalozim novy pro tohoto resitele
|
|
||||||
else:
|
|
||||||
stejne_body[v.body] += 1
|
|
||||||
#rozsirim pocet resitelu sdilejici stejnou pozici
|
|
||||||
vysledky_resitele[v.resitel.id] = rv
|
|
||||||
#odkaz na radek vysledkovky patrici danemu resiteli
|
|
||||||
vysledkovka.append(rv)
|
|
||||||
|
|
||||||
context['vysledkovka'] = vysledkovka
|
context['vysledkovka'] = vysledkovka
|
||||||
|
context['temata_v_rocniku'] = temata_v_rocniku
|
||||||
return context
|
return context
|
||||||
|
|
||||||
class ProblemView(generic.DetailView):
|
class ProblemView(generic.DetailView):
|
||||||
|
@ -194,6 +185,7 @@ class CisloView(generic.DetailView):
|
||||||
{'verbose_name': queryset.model._meta.verbose_name})
|
{'verbose_name': queryset.model._meta.verbose_name})
|
||||||
return obj
|
return obj
|
||||||
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(CisloView, self).get_context_data(**kwargs)
|
context = super(CisloView, self).get_context_data(**kwargs)
|
||||||
|
|
||||||
|
@ -206,7 +198,7 @@ class CisloView(generic.DetailView):
|
||||||
|
|
||||||
resene_problemy = Problem.objects.filter(cislo_reseni=context['cislo']).filter(typ__in=typy_skutecne_zadanych).order_by('cislo_reseni__cislo', 'kod')
|
resene_problemy = Problem.objects.filter(cislo_reseni=context['cislo']).filter(typ__in=typy_skutecne_zadanych).order_by('cislo_reseni__cislo', 'kod')
|
||||||
|
|
||||||
problemy = sorted(list(set([r.problem for r in reseni])), key=lambda x:(0 if x.typ==Problem.TYP_ULOHA else 1,x.kod))
|
problemy = sorted(list(set([r.problem for r in reseni])), key=lambda x:(0 if x.typ==Problem.TYP_ULOHA else 1, x.kod_v_rocniku))
|
||||||
#setridi problemy podle typu a poradi zadani
|
#setridi problemy podle typu a poradi zadani
|
||||||
problem_index = {}
|
problem_index = {}
|
||||||
for i in range(len(problemy)):
|
for i in range(len(problemy)):
|
||||||
|
@ -214,66 +206,42 @@ class CisloView(generic.DetailView):
|
||||||
#umoznuje zjistit index podle id problemu
|
#umoznuje zjistit index podle id problemu
|
||||||
|
|
||||||
vysledky_resitele = {}
|
vysledky_resitele = {}
|
||||||
stejne_body = {}
|
|
||||||
konec_rozmezi = {}
|
|
||||||
vysledkovka = []
|
vysledkovka = []
|
||||||
posledni_body = 100000
|
|
||||||
predchozi_poradi = None
|
|
||||||
body_minule = None
|
|
||||||
|
|
||||||
for vi in range(len(vysledky)):
|
# doplníme některé údaje do řádků výsledkovky pro řešitele ve skupině
|
||||||
v = vysledky[vi]
|
for poradi, v in zip(sloupec_s_poradim(vysledky), vysledky):
|
||||||
tv = RadekVysledkovky()
|
v.poradi = poradi
|
||||||
tv.resitel = v.resitel
|
v.body_celkem_rocnik = v.body
|
||||||
tv.resitel.titul = tv.resitel.get_titul(v.body)
|
v.body_celkem_odjakziva = VysledkyKCisluOdjakziva.objects.get(resitel=v.resitel, cislo=context['cislo']).body
|
||||||
tv.rocnik = tv.resitel.rocnik(context['cislo'].rocnik)
|
|
||||||
tv.vysledek = v
|
# je tady '', aby se nezobrazovala 0, pokud se řešitel o řešení úlohy ani nepokusil
|
||||||
#odkazuje na VysledkyKCislu
|
v.body_ulohy = [''] * len(problemy)
|
||||||
tv.body = ['']*len(problemy)
|
|
||||||
#pole bodu za ulohy
|
v.titul = v.resitel.get_titul(v.body_celkem_odjakziva)
|
||||||
tv.poradi = ''
|
|
||||||
#defaultni poradi je prazdne - kvuli sdilenym mistum
|
|
||||||
tv.body_celkem_rocnik = v.body
|
|
||||||
tv.body_celkem_odjakziva = VysledkyKCisluOdjakziva.objects.get(resitel=v.resitel, cislo=context['cislo']).body
|
|
||||||
body_cislo_q = VysledkyZaCislo.objects.filter(resitel=v.resitel, cislo=context['cislo'])
|
body_cislo_q = VysledkyZaCislo.objects.filter(resitel=v.resitel, cislo=context['cislo'])
|
||||||
tv.body_cislo = body_cislo_q[0].body if len(body_cislo_q) > 0 else 0
|
v.body_cislo = body_cislo_q[0].body if body_cislo_q else 0
|
||||||
tv.body_minule = tv.body_celkem_rocnik - tv.body_cislo
|
|
||||||
tv.titul=tv.resitel.get_titul(int(tv.body_celkem_odjakziva))
|
|
||||||
#pocet bodu do tohoto cisla
|
|
||||||
if posledni_body > tv.body_celkem_rocnik:
|
|
||||||
if stejne_body.get(posledni_body):
|
|
||||||
konec_rozmezi[posledni_body] = int(predchozi_poradi.poradi) + stejne_body[posledni_body]
|
|
||||||
#druha hranice sdilenych pozic - zacatek + pocet lidi se stejnymi body
|
|
||||||
predchozi_poradi.poradi = '{0}. -- {1}.'.format(predchozi_poradi.poradi,konec_rozmezi[posledni_body])
|
|
||||||
#predchozi radek ktery menil pocty bodu bude mit rozsah, pokud bylo vice radku se stejnym poctem bodu
|
|
||||||
elif predchozi_poradi :
|
|
||||||
predchozi_poradi.poradi = '{0}.'.format(predchozi_poradi.poradi)
|
|
||||||
#pokud nebyl rozsah hodnot, pridam tecku za cislo
|
|
||||||
posledni_body = tv.body_celkem_rocnik
|
|
||||||
tv.poradi = vi + 1
|
|
||||||
#poradi se meni jen u resitele s rozdilnym poctem bodu nez mel minuly
|
|
||||||
predchozi_poradi = tv
|
|
||||||
elif posledni_body == tv.body_celkem_rocnik:
|
|
||||||
if not stejne_body.get(tv.body_celkem_rocnik):
|
|
||||||
stejne_body[tv.body_celkem_rocnik] = 1
|
|
||||||
#pokud klic neexistuje, zalozim novy pro tohoto resitele
|
|
||||||
else:
|
|
||||||
stejne_body[tv.body_celkem_rocnik] += 1
|
|
||||||
#rozsirim pocet resitelu sdilejici stejnou pozici
|
|
||||||
vysledky_resitele[v.resitel.id] = tv
|
|
||||||
#odkaz na radek vysledkovky patrici danemu resiteli
|
|
||||||
vysledkovka.append(tv)
|
|
||||||
|
|
||||||
|
vysledkovka.append(v)
|
||||||
|
|
||||||
|
# připravíme si odkaz na řádek, abychom do něj mohli doplnit body za jednotlivé úlohy
|
||||||
|
vysledky_resitele[v.resitel.id] = v
|
||||||
|
|
||||||
|
# za každé řešení doplníme k příslušnému řešiteli a úloze body
|
||||||
for r in reseni:
|
for r in reseni:
|
||||||
vysledky_resitele[r.resitel.id].body[problem_index[r.problem.id]] = r.body
|
vysledky_resitele[r.resitel.id].body_ulohy[problem_index[r.problem.id]] = r.body
|
||||||
|
|
||||||
|
|
||||||
context['vysledkovka'] = vysledkovka
|
context['vysledkovka'] = vysledkovka
|
||||||
context['problemy'] = problemy
|
context['problemy'] = problemy
|
||||||
context['v_cisle_zadane'] = v_cisle_zadane
|
context['v_cisle_zadane'] = v_cisle_zadane
|
||||||
context['resene_problemy'] = resene_problemy
|
context['resene_problemy'] = resene_problemy
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
class ArchivTemataView(generic.ListView):
|
||||||
|
model = Problem
|
||||||
|
template_name = 'seminar/archiv/temata.html'
|
||||||
|
queryset = Problem.objects.filter(typ=Problem.TYP_TEMA, stav=Problem.STAV_ZADANY).select_related('cislo_zadani__rocnik__rocnik').order_by('-cislo_zadani__rocnik__rocnik', 'kod')
|
||||||
|
|
||||||
### Generovani vysledkovky
|
### Generovani vysledkovky
|
||||||
|
|
||||||
class CisloVysledkovkaView(CisloView):
|
class CisloVysledkovkaView(CisloView):
|
||||||
|
|
Loading…
Reference in a new issue