mirror of
https://github.com/Rushilwiz/HiLo.git
synced 2025-04-09 14:40:16 -04:00
185 lines
6.9 KiB
Python
Executable File
185 lines
6.9 KiB
Python
Executable File
from django.db import models
|
||
|
||
import os
|
||
from django.utils import timezone
|
||
import pytz
|
||
|
||
|
||
from django.core.files import File
|
||
|
||
from django.conf import settings
|
||
from django.templatetags.static import static
|
||
from django.utils.text import slugify
|
||
|
||
|
||
from PIL import Image, ImageDraw, ImageFont
|
||
|
||
# Create your models here.
|
||
|
||
class Location (models.Model):
|
||
name = models.CharField(max_length=20, blank=True, null=True)
|
||
insta = models.CharField(max_length=20, blank=True, null=True)
|
||
|
||
slug = models.CharField(max_length=20, blank=True, null=True)
|
||
|
||
hero = models.ImageField(default="hero.png", upload_to='heros')
|
||
hero_mobile = models.ImageField(default="hero-mobile.png", upload_to='heros')
|
||
|
||
results = models.ImageField(default="results.png", upload_to='results')
|
||
results_mobile = models.ImageField(default="results-mobile.png", upload_to='results')
|
||
|
||
def __str__(self):
|
||
return self.name
|
||
|
||
def save(self, *args, **kwargs):
|
||
def drawPic (input, output, font, x, y, text):
|
||
img = Image.open(input)
|
||
draw = ImageDraw.Draw(img)
|
||
draw.text((x,y), text, font=font, fill=(255,255,255))
|
||
img.save(output)
|
||
|
||
def add_margin(pil_img, top, right, bottom, left, color):
|
||
width, height = pil_img.size
|
||
new_width = width + right + left
|
||
new_height = height + top + bottom
|
||
result = Image.new(pil_img.mode, (new_width, new_height), color)
|
||
result.paste(pil_img, (left, top))
|
||
return result
|
||
|
||
self.slug = slugify(self.name)
|
||
self.hero = f'heros/hero-{self.slug}.png'
|
||
self.hero_mobile = f'heros/hero-{self.slug}-mobile.png'
|
||
if self.insta != None and self.insta != '' and self.insta[0] != '@':
|
||
self.insta = '@' + self.insta
|
||
|
||
self.results = f'results/results-{self.slug}.png'
|
||
self.results_mobile = f'results/results-{self.slug}-mobile.png'
|
||
super().save(*args, **kwargs)
|
||
|
||
output = f'{settings.PROJECT_PATH}/media/heros/hero-{self.slug}.png'
|
||
mobile_output = f'{settings.PROJECT_PATH}/media/heros/hero-{self.slug}-mobile.png'
|
||
|
||
font = ImageFont.truetype(settings.PROJECT_PATH + static("css/fonts/Hanson-Bold.ttf"), 42)
|
||
drawPic(settings.PROJECT_PATH + static("css/res/hero.png"), output, font, 945, 140, self.slug.upper())
|
||
drawPic(output, output, font, 945, 210, self.slug.upper())
|
||
drawPic(output, output, font, 945, 270, self.slug.upper())
|
||
drawPic(output, output, font, 625, 762, self.slug.upper())
|
||
drawPic(output, output, font, 625, 825, self.slug.upper())
|
||
drawPic(output, output, font, 625, 895, self.slug.upper())
|
||
font = ImageFont.truetype(settings.PROJECT_PATH + static("css/fonts/Hanson-Bold.ttf"), 65)
|
||
drawPic(settings.PROJECT_PATH + static("css/res/hero-mobile.png"), mobile_output, font, 600, 290, self.slug.upper())
|
||
drawPic(mobile_output, mobile_output, font, 600, 390, self.slug.upper())
|
||
drawPic(mobile_output, mobile_output, font, 600, 490, self.slug.upper())
|
||
drawPic(mobile_output, mobile_output, font, 100, 1370, self.slug.upper())
|
||
drawPic(mobile_output, mobile_output, font, 100, 1470, self.slug.upper())
|
||
drawPic(mobile_output, mobile_output, font, 100, 1570, self.slug.upper())
|
||
mobile_img = Image.open(mobile_output)
|
||
mobile_img = mobile_img.resize((1080, 1920))
|
||
mobile_img.save(mobile_output)
|
||
|
||
output = f'{settings.PROJECT_PATH}/media/results/results-{self.slug}.png'
|
||
mobile_output = f'{settings.PROJECT_PATH}/media/results/results-{self.slug}-mobile.png'
|
||
font = ImageFont.truetype(settings.PROJECT_PATH + static("css/fonts/FuturaPTMedium.otf"), 60)
|
||
|
||
if self.insta != None and self.insta != '':
|
||
drawPic (settings.PROJECT_PATH + static("css/res/results.png"), output, font, 735, 805, self.insta)
|
||
drawPic (settings.PROJECT_PATH + static("css/res/results-mobile.png"), mobile_output, font, 360, 1380, self.insta)
|
||
else:
|
||
img = Image.open(settings.PROJECT_PATH + static("css/res/results-noinsta.png"))
|
||
img.save(output)
|
||
img = Image.open(settings.PROJECT_PATH + static("css/res/results-mobile-noinsta.png"))
|
||
img.save(mobile_output)
|
||
|
||
|
||
|
||
class Poll (models.Model):
|
||
location = models.OneToOneField(Location, on_delete=models.CASCADE)
|
||
|
||
ask_hi = models.BooleanField(default=True)
|
||
hi_text = models.CharField(max_length=100, blank=True, null=True, default='What was the <span class="hi">Hi</span> of this week?')
|
||
|
||
ask_lo = models.BooleanField(default=True)
|
||
lo_text = models.CharField(max_length=100, blank=True, null=True, default='What was the <span class="lo">Lo</span> of this week?')
|
||
|
||
ask_emotion = models.BooleanField(default=False)
|
||
emotion_text = models.CharField(max_length=100, blank=True, null=True, default="how are you feeling today?")
|
||
|
||
ask_name = models.BooleanField(default=False)
|
||
name_text = models.CharField(max_length=100, blank=True, null=True, default="what's your name?")
|
||
|
||
ask_place = models.BooleanField(default=True)
|
||
place_text = models.CharField(max_length=100, blank=True, null=True, default="fill it out by writing #HiLo and finishing it with where you’re from (Ex. #HiLoArlington, #HiLoDC)")
|
||
|
||
ask_question = models.BooleanField(default=False)
|
||
question_text = models.CharField(max_length=100, blank=True, null=True)
|
||
|
||
pub_date = models.DateTimeField('date published', blank=True, null=True)
|
||
|
||
def __str__(self):
|
||
return f"{self.location.name}'s Poll"
|
||
|
||
def save(self, *args, **kwargs):
|
||
# print("ok....")
|
||
self.pub_date = timezone.now()
|
||
# if self.ask_hi != True:
|
||
# self.hi_text = None
|
||
|
||
# if self.ask_lo != True:
|
||
# self.lo_text = None
|
||
|
||
# print("whatfaskdfjksadkfasd")
|
||
# if self.ask_name != True:
|
||
# print("bruh thatsakjjktsltjlkslktjlksatlkljkaslk")
|
||
# self.name_text = None
|
||
|
||
# if self.ask_place != True:
|
||
# self.place_text = None
|
||
|
||
# if self.ask_question != True:
|
||
# self.question_text = None
|
||
super().save(self, *args, **kwargs)
|
||
|
||
|
||
EMOTION_CHOICES= [
|
||
('happy', 'Happy'),
|
||
('meh', 'Meh'),
|
||
('sad', 'Sad'),
|
||
]
|
||
|
||
class Answer (models.Model):
|
||
poll = models.ForeignKey(Poll, on_delete=models.CASCADE)
|
||
hi = models.CharField(max_length=200, blank=True, null=True)
|
||
lo = models.CharField(max_length=200, blank=True, null=True)
|
||
emotion = models.CharField(max_length=8, default='meh', choices=EMOTION_CHOICES, blank=True, null=True)
|
||
name = models.CharField(max_length=100, blank=True, null=True)
|
||
place = models.CharField(max_length=100, blank=True, null=True)
|
||
current_question = models.CharField(max_length=100, blank=True, null=True)
|
||
question = models.CharField(max_length=200, blank=True, null=True)
|
||
time = models.DateTimeField('time answered', blank=True, null=True)
|
||
|
||
def save(self, *args, **kwargs):
|
||
self.time = timezone.now()
|
||
if self.hi == '':
|
||
self.hi = "Not stated"
|
||
|
||
if self.lo == '':
|
||
self.lo = "Not stated"
|
||
|
||
if self.name == '':
|
||
self.name = "Anonymous"
|
||
|
||
if self.place == '':
|
||
self.place = "Somewhere"
|
||
|
||
if self.question == '':
|
||
self.question = "Not stated"
|
||
|
||
if self.current_question == '':
|
||
self.current_question = self.poll.question_text
|
||
|
||
super().save(self, *args, **kwargs)
|
||
|
||
|
||
def __str__(self):
|
||
return f"{self.name}'s response on {self.poll.location.name} at {self.time.strftime('%m/%d/%Y, %H:%M:%S')}"
|