camp/content/models.py

400 lines
14 KiB
Python
Raw Normal View History

2017-05-20 12:45:26 +00:00
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
2017-12-18 12:54:04 +00:00
from django.conf import settings
from django.core.validators import MaxLengthValidator
2017-05-20 12:45:26 +00:00
from django.db import models
2017-12-18 12:54:04 +00:00
from django.utils.html import mark_safe
2017-12-19 13:54:53 +00:00
from django.utils.encoding import python_2_unicode_compatible
2017-12-18 12:54:04 +00:00
2017-12-19 10:54:06 +00:00
from photologue.models import Photo, Gallery
2017-12-18 12:54:04 +00:00
from markdownx.models import MarkdownxField
2017-07-03 08:14:07 +00:00
from markdownx.utils import markdownify
2017-12-18 12:54:04 +00:00
import ox
2017-05-20 12:45:26 +00:00
# Create your models here.
class Acrolike(models.Model):
title = models.CharField(max_length=255)
class Meta:
2017-06-10 12:05:37 +00:00
# managed = False
2017-05-20 12:45:26 +00:00
db_table = 'acrolike'
class Acronym(models.Model):
name = models.CharField(max_length=255, blank=True, null=True)
c = models.CharField(max_length=50, blank=True, null=True)
a = models.CharField(max_length=50, blank=True, null=True)
m = models.CharField(max_length=50, blank=True, null=True)
p = models.CharField(max_length=50, blank=True, null=True)
class Meta:
2017-06-10 12:05:37 +00:00
# managed = False
2017-05-20 12:45:26 +00:00
db_table = 'acronym'
class Audios(models.Model):
filename = models.CharField(max_length=255)
title = models.CharField(max_length=255, blank=True, null=True)
description = models.TextField(blank=True, null=True)
class Meta:
2017-06-10 12:05:37 +00:00
# managed = False
2017-05-20 12:45:26 +00:00
db_table = 'audios'
class Comments(models.Model): #not used
comment = models.TextField()
name = models.CharField(max_length=150, blank=True, null=True)
email = models.CharField(max_length=255, blank=True, null=True)
personid = models.IntegerField(db_column='personID', blank=True, null=True) # Field name made lowercase.
dateadded = models.DateTimeField(db_column='dateAdded') # Field name made lowercase.
datemodified = models.DateTimeField(db_column='dateModified', blank=True, null=True) # Field name made lowercase.
parentid = models.IntegerField(db_column='parentID', blank=True, null=True) # Field name made lowercase.
contentid = models.IntegerField(db_column='contentID') # Field name made lowercase.
ip = models.CharField(db_column='IP', max_length=50, blank=True, null=True) # Field name made lowercase.
class Meta:
2017-06-10 12:05:37 +00:00
# managed = False
2017-05-20 12:45:26 +00:00
db_table = 'comments'
2017-12-19 13:54:53 +00:00
@python_2_unicode_compatible
2017-05-20 12:45:26 +00:00
class Content(models.Model):
2017-05-24 11:44:04 +00:00
type = models.ForeignKey("ContentTypes", db_column="type")
2017-12-19 13:34:43 +00:00
shortname = models.CharField('Slug', db_column='shortName', max_length=255, unique=True)
2017-05-20 12:45:26 +00:00
title = models.CharField(max_length=255)
2017-12-18 12:54:04 +00:00
header = MarkdownxField(blank=True, null=True, default='')
body = MarkdownxField(blank=True, null=True, default='')
2018-08-21 09:33:33 +00:00
teaser = models.TextField(blank=True, null=True, validators=[MaxLengthValidator(250)])
2018-06-10 13:44:16 +00:00
schedule = MarkdownxField(blank=True, null=True, default='')
2017-05-20 12:45:26 +00:00
schedulebutton = models.CharField(db_column='scheduleButton', max_length=255, blank=True, null=True) # Field name made lowercase.
optbtn2 = models.CharField(db_column='optBtn2', max_length=127, blank=True, null=True) # Field name made lowercase.
opttext2 = models.TextField(db_column='optText2', blank=True, null=True) # Field name made lowercase.
optbtn3 = models.CharField(db_column='optBtn3', max_length=127, blank=True, null=True) # Field name made lowercase.
opttext3 = models.TextField(db_column='optText3', blank=True, null=True) # Field name made lowercase.
2017-06-10 09:59:00 +00:00
technotes = models.TextField(db_column='technotes', blank=True, null=True)
2018-02-22 13:31:52 +00:00
image = models.CharField(max_length=150, blank=True, null=True, editable=False)
2018-02-22 13:34:39 +00:00
photo = models.ForeignKey(Photo, null=True, blank=True, related_name="main_photo")
2018-02-22 13:31:52 +00:00
2017-05-20 12:45:26 +00:00
postedby = models.CharField(db_column='postedBy', max_length=50, blank=True, null=True) # Field name made lowercase.
datestart = models.DateField(db_column='dateStart', blank=True, null=True) # Field name made lowercase.
dateend = models.DateField(db_column='dateEnd', blank=True, null=True) # Field name made lowercase.
2017-12-18 12:54:04 +00:00
dateadded = models.DateTimeField(db_column='dateAdded', auto_now_add=True, editable=True) # Field name made lowercase.
datemodified = models.DateTimeField(db_column='dateModified', blank=True, null=True, auto_now=True) # Field name made lowercase.
published = models.BooleanField(default=False)
featured = models.BooleanField(default=False)
view = models.ForeignKey("Views", null=True, blank=True, db_column="view", editable=False)
2017-06-10 09:59:00 +00:00
place = models.CharField(max_length=255, null=True, blank=True)
2017-12-19 10:40:02 +00:00
parents = models.ManyToManyField('Content', through='ContentContent', related_name="children")
resources = models.ManyToManyField('Resources', through='ContentResource', related_name="content")
2017-12-19 13:34:43 +00:00
gallery = models.ForeignKey(Gallery, null=True, blank=True, related_name="content")
2017-12-19 10:40:02 +00:00
# delete after migration
parentid = models.IntegerField(null=True, db_column='parentID', blank=True, editable=False)
# end of delte
2017-05-20 12:45:26 +00:00
2017-12-19 13:54:53 +00:00
def __str__(self):
2017-05-20 12:41:15 +00:00
return self.title
2017-07-03 08:14:07 +00:00
@property
def formatted_header(self):
2017-12-18 12:54:04 +00:00
return mark_safe(markdownify(self.header))
2017-07-03 08:14:07 +00:00
@property
def formatted_body(self):
2017-12-18 12:54:04 +00:00
return mark_safe(markdownify(self.body))
@property
def formatted_teaser(self):
if self.teaser:
2018-01-01 13:31:30 +00:00
value = markdownify(self.teaser)
2017-12-18 12:54:04 +00:00
elif self.header:
2018-08-21 10:43:37 +00:00
value = ox.sanitize_html(ox.decode_html(markdownify(self.header)))
2017-12-18 12:54:04 +00:00
else:
value = ''
return mark_safe(value)
2017-07-03 08:14:07 +00:00
2018-06-10 13:44:16 +00:00
@property
def formatted_schedule(self):
return mark_safe(markdownify(self.schedule))
2017-07-03 08:14:07 +00:00
@property
def typefilter(self):
return self.type
2017-12-18 12:54:04 +00:00
@property
def image_url(self):
2018-02-22 13:49:05 +00:00
if self.photo:
2018-02-22 13:31:52 +00:00
return self.photo.image.url
2017-12-18 12:54:04 +00:00
if self.image:
2018-01-01 13:31:30 +00:00
if self.image.startswith('http') or self.image.startswith('/'):
2018-01-01 13:02:01 +00:00
return self.image
2017-12-18 12:54:04 +00:00
return settings.IMAGE_PREFIX + self.image
2017-12-19 10:40:02 +00:00
def images(self):
return self.resources.filter(type=2).exclude(href=self.image).order_by('orderno')
2017-12-18 12:54:04 +00:00
def get_absolute_url(self):
if self.shortname:
2017-12-18 14:17:06 +00:00
parts = []
2017-12-18 12:54:04 +00:00
section = self.type.name
if section == 'news':
section = 'events'
if section == 'page':
2017-12-18 14:17:06 +00:00
parts = [self.shortname]
else:
parts = [section, self.shortname]
return '/' + '/'.join(parts)
2017-07-03 08:14:07 +00:00
2017-12-19 10:54:06 +00:00
def get_gallery(self):
2017-12-19 13:34:43 +00:00
if not self.gallery:
gallery, created = Gallery.objects.get_or_create(slug=self.shortname)
if created:
title = self.title
n = 1
while Gallery.objects.filter(title=title).exclude(pk=gallery.pk).exists():
n += 1
title = '%s [%s]' % (self.title, n)
gallery.title = title
gallery.save()
self.gallery = gallery
self.save()
return self.gallery
2017-12-19 10:54:06 +00:00
2017-05-20 12:45:26 +00:00
class Meta:
2017-05-24 11:44:04 +00:00
managed = True
2017-05-20 12:45:26 +00:00
db_table = 'content'
2017-12-19 13:54:53 +00:00
@python_2_unicode_compatible
2017-05-20 12:45:26 +00:00
class ContentContent(models.Model):
2017-06-10 11:07:32 +00:00
contentid1 = models.ForeignKey("content", db_column='contentID1', related_name="child") # Field name made lowercase.
contentid2 = models.ForeignKey("content", db_column='contentID2', related_name="parent") # Field name made lowercase.
2017-12-19 13:54:53 +00:00
def __str__(self):
2017-07-03 08:14:07 +00:00
return self.contentid1.title
2017-05-20 12:45:26 +00:00
class Meta:
2017-06-10 12:05:37 +00:00
# managed = False
2017-05-20 12:45:26 +00:00
db_table = 'content_content'
2018-02-22 13:31:52 +00:00
verbose_name = 'related content'
verbose_name_plural = 'related content'
2017-05-20 12:45:26 +00:00
2017-12-18 13:44:11 +00:00
def reverse(self):
r, created = ContentContent.objects.get_or_create(contentid1=self.contentid2, contentid2=self.contentid1)
return r
def save(self, *args, **kwargs):
super(ContentContent, self).save(*args, **kwargs)
self.reverse()
2017-05-20 12:45:26 +00:00
class ContentKeyword(models.Model):
contentid = models.IntegerField(db_column='contentID') # Field name made lowercase.
keywordid = models.IntegerField(db_column='keywordID') # Field name made lowercase.
class Meta:
2017-06-10 12:05:37 +00:00
# managed = False
2017-05-20 12:45:26 +00:00
db_table = 'content_keyword'
2017-12-19 13:54:53 +00:00
@python_2_unicode_compatible
2017-05-20 12:45:26 +00:00
class ContentResource(models.Model):
2017-12-19 10:40:02 +00:00
contentid = models.ForeignKey('Content', db_column='contentID')
resourceid = models.ForeignKey('Resources', db_column='resourceID')
2017-12-19 13:54:53 +00:00
def __str__(self):
2017-12-19 10:40:02 +00:00
return self.resource.href
2017-05-20 12:45:26 +00:00
class Meta:
2017-06-10 12:05:37 +00:00
# managed = False
2017-05-20 12:45:26 +00:00
db_table = 'content_resource'
2017-12-19 13:54:53 +00:00
@python_2_unicode_compatible
2017-05-20 12:45:26 +00:00
class ContentTypes(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=255)
description = models.TextField(blank=True, null=True)
2017-12-19 13:54:53 +00:00
def __str__(self):
2017-12-19 10:40:02 +00:00
return self.name
2017-05-24 11:44:04 +00:00
2017-05-20 12:45:26 +00:00
class Meta:
2017-06-10 12:05:37 +00:00
# managed = False
2017-05-20 12:45:26 +00:00
db_table = 'content_types'
class Keywords(models.Model):
name = models.CharField(max_length=255)
description = models.TextField(blank=True, null=True)
class Meta:
2017-06-10 12:05:37 +00:00
# managed = False
2017-05-20 12:45:26 +00:00
db_table = 'keywords'
2017-12-19 13:54:53 +00:00
@python_2_unicode_compatible
2017-05-20 12:45:26 +00:00
class People(models.Model): #not used
name = models.CharField(max_length=255, blank=True, null=True)
email = models.CharField(max_length=255, blank=True, null=True)
location = models.CharField(max_length=255, blank=True, null=True)
login = models.CharField(max_length=100, blank=True, null=True)
password = models.CharField(max_length=16, blank=True, null=True)
href = models.CharField(max_length=255, blank=True, null=True)
bio = models.TextField(blank=True, null=True)
type = models.IntegerField()
2017-12-19 10:40:02 +00:00
resources = models.ManyToManyField('Resources', through='PersonResource', related_name='people')
content = models.ManyToManyField('Content', through='PersonContent', related_name='people')
2017-12-19 13:54:53 +00:00
def __str__(self):
2017-12-19 10:40:02 +00:00
return self.name
2017-05-20 12:45:26 +00:00
class Meta:
2017-06-10 12:05:37 +00:00
# managed = False
2017-05-20 12:45:26 +00:00
db_table = 'people'
class PersonContent(models.Model):
2017-12-19 10:40:02 +00:00
personid = models.ForeignKey("people", db_column="personID")
contentid = models.ForeignKey("content", db_column="contentID")
2017-05-20 12:45:26 +00:00
level = models.IntegerField()
class Meta:
2017-06-10 12:05:37 +00:00
# managed = False
2017-05-20 12:45:26 +00:00
db_table = 'person_content'
class PersonResource(models.Model):
2017-12-19 10:40:02 +00:00
personid = models.ForeignKey("people", db_column="personID")
resourceid = models.ForeignKey("resources", db_column="resourceID")
2017-05-20 12:45:26 +00:00
class Meta:
2017-06-10 12:05:37 +00:00
# managed = False
2017-05-20 12:45:26 +00:00
db_table = 'person_resource'
class Resources(models.Model):
2017-12-18 15:46:14 +00:00
TYPE_CHOICES = (
(1, "Resources"),
(2, "Images"),
(3, "Links"),
)
type = models.IntegerField(choices=TYPE_CHOICES)
2017-05-20 12:45:26 +00:00
href = models.CharField(max_length=255)
description = models.TextField(blank=True, null=True)
mime = models.CharField(max_length=10, blank=True, null=True)
width = models.IntegerField(blank=True, null=True)
height = models.IntegerField(blank=True, null=True)
istech = models.IntegerField(db_column='isTech') # Field name made lowercase.
2017-06-10 12:05:37 +00:00
dateadded = models.DateTimeField(db_column='dateAdded', null=True, blank=True) # Field name made lowercase.
2017-05-20 12:45:26 +00:00
orderno = models.IntegerField(db_column='orderNo', blank=True, null=True) # Field name made lowercase.
2017-12-19 10:40:02 +00:00
def get_absolute_url(self):
href = self.href
if not href.startswith('http') and not href.startswith('/'):
href = '/' + href
if href.startswith('/'):
href = 'https://studio.camp' + href
return href
@property
def is_image(self):
if self.mime:
return self.mime.lower() in ('gif', 'jpeg', 'jpg', 'png')
@property
def is_audio(self):
if self.mime:
return self.mime.lower() in ('mp3', 'ogg')
@property
def is_video(self):
if self.mime:
return self.mime.lower() in ('ogv', 'mp4')
2017-05-20 12:45:26 +00:00
class Meta:
2017-06-10 12:05:37 +00:00
# managed = False
2017-05-20 12:45:26 +00:00
db_table = 'resources'
2017-06-10 12:05:37 +00:00
class File(models.Model):
content = models.ForeignKey('Content')
2017-12-19 13:34:43 +00:00
file = models.FileField(upload_to='files')
2017-06-10 12:05:37 +00:00
description = models.TextField(blank=True, null=True)
date = models.DateTimeField(auto_now_add=True)
order = models.IntegerField(blank=True, null=True)
2017-12-19 13:34:43 +00:00
class Meta:
ordering = ['order', 'file']
def get_absolute_url(self):
return '/' + self.file.name
@property
def name(self):
return self.description or self.file.name
2017-06-10 12:05:37 +00:00
class Image(models.Model):
content = models.ForeignKey('Content', related_name='images')
2017-07-03 08:14:07 +00:00
image = models.ImageField(upload_to='camp/static/images')
2017-06-10 12:05:37 +00:00
description = models.TextField(blank=True, null=True)
date = models.DateTimeField(auto_now_add=True)
order = models.IntegerField(blank=True, null=True)
2017-12-19 13:54:53 +00:00
@python_2_unicode_compatible
2017-06-10 12:05:37 +00:00
class Link(models.Model):
content = models.ForeignKey('Content')
2017-12-19 12:44:32 +00:00
url = models.URLField(max_length=4096)
2017-06-10 12:05:37 +00:00
description = models.TextField(blank=True, null=True)
date = models.DateTimeField(auto_now_add=True)
order = models.IntegerField(blank=True, null=True)
2017-05-20 12:45:26 +00:00
2017-12-19 13:34:43 +00:00
class Meta:
ordering = ['order', 'url']
2017-12-19 13:54:53 +00:00
def __str__(self):
2017-12-19 12:44:32 +00:00
return self.url
2017-05-20 12:45:26 +00:00
class Videos(models.Model): # not used
sha1 = models.CharField(max_length=50)
href = models.CharField(max_length=255)
title = models.TextField(blank=True, null=True)
description = models.TextField(blank=True, null=True)
width = models.IntegerField(blank=True, null=True)
height = models.IntegerField(blank=True, null=True)
duration = models.IntegerField(blank=True, null=True)
thumbno = models.IntegerField(db_column='thumbNo') # Field name made lowercase.
image = models.CharField(max_length=255, blank=True, null=True)
contentid = models.IntegerField(blank=True, null=True)
class Meta:
2017-06-10 12:05:37 +00:00
# managed = False
2017-05-20 12:45:26 +00:00
db_table = 'videos'
2017-12-19 13:54:53 +00:00
@python_2_unicode_compatible
2017-05-20 12:45:26 +00:00
class Views(models.Model):
name = models.CharField(max_length=255)
href = models.CharField(max_length=255, blank=True, null=True)
2017-12-19 13:54:53 +00:00
def __str__(self):
2017-05-24 11:44:04 +00:00
return self.name
2017-05-20 12:45:26 +00:00
class Meta:
2017-06-10 12:05:37 +00:00
# managed = False
2017-05-20 12:45:26 +00:00
db_table = 'views'
2017-07-03 08:14:07 +00:00
class MyModel(models.Model):
myfield = MarkdownxField()