sprint/Main/views/GroupView.py
Egor Matveev d45b5e9115 move
2022-03-18 22:43:13 +03:00

64 lines
2.2 KiB
Python

from django.contrib.auth.models import User
from Main.models import Group
from SprintLib.BaseView import BaseView, AccessError
from SprintLib.utils import generate_token
class GroupView(BaseView):
required_login = True
endpoint = 'group'
view_file = 'group.html'
owner = False
group: Group
def pre_handle(self):
self.owner = self.group.creator == self.request.user or self.request.user.username in self.group.editors
def get(self):
if self.owner:
self.context['possible_users'] = set(self.group.users.all()) | set(self.request.user.userinfo.verified_friends)
def post_sets_edit(self):
if not self.owner:
raise AccessError()
current_sets = self.group.sets.all()
set_ids = [set.id for set in current_sets]
for key, value in self.request.POST.items():
if key.startswith("set_"):
i = int(key.split("_")[1])
if i not in set_ids:
self.group.sets.add(i)
to_delete = [i for i in set_ids if "set_" + str(i) not in self.request.POST]
for t in to_delete:
self.group.sets.remove(t)
return "/group?group_id=" + str(self.group.id)
def post_users_edit(self):
if not self.owner:
raise AccessError()
current_users = self.group.users.all()
users_ids = [user.id for user in current_users]
for key, value in self.request.POST.items():
if key.startswith("user_"):
i = int(key.split("_")[1])
if i not in users_ids:
self.group.users.add(i)
to_delete = [i for i in users_ids if "user_" + str(i) not in self.request.POST]
for t in to_delete:
self.group.users.remove(t)
return "/group?group_id=" + str(self.group.id)
def link_action(self, value):
if not self.owner:
raise AccessError()
self.group.access_token = value
self.group.save()
return "/group?group_id=" + str(self.group.id)
def post_open_link(self):
return self.link_action(generate_token())
def post_close_link(self):
return self.link_action(None)