123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- from django.db import models
- from django.utils.translation import gettext
- from mptt.models import MPTTModel, TreeForeignKey
- from .uploadto import (
- generate_theme_dirname,
- upload_css_source_to,
- upload_css_to,
- upload_font_to,
- upload_image_to,
- upload_image_thumbnail_to,
- )
- class Theme(MPTTModel):
- parent = TreeForeignKey(
- "self", on_delete=models.PROTECT, null=True, blank=True, related_name="children"
- )
- name = models.CharField(max_length=255)
- dirname = models.CharField(max_length=8, default=generate_theme_dirname)
- is_default = models.BooleanField(default=False)
- is_active = models.BooleanField(default=False)
- version = models.CharField(max_length=255, null=True, blank=True)
- author = models.CharField(max_length=255, null=True, blank=True)
- url = models.URLField(max_length=255, null=True, blank=True)
- class MPTTMeta:
- order_insertion_by = ["-is_default", "name"]
- def __str__(self):
- if self.is_default:
- return gettext("Default Misago Theme")
- return self.name
- @property
- def level_range(self):
- return range(self.level)
- class Css(models.Model):
- theme = models.ForeignKey(Theme, on_delete=models.PROTECT, related_name="css")
- name = models.CharField(max_length=255)
- url = models.URLField(max_length=255, null=True, blank=True)
- source_file = models.FileField(
- upload_to=upload_css_source_to, max_length=255, null=True, blank=True
- )
- source_hash = models.CharField(max_length=8, null=True, blank=True)
- file = models.FileField(
- upload_to=upload_css_to, max_length=255, null=True, blank=True
- )
- hash = models.CharField(max_length=8, null=True, blank=True)
- size = models.PositiveIntegerField(default=0)
- order = models.IntegerField(default=0)
- modified_on = models.DateTimeField(auto_now=True)
- class Meta:
- ordering = ["order"]
- def delete(self, *args, **kwargs):
- self.file.delete(save=False)
- super().delete(*args, **kwargs)
- def __str__(self):
- return self.name
- class Font(models.Model):
- theme = models.ForeignKey(Theme, on_delete=models.PROTECT, related_name="fonts")
- name = models.CharField(max_length=255)
- file = models.FileField(upload_to=upload_font_to, max_length=255)
- hash = models.CharField(max_length=12)
- type = models.CharField(max_length=255)
- size = models.PositiveIntegerField()
- modified_on = models.DateTimeField(auto_now=True)
- class Meta:
- ordering = ["name"]
- def delete(self, *args, **kwargs):
- self.file.delete(save=False)
- super().delete(*args, **kwargs)
- def __str__(self):
- return self.name
- class Image(models.Model):
- theme = models.ForeignKey(Theme, on_delete=models.PROTECT, related_name="images")
- name = models.CharField(max_length=255)
- file = models.ImageField(upload_to=upload_image_to, max_length=255, width_field="width", height_field="height")
- hash = models.CharField(max_length=8)
- type = models.CharField(max_length=255)
- width = models.PositiveIntegerField()
- height = models.PositiveIntegerField()
- size = models.PositiveIntegerField()
- thumbnail = models.ImageField(upload_to=upload_image_thumbnail_to, max_length=255)
- modified_on = models.DateTimeField(auto_now=True)
- class Meta:
- ordering = ["name"]
- def delete(self, *args, **kwargs):
- self.file.delete(save=False)
- self.thumbnail.delete(save=False)
- super().delete(*args, **kwargs)
- def __str__(self):
- return self.name
|