snipt/accounts/models.py

93 lines
3.5 KiB
Python

from django.contrib.auth.models import User
from django.db import models
from snipts.models import Snipt
class UserProfile(models.Model):
EDITOR_CHOICES = (
('C', 'CodeMirror'),
('T', 'Textarea'),
)
THEME_CHOICES = (
('D', 'Default'),
('A', 'Pro Adams'),
)
EDITOR_THEME_CHOICES = (
('default', 'Default'),
('ambiance', 'Ambiance'),
('blackboard', 'Blackboard'),
('cobalt', 'Cobalt'),
('eclipse', 'Eclipse'),
('elegant', 'Elegant'),
('erlang-dark', 'Erlang Dark'),
('lesser-dark', 'Lesser Dark'),
('monokai', 'Monokai'),
('neat', 'Neat'),
('night', 'Night'),
('rubyblue', 'Ruby Blue'),
('solarized dark', 'Solarized Dark'),
('solarized light', 'Solarized Light'),
('twilight', 'Twilight'),
('vibrant-ink', 'Vibrant Ink'),
('xq-dark', 'XQ Dark'),
)
# User
user = models.ForeignKey(User, unique=True)
is_pro = models.BooleanField(default=False)
stripe_id = models.CharField(max_length=100, null=True, blank=True)
has_gravatar = models.BooleanField(default=False)
# Blog
blog_title = models.CharField(max_length=250, null=True, blank=True)
blog_theme = models.CharField(max_length=1, null=False, blank=False, default='D', choices=THEME_CHOICES)
blog_domain = models.CharField(max_length=250, null=True, blank=True)
# Editor
default_editor = models.CharField(max_length=250, null=False, blank=False, default='C', choices=EDITOR_CHOICES)
editor_theme = models.CharField(max_length=250, null=False, blank=False, default='default', choices=EDITOR_THEME_CHOICES)
# Services and Analytics
gittip_username = models.CharField(max_length=250, null=True, blank=True)
disqus_shortname = models.CharField(max_length=250, null=True, blank=True)
google_analytics_tracking_id = models.CharField(max_length=250, null=True, blank=True)
gauges_site_id = models.CharField(max_length=250, null=True, blank=True)
# Google Ads
google_ad_client = models.CharField(max_length=250, null=True, blank=True)
google_ad_slot = models.CharField(max_length=250, null=True, blank=True)
google_ad_width = models.CharField(max_length=250, null=True, blank=True)
google_ad_height = models.CharField(max_length=250, null=True, blank=True)
def get_blog_posts(self):
return Snipt.objects.filter(user=self.user, blog_post=True, public=True)
def get_primary_blog_domain(self):
if not self.blog_domain:
return None
else:
return self.blog_domain.split(' ')[0]
def get_user_profile_url(self):
# If the user has a blog domain, use that.
if self.blog_domain:
url = 'http://{}'.format(self.get_primary_blog_domain())
# Otherwise, if they have blog posts, use their Snipt blog URL.
elif self.get_blog_posts():
url = 'https://{}.snipt.net/'.format(self.user.username)
# Otherwise, use their regular Snipt profile page.
else:
url = 'https://snipt.net/{}/'.format(self.user.username)
return url
def has_public_snipts(self):
return True if Snipt.objects.filter(user=self, public=True).count() > 0 else False
User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])