This commit is contained in:
Egor Matveev
2022-02-11 22:15:48 +03:00
parent 1efa48aff3
commit e721b9b5ec
7 changed files with 90 additions and 4 deletions

View File

@@ -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

View File

@@ -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),
),
]

View File

@@ -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:

View File

@@ -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)
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)

View File

@@ -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(