[docs]defvisible_to_user(self,user):"""Get a list of apps available to a given user. Same logic as Announcements and Events. """returnApp.objects.filter(Q(groups_visible__in=user.groups.all())|Q(groups_visible__isnull=True)).distinct()
[docs]classApp(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)defvisible_to(self,user):ifself.groups_visible.count()==0:returnTruereturnselfinApp.objects.visible_to_user(user)def__str__(self):returnself.nameclassMeta:ordering=["order","name"]