Pavel "LEdoian" Turinsky
4 years ago
43 changed files with 5011 additions and 1898 deletions
@ -0,0 +1,249 @@ |
|||||
|
[ |
||||
|
{ |
||||
|
"fields": { |
||||
|
"name": "org", |
||||
|
"permissions": [ |
||||
|
23, |
||||
|
24, |
||||
|
25, |
||||
|
1, |
||||
|
26, |
||||
|
72, |
||||
|
73, |
||||
|
74, |
||||
|
75, |
||||
|
76, |
||||
|
77, |
||||
|
78, |
||||
|
79, |
||||
|
51, |
||||
|
55, |
||||
|
52, |
||||
|
53, |
||||
|
54, |
||||
|
56, |
||||
|
57, |
||||
|
58, |
||||
|
59, |
||||
|
60, |
||||
|
61, |
||||
|
62, |
||||
|
63, |
||||
|
43, |
||||
|
44, |
||||
|
45, |
||||
|
46, |
||||
|
228, |
||||
|
229, |
||||
|
230, |
||||
|
231, |
||||
|
232, |
||||
|
233, |
||||
|
234, |
||||
|
235, |
||||
|
260, |
||||
|
261, |
||||
|
262, |
||||
|
263, |
||||
|
264, |
||||
|
265, |
||||
|
266, |
||||
|
267, |
||||
|
244, |
||||
|
245, |
||||
|
246, |
||||
|
247, |
||||
|
236, |
||||
|
237, |
||||
|
238, |
||||
|
239, |
||||
|
240, |
||||
|
241, |
||||
|
242, |
||||
|
243, |
||||
|
248, |
||||
|
249, |
||||
|
250, |
||||
|
251, |
||||
|
252, |
||||
|
253, |
||||
|
254, |
||||
|
255, |
||||
|
256, |
||||
|
257, |
||||
|
258, |
||||
|
259, |
||||
|
212, |
||||
|
213, |
||||
|
214, |
||||
|
215, |
||||
|
80, |
||||
|
81, |
||||
|
82, |
||||
|
83, |
||||
|
180, |
||||
|
181, |
||||
|
182, |
||||
|
183, |
||||
|
172, |
||||
|
173, |
||||
|
174, |
||||
|
175, |
||||
|
168, |
||||
|
169, |
||||
|
170, |
||||
|
171, |
||||
|
132, |
||||
|
133, |
||||
|
134, |
||||
|
135, |
||||
|
224, |
||||
|
225, |
||||
|
226, |
||||
|
227, |
||||
|
184, |
||||
|
185, |
||||
|
186, |
||||
|
187, |
||||
|
112, |
||||
|
113, |
||||
|
114, |
||||
|
115, |
||||
|
120, |
||||
|
121, |
||||
|
122, |
||||
|
123, |
||||
|
164, |
||||
|
165, |
||||
|
166, |
||||
|
167, |
||||
|
124, |
||||
|
125, |
||||
|
126, |
||||
|
127, |
||||
|
216, |
||||
|
217, |
||||
|
218, |
||||
|
219, |
||||
|
136, |
||||
|
137, |
||||
|
138, |
||||
|
139, |
||||
|
152, |
||||
|
153, |
||||
|
154, |
||||
|
155, |
||||
|
208, |
||||
|
209, |
||||
|
210, |
||||
|
211, |
||||
|
140, |
||||
|
141, |
||||
|
142, |
||||
|
143, |
||||
|
108, |
||||
|
109, |
||||
|
110, |
||||
|
111, |
||||
|
84, |
||||
|
85, |
||||
|
86, |
||||
|
87, |
||||
|
104, |
||||
|
105, |
||||
|
106, |
||||
|
107, |
||||
|
160, |
||||
|
161, |
||||
|
162, |
||||
|
163, |
||||
|
220, |
||||
|
221, |
||||
|
222, |
||||
|
223, |
||||
|
88, |
||||
|
89, |
||||
|
90, |
||||
|
91, |
||||
|
92, |
||||
|
93, |
||||
|
94, |
||||
|
95, |
||||
|
188, |
||||
|
189, |
||||
|
190, |
||||
|
191, |
||||
|
96, |
||||
|
97, |
||||
|
98, |
||||
|
99, |
||||
|
100, |
||||
|
101, |
||||
|
102, |
||||
|
103, |
||||
|
128, |
||||
|
129, |
||||
|
130, |
||||
|
131, |
||||
|
116, |
||||
|
117, |
||||
|
118, |
||||
|
119, |
||||
|
156, |
||||
|
157, |
||||
|
158, |
||||
|
159, |
||||
|
192, |
||||
|
193, |
||||
|
194, |
||||
|
195, |
||||
|
144, |
||||
|
145, |
||||
|
146, |
||||
|
147, |
||||
|
196, |
||||
|
197, |
||||
|
198, |
||||
|
199, |
||||
|
176, |
||||
|
177, |
||||
|
178, |
||||
|
179, |
||||
|
148, |
||||
|
149, |
||||
|
150, |
||||
|
151, |
||||
|
200, |
||||
|
201, |
||||
|
202, |
||||
|
203, |
||||
|
204, |
||||
|
205, |
||||
|
206, |
||||
|
207, |
||||
|
64, |
||||
|
65, |
||||
|
66, |
||||
|
67, |
||||
|
68, |
||||
|
69, |
||||
|
70, |
||||
|
71, |
||||
|
35, |
||||
|
36, |
||||
|
37, |
||||
|
38, |
||||
|
39, |
||||
|
40, |
||||
|
41, |
||||
|
42, |
||||
|
47, |
||||
|
48, |
||||
|
49, |
||||
|
50 |
||||
|
] |
||||
|
}, |
||||
|
"model": "auth.group", |
||||
|
"pk": 1 |
||||
|
} |
||||
|
] |
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
@ -0,0 +1,786 @@ |
|||||
|
[ |
||||
|
{ |
||||
|
"fields": { |
||||
|
"alias": "main_menu", |
||||
|
"title": "Hlavní menu" |
||||
|
}, |
||||
|
"model": "sitetree.tree", |
||||
|
"pk": 1 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": null, |
||||
|
"sort_order": 1, |
||||
|
"title": "Co je M&M", |
||||
|
"tree": 1, |
||||
|
"url": "/co-je-MaM/uvod/", |
||||
|
"urlaspattern": false |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 1 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": null, |
||||
|
"sort_order": 2, |
||||
|
"title": "Jak řešit", |
||||
|
"tree": 1, |
||||
|
"url": "/jak-resit/", |
||||
|
"urlaspattern": false |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 2 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": null, |
||||
|
"sort_order": 3, |
||||
|
"title": "Aktuální<br/> ročník", |
||||
|
"tree": 1, |
||||
|
"url": "seminar_aktualni_zadani", |
||||
|
"urlaspattern": true |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 3 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": null, |
||||
|
"sort_order": 4, |
||||
|
"title": "Soustředění", |
||||
|
"tree": 1, |
||||
|
"url": "/soustredeni/", |
||||
|
"urlaspattern": false |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 4 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": null, |
||||
|
"sort_order": 5, |
||||
|
"title": "Archiv", |
||||
|
"tree": 1, |
||||
|
"url": "seminar_archiv_rocniky", |
||||
|
"urlaspattern": true |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 5 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": true, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": null, |
||||
|
"sort_order": 6, |
||||
|
"title": "Přihlásit", |
||||
|
"tree": 1, |
||||
|
"url": "login", |
||||
|
"urlaspattern": true |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 6 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 1, |
||||
|
"sort_order": 7, |
||||
|
"title": "Úvod", |
||||
|
"tree": 1, |
||||
|
"url": "/co-je-MaM/uvod/", |
||||
|
"urlaspattern": false |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 7 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 1, |
||||
|
"sort_order": 8, |
||||
|
"title": "Organizátoři", |
||||
|
"tree": 1, |
||||
|
"url": "organizatori", |
||||
|
"urlaspattern": true |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 8 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 1, |
||||
|
"sort_order": 9, |
||||
|
"title": "FAQ", |
||||
|
"tree": 1, |
||||
|
"url": "/co-je-MaM/FAQ/", |
||||
|
"urlaspattern": false |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 9 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 1, |
||||
|
"sort_order": 10, |
||||
|
"title": "Kontakt", |
||||
|
"tree": 1, |
||||
|
"url": "/co-je-MaM/kontakt/", |
||||
|
"urlaspattern": false |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 10 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 2, |
||||
|
"sort_order": 11, |
||||
|
"title": "Témata", |
||||
|
"tree": 1, |
||||
|
"url": "/jak-resit/", |
||||
|
"urlaspattern": false |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 11 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 2, |
||||
|
"sort_order": 12, |
||||
|
"title": "Jak psát příspěvek", |
||||
|
"tree": 1, |
||||
|
"url": "/jak-resit/jak-psat-prispevek/", |
||||
|
"urlaspattern": false |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 12 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 2, |
||||
|
"sort_order": 13, |
||||
|
"title": "Odměny", |
||||
|
"tree": 1, |
||||
|
"url": "/co-je-MaM/odmeny/", |
||||
|
"urlaspattern": false |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 13 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 3, |
||||
|
"sort_order": 33, |
||||
|
"title": "Výsledková listina", |
||||
|
"tree": 1, |
||||
|
"url": "seminar_aktualni_vysledky", |
||||
|
"urlaspattern": true |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 16 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 4, |
||||
|
"sort_order": 18, |
||||
|
"title": "Úvod", |
||||
|
"tree": 1, |
||||
|
"url": "/soustredeni/", |
||||
|
"urlaspattern": false |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 18 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 4, |
||||
|
"sort_order": 19, |
||||
|
"title": "Připravujeme", |
||||
|
"tree": 1, |
||||
|
"url": "/soustredeni/pripravujeme/", |
||||
|
"urlaspattern": false |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 19 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 4, |
||||
|
"sort_order": 20, |
||||
|
"title": "Proběhlo", |
||||
|
"tree": 1, |
||||
|
"url": "seminar_seznam_soustredeni", |
||||
|
"urlaspattern": true |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 20 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": true, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": null, |
||||
|
"sort_order": 21, |
||||
|
"title": "Profil", |
||||
|
"tree": 1, |
||||
|
"url": "profil", |
||||
|
"urlaspattern": true |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 21 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 21, |
||||
|
"sort_order": 23, |
||||
|
"title": "Osobní údaje", |
||||
|
"tree": 1, |
||||
|
"url": "seminar_resitel_edit", |
||||
|
"urlaspattern": true |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 22 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [ |
||||
|
2 |
||||
|
], |
||||
|
"access_restricted": true, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 21, |
||||
|
"sort_order": 36, |
||||
|
"title": "Poslat řešení", |
||||
|
"tree": 1, |
||||
|
"url": "seminar_nahraj_reseni", |
||||
|
"urlaspattern": true |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 23 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 5, |
||||
|
"sort_order": 35, |
||||
|
"title": "Témata", |
||||
|
"tree": 1, |
||||
|
"url": "seminar_archiv_temata", |
||||
|
"urlaspattern": true |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 24 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [ |
||||
|
1 |
||||
|
], |
||||
|
"access_restricted": true, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": null, |
||||
|
"sort_order": 28, |
||||
|
"title": "HIDDEN", |
||||
|
"tree": 1, |
||||
|
"url": "/korektury/", |
||||
|
"urlaspattern": false |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 28 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 28, |
||||
|
"sort_order": 30, |
||||
|
"title": "Aktuální", |
||||
|
"tree": 1, |
||||
|
"url": "korektury_list", |
||||
|
"urlaspattern": true |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 30 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 28, |
||||
|
"sort_order": 31, |
||||
|
"title": "Zastaralé", |
||||
|
"tree": 1, |
||||
|
"url": "korektury_stare_list", |
||||
|
"urlaspattern": true |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 31 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 28, |
||||
|
"sort_order": 32, |
||||
|
"title": "Nápověda", |
||||
|
"tree": 1, |
||||
|
"url": "/korektury/help/", |
||||
|
"urlaspattern": false |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 32 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 3, |
||||
|
"sort_order": 15, |
||||
|
"title": "Aktuální číslo", |
||||
|
"tree": 1, |
||||
|
"url": "seminar_aktualni_zadani", |
||||
|
"urlaspattern": true |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 33 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 5, |
||||
|
"sort_order": 24, |
||||
|
"title": "Čísla", |
||||
|
"tree": 1, |
||||
|
"url": "seminar_archiv_rocniky", |
||||
|
"urlaspattern": true |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 35 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 21, |
||||
|
"sort_order": 22, |
||||
|
"title": "Úvod", |
||||
|
"tree": 1, |
||||
|
"url": "profil", |
||||
|
"urlaspattern": true |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 36 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [ |
||||
|
1 |
||||
|
], |
||||
|
"access_restricted": true, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 21, |
||||
|
"sort_order": 37, |
||||
|
"title": "Odevzdaná řešení", |
||||
|
"tree": 1, |
||||
|
"url": "odevzdavatko_tabulka", |
||||
|
"urlaspattern": true |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 37 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": true, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 21, |
||||
|
"sort_order": 38, |
||||
|
"title": "Odhlásit se", |
||||
|
"tree": 1, |
||||
|
"url": "/logout/", |
||||
|
"urlaspattern": false |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 38 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [ |
||||
|
1 |
||||
|
], |
||||
|
"access_restricted": true, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 21, |
||||
|
"sort_order": 36, |
||||
|
"title": "Nahrát řešení", |
||||
|
"tree": 1, |
||||
|
"url": "seminar_vloz_reseni", |
||||
|
"urlaspattern": true |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 39 |
||||
|
}, |
||||
|
{ |
||||
|
"fields": { |
||||
|
"access_guest": false, |
||||
|
"access_loggedin": false, |
||||
|
"access_perm_type": 1, |
||||
|
"access_permissions": [], |
||||
|
"access_restricted": false, |
||||
|
"alias": null, |
||||
|
"description": "", |
||||
|
"hidden": false, |
||||
|
"hint": "", |
||||
|
"inbreadcrumbs": true, |
||||
|
"inmenu": true, |
||||
|
"insitetree": true, |
||||
|
"parent": 5, |
||||
|
"sort_order": 40, |
||||
|
"title": "Řešitelské články", |
||||
|
"tree": 1, |
||||
|
"url": "/archiv/clanky", |
||||
|
"urlaspattern": false |
||||
|
}, |
||||
|
"model": "sitetree.treeitem", |
||||
|
"pk": 40 |
||||
|
} |
||||
|
] |
@ -1,816 +0,0 @@ |
|||||
[ |
|
||||
{ |
|
||||
"model": "sitetree.tree", |
|
||||
"pk": 1, |
|
||||
"fields": { |
|
||||
"title": "Hlavní menu", |
|
||||
"alias": "main_menu" |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 1, |
|
||||
"fields": { |
|
||||
"title": "Co je M&M", |
|
||||
"hint": "", |
|
||||
"url": "/co-je-MaM/uvod/", |
|
||||
"urlaspattern": false, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": null, |
|
||||
"sort_order": 1, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 2, |
|
||||
"fields": { |
|
||||
"title": "Jak řešit", |
|
||||
"hint": "", |
|
||||
"url": "/jak-resit/", |
|
||||
"urlaspattern": false, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": null, |
|
||||
"sort_order": 2, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 3, |
|
||||
"fields": { |
|
||||
"title": "Aktuální<br/> ročník", |
|
||||
"hint": "", |
|
||||
"url": "seminar_aktualni_zadani", |
|
||||
"urlaspattern": true, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": null, |
|
||||
"sort_order": 3, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 4, |
|
||||
"fields": { |
|
||||
"title": "Soustředění", |
|
||||
"hint": "", |
|
||||
"url": "/soustredeni/", |
|
||||
"urlaspattern": false, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": null, |
|
||||
"sort_order": 4, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 5, |
|
||||
"fields": { |
|
||||
"title": "Archiv", |
|
||||
"hint": "", |
|
||||
"url": "seminar_archiv_rocniky", |
|
||||
"urlaspattern": true, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": null, |
|
||||
"sort_order": 5, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 6, |
|
||||
"fields": { |
|
||||
"title": "Přihlásit", |
|
||||
"hint": "", |
|
||||
"url": "login", |
|
||||
"urlaspattern": true, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": true, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": null, |
|
||||
"sort_order": 6, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 7, |
|
||||
"fields": { |
|
||||
"title": "Úvod", |
|
||||
"hint": "", |
|
||||
"url": "/co-je-MaM/uvod/", |
|
||||
"urlaspattern": false, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 1, |
|
||||
"sort_order": 7, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 8, |
|
||||
"fields": { |
|
||||
"title": "Organizátoři", |
|
||||
"hint": "", |
|
||||
"url": "organizatori", |
|
||||
"urlaspattern": true, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 1, |
|
||||
"sort_order": 8, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 9, |
|
||||
"fields": { |
|
||||
"title": "FAQ", |
|
||||
"hint": "", |
|
||||
"url": "/co-je-MaM/FAQ/", |
|
||||
"urlaspattern": false, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 1, |
|
||||
"sort_order": 9, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 10, |
|
||||
"fields": { |
|
||||
"title": "Kontakt", |
|
||||
"hint": "", |
|
||||
"url": "/co-je-MaM/kontakt/", |
|
||||
"urlaspattern": false, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 1, |
|
||||
"sort_order": 10, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 11, |
|
||||
"fields": { |
|
||||
"title": "Témata", |
|
||||
"hint": "", |
|
||||
"url": "/jak-resit/", |
|
||||
"urlaspattern": false, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 2, |
|
||||
"sort_order": 11, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 12, |
|
||||
"fields": { |
|
||||
"title": "Jak psát příspěvek", |
|
||||
"hint": "", |
|
||||
"url": "/jak-resit/jak-psat-prispevek/", |
|
||||
"urlaspattern": false, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 2, |
|
||||
"sort_order": 12, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 13, |
|
||||
"fields": { |
|
||||
"title": "Odměny", |
|
||||
"hint": "", |
|
||||
"url": "/co-je-MaM/odmeny/", |
|
||||
"urlaspattern": false, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 2, |
|
||||
"sort_order": 13, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 16, |
|
||||
"fields": { |
|
||||
"title": "Výsledková listina", |
|
||||
"hint": "", |
|
||||
"url": "zadani/vysledkova-listina/", |
|
||||
"urlaspattern": false, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 3, |
|
||||
"sort_order": 33, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 17, |
|
||||
"fields": { |
|
||||
"title": "Články", |
|
||||
"hint": "", |
|
||||
"url": "clanky_resitel", |
|
||||
"urlaspattern": true, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 3, |
|
||||
"sort_order": 34, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 18, |
|
||||
"fields": { |
|
||||
"title": "Úvod", |
|
||||
"hint": "", |
|
||||
"url": "/soustredeni/", |
|
||||
"urlaspattern": false, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 4, |
|
||||
"sort_order": 18, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 19, |
|
||||
"fields": { |
|
||||
"title": "Připravujeme", |
|
||||
"hint": "", |
|
||||
"url": "/soustredeni/pripravujeme/", |
|
||||
"urlaspattern": false, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 4, |
|
||||
"sort_order": 19, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 20, |
|
||||
"fields": { |
|
||||
"title": "Proběhlo", |
|
||||
"hint": "", |
|
||||
"url": "seminar_seznam_soustredeni", |
|
||||
"urlaspattern": true, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 4, |
|
||||
"sort_order": 20, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 21, |
|
||||
"fields": { |
|
||||
"title": "Profil", |
|
||||
"hint": "", |
|
||||
"url": "profil", |
|
||||
"urlaspattern": true, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": true, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": null, |
|
||||
"sort_order": 21, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 22, |
|
||||
"fields": { |
|
||||
"title": "Osobní údaje", |
|
||||
"hint": "", |
|
||||
"url": "seminar_resitel_edit", |
|
||||
"urlaspattern": true, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 21, |
|
||||
"sort_order": 23, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 23, |
|
||||
"fields": { |
|
||||
"title": "Poslat řešení", |
|
||||
"hint": "", |
|
||||
"url": "seminar_nahraj_reseni", |
|
||||
"urlaspattern": true, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 21, |
|
||||
"sort_order": 36, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 24, |
|
||||
"fields": { |
|
||||
"title": "Témata", |
|
||||
"hint": "", |
|
||||
"url": "seminar_temata", |
|
||||
"urlaspattern": true, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 5, |
|
||||
"sort_order": 35, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 28, |
|
||||
"fields": { |
|
||||
"title": "HIDDEN", |
|
||||
"hint": "", |
|
||||
"url": "/korektury/", |
|
||||
"urlaspattern": false, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": true, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": null, |
|
||||
"sort_order": 28, |
|
||||
"access_permissions": [ |
|
||||
1 |
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 30, |
|
||||
"fields": { |
|
||||
"title": "Aktuální", |
|
||||
"hint": "", |
|
||||
"url": "korektury_list", |
|
||||
"urlaspattern": true, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 28, |
|
||||
"sort_order": 30, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 31, |
|
||||
"fields": { |
|
||||
"title": "Zastaralé", |
|
||||
"hint": "", |
|
||||
"url": "korektury_stare_list", |
|
||||
"urlaspattern": true, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 28, |
|
||||
"sort_order": 31, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 32, |
|
||||
"fields": { |
|
||||
"title": "Nápověda", |
|
||||
"hint": "", |
|
||||
"url": "/korektury/help/", |
|
||||
"urlaspattern": false, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 28, |
|
||||
"sort_order": 32, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 33, |
|
||||
"fields": { |
|
||||
"title": "Aktuální číslo", |
|
||||
"hint": "", |
|
||||
"url": "seminar_aktualni_zadani", |
|
||||
"urlaspattern": true, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 3, |
|
||||
"sort_order": 15, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 34, |
|
||||
"fields": { |
|
||||
"title": "Témata", |
|
||||
"hint": "", |
|
||||
"url": "seminar_temata", |
|
||||
"urlaspattern": true, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 3, |
|
||||
"sort_order": 17, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 35, |
|
||||
"fields": { |
|
||||
"title": "Čísla", |
|
||||
"hint": "", |
|
||||
"url": "seminar_archiv_rocniky", |
|
||||
"urlaspattern": true, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 5, |
|
||||
"sort_order": 24, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 36, |
|
||||
"fields": { |
|
||||
"title": "Úvod", |
|
||||
"hint": "", |
|
||||
"url": "profil", |
|
||||
"urlaspattern": true, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": false, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 21, |
|
||||
"sort_order": 22, |
|
||||
"access_permissions": [ |
|
||||
|
|
||||
] |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"model": "sitetree.treeitem", |
|
||||
"pk": 37, |
|
||||
"fields": { |
|
||||
"title": "Odevzdaná řešení", |
|
||||
"hint": "", |
|
||||
"url": "odevzdavatko_tabulka", |
|
||||
"urlaspattern": true, |
|
||||
"tree": 1, |
|
||||
"hidden": false, |
|
||||
"alias": null, |
|
||||
"description": "", |
|
||||
"inmenu": true, |
|
||||
"inbreadcrumbs": true, |
|
||||
"insitetree": true, |
|
||||
"access_loggedin": false, |
|
||||
"access_guest": false, |
|
||||
"access_restricted": true, |
|
||||
"access_perm_type": 1, |
|
||||
"parent": 21, |
|
||||
"sort_order": 37, |
|
||||
"access_permissions": [ |
|
||||
1 |
|
||||
] |
|
||||
} |
|
||||
} |
|
||||
] |
|
@ -0,0 +1,12 @@ |
|||||
|
#!/usr/bin/python3 |
||||
|
|
||||
|
import json |
||||
|
import argparse |
||||
|
|
||||
|
parser = argparse.ArgumentParser() |
||||
|
parser.add_argument("input", type=argparse.FileType('r', encoding='utf-8')) |
||||
|
parser.add_argument('output', type=argparse.FileType('w', encoding='utf-8')) |
||||
|
args = parser.parse_args() |
||||
|
|
||||
|
data = json.load(args.input) |
||||
|
json.dump(data, args.output, ensure_ascii=False, sort_keys=True, indent='\t') |
Before Width: | Height: | Size: 3.2 MiB After Width: | Height: | Size: 476 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 86 KiB |
@ -0,0 +1,456 @@ |
|||||
|
import seminar.models as m |
||||
|
from django.db.models import Q, Sum, Count |
||||
|
from seminar.utils import aktivniResitele, resi_v_rocniku, cisla_rocniku, hlavni_problem, hlavni_problemy_f, problemy_cisla, podproblemy_v_cislu |
||||
|
import time |
||||
|
### Výsledky |
||||
|
|
||||
|
def sloupec_s_poradim(setrizene_body): |
||||
|
""" |
||||
|
Ze seznamu obsahujícího sestupně setřízené body řešitelů za daný ročník |
||||
|
vytvoří seznam s pořadími (včetně 3.-5. a pak 2 volná místa atp.), |
||||
|
podle toho, jak jdou za sebou ve výsledkovce. |
||||
|
Parametr: |
||||
|
setrizene_body (seznam integerů): sestupně setřízená čísla |
||||
|
|
||||
|
Výstup: |
||||
|
sloupec_s_poradim (seznam stringů) |
||||
|
""" |
||||
|
|
||||
|
# ze seznamu obsahujícího setřízené body spočítáme sloupec s pořadím |
||||
|
aktualni_poradi = 1 |
||||
|
sloupec_s_poradim = [] |
||||
|
|
||||
|
# seskupíme seznam všech bodů podle hodnot |
||||
|
for index in range(0, len(setrizene_body)): |
||||
|
# pokud je pořadí větší než číslo řádku, tak jsme vypsali větší rozsah a chceme |
||||
|
# vypsat už jen prázdné místo, než dojdeme na správný řádek |
||||
|
if (index + 1) < aktualni_poradi: |
||||
|
sloupec_s_poradim.append("") |
||||
|
continue |
||||
|
velikost_skupiny = 0 |
||||
|
# zjistíme počet po sobě jdoucích stejných hodnot |
||||
|
while setrizene_body[index] == setrizene_body[index + velikost_skupiny]: |
||||
|
velikost_skupiny = velikost_skupiny + 1 |
||||
|
# na konci musíme ošetřit přetečení seznamu |
||||
|
if (index + velikost_skupiny) > len(setrizene_body) - 1: |
||||
|
break |
||||
|
# pokud je velikost skupiny 1, vypíšu pořadí |
||||
|
if velikost_skupiny == 1: |
||||
|
sloupec_s_poradim.append("{}.".format(aktualni_poradi)) |
||||
|
# pokud je skupina větší, vypíšu rozsah |
||||
|
else: |
||||
|
sloupec_s_poradim.append("{}.–{}.".format(aktualni_poradi, |
||||
|
aktualni_poradi+velikost_skupiny-1)) |
||||
|
# zvětšíme aktuální pořadí o tolik, kolik pozic bylo přeskočeno |
||||
|
aktualni_poradi = aktualni_poradi + velikost_skupiny |
||||
|
return sloupec_s_poradim |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
def body_resitelu(resitele, za, odjakziva=True): |
||||
|
""" Funkce počítající počty bodů pro zadané řešitele, |
||||
|
buď odjakživa do daného ročníku/čísla anebo za daný ročník/číslo. |
||||
|
Parametry: |
||||
|
resitele (seznam obsahující položky typu Resitel): aktivní řešitelé |
||||
|
za (Rocnik/Cislo): za co se mají počítat body |
||||
|
(generování starších výsledkovek) |
||||
|
odjakziva (bool): zda se mají počítat body odjakživa, nebo jen za číslo/ročník |
||||
|
zadané v "za" |
||||
|
Výstup: |
||||
|
slovník (Resitel.id):body |
||||
|
""" |
||||
|
resitele_id = [r.id for r in resitele] |
||||
|
# Zjistíme, typ objektu v parametru "za" |
||||
|
if isinstance(za, m.Rocnik): |
||||
|
cislo = None |
||||
|
rocnik = za |
||||
|
rok = rocnik.prvni_rok |
||||
|
elif isinstance(za, m.Cislo): |
||||
|
cislo = za |
||||
|
rocnik = None |
||||
|
rok = cislo.rocnik.prvni_rok |
||||
|
else: |
||||
|
assert True, "body_resitelu: za není ani číslo ani ročník." |
||||
|
|
||||
|
|
||||
|
# Kvůli rychlosti používáme sčítáme body už v databázi, viz |
||||
|
# https://docs.djangoproject.com/en/3.0/topics/db/aggregation/, |
||||
|
# sekce Filtering on annotations (protože potřebujeme filtrovat výsledky |
||||
|
# jen do nějakého data, abychom uměli správně nagenerovat výsledkovky i |
||||
|
# za historická čísla. |
||||
|
|
||||
|
# Níže se vytváří dotaz na součet bodů za správně vyfiltrovaná hodnocení, |
||||
|
# který se použije ve výsledném dotazu. |
||||
|
if cislo and odjakziva: # Body se sčítají odjakživa do zadaného čísla. |
||||
|
# Vyfiltrujeme všechna hodnocení, která jsou buď ze starších ročníků, |
||||
|
# anebo ze stejného ročníku, jak je zadané číslo, tam ale sčítáme jen |
||||
|
# pro čísla s pořadím nejvýše stejným, jako má zadané číslo. |
||||
|
body_k_zapocteni = Sum('reseni__hodnoceni__body', |
||||
|
filter=( Q(reseni__hodnoceni__cislo_body__rocnik__prvni_rok__lt=rok) | |
||||
|
Q(reseni__hodnoceni__cislo_body__rocnik__prvni_rok=rok, |
||||
|
reseni__hodnoceni__cislo_body__poradi__lte=cislo.poradi) )) |
||||
|
elif cislo and not odjakziva: # Body se sčítají za dané číslo. |
||||
|
body_k_zapocteni = Sum('reseni__hodnoceni__body', |
||||
|
filter=( Q(reseni__hodnoceni__cislo_body__rocnik__prvni_rok=rok, |
||||
|
reseni__hodnoceni__cislo_body__poradi__lte=cislo.poradi) )) |
||||
|
elif rocnik and odjakziva: # Spočítáme body za starší ročníky až do zadaného včetně. |
||||
|
body_k_zapocteni = Sum('reseni__hodnoceni__body', |
||||
|
filter= Q(reseni__hodnoceni__cislo_body__rocnik__prvni_rok__lte=rok)) |
||||
|
elif rocnik and not odjakziva: # Spočítáme body za daný ročník. |
||||
|
body_k_zapocteni = Sum('reseni__hodnoceni__body', |
||||
|
filter= Q(reseni__hodnoceni__cislo_body__rocnik=rocnik)) |
||||
|
else: |
||||
|
assert True, "body_resitelu: Neplatná kombinace za a odjakživa." |
||||
|
|
||||
|
# Následující řádek přidá ke každému řešiteli údaj ".body" se součtem jejich bodů |
||||
|
resitele_s_body = m.Resitel.objects.filter(id__in=resitele_id).annotate( |
||||
|
body=body_k_zapocteni) |
||||
|
# Teď jen z QuerySetu řešitelů anotovaných body vygenerujeme slovník |
||||
|
# indexovaný řešitelským id obsahující body. |
||||
|
# Pokud jsou body None, nahradíme za 0. |
||||
|
slovnik = {int(res.id) : (res.body if res.body else 0) for res in resitele_s_body} |
||||
|
return slovnik |
||||
|
|
||||
|
class RadekVysledkovkyRocniku(object): |
||||
|
""" Obsahuje věci, které se hodí vědět při konstruování výsledkovky. |
||||
|
Umožňuje snazší práci v templatu (lepší, než seznam).""" |
||||
|
|
||||
|
def __init__(self, poradi, resitel, body_cisla_sezn, body_rocnik, body_odjakziva, rok): |
||||
|
self.poradi = poradi |
||||
|
self.resitel = resitel |
||||
|
self.rocnik_resitele = resitel.rocnik(rok) |
||||
|
self.body_rocnik = body_rocnik |
||||
|
self.body_celkem_odjakziva = body_odjakziva |
||||
|
self.body_cisla_sezn = body_cisla_sezn |
||||
|
self.titul = resitel.get_titul(body_odjakziva) |
||||
|
|
||||
|
def setrid_resitele_a_body(slov_resitel_body): |
||||
|
setrizeni_resitele_id = [dvojice[0] for dvojice in slov_resitel_body] |
||||
|
setrizene_body = [dvojice[1] for dvojice in slov_resitel_body] |
||||
|
return setrizeni_resitele_id, setrizene_body |
||||
|
|
||||
|
def vysledkovka_rocniku(rocnik, jen_verejne=True): |
||||
|
""" Přebírá ročník (např. context["rocnik"]) a vrací výsledkovou listinu ve |
||||
|
formě vhodné pro šablonu "seminar/vysledkovka_rocniku.html" |
||||
|
""" |
||||
|
|
||||
|
start = time.time() |
||||
|
|
||||
|
## TODO možná chytřeji vybírat aktivní řešitele |
||||
|
# aktivní řešitelé - chceme letos něco poslal, TODO později vyfiltrujeme ty, kdo mají |
||||
|
# u alespoň jedné hodnoty něco jiného než NULL |
||||
|
aktivni_resitele = list(resi_v_rocniku(rocnik)) |
||||
|
cisla = cisla_rocniku(rocnik, jen_verejne) |
||||
|
body_cisla_slov = {} |
||||
|
for cislo in cisla: |
||||
|
# získáme body za číslo |
||||
|
_, cislobody = secti_body_za_cislo(cislo, aktivni_resitele) |
||||
|
body_cisla_slov[cislo.id] = cislobody |
||||
|
|
||||
|
# získáme body za ročník, seznam obsahuje dvojice (řešitel_id, body) setřízené sestupně |
||||
|
resitel_rocnikbody_sezn = secti_body_za_rocnik(rocnik, aktivni_resitele) |
||||
|
|
||||
|
# setřídíme řešitele podle počtu bodů a získáme seznam s body od nejvyšších po nenižší |
||||
|
setrizeni_resitele_id, setrizene_body = setrid_resitele_a_body(resitel_rocnikbody_sezn) |
||||
|
poradi = sloupec_s_poradim(setrizene_body) |
||||
|
|
||||
|
# získáme body odjakživa |
||||
|
resitel_odjakzivabody_slov = body_resitelu(aktivni_resitele, rocnik) |
||||
|
|
||||
|
# vytvoříme jednotlivé sloupce výsledkovky |
||||
|
radky_vysledkovky = [] |
||||
|
i = 0 |
||||
|
setrizeni_resitele_dict = {} # Tento slovnik se vyrab |
||||
|
for r in m.Resitel.objects.filter(id__in=setrizeni_resitele_id).select_related('osoba'): |
||||
|
setrizeni_resitele_dict[r.id] = r |
||||
|
|
||||
|
for ar_id in setrizeni_resitele_id: |
||||
|
# seznam počtu bodů daného řešitele pro jednotlivá čísla |
||||
|
body_cisla_sezn = [] |
||||
|
for cislo in cisla: |
||||
|
body_cisla_sezn.append(body_cisla_slov[cislo.id][ar_id]) |
||||
|
|
||||
|
# vytáhneme informace pro daného řešitele |
||||
|
radek = RadekVysledkovkyRocniku( |
||||
|
poradi[i], # pořadí |
||||
|
setrizeni_resitele_dict[ar_id], # řešitel (z id) |
||||
|
body_cisla_sezn, # seznam bodů za čísla |
||||
|
setrizene_body[i], # body za ročník (spočítané výše s pořadím) |
||||
|
resitel_odjakzivabody_slov[ar_id], # body odjakživa |
||||
|
rocnik) # ročník semináře pro získání ročníku řešitele |
||||
|
radky_vysledkovky.append(radek) |
||||
|
i += 1 |
||||
|
|
||||
|
end = time.time() |
||||
|
print("Vysledkovka rocniku",end-start) |
||||
|
|
||||
|
return radky_vysledkovky |
||||
|
|
||||
|
class RadekVysledkovkyCisla(object): |
||||
|
"""Obsahuje věci, které se hodí vědět při konstruování výsledkovky. |
||||
|
Umožňuje snazší práci v templatu (lepší, než seznam).""" |
||||
|
|
||||
|
def __init__(self, poradi, resitel, body_problemy_sezn, |
||||
|
body_cislo, body_rocnik, body_odjakziva, rok, body_podproblemy, body_podproblemy_iter): |
||||
|
self.resitel = resitel |
||||
|
self.rocnik_resitele = resitel.rocnik(rok) |
||||
|
self.body_cislo = body_cislo |
||||
|
self.body_rocnik = body_rocnik |
||||
|
self.body_celkem_odjakziva = body_odjakziva |
||||
|
self.poradi = poradi |
||||
|
self.body_problemy_sezn = body_problemy_sezn |
||||
|
self.titul = resitel.get_titul(body_odjakziva) |
||||
|
self.body_podproblemy = body_podproblemy |
||||
|
self.body_podproblemy_iter = body_podproblemy_iter # TODELETE |
||||
|
|
||||
|
|
||||
|
def pricti_body(slovnik, resitel, body): |
||||
|
""" Přiřazuje danému řešiteli body do slovníku. """ |
||||
|
# testujeme na None (""), pokud je to první řešení |
||||
|
# daného řešitele, předěláme na 0 |
||||
|
# (v dalším kroku přičteme reálný počet bodů), |
||||
|
# rozlišujeme tím mezi 0 a neodevzdaným řešením |
||||
|
if slovnik[resitel.id] == "": |
||||
|
slovnik[resitel.id] = 0 |
||||
|
|
||||
|
slovnik[resitel.id] += body |
||||
|
|
||||
|
def secti_body_za_rocnik(za, aktivni_resitele): |
||||
|
""" Spočítá body za ročník (celý nebo do daného čísla), |
||||
|
setřídí je sestupně a vrátí jako seznam. |
||||
|
Parametry: |
||||
|
za (typu Rocnik nebo Cislo) spočítá za ročník, nebo za ročník až do |
||||
|
daného čísla |
||||
|
""" |
||||
|
# spočítáme všem řešitelům jejich body za ročník (False => ne odjakživa) |
||||
|
resitel_rocnikbody_slov = body_resitelu(aktivni_resitele, za, False) |
||||
|
# zeptáme se na dvojice (řešitel, body) za ročník a setřídíme sestupně |
||||
|
resitel_rocnikbody_sezn = sorted(resitel_rocnikbody_slov.items(), |
||||
|
key = lambda x: x[1], reverse = True) |
||||
|
return resitel_rocnikbody_sezn |
||||
|
|
||||
|
def secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy=None): |
||||
|
""" Spočítá u řešitelů body za číslo a za jednotlivé hlavní problémy (témata).""" |
||||
|
# TODO setřídit hlavní problémy čísla podle id, ať jsou ve stejném pořadí pokaždé |
||||
|
# pro každý hlavní problém zavedeme slovník s body za daný hlavní problém |
||||
|
# pro jednotlivé řešitele (slovník slovníků hlavních problémů) |
||||
|
|
||||
|
print("Scitam cislo",cislo) |
||||
|
|
||||
|
if hlavni_problemy is None: |
||||
|
hlavni_problemy = hlavni_problemy_f(problemy_cisla(cislo)) |
||||
|
|
||||
|
def ne_clanek_ne_konfera(problem): |
||||
|
inst = problem.get_real_instance() |
||||
|
return not(isinstance(inst, m.Clanek) or isinstance(inst, m.Konfera)) |
||||
|
|
||||
|
temata_a_spol = list(filter(ne_clanek_ne_konfera, hlavni_problemy)) |
||||
|
|
||||
|
hlavni_problemy_slovnik = {} |
||||
|
for hp in temata_a_spol: |
||||
|
hlavni_problemy_slovnik[hp.id] = {} |
||||
|
|
||||
|
hlavni_problemy_slovnik[-1] = {} |
||||
|
|
||||
|
# zakládání prázdných záznamů pro řešitele |
||||
|
cislobody = {} |
||||
|
for ar in aktivni_resitele: |
||||
|
# řešitele převedeme na řetězec pomocí unikátního id |
||||
|
cislobody[ar.id] = "" |
||||
|
for hp in temata_a_spol: |
||||
|
slovnik = hlavni_problemy_slovnik[hp.id] |
||||
|
slovnik[ar.id] = "" |
||||
|
|
||||
|
hlavni_problemy_slovnik[-1][ar.id] = "" |
||||
|
|
||||
|
# vezmeme všechna řešení s body do daného čísla |
||||
|
reseni_do_cisla = m.Reseni.objects.prefetch_related('problem', 'resitele', |
||||
|
'hodnoceni_set').filter(hodnoceni__cislo_body=cislo) |
||||
|
|
||||
|
start = time.time() |
||||
|
# projdeme všechna řešení do čísla a přičteme body každému řešiteli do celkových |
||||
|
# bodů i do bodů za problém |
||||
|
for reseni in reseni_do_cisla: |
||||
|
|
||||
|
# řešení může řešit více problémů |
||||
|
for prob in list(reseni.problem.all()): |
||||
|
nadproblem = hlavni_problem(prob) |
||||
|
if ne_clanek_ne_konfera(nadproblem): |
||||
|
nadproblem_slovnik = hlavni_problemy_slovnik[nadproblem.id] |
||||
|
else: |
||||
|
nadproblem_slovnik = hlavni_problemy_slovnik[-1] |
||||
|
|
||||
|
# a mít více hodnocení |
||||
|
for hodn in list(reseni.hodnoceni_set.all()): |
||||
|
body = hodn.body |
||||
|
|
||||
|
# a mít více řešitelů |
||||
|
for resitel in list(reseni.resitele.all()): |
||||
|
if resitel not in aktivni_resitele: |
||||
|
print("Skipping {}".format(resitel.id)) |
||||
|
continue |
||||
|
pricti_body(cislobody, resitel, body) |
||||
|
pricti_body(nadproblem_slovnik, resitel, body) |
||||
|
end = time.time() |
||||
|
print("for cykly:", end-start) |
||||
|
return hlavni_problemy_slovnik, cislobody |
||||
|
|
||||
|
|
||||
|
def secti_body_za_cislo_podle_temat(cislo, aktivni_resitele, podproblemy=None, temata=None): |
||||
|
""" Spočítá u řešitelů body za číslo za úlohy v jednotlivých hlavních problémech (témata).""" |
||||
|
if temata is None: |
||||
|
temata = hlavni_problemy_f(problemy_cisla(cislo)) |
||||
|
|
||||
|
if podproblemy is None: |
||||
|
podproblemy_v_cislu(cislo, hlavni_problemy=temata) |
||||
|
|
||||
|
body_slovnik = {} |
||||
|
for tema in temata: |
||||
|
body_slovnik[tema.id] = {} |
||||
|
for problem in podproblemy[tema.id]: |
||||
|
body_slovnik[tema.id][problem.id] = {} |
||||
|
body_slovnik[-1] = {} |
||||
|
for problem in podproblemy[-1]: |
||||
|
body_slovnik[-1][problem.id] = {} |
||||
|
|
||||
|
# zakládání prázdných záznamů pro řešitele |
||||
|
for ar in aktivni_resitele: |
||||
|
for tema in temata: |
||||
|
for problem in podproblemy[tema.id]: |
||||
|
body_slovnik[tema.id][problem.id][ar.id] = "" |
||||
|
|
||||
|
for problem in podproblemy[-1]: |
||||
|
body_slovnik[-1][problem.id][ar.id] = "" |
||||
|
|
||||
|
temata = set(t.id for t in temata) |
||||
|
|
||||
|
# vezmeme všechna řešení s body do daného čísla |
||||
|
reseni_do_cisla = m.Reseni.objects.prefetch_related('problem', 'resitele', |
||||
|
'hodnoceni_set').filter(hodnoceni__cislo_body=cislo) |
||||
|
|
||||
|
# projdeme všechna řešení do čísla a přičteme body každému řešiteli do celkových |
||||
|
# bodů i do bodů za problém |
||||
|
for reseni in reseni_do_cisla: |
||||
|
|
||||
|
# řešení může řešit více problémů |
||||
|
for prob in reseni.problem.all(): |
||||
|
nadproblem = hlavni_problem(prob) |
||||
|
if nadproblem.id in temata: |
||||
|
nadproblem_slovnik = body_slovnik[nadproblem.id] |
||||
|
else: |
||||
|
nadproblem_slovnik = body_slovnik[-1] |
||||
|
|
||||
|
problem_slovnik = nadproblem_slovnik[prob.id] |
||||
|
|
||||
|
# a mít více hodnocení |
||||
|
for hodn in reseni.hodnoceni_set.all(): |
||||
|
body = hodn.body |
||||
|
|
||||
|
# a mít více řešitelů |
||||
|
for resitel in reseni.resitele.all(): |
||||
|
if resitel not in aktivni_resitele: |
||||
|
print("Skipping {}".format(resitel.id)) |
||||
|
continue |
||||
|
pricti_body(problem_slovnik, resitel, body) |
||||
|
return body_slovnik |
||||
|
|
||||
|
|
||||
|
# TODELETE |
||||
|
class FixedIterator: |
||||
|
def next(self): |
||||
|
return self.niter.__next__() |
||||
|
|
||||
|
def __init__(self, niter): |
||||
|
self.niter = niter |
||||
|
# TODELETE |
||||
|
|
||||
|
|
||||
|
def vysledkovka_cisla(cislo, context=None): |
||||
|
if context is None: |
||||
|
context = {} |
||||
|
problemy = problemy_cisla(cislo) |
||||
|
hlavni_problemy = hlavni_problemy_f(problemy) |
||||
|
## TODO možná chytřeji vybírat aktivní řešitele |
||||
|
# aktivní řešitelé - chceme letos něco poslal, TODO později vyfiltrujeme ty, kdo mají |
||||
|
# u alespoň jedné hodnoty něco jiného než NULL |
||||
|
aktivni_resitele = list(aktivniResitele(cislo)) |
||||
|
|
||||
|
# získáme body za číslo |
||||
|
hlavni_problemy_slovnik, cislobody = secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy) |
||||
|
|
||||
|
# získáme body za ročník, seznam obsahuje dvojice (řešitel_id, body) setřízené sestupně |
||||
|
resitel_rocnikbody_sezn = secti_body_za_rocnik(cislo, aktivni_resitele) |
||||
|
|
||||
|
# získáme body odjakživa |
||||
|
resitel_odjakzivabody_slov = body_resitelu(aktivni_resitele, cislo) |
||||
|
|
||||
|
# řešitelé setřídění podle bodů za číslo sestupně |
||||
|
setrizeni_resitele_id = [dvojice[0] for dvojice in resitel_rocnikbody_sezn] |
||||
|
|
||||
|
# spočítáme pořadí řešitelů |
||||
|
setrizeni_resitele_body = [dvojice[1] for dvojice in resitel_rocnikbody_sezn] |
||||
|
poradi = sloupec_s_poradim(setrizeni_resitele_body) |
||||
|
|
||||
|
# vytvoříme jednotlivé sloupce výsledkovky |
||||
|
radky_vysledkovky = [] |
||||
|
i = 0 |
||||
|
|
||||
|
def ne_clanek_ne_konfera(problem): |
||||
|
|
||||
|
return not(isinstance(problem.get_real_instance(), m.Clanek) or isinstance(problem.get_real_instance(), m.Konfera)) |
||||
|
|
||||
|
temata_a_spol = list(filter(ne_clanek_ne_konfera, hlavni_problemy)) |
||||
|
|
||||
|
# získáme body u jednotlivých témat |
||||
|
podproblemy = podproblemy_v_cislu(cislo, problemy, temata_a_spol) |
||||
|
problemy_slovnik = secti_body_za_cislo_podle_temat(cislo, aktivni_resitele, podproblemy, temata_a_spol) |
||||
|
|
||||
|
# def not_empty(value): |
||||
|
# return value != '' |
||||
|
# |
||||
|
# je_nejake_ostatni = any(filter(not_empty, hlavni_problemy_slovnik[-1].values())) > 0 |
||||
|
|
||||
|
je_nejake_ostatni = len(hlavni_problemy) - len(temata_a_spol) > 0 |
||||
|
|
||||
|
setrizeni_resitele_slovnik = {} |
||||
|
setrizeni_resitele = m.Resitel.objects.filter(id__in=setrizeni_resitele_id).select_related('osoba') |
||||
|
for r in setrizeni_resitele: |
||||
|
setrizeni_resitele_slovnik[r.id] = r |
||||
|
|
||||
|
for ar_id in setrizeni_resitele_id: |
||||
|
# získáme seznam bodů za problémy pro daného řešitele |
||||
|
body_problemy = [] |
||||
|
body_podproblemy = [] |
||||
|
for hp in temata_a_spol: |
||||
|
body_problemy.append(hlavni_problemy_slovnik[hp.id][ar_id]) |
||||
|
body_podproblemy.append([problemy_slovnik[hp.id][it.id][ar_id] for it in podproblemy[hp.id]]) |
||||
|
if je_nejake_ostatni: |
||||
|
body_problemy.append(hlavni_problemy_slovnik[-1][ar_id]) |
||||
|
body_podproblemy.append([problemy_slovnik[-1][it.id][ar_id] for it in podproblemy[-1]]) |
||||
|
# vytáhneme informace pro daného řešitele |
||||
|
radek = RadekVysledkovkyCisla( |
||||
|
poradi[i], # pořadí |
||||
|
setrizeni_resitele_slovnik[ar_id], # řešitel (z id) |
||||
|
body_problemy, # seznam bodů za hlavní problémy čísla |
||||
|
cislobody[ar_id], # body za číslo |
||||
|
setrizeni_resitele_body[i], # body za ročník (spočítané výše s pořadím) |
||||
|
resitel_odjakzivabody_slov[ar_id], # body odjakživa |
||||
|
cislo.rocnik, |
||||
|
body_podproblemy, # body všech podproblémů |
||||
|
FixedIterator(body_podproblemy.__iter__()) # TODELETE |
||||
|
) # ročník semináře pro zjištění ročníku řešitele |
||||
|
radky_vysledkovky.append(radek) |
||||
|
i += 1 |
||||
|
|
||||
|
# vytahané informace předáváme do kontextu |
||||
|
context['cislo'] = cislo |
||||
|
context['radky_vysledkovky'] = radky_vysledkovky |
||||
|
context['problemy'] = temata_a_spol |
||||
|
context['ostatni'] = je_nejake_ostatni |
||||
|
pt = [podproblemy[it.id] for it in temata_a_spol]+[podproblemy[-1]] |
||||
|
context['podproblemy'] = pt |
||||
|
context['podproblemy_iter'] = FixedIterator(pt.__iter__()) # TODELETE |
||||
|
#context['v_cisle_zadane'] = TODO |
||||
|
#context['resene_problemy'] = resene_problemy |
||||
|
return context |
Loading…
Reference in new issue