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 the CSL. Attributes: name (str): The name of the app. description (str): A description of the app. order (int): The order in which the app should be displayed. oauth_application (:obj:`CSLApplication`): The OAuth application associated with the app, if any. auth_url (str): The URL to the app's authentication page (preferably, if available, using Ion OAuth). url (str): The URL to the app. image_url (str): The URL to the image icon for the app. html_icon (str): HTML for the icon of the app, can be used for things like font awesome icons. WARNING: this is rendered as safe. Do not allow untrusted content here. invert_image_color_for_dark_mode (bool): Whether or not to invert the image color for dark mode. Set to true if the image is a mostly dark color, which will require it to be inverted to appear on dark mode. groups_visible (:obj:`list` of :obj:`Group`): Groups that can access this app. """ 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)
[docs] 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"]