From e721b9b5ec640864cc4f8796bdf74fd89b2f86e7 Mon Sep 17 00:00:00 2001 From: Egor Matveev Date: Fri, 11 Feb 2022 22:15:48 +0300 Subject: [PATCH] only my --- Main/context_processors.py | 5 ++-- Main/migrations/0018_set_languages.py | 19 ++++++++++++++ Main/models/set.py | 6 +++++ Main/views/SetSettingsView.py | 17 +++++++++++- Main/views/TaskView.py | 5 ++++ templates/set.html | 5 ++++ templates/set_settings.html | 37 +++++++++++++++++++++++++++ 7 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 Main/migrations/0018_set_languages.py diff --git a/Main/context_processors.py b/Main/context_processors.py index b08cd29..0d750dc 100644 --- a/Main/context_processors.py +++ b/Main/context_processors.py @@ -1,6 +1,5 @@ from Sprint.settings import CONSTS -from SprintLib.language import languages -def attributes(request): - return {**CONSTS, "languages": sorted(languages, key=lambda x: x.name)} +def attributes(_): + return CONSTS diff --git a/Main/migrations/0018_set_languages.py b/Main/migrations/0018_set_languages.py new file mode 100644 index 0000000..620a198 --- /dev/null +++ b/Main/migrations/0018_set_languages.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.4 on 2022-02-11 18:36 + +import django.contrib.postgres.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('Main', '0017_auto_20220201_0033'), + ] + + operations = [ + migrations.AddField( + model_name='set', + name='languages', + field=django.contrib.postgres.fields.ArrayField(base_field=models.IntegerField(), default=list, size=None), + ), + ] diff --git a/Main/models/set.py b/Main/models/set.py index 312f474..aaac318 100644 --- a/Main/models/set.py +++ b/Main/models/set.py @@ -7,6 +7,7 @@ from django.db.models.functions import Length from django.utils import timezone from Main.models.task import Task +from SprintLib.language import languages class Set(models.Model): @@ -17,8 +18,13 @@ class Set(models.Model): start_time = models.DateTimeField(default=None, null=True) end_time = models.DateTimeField(default=None, null=True) editors = ArrayField(models.TextField(), default=list) + languages = ArrayField(models.IntegerField(), default=list) description = models.TextField(default='') + @property + def language_models(self): + return [languages[lang] for lang in self.languages] + @property def start_time_moscow(self): if self.start_time is None: diff --git a/Main/views/SetSettingsView.py b/Main/views/SetSettingsView.py index 463fd7e..3cacc10 100644 --- a/Main/views/SetSettingsView.py +++ b/Main/views/SetSettingsView.py @@ -6,6 +6,7 @@ from django.utils import timezone from Main.models import SetTask, Set from SprintLib.BaseView import BaseView, AccessError +from SprintLib.language import languages class SetSettingsView(BaseView): @@ -36,6 +37,7 @@ class SetSettingsView(BaseView): if self.current_set.end_time else timezone.now().strftime("%Y-%m-%dT%H:%M") ) + self.context['languages'] = languages def post_save(self): for key, value in self.request.POST.items(): @@ -97,4 +99,17 @@ class SetSettingsView(BaseView): for t in to_delete: self.entities.set.editors.remove(t) self.entities.set.save() - return "/admin/task?task_id=" + str(self.entities.task.id) \ No newline at end of file + return "/admin/set?set_id=" + str(self.entities.set.id) + + def post_languages_edit(self): + current_languages = self.entities.set.languages + for key, value in self.request.POST.items(): + if key.startswith("language_"): + i = int(key.split("_")[1]) + if i not in current_languages: + self.entities.set.languages.append(i) + to_delete = [i for i in current_languages if "language_" + str(i) not in self.request.POST] + for t in to_delete: + self.entities.set.languages.remove(t) + self.entities.set.save() + return "/admin/set?set_id=" + str(self.entities.set.id) diff --git a/Main/views/TaskView.py b/Main/views/TaskView.py index 91cc0d6..28d80ba 100644 --- a/Main/views/TaskView.py +++ b/Main/views/TaskView.py @@ -3,6 +3,7 @@ from zipfile import ZipFile from Main.models import Solution, Progress, SolutionFile from SprintLib.BaseView import BaseView, AccessError +from SprintLib.language import languages from SprintLib.queue import send_testing from SprintLib.utils import write_bytes @@ -23,9 +24,13 @@ class TaskView(BaseView): if hasattr(self.entities, 'setTask'): self.entities.add('task', self.entities.setTask.task) self.entities.add('set', self.entities.setTask.set) + self.context['languages'] = self.entities.set.language_models + for lang in self.context['languages']: + print(lang) else: if not self.entities.task.public and not self.entities.task.creator == self.request.user and not self.request.user.username in self.entities.task.editors: raise AccessError() + self.context['languages'] = languages if self.request.method == "GET": return self.solution = Solution.objects.create( diff --git a/templates/set.html b/templates/set.html index 4023390..b1a28f9 100644 --- a/templates/set.html +++ b/templates/set.html @@ -18,4 +18,9 @@ Время окончания: {% if not set.end_time %}без ограничений{% else %}{{ set.end_time_moscow }}{% endif %}
Публичность: {% if set.public %}публично{% else %}приватно{% endif %}
Открытость: {% if set.opened %}открыто{% else %}закрыто{% endif %} для просмотра и решения
+

+

Языки программирования

+ {% for language in set.language_models %} + {{ language.name }}
+ {% endfor %} {% endblock %} \ No newline at end of file diff --git a/templates/set_settings.html b/templates/set_settings.html index f2b1f51..ce45f36 100644 --- a/templates/set_settings.html +++ b/templates/set_settings.html @@ -122,4 +122,41 @@ +

+

Языки программирования

+ {% for language in set.language_models %} + {{ language.name }}
+ {% endfor %} + + {% endblock %} \ No newline at end of file