only my
This commit is contained in:
parent
1efa48aff3
commit
e721b9b5ec
@ -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
|
||||
|
19
Main/migrations/0018_set_languages.py
Normal file
19
Main/migrations/0018_set_languages.py
Normal 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),
|
||||
),
|
||||
]
|
@ -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:
|
||||
|
@ -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)
|
||||
|
@ -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(
|
||||
|
@ -18,4 +18,9 @@
|
||||
Время окончания: <b>{% if not set.end_time %}без ограничений{% else %}{{ set.end_time_moscow }}{% endif %}</b><br>
|
||||
Публичность: <b>{% if set.public %}публично{% else %}приватно{% endif %}</b><br>
|
||||
Открытость: <b>{% if set.opened %}открыто{% else %}закрыто{% endif %} для просмотра и решения</b><br>
|
||||
<hr><hr>
|
||||
<h3>Языки программирования</h3>
|
||||
{% for language in set.language_models %}
|
||||
<img src="{{ language.logo_url }}" height="24px" width="24px"> {{ language.name }}<br>
|
||||
{% endfor %}
|
||||
{% endblock %}
|
@ -122,4 +122,41 @@
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<hr><hr>
|
||||
<h3>Языки программирования</h3>
|
||||
{% for language in set.language_models %}
|
||||
<img src="{{ language.logo_url }}" height="24px" width="24px"> {{ language.name }}<br>
|
||||
{% endfor %}
|
||||
<button type="button" class="btn btn-primary" style="margin-top: 20px;" data-toggle="modal" data-target="#exampleL"><i class="fa fa-pencil"></i> Редактировать</button>
|
||||
<div class="modal fade" id="exampleL" tabindex="-1" role="dialog" aria-labelledby="exampleModalLongTitleL" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<form method="POST">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="exampleModalLongTitleL">Редактировать языки программирования</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="action" value="languages_edit">
|
||||
{% for language in languages %}
|
||||
<input type="checkbox" {% if language.id in set.languages %}checked{% endif %} name="language_{{ language.id }}"> <img src="{{ language.logo_url }}" height="24px" width="24px"> {{ language.name }}<br>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-danger" data-dismiss="modal"><i class="fa fa-times-circle"></i> Закрыть</button>
|
||||
<button type="submit" class="btn btn-success"><i class="fa fa-check"></i> Установить</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
Loading…
Reference in New Issue
Block a user