64 lines
2.2 KiB
Python
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)
|