2010-06-30 13:36:51 -04:00
|
|
|
import datetime
|
2009-06-16 03:08:55 +00:00
|
|
|
from django.db import models
|
2010-10-25 20:20:59 -04:00
|
|
|
from django.db import IntegrityError
|
2009-06-16 03:08:55 +00:00
|
|
|
from django.contrib.auth.models import User
|
2010-05-11 21:36:17 -04:00
|
|
|
from django.db.models.signals import post_save
|
2010-10-23 12:29:18 -04:00
|
|
|
from django.core.mail import mail_admins
|
2010-11-08 12:09:55 -05:00
|
|
|
from django.contrib.auth import authenticate
|
2010-10-16 23:24:55 -04:00
|
|
|
from apps.reader.models import UserSubscription
|
2010-10-29 09:02:54 -04:00
|
|
|
from apps.rss_feeds.models import Feed
|
2010-10-30 00:27:52 -04:00
|
|
|
from apps.feed_import.models import queue_new_feeds
|
2010-10-16 18:52:52 -04:00
|
|
|
from paypal.standard.ipn.signals import subscription_signup
|
2010-10-23 12:29:18 -04:00
|
|
|
from utils import log as logging
|
2010-10-30 00:27:52 -04:00
|
|
|
from utils.timezones.fields import TimeZoneField
|
2011-01-20 09:57:23 -05:00
|
|
|
from utils.user_functions import generate_secret_token
|
2009-06-16 03:08:55 +00:00
|
|
|
|
2010-05-11 21:36:17 -04:00
|
|
|
class Profile(models.Model):
|
|
|
|
user = models.OneToOneField(User, unique=True, related_name="profile")
|
2010-10-05 19:05:01 -04:00
|
|
|
is_premium = models.BooleanField(default=False)
|
2010-07-06 14:57:32 -04:00
|
|
|
preferences = models.TextField(default="{}")
|
2010-06-11 20:55:38 -04:00
|
|
|
view_settings = models.TextField(default="{}")
|
2010-09-05 18:08:08 -07:00
|
|
|
collapsed_folders = models.TextField(default="[]")
|
2010-06-30 13:36:51 -04:00
|
|
|
last_seen_on = models.DateTimeField(default=datetime.datetime.now)
|
|
|
|
last_seen_ip = models.CharField(max_length=50, blank=True, null=True)
|
2010-10-30 00:27:52 -04:00
|
|
|
timezone = TimeZoneField(default="America/New_York")
|
2011-01-20 09:57:23 -05:00
|
|
|
secret_token = models.CharField(max_length=12, blank=True, null=True)
|
2010-05-11 21:36:17 -04:00
|
|
|
|
2010-10-23 11:20:54 -04:00
|
|
|
def __unicode__(self):
|
|
|
|
return "%s" % self.user
|
2011-01-20 09:57:23 -05:00
|
|
|
|
|
|
|
def save(self, *args, **kwargs):
|
|
|
|
if not self.secret_token:
|
|
|
|
self.secret_token = generate_secret_token(self.user.username, 12)
|
|
|
|
super(Profile, self).save(*args, **kwargs)
|
|
|
|
|
2010-10-23 11:20:54 -04:00
|
|
|
def activate_premium(self):
|
|
|
|
self.is_premium = True
|
|
|
|
self.save()
|
|
|
|
|
|
|
|
subs = UserSubscription.objects.filter(user=self.user)
|
|
|
|
for sub in subs:
|
|
|
|
sub.active = True
|
2010-10-25 20:20:59 -04:00
|
|
|
try:
|
|
|
|
sub.save()
|
|
|
|
sub.feed.setup_feed_for_premium_subscribers()
|
2010-10-29 09:02:54 -04:00
|
|
|
except IntegrityError, Feed.DoesNotExist:
|
2010-10-25 20:20:59 -04:00
|
|
|
pass
|
2010-10-23 11:20:54 -04:00
|
|
|
|
2010-10-30 00:27:52 -04:00
|
|
|
queue_new_feeds(self.user)
|
|
|
|
|
2010-12-15 22:26:05 -05:00
|
|
|
logging.info(' ---> [%s] ~BY~SK~FW~SBNEW PREMIUM ACCOUNT! WOOHOO!!! ~FR%s subscriptions~SN!' % (self.user.username, subs.count()))
|
2010-10-23 12:29:18 -04:00
|
|
|
message = """Woohoo!
|
|
|
|
|
|
|
|
User: %(user)s
|
|
|
|
Feeds: %(feeds)s
|
|
|
|
|
|
|
|
Sincerely,
|
|
|
|
NewsBlur""" % {'user': self.user.username, 'feeds': subs.count()}
|
|
|
|
mail_admins('New premium account', message, fail_silently=True)
|
2010-10-23 11:20:54 -04:00
|
|
|
|
2011-01-17 14:20:36 -05:00
|
|
|
def refresh_stale_feeds(self):
|
|
|
|
stale_cutoff = datetime.datetime.now() - datetime.timedelta(days=7)
|
|
|
|
stale_feeds = UserSubscription.objects.filter(user=self.user, active=True, feed__last_update__lte=stale_cutoff)
|
|
|
|
all_feeds = UserSubscription.objects.filter(user=self.user, active=True)
|
|
|
|
|
|
|
|
logging.info(" ---> [%s] ~FG~BBRefreshing stale feeds: ~SB%s/%s" % (
|
|
|
|
self.user, stale_feeds.count(), all_feeds.count()))
|
|
|
|
|
|
|
|
for sub in stale_feeds:
|
|
|
|
sub.feed.fetched_once = False
|
|
|
|
sub.feed.save()
|
|
|
|
|
2011-01-18 08:45:35 -05:00
|
|
|
if stale_feeds:
|
|
|
|
queue_new_feeds(self.user)
|
2011-01-17 14:20:36 -05:00
|
|
|
|
|
|
|
|
2010-05-11 21:36:17 -04:00
|
|
|
def create_profile(sender, instance, created, **kwargs):
|
|
|
|
if created:
|
|
|
|
Profile.objects.create(user=instance)
|
2010-06-11 20:55:38 -04:00
|
|
|
else:
|
|
|
|
Profile.objects.get_or_create(user=instance)
|
2010-10-16 18:52:52 -04:00
|
|
|
post_save.connect(create_profile, sender=User)
|
|
|
|
|
|
|
|
|
|
|
|
def paypal_signup(sender, **kwargs):
|
|
|
|
ipn_obj = sender
|
2010-10-16 23:23:15 -04:00
|
|
|
user = User.objects.get(username=ipn_obj.custom)
|
2010-10-23 11:20:54 -04:00
|
|
|
user.profile.activate_premium()
|
2010-11-08 12:09:55 -05:00
|
|
|
subscription_signup.connect(paypal_signup)
|
|
|
|
|
|
|
|
def change_password(user, old_password, new_password):
|
|
|
|
user_db = authenticate(username=user.username, password=old_password)
|
|
|
|
if user_db is None:
|
|
|
|
return -1
|
|
|
|
else:
|
|
|
|
user_db.set_password(new_password)
|
|
|
|
user_db.save()
|
|
|
|
return 1
|