set settings
This commit is contained in:
parent
a12a97b9aa
commit
aee08c937a
@ -1,3 +1,5 @@
|
|||||||
|
from functools import cached_property
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
@ -21,6 +23,6 @@ class Set(models.Model):
|
|||||||
and (self.end_time is None or timezone.now() <= self.end_time)
|
and (self.end_time is None or timezone.now() <= self.end_time)
|
||||||
)
|
)
|
||||||
|
|
||||||
@property
|
@cached_property
|
||||||
def tasks(self):
|
def tasks(self):
|
||||||
return Task.objects.filter(settasks__set=self).order_by("settasks__name")
|
return Task.objects.filter(settasks__set=self).order_by("settasks__name")
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
from django.db.models import Q
|
||||||
|
|
||||||
|
from Main.models import SetTask, Task
|
||||||
from SprintLib.BaseView import BaseView
|
from SprintLib.BaseView import BaseView
|
||||||
|
|
||||||
|
|
||||||
@ -5,3 +8,29 @@ class SetSettingsView(BaseView):
|
|||||||
required_login = True
|
required_login = True
|
||||||
view_file = "set_settings.html"
|
view_file = "set_settings.html"
|
||||||
endpoint = "admin/set"
|
endpoint = "admin/set"
|
||||||
|
|
||||||
|
def get(self):
|
||||||
|
self.context['settasks'] = SetTask.objects.filter(set=self.entities.set).order_by('name')
|
||||||
|
self.context['tasks'] = Task.objects.filter(Q(public=True) | Q(creator=self.request.user) | Q(editors__in=self.request.user.username)).order_by('name')
|
||||||
|
|
||||||
|
def post_save(self):
|
||||||
|
for key, value in self.request.POST.items():
|
||||||
|
if key.startswith('settask_'):
|
||||||
|
st = SetTask.objects.get(id=key.split('_')[1])
|
||||||
|
st.name = value
|
||||||
|
st.save()
|
||||||
|
self.entities.set.name = self.request.POST['name']
|
||||||
|
self.entities.set.save()
|
||||||
|
return '/admin/set?set_id=' + str(self.entities.set.id)
|
||||||
|
|
||||||
|
def post_edit(self):
|
||||||
|
current_tasks = self.entities.set.tasks
|
||||||
|
task_ids = [task.id for task in current_tasks]
|
||||||
|
for key, value in self.request.POST.items():
|
||||||
|
if key.startswith('task_'):
|
||||||
|
i = int(key.split('_')[1])
|
||||||
|
if i not in task_ids:
|
||||||
|
SetTask.objects.create(set=self.entities.set, task_id=i)
|
||||||
|
to_delete = [i for i in task_ids if 'task_' + str(i) not in self.request.POST]
|
||||||
|
SetTask.objects.filter(task_id__in=to_delete).delete()
|
||||||
|
return '/admin/set?set_id=' + str(self.entities.set.id)
|
||||||
|
11
demo.py
11
demo.py
@ -1,11 +0,0 @@
|
|||||||
from random import randrange
|
|
||||||
'''
|
|
||||||
x - y = 21
|
|
||||||
x + 6 = (y + 6) * 5
|
|
||||||
|
|
||||||
x = 21 + y
|
|
||||||
|
|
||||||
27 + y = 5y + 30
|
|
||||||
4y = -3
|
|
||||||
y = -3/4
|
|
||||||
'''
|
|
@ -1,41 +0,0 @@
|
|||||||
version: "3"
|
|
||||||
|
|
||||||
|
|
||||||
services:
|
|
||||||
|
|
||||||
postgres:
|
|
||||||
restart: always
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: dockerfiles/postgres/Dockerfile
|
|
||||||
environment:
|
|
||||||
POSTGRES_USER: postgres
|
|
||||||
POSTGRES_PASSWORD: password
|
|
||||||
POSTGRES_DB: sprint
|
|
||||||
volumes:
|
|
||||||
- ./postgres:/var/lib/postgresql/data
|
|
||||||
ports:
|
|
||||||
- "5432:5432"
|
|
||||||
|
|
||||||
rabbitmq:
|
|
||||||
restart: always
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: dockerfiles/rabbitmq/Dockerfile
|
|
||||||
ports:
|
|
||||||
- "15672:15672"
|
|
||||||
- "5672:5672"
|
|
||||||
|
|
||||||
worker:
|
|
||||||
restart: always
|
|
||||||
image: sprint
|
|
||||||
privileged: true
|
|
||||||
command: scripts/create_worker.sh
|
|
||||||
environment:
|
|
||||||
SOLUTIONS_ROOT_EXTERNAL: "data/solutions"
|
|
||||||
depends_on:
|
|
||||||
- rabbitmq
|
|
||||||
- postgres
|
|
||||||
volumes:
|
|
||||||
- ./data:/usr/src/app/data
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
|
10
templates/set.html
Normal file
10
templates/set.html
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Title</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -3,9 +3,45 @@
|
|||||||
{% block title %}{{ set.name }}{% endblock %}
|
{% block title %}{{ set.name }}{% endblock %}
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
<h2>{{ set.name }}</h2>
|
<form method="POST">
|
||||||
|
{% csrf_token %}
|
||||||
|
<input type="hidden" name="action" value="save">
|
||||||
|
<h2><input name="name" value="{{ set.name }}"></h2>
|
||||||
<h4>Таски</h4>
|
<h4>Таски</h4>
|
||||||
{% for settask in set.settasks.all %}
|
{% for settask in settasks %}
|
||||||
<input name="settask_{{ settask.id }}" value="{{ settask.name }}"> {{ settask.task.name }}<br>
|
<input name="settask_{{ settask.id }}" style="width: 30px;" value="{{ settask.name }}"> {% if settask.task.creator == user or user.username in settask.task.editors %}<a href="/admin/task?task_id={{ settask.task.id }}">{{ settask.task.name }}</a>{% else %}{{ settask.task.name }}{% endif %}<br>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
<button class="btn btn-light" type="submit" style="margin-top: 20px;"><i class="fa fa-save"></i> Установить</button> <button type="button" class="btn btn-primary" style="margin-top: 20px;" data-toggle="modal" data-target="#example"><i class="fa fa-pencil"></i> Редактировать</button>
|
||||||
|
</form>
|
||||||
|
<div class="modal fade" id="example" tabindex="-1" role="dialog" aria-labelledby="exampleModalLongTitle" 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="exampleModalLongTitle">Редактировать набор задач</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="edit">
|
||||||
|
{% for task in tasks %}
|
||||||
|
<input type="checkbox" {% if task in set.tasks %}checked{% endif %} name="task_{{ task.id }}"> <a href="/task?task_id={{ task.id }}">{{ task.name }}</a><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 %}
|
{% endblock %}
|
31
web.js
31
web.js
@ -1,31 +0,0 @@
|
|||||||
function send_code() {
|
|
||||||
if (document.getElementById('state').value == 'code') {
|
|
||||||
$.ajax({
|
|
||||||
type: "POST",
|
|
||||||
url: '/send_code',
|
|
||||||
data: {"username": document.getElementById('username').value, "csrfmiddlewaretoken": document.getElementsByName('csrfmiddlewaretoken')[0].value, "action": "create"},
|
|
||||||
success: function(data) {
|
|
||||||
if (data['success']) {
|
|
||||||
document.getElementById('code').hidden = false;
|
|
||||||
document.getElementById('enter').firstChild.data = "Вход";
|
|
||||||
document.getElementById('state').value = "verify";
|
|
||||||
} else {
|
|
||||||
const p = document.getElementById('message');
|
|
||||||
p.firstChild.data = data['message'];
|
|
||||||
}
|
|
||||||
}});
|
|
||||||
} else {
|
|
||||||
$.ajax({
|
|
||||||
type: "POST",
|
|
||||||
url: '/send_code',
|
|
||||||
data: {"username": document.getElementById('username').value, "code": document.getElementById('code').value, "csrfmiddlewaretoken": document.getElementsByName('csrfmiddlewaretoken')[0].value, "action": "check"},
|
|
||||||
success: function(data) {
|
|
||||||
if (data['success']) {
|
|
||||||
window.location.href = '/';
|
|
||||||
} else {
|
|
||||||
p.firstChild.data = data['message'];
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user