From d209b2e9050f7726f8a8e33fab71af68c912a84f Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Mon, 22 Apr 2013 15:24:38 -0700 Subject: [PATCH] Adding email for first share to tell users about their blurblog. --- apps/analyzer/urls.py | 2 +- apps/api/urls.py | 2 +- apps/categories/urls.py | 2 +- apps/feed_import/urls.py | 2 +- apps/mobile/urls.py | 2 +- apps/oauth/urls.py | 2 +- apps/profile/models.py | 30 +++++++++++++++++++ apps/profile/urls.py | 2 +- apps/push/urls.py | 2 +- apps/reader/urls.py | 2 +- apps/recommendations/urls.py | 2 +- apps/rss_feeds/urls.py | 2 +- apps/social/models.py | 7 +++++ apps/social/tasks.py | 6 ++++ apps/social/urls.py | 2 +- apps/social/views.py | 4 ++- apps/statistics/urls.py | 2 +- .../mail/email_first_share_to_blurblog.txt | 13 ++++++++ .../mail/email_first_share_to_blurblog.xhtml | 10 +++++++ urls.py | 2 +- vendor/paypal/standard/ipn/tests/test_urls.py | 2 +- vendor/paypal/standard/ipn/urls.py | 2 +- vendor/paypal/standard/pdt/tests/test_urls.py | 2 +- vendor/paypal/standard/pdt/urls.py | 2 +- vendor/zebra/urls.py | 2 +- 25 files changed, 88 insertions(+), 20 deletions(-) create mode 100644 templates/mail/email_first_share_to_blurblog.txt create mode 100644 templates/mail/email_first_share_to_blurblog.xhtml diff --git a/apps/analyzer/urls.py b/apps/analyzer/urls.py index 179249bf8..768afec14 100644 --- a/apps/analyzer/urls.py +++ b/apps/analyzer/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls.defaults import * +from django.conf.urls import * from apps.analyzer import views urlpatterns = patterns('', diff --git a/apps/api/urls.py b/apps/api/urls.py index 14b0014ce..370773a32 100644 --- a/apps/api/urls.py +++ b/apps/api/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls.defaults import * +from django.conf.urls import * from apps.api import views urlpatterns = patterns('', diff --git a/apps/categories/urls.py b/apps/categories/urls.py index 2cce6bda6..c91baf301 100644 --- a/apps/categories/urls.py +++ b/apps/categories/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls.defaults import url, patterns +from django.conf.urls import url, patterns from apps.categories import views urlpatterns = patterns('', diff --git a/apps/feed_import/urls.py b/apps/feed_import/urls.py index c5335b394..dcafe6dc8 100644 --- a/apps/feed_import/urls.py +++ b/apps/feed_import/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls.defaults import * +from django.conf.urls import * from apps.feed_import import views urlpatterns = patterns('apps.feed_import.views', diff --git a/apps/mobile/urls.py b/apps/mobile/urls.py index 9264adde7..f44a4b7a7 100644 --- a/apps/mobile/urls.py +++ b/apps/mobile/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls.defaults import * +from django.conf.urls import * from apps.mobile import views urlpatterns = patterns('apps.mobile.views', diff --git a/apps/oauth/urls.py b/apps/oauth/urls.py index 952d1d099..323b56b04 100644 --- a/apps/oauth/urls.py +++ b/apps/oauth/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls.defaults import url, patterns +from django.conf.urls import url, patterns from apps.oauth import views urlpatterns = patterns('', diff --git a/apps/profile/models.py b/apps/profile/models.py index 997e90408..236321e87 100644 --- a/apps/profile/models.py +++ b/apps/profile/models.py @@ -296,6 +296,36 @@ class Profile(models.Model): msg.send(fail_silently=True) logging.user(self.user, "~BB~FM~SBSending email for new user: %s" % self.user.email) + + def send_first_share_to_blurblog_email(self, force=False): + from apps.social.models import MSocialProfile, MSharedStory + + if not self.user.email: + return + + sent_email, created = MSentEmail.objects.get_or_create(receiver_user_id=self.user.pk, + email_type='first_share') + + if not created and not force: + return + + social_profile = MSocialProfile.objects.get(user_id=self.user.pk) + params = { + 'shared_stories': MSharedStory.objects.filter(user_id=self.user.pk).count(), + 'blurblog_url': social_profile.blurblog_url, + 'blurblog_rss': social_profile.blurblog_rss + } + user = self.user + text = render_to_string('mail/email_first_share_to_blurblog.txt', params) + html = render_to_string('mail/email_first_share_to_blurblog.xhtml', params) + subject = "Your shared stories on NewsBlur are available on your Blurblog" + msg = EmailMultiAlternatives(subject, text, + from_email='NewsBlur <%s>' % settings.HELLO_EMAIL, + to=['%s <%s>' % (user, user.email)]) + msg.attach_alternative(html, "text/html") + msg.send(fail_silently=True) + + logging.user(self.user, "~BB~FM~SBSending first share to blurblog email to: %s" % self.user.email) def send_new_premium_email(self, force=False): subs = UserSubscription.objects.filter(user=self.user) diff --git a/apps/profile/urls.py b/apps/profile/urls.py index 78c6d6228..ba4a11616 100644 --- a/apps/profile/urls.py +++ b/apps/profile/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls.defaults import * +from django.conf.urls import * from apps.profile import views urlpatterns = patterns('', diff --git a/apps/push/urls.py b/apps/push/urls.py index e7bad94fc..919f2ccf3 100644 --- a/apps/push/urls.py +++ b/apps/push/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls.defaults import * +from django.conf.urls import * from apps.push import views urlpatterns = patterns('', diff --git a/apps/reader/urls.py b/apps/reader/urls.py index 04c0824a4..fef399391 100644 --- a/apps/reader/urls.py +++ b/apps/reader/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls.defaults import * +from django.conf.urls import * from apps.reader import views urlpatterns = patterns('', diff --git a/apps/recommendations/urls.py b/apps/recommendations/urls.py index 017080b86..6509b6e86 100644 --- a/apps/recommendations/urls.py +++ b/apps/recommendations/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls.defaults import * +from django.conf.urls import * from apps.recommendations import views urlpatterns = patterns('', diff --git a/apps/rss_feeds/urls.py b/apps/rss_feeds/urls.py index e07b749ae..51458d8a4 100644 --- a/apps/rss_feeds/urls.py +++ b/apps/rss_feeds/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls.defaults import url, patterns +from django.conf.urls import url, patterns from apps.rss_feeds import views urlpatterns = patterns('', diff --git a/apps/social/models.py b/apps/social/models.py index 888c16b12..3a76c1bf0 100644 --- a/apps/social/models.py +++ b/apps/social/models.py @@ -114,6 +114,13 @@ class MSocialProfile(mongo.Document): self.username_slug, Site.objects.get_current().domain.replace('www.', '')) + @property + def blurblog_rss(self): + return "%s%s" % (self.blurblog_url, reverse('shared-stories-rss-feed', + kwargs={'user_id': self.user_id, + 'username': self.username_slug})) + + def recommended_users(self): r = redis.Redis(connection_pool=settings.REDIS_POOL) following_key = "F:%s:F" % (self.user_id) diff --git a/apps/social/tasks.py b/apps/social/tasks.py index c670ae859..c75fa23d2 100644 --- a/apps/social/tasks.py +++ b/apps/social/tasks.py @@ -25,6 +25,12 @@ class EmailFollowRequest(Task): def run(self, follower_user_id, followee_user_id): user_profile = MSocialProfile.get_user(followee_user_id) user_profile.send_email_for_follow_request(follower_user_id) + +class EmailFirstShare(Task): + + def run(self, user_id): + user = User.objects.get(pk=user_id) + user.profile.send_first_share_to_blurblog_email() class EmailCommentReplies(Task): diff --git a/apps/social/urls.py b/apps/social/urls.py index ccc9695e1..4cda294f0 100644 --- a/apps/social/urls.py +++ b/apps/social/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls.defaults import url, patterns +from django.conf.urls import url, patterns from apps.social import views urlpatterns = patterns('', diff --git a/apps/social/views.py b/apps/social/views.py index 76b8d7581..e44c12edd 100644 --- a/apps/social/views.py +++ b/apps/social/views.py @@ -17,7 +17,7 @@ from apps.rss_feeds.models import MStory, Feed, MStarredStory from apps.social.models import MSharedStory, MSocialServices, MSocialProfile, MSocialSubscription, MCommentReply from apps.social.models import MInteraction, MActivity, MFollowRequest from apps.social.tasks import PostToService, EmailCommentReplies, EmailStoryReshares -from apps.social.tasks import UpdateRecalcForSubscription +from apps.social.tasks import UpdateRecalcForSubscription, EmailFirstShare from apps.analyzer.models import MClassifierTitle, MClassifierAuthor, MClassifierFeed, MClassifierTag from apps.analyzer.models import apply_classifier_titles, apply_classifier_feeds, apply_classifier_authors, apply_classifier_tags from apps.analyzer.models import get_classifiers_for_user, sort_classifiers_by_feed @@ -553,6 +553,8 @@ def mark_story_as_shared(request): EmailStoryReshares.apply_async(kwargs=dict(shared_story_id=shared_story.id), countdown=settings.SECONDS_TO_DELAY_CELERY_EMAILS) + EmailFirstShare.apply_async(kwargs=dict(user_id=request.user.pk)) + if format == 'html': stories = MSharedStory.attach_users_to_stories(stories, profiles) return render_to_response('social/social_story.xhtml', { diff --git a/apps/statistics/urls.py b/apps/statistics/urls.py index 30c4a2695..6465a4456 100644 --- a/apps/statistics/urls.py +++ b/apps/statistics/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls.defaults import * +from django.conf.urls import * from apps.statistics import views urlpatterns = patterns('', diff --git a/templates/mail/email_first_share_to_blurblog.txt b/templates/mail/email_first_share_to_blurblog.txt new file mode 100644 index 000000000..f136fe598 --- /dev/null +++ b/templates/mail/email_first_share_to_blurblog.txt @@ -0,0 +1,13 @@ +{% extends "mail/email_base.txt" %} + +{% block body %}Your shared story is now on your Blurblog + +You can view your Blurblog here: {{ blurblog_url }} + +Your Blurblog also has an RSS feed: {{ blurblog_rss }} + +{% if shared_stories > 1 %}You've already shared {{ shared_stories }} stories, but you may not have known that your shared stories are on your Blurblog.{% else %}You just shared your first story on NewsBlur. All of your shared stories are available on your Blurblog.{% endif %} + +This is a personal website made for you that you can customize. You can also share out links to your blurblog, where friends and followers can reply and re-share your stories. + +Blurblogs were built so you would have a way to share stories with people who aren't on NewsBlur and don't want to load the entire reader just to read and comment on your shared stories.{% endblock body %} \ No newline at end of file diff --git a/templates/mail/email_first_share_to_blurblog.xhtml b/templates/mail/email_first_share_to_blurblog.xhtml new file mode 100644 index 000000000..be5f74167 --- /dev/null +++ b/templates/mail/email_first_share_to_blurblog.xhtml @@ -0,0 +1,10 @@ +{% extends "mail/email_base.xhtml" %} + +{% block body %} +

Your shared story is now on your Blurblog

+

You can view your Blurblog here: {{ blurblog_url }}

+

Your Blurblog also has an RSS feed: {{ blurblog_rss }}

+

{% if shared_stories > 1 %}You've already shared {{ shared_stories }} stories, but you may not have known that your shared stories are on your Blurblog.{% else %}You just shared your first story on NewsBlur. All of your shared stories are available on your Blurblog.{% endif %}

+

This is a personal website made for you that you can customize. You can also share out links to your blurblog, where friends and followers can reply and re-share your stories.

+

Blurblogs were built so you would have a way to share stories with people who aren't on NewsBlur and don't want to load the entire reader just to read and comment on your shared stories.

+{% endblock %} \ No newline at end of file diff --git a/urls.py b/urls.py index 9b4335369..eb3fa8376 100644 --- a/urls.py +++ b/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls.defaults import include, url, patterns +from django.conf.urls import include, url, patterns from django.conf import settings from apps.reader import views as reader_views from apps.static import views as static_views diff --git a/vendor/paypal/standard/ipn/tests/test_urls.py b/vendor/paypal/standard/ipn/tests/test_urls.py index 55d7f071b..6404aaebb 100644 --- a/vendor/paypal/standard/ipn/tests/test_urls.py +++ b/vendor/paypal/standard/ipn/tests/test_urls.py @@ -1,4 +1,4 @@ -from django.conf.urls.defaults import * +from django.conf.urls import * urlpatterns = patterns('paypal.standard.ipn.views', (r'^ipn/$', 'ipn'), diff --git a/vendor/paypal/standard/ipn/urls.py b/vendor/paypal/standard/ipn/urls.py index 9de742bda..f467949c1 100644 --- a/vendor/paypal/standard/ipn/urls.py +++ b/vendor/paypal/standard/ipn/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls.defaults import * +from django.conf.urls import * urlpatterns = patterns('paypal.standard.ipn.views', url(r'^$', 'ipn', name="paypal-ipn"), diff --git a/vendor/paypal/standard/pdt/tests/test_urls.py b/vendor/paypal/standard/pdt/tests/test_urls.py index 0eb164c86..923f22ef6 100644 --- a/vendor/paypal/standard/pdt/tests/test_urls.py +++ b/vendor/paypal/standard/pdt/tests/test_urls.py @@ -1,4 +1,4 @@ -from django.conf.urls.defaults import * +from django.conf.urls import * urlpatterns = patterns('paypal.standard.pdt.views', (r'^pdt/$', 'pdt'), diff --git a/vendor/paypal/standard/pdt/urls.py b/vendor/paypal/standard/pdt/urls.py index 9a088ff77..09c85e2b7 100644 --- a/vendor/paypal/standard/pdt/urls.py +++ b/vendor/paypal/standard/pdt/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls.defaults import * +from django.conf.urls import * urlpatterns = patterns('paypal.standard.pdt.views', url(r'^$', 'pdt', name="paypal-pdt"), diff --git a/vendor/zebra/urls.py b/vendor/zebra/urls.py index 929b79e55..eb7da671e 100755 --- a/vendor/zebra/urls.py +++ b/vendor/zebra/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls.defaults import * +from django.conf.urls import * from zebra import views