Source code for intranet.apps.cslapps.models

from django.contrib.auth.models import Group as DjangoGroup
from django.db import models
from django.db.models import Manager, Q


[docs]class AppManager(Manager):
[docs] def visible_to_user(self, user): """Get a list of apps available to a given user. Same logic as Announcements and Events. """ return App.objects.filter(Q(groups_visible__in=user.groups.all()) | Q(groups_visible__isnull=True)).distinct()
[docs]class App(models.Model): """Represents an app maintained by TJ CSL.""" objects = AppManager() name = models.CharField(max_length=255) description = models.CharField(max_length=1000, blank=True) order = models.IntegerField(default=0) oauth_application = models.ForeignKey("oauth.CSLApplication", on_delete=models.CASCADE, null=True, blank=True) auth_url = models.URLField(blank=True) url = models.URLField(max_length=2048, blank=False) image_url = models.CharField(max_length=2048, blank=True) html_icon = models.CharField(max_length=2048, blank=True) invert_image_color_for_dark_mode = models.BooleanField(default=False) groups_visible = models.ManyToManyField(DjangoGroup, blank=True) def visible_to(self, user): if self.groups_visible.count() == 0: return True return self in App.objects.visible_to_user(user) def __str__(self): return self.name class Meta: ordering = ["order", "name"]