mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-09 12:30:15 +02:00
* Add open/hidden group membership display and remove * Include requestable groups other than open * Prevent users requesting or leaving non-joinable groups I have not prevented users joining hidden groups however, as there may be some use cases where the direct link is provided for users to request access to the group. Also prevent users generating leave requests for groups they are not a member of. * Refactor Group extension models into a single OneToOne model Added group leader field * Add blankable fields * Switched to use navactive for menu highlighting * Consolidate member state checking for easier code reuse * Added support for group leaders to manage groups * Added info log when a user removes someone from a group * Add ordering to group member list
79 lines
3.3 KiB
Python
79 lines
3.3 KiB
Python
from __future__ import unicode_literals
|
|
from django.utils.encoding import python_2_unicode_compatible
|
|
from django.db import models
|
|
from django.contrib.auth.models import User
|
|
from django.contrib.auth.models import Group
|
|
from django.db.models.signals import post_save
|
|
from django.dispatch import receiver
|
|
|
|
from eveonline.models import EveCharacter
|
|
|
|
|
|
@python_2_unicode_compatible
|
|
class GroupRequest(models.Model):
|
|
status = models.CharField(max_length=254)
|
|
leave_request = models.BooleanField(default=0)
|
|
user = models.ForeignKey(User)
|
|
group = models.ForeignKey(Group)
|
|
main_char = models.ForeignKey(EveCharacter)
|
|
|
|
def __str__(self):
|
|
return self.user.username + ":" + self.group.name
|
|
|
|
|
|
@python_2_unicode_compatible
|
|
class AuthGroup(models.Model):
|
|
"""
|
|
Extends Django Group model with a one-to-one field
|
|
Attributes are accessible via group as if they were in the model
|
|
e.g. group.authgroup.internal
|
|
|
|
Logic:
|
|
Internal - not requestable by users, at all. Covers Corp_, Alliance_, Members etc groups.
|
|
Groups are internal by default
|
|
|
|
Not Internal and:
|
|
Hidden - users cannot view, can request if they have the direct link.
|
|
Not Hidden - Users can view and request the group
|
|
Open - Users are automatically accepted into the group
|
|
Not Open - Users requests must be approved before they are added to the group
|
|
"""
|
|
group = models.OneToOneField(Group, on_delete=models.CASCADE, primary_key=True)
|
|
|
|
internal = models.BooleanField(default=True,
|
|
help_text="Internal group, users cannot see, join or request to join this group.<br>"
|
|
"Used for groups such as Members, Corp_*, Alliance_* etc.<br>"
|
|
"<b>Overrides Hidden and Open options when selected.</b>")
|
|
hidden = models.BooleanField(default=True,
|
|
help_text="Group is hidden from users but can still join with the correct link.")
|
|
open = models.BooleanField(default=False,
|
|
help_text="Group is open and users will be automatically added upon request. <br>"
|
|
"If the group is not open users will need their request manually approved.")
|
|
# Group leaders have management access to this group
|
|
group_leaders = models.ManyToManyField(User, related_name='leads_groups', blank=True,
|
|
help_text="Group leaders can process group requests for this group "
|
|
"specifically. Use the auth.group_management permission to allow "
|
|
"a user to manage all groups.")
|
|
|
|
description = models.CharField(max_length=512, blank=True, help_text="Description of the group shown to users.")
|
|
|
|
def __str__(self):
|
|
return self.group.name
|
|
|
|
|
|
@receiver(post_save, sender=Group)
|
|
def create_auth_group(sender, instance, created, **kwargs):
|
|
"""
|
|
Creates the AuthGroup model when a group is created
|
|
"""
|
|
if created:
|
|
AuthGroup.objects.create(group=instance)
|
|
|
|
|
|
@receiver(post_save, sender=Group)
|
|
def save_auth_group(sender, instance, **kwargs):
|
|
"""
|
|
Ensures AuthGroup model is saved automatically
|
|
"""
|
|
instance.authgroup.save()
|