def save(self, profile_callback=None): username = self.cleaned_data['username'] password = self.cleaned_data['password'] email = self.cleaned_data.get('email', None) if email: email_exists = User.objects.filter(email__iexact=email).count() if email_exists: raise forms.ValidationError(_(u'Someone is already using that email address.')) exists = User.objects.filter(username__iexact=username).count() if exists: user_auth = authenticate(username=username, password=password) if not user_auth: raise forms.ValidationError(_(u'Someone is already using that username.')) else: return user_auth new_user = User(username=username) new_user.set_password(password) new_user.is_active = True new_user.email = email new_user.save() new_user = authenticate(username=username, password=password) MActivity.new_signup(user_id=new_user.pk) if new_user.email: EmailNewUser.delay(user_id=new_user.pk) return new_user
def add_subscription(cls, user, feed_address, folder=None, bookmarklet=False, auto_active=True, skip_fetch=False): feed = None us = None logging.user(user, "~FRAdding URL: ~SB%s (in %s) %s" % (feed_address, folder, "~FCAUTO-ADD" if not auto_active else "")) feed = Feed.get_feed_from_url(feed_address) if not feed: code = -1 if bookmarklet: message = "This site does not have an RSS feed. Nothing is linked to from this page." else: message = "This address does not point to an RSS feed or a website with an RSS feed." else: us, subscription_created = cls.objects.get_or_create( feed=feed, user=user, defaults={ 'needs_unread_recalc': True, 'active': auto_active, } ) code = 1 message = "" if us: user_sub_folders_object, created = UserSubscriptionFolders.objects.get_or_create( user=user, defaults={'folders': '[]'} ) if created: user_sub_folders = [] else: user_sub_folders = json.decode(user_sub_folders_object.folders) user_sub_folders = add_object_to_folder(feed.pk, folder, user_sub_folders) user_sub_folders_object.folders = json.encode(user_sub_folders) user_sub_folders_object.save() if auto_active or user.profile.is_premium: us.active = True us.save() if not skip_fetch and feed.last_update < datetime.datetime.utcnow() - datetime.timedelta(days=1): feed = feed.update() from apps.social.models import MActivity MActivity.new_feed_subscription(user_id=user.pk, feed_id=feed.pk, feed_title=feed.title) feed.setup_feed_for_premium_subscribers() return code, message, us
def run(self, user_id): UserSubscription.trim_user_read_stories(user_id) UserSubscription.verify_feeds_scheduled(user_id) Profile.count_all_feed_subscribers_for_user(user_id) MInteraction.trim(user_id) MActivity.trim(user_id) # UserSubscription.refresh_stale_feeds(user_id) try: ss = MSocialServices.objects.get(user_id=user_id) except MSocialServices.DoesNotExist: logging.debug(" ---> ~FRCleaning up user, can't find social_services for user_id: ~SB%s" % user_id) return ss.sync_twitter_photo()
def profile(request): user = get_user(request.user) user_id = request.GET.get('user_id', user.pk) include_activities_html = request.REQUEST.get('include_activities_html', None) user_profile = MSocialProfile.get_user(user_id) user_profile.count_follows() user_profile = user_profile.to_json(include_follows=True, common_follows_with_user=user.pk) profile_ids = set(user_profile['followers_youknow'] + user_profile['followers_everybody'] + user_profile['following_youknow'] + user_profile['following_everybody']) profiles = MSocialProfile.profiles(profile_ids) activities, _ = MActivity.user(user_id, page=1, public=True) logging.user(request, "~BB~FRLoading social profile: %s" % user_profile['username']) payload = { 'user_profile': user_profile, # XXX TODO: Remove following 4 vestigial params. 'followers_youknow': user_profile['followers_youknow'], 'followers_everybody': user_profile['followers_everybody'], 'following_youknow': user_profile['following_youknow'], 'following_everybody': user_profile['following_everybody'], 'profiles': dict([(p.user_id, p.to_json(compact=True)) for p in profiles]), 'activities': activities, } if include_activities_html: payload['activities_html'] = render_to_string('reader/activities_module.xhtml', { 'activities': activities, 'username': user_profile['username'], 'public': True, }) return payload
def load_activities(request): user_id = request.REQUEST.get('user_id', None) if user_id: user_id = int(user_id) user = User.objects.get(pk=user_id) else: user = get_user(request) user_id = user.pk public = user_id != request.user.pk page = max(1, int(request.REQUEST.get('page', 1))) limit = request.REQUEST.get('limit', 4) activities, has_next_page = MActivity.user(user_id, page=page, limit=limit, public=public) format = request.REQUEST.get('format', None) data = { 'activities': activities, 'page': page, 'has_next_page': has_next_page, 'username': (user.username if public else 'You'), } if format == 'html': return render_to_response('reader/activities_module.xhtml', data, context_instance=RequestContext(request)) else: return json.json_response(request, data)
def load_activities(request): user_id = request.REQUEST.get("user_id", None) if user_id: user_id = int(user_id) user = User.objects.get(pk=user_id) else: user = get_user(request) user_id = user.pk public = user_id != request.user.pk page = max(1, int(request.REQUEST.get("page", 1))) limit = request.REQUEST.get("limit", 4) activities, has_next_page = MActivity.user(user_id, page=page, limit=limit, public=public) format = request.REQUEST.get("format", None) data = { "activities": activities, "page": page, "has_next_page": has_next_page, "username": (user.username if public else "You"), } if format == "html": return render_to_response("reader/activities_module.xhtml", data, context_instance=RequestContext(request)) else: return json.json_response(request, data)
def like_comment(request): code = 1 feed_id = int(request.POST['story_feed_id']) story_id = request.POST['story_id'] comment_user_id = request.POST['comment_user_id'] format = request.REQUEST.get('format', 'json') if comment_user_id == request.user.pk: return json.json_response(request, {'code': -1, 'message': 'You cannot favorite your own shared story comment.'}) shared_story = MSharedStory.objects.get(user_id=comment_user_id, story_feed_id=feed_id, story_guid=story_id) shared_story.add_liking_user(request.user.pk) comment, profiles = shared_story.comment_with_author_and_profiles() comment_user = User.objects.get(pk=shared_story.user_id) logging.user(request, "~BB~FMLiking comment by ~SB%s~SN: %s" % ( comment_user.username, shared_story.comments[:30], )) MActivity.new_comment_like(liking_user_id=request.user.pk, comment_user_id=comment['user_id'], story_id=story_id, story_title=shared_story.story_title, comments=shared_story.comments) MInteraction.new_comment_like(liking_user_id=request.user.pk, comment_user_id=comment['user_id'], story_id=story_id, story_title=shared_story.story_title, comments=shared_story.comments) if format == 'html': comment = MSharedStory.attach_users_to_comment(comment, profiles) return render_to_response('social/story_comment.xhtml', { 'comment': comment, }, context_instance=RequestContext(request)) else: return json.json_response(request, { 'code': code, 'comment': comment, 'user_profiles': profiles, })
def save(self, profile_callback=None): username = self.cleaned_data['username'] password = self.cleaned_data['password'] email = self.cleaned_data.get('email', None) if email: email_exists = User.objects.filter(email__iexact=email).count() if email_exists: raise forms.ValidationError( _(u'Someone is already using that email address.')) exists = User.objects.filter(username__iexact=username).count() if exists: user_auth = authenticate(username=username, password=password) if not user_auth: raise forms.ValidationError( _(u'Someone is already using that username.')) else: return user_auth if not password: password = username new_user = User(username=username) new_user.set_password(password) new_user.is_active = False new_user.email = email new_user.save() new_user = authenticate(username=username, password=password) MActivity.new_signup(user_id=new_user.pk) RNewUserQueue.add_user(new_user.pk) if new_user.email: EmailNewUser.delay(user_id=new_user.pk) if getattr(settings, 'AUTO_PREMIUM_NEW_USERS', False): new_user.profile.activate_premium() elif getattr(settings, 'AUTO_ENABLE_NEW_USERS', False): new_user.profile.activate_free() return new_user
def save(self, profile_callback=None): username = self.cleaned_data['username'] password = self.cleaned_data['password'] email = self.cleaned_data.get('email', None) if email: email_exists = User.objects.filter(email__iexact=email).count() if email_exists: raise forms.ValidationError(_(u'Someone is already using that email address.')) exists = User.objects.filter(username__iexact=username).count() if exists: user_auth = authenticate(username=username, password=password) if not user_auth: raise forms.ValidationError(_(u'Someone is already using that username.')) else: return user_auth if not password: password = username new_user = User(username=username) new_user.set_password(password) new_user.is_active = False new_user.email = email new_user.save() new_user = authenticate(username=username, password=password) MActivity.new_signup(user_id=new_user.pk) RNewUserQueue.add_user(new_user.pk) if new_user.email: EmailNewUser.delay(user_id=new_user.pk) if getattr(settings, 'AUTO_PREMIUM_NEW_USERS', False): new_user.profile.activate_premium() elif getattr(settings, 'AUTO_ENABLE_NEW_USERS', False): new_user.profile.activate_free() return new_user
def load_activities(request): user = get_user(request) page = max(1, int(request.REQUEST.get('page', 1))) activities, has_next_page = MActivity.user(user.pk, page=page) return { 'activities': activities, 'page': page, 'has_next_page': has_next_page, 'username': '******', }
def save(self, profile_callback=None): username = self.cleaned_data["username"] password = self.cleaned_data["password"] email = self.cleaned_data.get("email", None) if email: email_exists = User.objects.filter(email__iexact=email).count() if email_exists: raise forms.ValidationError(_(u"此邮件地址已经被使用。")) exists = User.objects.filter(username__iexact=username).count() if exists: user_auth = authenticate(username=username, password=password) if not user_auth: raise forms.ValidationError(_(u"此用户名已经被使用。")) else: return user_auth if not password: password = username new_user = User(username=username) new_user.set_password(password) new_user.is_active = False new_user.email = email new_user.save() new_user = authenticate(username=username, password=password) MActivity.new_signup(user_id=new_user.pk) RNewUserQueue.add_user(new_user.pk) if new_user.email: EmailNewUser.delay(user_id=new_user.pk) if getattr(settings, "AUTO_PREMIUM_NEW_USERS", False): new_user.profile.activate_premium() elif getattr(settings, "AUTO_ENABLE_NEW_USERS", False): new_user.profile.activate_free() return new_user
def like_comment(request): code = 1 feed_id = int(request.POST["story_feed_id"]) story_id = request.POST["story_id"] comment_user_id = request.POST["comment_user_id"] format = request.REQUEST.get("format", "json") if comment_user_id == request.user.pk: return json.json_response( request, {"code": -1, "message": "You cannot favorite your own shared story comment."} ) shared_story = MSharedStory.objects.get(user_id=comment_user_id, story_feed_id=feed_id, story_guid=story_id) shared_story.add_liking_user(request.user.pk) comment, profiles = shared_story.comment_with_author_and_profiles() comment_user = User.objects.get(pk=shared_story.user_id) logging.user(request, "~BB~FMLiking comment by ~SB%s~SN: %s" % (comment_user.username, shared_story.comments[:30])) MActivity.new_comment_like( liking_user_id=request.user.pk, comment_user_id=comment["user_id"], story_id=story_id, story_title=shared_story.story_title, comments=shared_story.comments, ) MInteraction.new_comment_like( liking_user_id=request.user.pk, comment_user_id=comment["user_id"], story_id=story_id, story_title=shared_story.story_title, comments=shared_story.comments, ) if format == "html": comment = MSharedStory.attach_users_to_comment(comment, profiles) return render_to_response( "social/story_comment.xhtml", {"comment": comment}, context_instance=RequestContext(request) ) else: return json.json_response(request, {"code": code, "comment": comment, "user_profiles": profiles})
def render_activities_module(context, page=1): user = get_user(context['user']) activities, has_next_page = MActivity.user(user.pk, page) return { 'user': user, 'activities': activities, 'page': page, 'has_next_page': has_next_page, 'username': '******', 'MEDIA_URL': context['MEDIA_URL'], }
def save(self, profile_callback=None): username = self.cleaned_data['username'] password = self.cleaned_data['password'] email = self.cleaned_data.get('email', None) if email: email_exists = User.objects.filter(email__iexact=email).count() if email_exists: raise forms.ValidationError( _(u'Someone is already using that email address.')) exists = User.objects.filter(username__iexact=username).count() if exists: user_auth = authenticate(username=username, password=password) if not user_auth: raise forms.ValidationError( _(u'Someone is already using that username.')) else: return user_auth if not password: password = username new_user = User(username=username) new_user.set_password(password) new_user.is_active = True new_user.email = email new_user.save() new_user = authenticate(username=username, password=password) MActivity.new_signup(user_id=new_user.pk) if new_user.email: EmailNewUser.delay(user_id=new_user.pk) return new_user
def profile(request): user = get_user(request.user) user_id = request.GET.get("user_id", user.pk) categories = request.GET.getlist("category") include_activities_html = request.REQUEST.get("include_activities_html", None) user_profile = MSocialProfile.get_user(user_id) user_profile.count_follows() user_profile = user_profile.to_json(include_follows=True, common_follows_with_user=user.pk) profile_ids = set( user_profile["followers_youknow"] + user_profile["followers_everybody"] + user_profile["following_youknow"] + user_profile["following_everybody"] ) profiles = MSocialProfile.profiles(profile_ids) activities, _ = MActivity.user(user_id, page=1, public=True, categories=categories) logging.user(request, "~BB~FRLoading social profile: %s" % user_profile["username"]) payload = { "user_profile": user_profile, # XXX TODO: Remove following 4 vestigial params. "followers_youknow": user_profile["followers_youknow"], "followers_everybody": user_profile["followers_everybody"], "following_youknow": user_profile["following_youknow"], "following_everybody": user_profile["following_everybody"], "profiles": dict([(p.user_id, p.to_json(compact=True)) for p in profiles]), "activities": activities, } if include_activities_html: payload["activities_html"] = render_to_string( "reader/activities_module.xhtml", {"activities": activities, "username": user_profile["username"], "public": True}, ) return payload
def save_comment_reply(request): code = 1 feed_id = int(request.POST['story_feed_id']) story_id = request.POST['story_id'] comment_user_id = request.POST['comment_user_id'] reply_comments = request.POST.get('reply_comments') reply_id = request.POST.get('reply_id') format = request.REQUEST.get('format', 'json') original_message = None if not reply_comments: return json.json_response(request, {'code': -1, 'message': 'Reply comments cannot be empty.'}) shared_story = MSharedStory.objects.get(user_id=comment_user_id, story_feed_id=feed_id, story_guid=story_id) reply = MCommentReply() reply.user_id = request.user.pk reply.publish_date = datetime.datetime.now() reply.comments = reply_comments if reply_id: replies = [] for story_reply in shared_story.replies: if (story_reply.user_id == reply.user_id and story_reply.reply_id == ObjectId(reply_id)): reply.publish_date = story_reply.publish_date reply.reply_id = story_reply.reply_id original_message = story_reply.comments replies.append(reply) else: replies.append(story_reply) shared_story.replies = replies logging.user(request, "~FCUpdating comment reply in ~FM%s: ~SB~FB%s~FM" % ( shared_story.story_title[:20], reply_comments[:30])) else: reply.reply_id = ObjectId() logging.user(request, "~FCReplying to comment in: ~FM%s: ~SB~FB%s~FM" % ( shared_story.story_title[:20], reply_comments[:30])) shared_story.replies.append(reply) shared_story.save() comment, profiles = shared_story.comment_with_author_and_profiles() # Interaction for every other replier and original commenter MActivity.new_comment_reply(user_id=request.user.pk, comment_user_id=comment['user_id'], reply_content=reply_comments, original_message=original_message, story_id=story_id, story_feed_id=feed_id, story_title=shared_story.story_title) if comment['user_id'] != request.user.pk: MInteraction.new_comment_reply(user_id=comment['user_id'], reply_user_id=request.user.pk, reply_content=reply_comments, original_message=original_message, story_id=story_id, story_feed_id=feed_id, story_title=shared_story.story_title) reply_user_ids = list(r['user_id'] for r in comment['replies']) for user_id in set(reply_user_ids).difference([comment['user_id']]): if request.user.pk != user_id: MInteraction.new_reply_reply(user_id=user_id, comment_user_id=comment['user_id'], reply_user_id=request.user.pk, reply_content=reply_comments, original_message=original_message, story_id=story_id, story_feed_id=feed_id, story_title=shared_story.story_title) EmailCommentReplies.apply_async(kwargs=dict(shared_story_id=shared_story.id, reply_id=reply.reply_id), countdown=60) if format == 'html': comment = MSharedStory.attach_users_to_comment(comment, profiles) return render_to_response('social/story_comment.xhtml', { 'comment': comment, }, context_instance=RequestContext(request)) else: return json.json_response(request, { 'code': code, 'comment': comment, 'reply_id': reply.reply_id, 'user_profiles': profiles })
def save_comment_reply(request): code = 1 feed_id = int(request.POST["story_feed_id"]) story_id = request.POST["story_id"] comment_user_id = request.POST["comment_user_id"] reply_comments = request.POST.get("reply_comments") reply_id = request.POST.get("reply_id") format = request.REQUEST.get("format", "json") original_message = None if not reply_comments: return json.json_response(request, {"code": -1, "message": "Reply comments cannot be empty."}) shared_story = MSharedStory.objects.get(user_id=comment_user_id, story_feed_id=feed_id, story_guid=story_id) reply = MCommentReply() reply.user_id = request.user.pk reply.publish_date = datetime.datetime.now() reply.comments = reply_comments if reply_id: replies = [] for story_reply in shared_story.replies: if story_reply.user_id == reply.user_id and story_reply.reply_id == ObjectId(reply_id): reply.publish_date = story_reply.publish_date reply.reply_id = story_reply.reply_id original_message = story_reply.comments replies.append(reply) else: replies.append(story_reply) shared_story.replies = replies logging.user( request, "~FCUpdating comment reply in ~FM%s: ~SB~FB%s~FM" % (shared_story.story_title[:20], reply_comments[:30]), ) else: reply.reply_id = ObjectId() logging.user( request, "~FCReplying to comment in: ~FM%s: ~SB~FB%s~FM" % (shared_story.story_title[:20], reply_comments[:30]), ) shared_story.replies.append(reply) shared_story.save() comment, profiles = shared_story.comment_with_author_and_profiles() # Interaction for every other replier and original commenter MActivity.new_comment_reply( user_id=request.user.pk, comment_user_id=comment["user_id"], reply_content=reply_comments, original_message=original_message, story_id=story_id, story_feed_id=feed_id, story_title=shared_story.story_title, ) if comment["user_id"] != request.user.pk: MInteraction.new_comment_reply( user_id=comment["user_id"], reply_user_id=request.user.pk, reply_content=reply_comments, original_message=original_message, story_id=story_id, story_feed_id=feed_id, story_title=shared_story.story_title, ) reply_user_ids = list(r["user_id"] for r in comment["replies"]) for user_id in set(reply_user_ids).difference([comment["user_id"]]): if request.user.pk != user_id: MInteraction.new_reply_reply( user_id=user_id, comment_user_id=comment["user_id"], reply_user_id=request.user.pk, reply_content=reply_comments, original_message=original_message, story_id=story_id, story_feed_id=feed_id, story_title=shared_story.story_title, ) EmailCommentReplies.apply_async(kwargs=dict(shared_story_id=shared_story.id, reply_id=reply.reply_id), countdown=60) if format == "html": comment = MSharedStory.attach_users_to_comment(comment, profiles) return render_to_response( "social/story_comment.xhtml", {"comment": comment}, context_instance=RequestContext(request) ) else: return json.json_response( request, {"code": code, "comment": comment, "reply_id": reply.reply_id, "user_profiles": profiles} )
def remove_comment_reply(request): code = 1 feed_id = int(request.POST["story_feed_id"]) story_id = request.POST["story_id"] comment_user_id = request.POST["comment_user_id"] reply_id = request.POST.get("reply_id") format = request.REQUEST.get("format", "json") original_message = None shared_story = MSharedStory.objects.get(user_id=comment_user_id, story_feed_id=feed_id, story_guid=story_id) replies = [] for story_reply in shared_story.replies: if (story_reply.user_id == request.user.pk or request.user.is_staff) and story_reply.reply_id == ObjectId( reply_id ): original_message = story_reply.comments # Skip reply else: replies.append(story_reply) shared_story.replies = replies shared_story.save() logging.user( request, "~FCRemoving comment reply in ~FM%s: ~SB~FB%s~FM" % (shared_story.story_title[:20], original_message and original_message[:30]), ) comment, profiles = shared_story.comment_with_author_and_profiles() # Interaction for every other replier and original commenter MActivity.remove_comment_reply( user_id=request.user.pk, comment_user_id=comment["user_id"], reply_content=original_message, story_id=story_id, story_feed_id=feed_id, ) MInteraction.remove_comment_reply( user_id=comment["user_id"], reply_user_id=request.user.pk, reply_content=original_message, story_id=story_id, story_feed_id=feed_id, ) reply_user_ids = [reply["user_id"] for reply in comment["replies"]] for user_id in set(reply_user_ids).difference([comment["user_id"]]): if request.user.pk != user_id: MInteraction.remove_reply_reply( user_id=user_id, comment_user_id=comment["user_id"], reply_user_id=request.user.pk, reply_content=original_message, story_id=story_id, story_feed_id=feed_id, ) if format == "html": comment = MSharedStory.attach_users_to_comment(comment, profiles) return render_to_response( "social/story_comment.xhtml", {"comment": comment}, context_instance=RequestContext(request) ) else: return json.json_response(request, {"code": code, "comment": comment, "user_profiles": profiles})
def load_activities(request): user = get_user(request) page = max(1, int(request.REQUEST.get("page", 1))) activities, has_next_page = MActivity.user(user.pk, page=page) return {"activities": activities, "page": page, "has_next_page": has_next_page, "username": "******"}
def add_subscription(cls, user, feed_address, folder=None, bookmarklet=False, auto_active=True, skip_fetch=False): feed = None us = None logging.user( user, "~FRAdding URL: ~SB%s (in %s) %s" % (feed_address, folder, "~FCAUTO-ADD" if not auto_active else "")) feed = Feed.get_feed_from_url(feed_address) if not feed: code = -1 if bookmarklet: message = "This site does not have an RSS feed. Nothing is linked to from this page." else: message = "This address does not point to an RSS feed or a website with an RSS feed." else: us, subscription_created = cls.objects.get_or_create( feed=feed, user=user, defaults={ 'needs_unread_recalc': True, 'active': auto_active, }) code = 1 message = "" if us: user_sub_folders_object, created = UserSubscriptionFolders.objects.get_or_create( user=user, defaults={'folders': '[]'}) if created: user_sub_folders = [] else: user_sub_folders = json.decode(user_sub_folders_object.folders) user_sub_folders = add_object_to_folder(feed.pk, folder, user_sub_folders) user_sub_folders_object.folders = json.encode(user_sub_folders) user_sub_folders_object.save() if auto_active or user.profile.is_premium: us.active = True us.save() if not skip_fetch and feed.last_update < datetime.datetime.utcnow( ) - datetime.timedelta(days=1): feed = feed.update() from apps.social.models import MActivity MActivity.new_feed_subscription(user_id=user.pk, feed_id=feed.pk, feed_title=feed.title) feed.setup_feed_for_premium_subscribers() return code, message, us
def opml_upload(request): xml_opml = None message = "OK" code = 1 payload = {} if request.method == 'POST': if 'file' in request.FILES: logging.user(request, "~FR~SBOPML upload starting...") file = request.FILES['file'] xml_opml = file.read() try: UploadedOPML.objects.create(user_id=request.user.pk, opml_file=xml_opml) except (UnicodeDecodeError, ValidationError, InvalidStringData): folders = None code = -1 message = "There was a Unicode decode error when reading your OPML file. Ensure it's a text file with a .opml or .xml extension. Is it a zip file?" opml_importer = OPMLImporter(xml_opml, request.user) try: folders = opml_importer.try_processing() except TimeoutError: folders = None ProcessOPML.delay(request.user.pk) feed_count = opml_importer.count_feeds_in_opml() logging.user( request, "~FR~SBOPML upload took too long, found %s feeds. Tasking..." % feed_count) payload = dict(folders=folders, delayed=True, feed_count=feed_count) code = 2 message = "" except AttributeError: code = -1 message = "OPML import failed. Couldn't parse XML file." folders = None if folders: code = 1 feeds = UserSubscription.objects.filter( user=request.user).values() payload = dict(folders=folders, feeds=feeds) logging.user( request, "~FR~SBOPML Upload: ~SK%s~SN~SB~FR feeds" % (len(feeds))) from apps.social.models import MActivity MActivity.new_opml_import(user_id=request.user.pk, count=len(feeds)) UserSubscription.queue_new_feeds(request.user) UserSubscription.refresh_stale_feeds(request.user, exclude_new=True) else: message = "Attach an .opml file." code = -1 return HttpResponse(json.encode( dict(message=message, code=code, payload=payload)), content_type='text/html')
def remove_comment_reply(request): code = 1 feed_id = int(request.POST['story_feed_id']) story_id = request.POST['story_id'] comment_user_id = request.POST['comment_user_id'] reply_id = request.POST.get('reply_id') format = request.REQUEST.get('format', 'json') original_message = None shared_story = MSharedStory.objects.get(user_id=comment_user_id, story_feed_id=feed_id, story_guid=story_id) replies = [] for story_reply in shared_story.replies: if ((story_reply.user_id == request.user.pk or request.user.is_staff) and story_reply.reply_id == ObjectId(reply_id)): original_message = story_reply.comments # Skip reply else: replies.append(story_reply) shared_story.replies = replies shared_story.save() logging.user(request, "~FCRemoving comment reply in ~FM%s: ~SB~FB%s~FM" % ( shared_story.story_title[:20], original_message and original_message[:30])) comment, profiles = shared_story.comment_with_author_and_profiles() # Interaction for every other replier and original commenter MActivity.remove_comment_reply(user_id=request.user.pk, comment_user_id=comment['user_id'], reply_content=original_message, story_id=story_id, story_feed_id=feed_id) MInteraction.remove_comment_reply(user_id=comment['user_id'], reply_user_id=request.user.pk, reply_content=original_message, story_id=story_id, story_feed_id=feed_id) reply_user_ids = [reply['user_id'] for reply in comment['replies']] for user_id in set(reply_user_ids).difference([comment['user_id']]): if request.user.pk != user_id: MInteraction.remove_reply_reply(user_id=user_id, comment_user_id=comment['user_id'], reply_user_id=request.user.pk, reply_content=original_message, story_id=story_id, story_feed_id=feed_id) if format == 'html': comment = MSharedStory.attach_users_to_comment(comment, profiles) return render_to_response('social/story_comment.xhtml', { 'comment': comment, }, context_instance=RequestContext(request)) else: return json.json_response(request, { 'code': code, 'comment': comment, 'user_profiles': profiles })