From 1394a685e2de26c328f92f106891f078142ed613 Mon Sep 17 00:00:00 2001 From: Jessica McKellar Date: Wed, 29 Aug 2012 11:50:36 -0400 Subject: [PATCH] Only display zephyrs from your subscriptions. That means your personals, classes to which you are subscribed, and personals you sent to other people. (imported from commit 15fbea92b538ff345f9978438c1c5e66766d0a67) --- zephyr/models.py | 19 +++++++++++++------ zephyr/views.py | 35 ++++++++++++++++++++++++----------- 2 files changed, 37 insertions(+), 17 deletions(-) diff --git a/zephyr/models.py b/zephyr/models.py index 710d3ff271..9bfccc03a6 100644 --- a/zephyr/models.py +++ b/zephyr/models.py @@ -23,6 +23,13 @@ class UserProfile(models.Model): def __repr__(self): return "" % (self.user.username,) +def create_user_profile(**kwargs): + """When creating a new user, make a profile for him or her.""" + u = kwargs["instance"] + if not UserProfile.objects.filter(user=u): + UserProfile(user=u, pointer=-1).save() +post_save.connect(create_user_profile, sender=User) + class ZephyrClass(models.Model): name = models.CharField(max_length=30) @@ -48,9 +55,9 @@ class Zephyr(models.Model): display_recipient = get_display_recipient(self.recipient) return "" % (display_recipient, self.instance, self.sender) -def create_user_profile(**kwargs): - """When creating a new user, make a profile for him or her.""" - u = kwargs["instance"] - if not UserProfile.objects.filter(user=u): - UserProfile(user=u, pointer=-1).save() -post_save.connect(create_user_profile, sender=User) +class Subscription(models.Model): + userprofile_id = models.ForeignKey(UserProfile) + recipient_id = models.ForeignKey(Recipient) + + def __repr__(self): + return " %r>" % (self.userprofile_id, self.recipient_id) diff --git a/zephyr/views.py b/zephyr/views.py index 0b162cf5e1..b190b1509f 100644 --- a/zephyr/views.py +++ b/zephyr/views.py @@ -8,7 +8,8 @@ from django.shortcuts import render from django.utils.timezone import utc from django.contrib.auth.models import User -from zephyr.models import Zephyr, UserProfile, ZephyrClass, Recipient, get_display_recipient +from zephyr.models import Zephyr, UserProfile, ZephyrClass, Subscription, \ + Recipient, get_display_recipient from zephyr.forms import RegistrationForm import datetime @@ -40,7 +41,7 @@ def home(request): if not request.user.is_authenticated(): return HttpResponseRedirect('accounts/home/') - zephyrs = Zephyr.objects.all() + zephyrs = filter_by_subscription(Zephyr.objects.all(), request.user) for zephyr in zephyrs: zephyr.display_recipient = get_display_recipient(zephyr.recipient) @@ -63,12 +64,25 @@ def update(request): user_profile.save() return HttpResponse(simplejson.dumps({}), mimetype='application/json') +def filter_by_subscription(zephyrs, user): + userprofile = UserProfile.objects.get(user=user) + subscribed_zephyrs = [] + subscriptions = [sub.recipient_id for sub in Subscription.objects.filter(userprofile_id=userprofile)] + for zephyr in zephyrs: + # If you are subscribed to the personal or class, or if you sent the personal, you can see the zephyr. + if (zephyr.recipient in subscriptions) or \ + ((zephyr.sender == userprofile) and zephyr.recipient.type == "personal"): + subscribed_zephyrs.append(zephyr) + + return subscribed_zephyrs + def get_updates(request): if not request.POST: # Do something pass last_received = request.POST.get('last_received') - new_zephyrs = Zephyr.objects.filter(id__gt=last_received) + new_zephyrs = filter_by_subscription(Zephyr.objects.filter(id__gt=last_received), + request.user) new_zephyr_list = [] for zephyr in new_zephyrs: new_zephyr_list.append({"id": zephyr.id, @@ -90,10 +104,10 @@ def personal_zephyr(request): # Do something reasonable. return HttpResponseRedirect(reverse('zephyr.views.home')) - recipient = Recipient() - recipient.user_or_class = user.pk - recipient.type = "personal" - recipient.save() + # Right now, you can't make recipients on the fly by sending zephyrs to new + # classes or people. + user_profile = UserProfile.objects.get(user=user) + recipient = Recipient.objects.get(user_or_class=user_profile.id, type="personal") new_zephyr = Zephyr() new_zephyr.sender = UserProfile.objects.get(user=request.user) @@ -115,10 +129,9 @@ def zephyr(request): my_class.name = class_name my_class.save() - recipient = Recipient() - recipient.user_or_class = my_class.pk - recipient.type = "class" - recipient.save() + # Right now, you can't make recipients on the fly by sending zephyrs to new + # classes or people. + recipient = Recipient.objects.get(user_or_class=my_class.id, type="class") new_zephyr = Zephyr() new_zephyr.sender = UserProfile.objects.get(user=request.user)