#101 Team sharing form
* adds team sharing field to share form * splits sharing logic into user based and teams based * adds TeamAdmin for admin backend * adds validity check on Team name -> only unused names shall be valid
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
from django.contrib import admin
|
||||
|
||||
from user.models import UserNotification, UserActionLogEntry, User
|
||||
from user.models import UserNotification, UserActionLogEntry, User, Team
|
||||
|
||||
|
||||
class UserNotificationAdmin(admin.ModelAdmin):
|
||||
@@ -64,7 +64,20 @@ class UserActionLogEntryAdmin(admin.ModelAdmin):
|
||||
]
|
||||
|
||||
|
||||
class TeamAdmin(admin.ModelAdmin):
|
||||
list_display = [
|
||||
"name",
|
||||
"description",
|
||||
"admin",
|
||||
]
|
||||
search_fields = [
|
||||
"name",
|
||||
"description",
|
||||
]
|
||||
|
||||
|
||||
admin.site.register(User, UserAdmin)
|
||||
admin.site.register(Team, TeamAdmin)
|
||||
|
||||
# Outcommented for a cleaner admin backend on production
|
||||
#admin.site.register(UserNotification, UserNotificationAdmin)
|
||||
|
||||
@@ -206,6 +206,25 @@ class NewTeamModalForm(BaseModalForm):
|
||||
self.action_url = reverse("user:team-new")
|
||||
self.cancel_redirect = reverse("user:team-index")
|
||||
|
||||
def _is_name_valid(self):
|
||||
name = self.cleaned_data.get("name", None)
|
||||
teams_with_same_name = Team.objects.filter(
|
||||
name=name
|
||||
)
|
||||
name_valid = not teams_with_same_name.exists()
|
||||
if not name_valid:
|
||||
self.add_error(
|
||||
"name",
|
||||
_("Name already taken. Try another.")
|
||||
)
|
||||
|
||||
return name_valid
|
||||
|
||||
def is_valid(self):
|
||||
super_valid = super().is_valid()
|
||||
name_valid = self._is_name_valid()
|
||||
return super_valid and name_valid
|
||||
|
||||
def save(self):
|
||||
with transaction.atomic():
|
||||
team = Team.objects.create(
|
||||
@@ -246,6 +265,22 @@ class EditTeamModalForm(NewTeamModalForm):
|
||||
|
||||
return _is_valid
|
||||
|
||||
def _is_name_valid(self):
|
||||
name = self.cleaned_data.get("name", None)
|
||||
teams_with_same_name = Team.objects.filter(
|
||||
name=name
|
||||
).exclude(
|
||||
id=self.instance.id
|
||||
)
|
||||
name_valid = not teams_with_same_name.exists()
|
||||
if not name_valid:
|
||||
self.add_error(
|
||||
"name",
|
||||
_("Name already taken. Try another.")
|
||||
)
|
||||
|
||||
return name_valid
|
||||
|
||||
def is_valid(self):
|
||||
super_valid = super().is_valid()
|
||||
admin_valid = self.__is_admin_valid()
|
||||
|
||||
Reference in New Issue
Block a user