Skip to content
Snippets Groups Projects
Commit 8204a926 authored by Tomáš Valenta's avatar Tomáš Valenta
Browse files

Merge branch 'test' of gitlab.pirati.cz:to/ucebnice into test

parents 46af25d6 0c6bec13
No related branches found
No related tags found
No related merge requests found
Pipeline #12989 passed
...@@ -3,5 +3,7 @@ __pycache__/ ...@@ -3,5 +3,7 @@ __pycache__/
webpack-stats.json webpack-stats.json
staticfiles staticfiles
node_modules node_modules
shared/static/shared/*.{js,css,txt} shared/static/shared/*.js
shared/static/shared/*.css
shared/static/shared/*.txt
media/* media/*
bind = "0.0.0.0:8000"
accesslog = "-"
workers = 1
max_requests = 1000
max_requests_jitter = 10
timeout = 60
graceful_timeout = 60
# Generated by Django 4.1.4 on 2023-05-09 19:17 # Generated by Django 4.1.4 on 2023-05-09 19:17
from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('auth', '0012_alter_user_first_name_max_length'), ("auth", "0012_alter_user_first_name_max_length"),
('lectures', '0014_alter_lecture_options_alter_lecturelector_username'), ("lectures", "0014_alter_lecture_options_alter_lecturelector_username"),
] ]
operations = [ operations = [
migrations.AlterModelOptions( migrations.AlterModelOptions(
name='lecture', name="lecture",
options={'ordering': ('-timestamp', '-name'), 'permissions': [('can_edit_lecture_settings', 'Can edit Školení settings')], 'verbose_name': 'Školení', 'verbose_name_plural': 'Školení'}, options={
"ordering": ("-timestamp", "-name"),
"permissions": [
("can_edit_lecture_settings", "Can edit Školení settings")
],
"verbose_name": "Školení",
"verbose_name_plural": "Školení",
},
), ),
migrations.AlterField( migrations.AlterField(
model_name='lecture', model_name="lecture",
name='type', name="type",
field=models.CharField(choices=[('recommended', 'Doporučené školení'), ('optional', 'Volitelné školení')], max_length=11, verbose_name='Typ'), field=models.CharField(
choices=[
("recommended", "Doporučené školení"),
("optional", "Volitelné školení"),
],
max_length=11,
verbose_name="Typ",
),
), ),
migrations.AlterField( migrations.AlterField(
model_name='lecturegroup', model_name="lecturegroup",
name='user_groups', name="user_groups",
field=models.ManyToManyField(blank=True, help_text='Pokud žádná nedefinuješ, školení ve skupině jsou dostupné všem.', to='auth.group', verbose_name='Uživatelské skupiny'), field=models.ManyToManyField(
blank=True,
help_text="Pokud žádná nedefinuješ, školení ve skupině jsou dostupné všem.",
to="auth.group",
verbose_name="Uživatelské skupiny",
),
), ),
migrations.AlterField( migrations.AlterField(
model_name='lecturelector', model_name="lecturelector",
name='lecture', name="lecture",
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='lectors', to='lectures.lecture', verbose_name='Školení'), field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="lectors",
to="lectures.lecture",
verbose_name="Školení",
),
), ),
migrations.AlterField( migrations.AlterField(
model_name='lecturematerial', model_name="lecturematerial",
name='lecture', name="lecture",
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='materials', to='lectures.lecture', verbose_name='Školení'), field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="materials",
to="lectures.lecture",
verbose_name="Školení",
),
), ),
migrations.AlterField( migrations.AlterField(
model_name='lecturerecording', model_name="lecturerecording",
name='lecture', name="lecture",
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='recordings', to='lectures.lecture', verbose_name='Školení'), field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="recordings",
to="lectures.lecture",
verbose_name="Školení",
),
), ),
] ]
# Generated by Django 4.1.4 on 2023-05-25 16:21
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("lectures", "0015_alter_lecture_options_alter_lecture_type_and_more"),
]
operations = [
migrations.AlterField(
model_name="lecture",
name="groups",
field=models.ManyToManyField(
blank=True,
help_text="Pokud nevybereš žádné skupiny, školení je dostupné všem.",
related_name="lectures",
to="lectures.lecturegroup",
verbose_name="Výukové skupiny",
),
),
]
...@@ -58,6 +58,7 @@ class Lecture(NameStrMixin, models.Model): ...@@ -58,6 +58,7 @@ class Lecture(NameStrMixin, models.Model):
blank=True, blank=True,
related_name="lectures", related_name="lectures",
verbose_name="Výukové skupiny", verbose_name="Výukové skupiny",
help_text="Pokud nevybereš žádné skupiny, školení je dostupné všem.",
) )
type = models.CharField( type = models.CharField(
...@@ -178,15 +179,26 @@ class LectureMaterial(NameStrMixin, models.Model): ...@@ -178,15 +179,26 @@ class LectureMaterial(NameStrMixin, models.Model):
) )
def clean(self) -> None: def clean(self) -> None:
BOTH_FILE_AND_LINK_DEFINED_ERROR = ( BOTH_FILE_AND_LINK_DEFINED = (
"Definuj prosím pouze odkaz, nebo soubor. Nemůžeš mít oboje najednou." "Definuj prosím pouze odkaz, nebo soubor. Nemůžeš mít oboje najednou."
) )
NEITHER_FILE_NOR_LINK_DEFINED = (
"Definuj prosím odkaz, nebo soubor. Aspoň jedna hodnota musí být vyplněna."
)
if not self.file and not self.link:
raise ValidationError(
{
"link": NEITHER_FILE_NOR_LINK_DEFINED,
"file": NEITHER_FILE_NOR_LINK_DEFINED,
}
)
if self.file and self.link: if self.file and self.link:
raise ValidationError( raise ValidationError(
{ {
"link": BOTH_FILE_AND_LINK_DEFINED_ERROR, "link": BOTH_FILE_AND_LINK_DEFINED,
"file": BOTH_FILE_AND_LINK_DEFINED_ERROR, "file": BOTH_FILE_AND_LINK_DEFINED,
} }
) )
......
...@@ -27,17 +27,17 @@ ...@@ -27,17 +27,17 @@
<div class="switch overflow-x-auto"> <div class="switch overflow-x-auto">
<a <a
@click="toggleView('current_lectures')" @click="toggleView('current_lectures')"
class="switch__item" class="switch__item whitespace-nowrap"
:class="{'switch__item--active': isCurrentView('current_lectures')}" :class="{'switch__item--active': isCurrentView('current_lectures')}"
>Aktuálně</a> >Aktuálně</a>
<a <a
@click="toggleView('timeline')" @click="toggleView('timeline')"
class="switch__item" class="switch__item whitespace-nowrap"
:class="{'switch__item--active': isCurrentView('timeline')}" :class="{'switch__item--active': isCurrentView('timeline')}"
>Časová osa</a> >Časová osa</a>
<a <a
@click="toggleView('recordings')" @click="toggleView('recordings')"
class="switch__item" class="switch__item whitespace-nowrap"
:class="{'switch__item--active': isCurrentView('recordings')}" :class="{'switch__item--active': isCurrentView('recordings')}"
>Záznamy</a> >Záznamy</a>
</div> </div>
......
# import calendar # import calendar
import json import json
#import locale
from datetime import datetime from datetime import datetime
from itertools import chain from itertools import chain
...@@ -15,6 +13,8 @@ from guardian.shortcuts import get_objects_for_user ...@@ -15,6 +13,8 @@ from guardian.shortcuts import get_objects_for_user
from .models import Lecture, LectureGroup from .models import Lecture, LectureGroup
# import locale
def get_base_context(request) -> dict: def get_base_context(request) -> dict:
return { return {
...@@ -69,7 +69,7 @@ def view_group_lectures(request, group_id: int): ...@@ -69,7 +69,7 @@ def view_group_lectures(request, group_id: int):
.filter( .filter(
groups=group, groups=group,
timestamp__gte=timestamp_starting_separator, timestamp__gte=timestamp_starting_separator,
timestamp__lte=timestamp_ending_separator timestamp__lte=timestamp_ending_separator,
) )
.all() .all()
) )
...@@ -81,12 +81,9 @@ def view_group_lectures(request, group_id: int): ...@@ -81,12 +81,9 @@ def view_group_lectures(request, group_id: int):
current_lectures, current_lectures,
( (
get_objects_for_user(request.user, "lectures.view_lecture") get_objects_for_user(request.user, "lectures.view_lecture")
.filter( .filter(groups=group, timestamp__gte=timestamp_ending_separator)
groups=group,
timestamp__gte=timestamp_ending_separator
)
.all() .all()
) ),
) )
) )
...@@ -127,17 +124,17 @@ def view_group_lectures(request, group_id: int): ...@@ -127,17 +124,17 @@ def view_group_lectures(request, group_id: int):
if lecture.timestamp.year not in per_month_lectures: if lecture.timestamp.year not in per_month_lectures:
per_month_lectures[lecture.timestamp.year] = { per_month_lectures[lecture.timestamp.year] = {
MONTH_NAMES[month]: [] MONTH_NAMES[month]: [] for month in range(1, 12 + 1)
for month in range(1, 12 + 1)
} }
if current_year not in per_month_lectures: if current_year not in per_month_lectures:
per_month_lectures[current_year] = { per_month_lectures[current_year] = {
MONTH_NAMES[month]: [] MONTH_NAMES[month]: [] for month in range(1, 12 + 1)
for month in range(1, 12 + 1)
} }
per_month_lectures[lecture.timestamp.year][MONTH_NAMES[lecture.timestamp.month]].append(lecture) per_month_lectures[lecture.timestamp.year][
MONTH_NAMES[lecture.timestamp.month]
].append(lecture)
# locale.setlocale( # locale.setlocale(
# locale.LC_ALL, # locale.LC_ALL,
...@@ -175,13 +172,10 @@ def view_lecture(request, lecture_id: int): ...@@ -175,13 +172,10 @@ def view_lecture(request, lecture_id: int):
related_group_id = request.GET.get("related_group_id") related_group_id = request.GET.get("related_group_id")
if ( if related_group_id is not None and not (
related_group_id is not None
and not (
get_objects_for_user(request.user, "lectures.view_lecture") get_objects_for_user(request.user, "lectures.view_lecture")
.filter(id=related_group_id) .filter(id=related_group_id)
.exists() .exists()
)
): ):
# Ignore the wrong part of the URL and move on, don't raise exceptions # Ignore the wrong part of the URL and move on, don't raise exceptions
# just because of the related_group_id being wrong. # just because of the related_group_id being wrong.
......
run.sh 100644 → 100755
File mode changed from 100644 to 100755
...@@ -4,16 +4,20 @@ from django.db import migrations, models ...@@ -4,16 +4,20 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('lectures', '0015_alter_lecture_options_alter_lecture_type_and_more'), ("lectures", "0015_alter_lecture_options_alter_lecture_type_and_more"),
('users', '0007_alter_user_rsvp_lectures'), ("users", "0007_alter_user_rsvp_lectures"),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='user', model_name="user",
name='rsvp_lectures', name="rsvp_lectures",
field=models.ManyToManyField(blank=True, related_name='rsvp_users', to='lectures.lecture', verbose_name='Zaregistrovaná školení'), field=models.ManyToManyField(
blank=True,
related_name="rsvp_users",
to="lectures.lecture",
verbose_name="Zaregistrovaná školení",
),
), ),
] ]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment