def del_comment(c): if not isinstance(c, Comment): return False if c.is_visible: c.is_visible = False c.save() obj = c.content_object obj.n_comment -= 1 obj.save() topics = obj.topics.all() if isinstance(obj, Link): for t in topics: topic_ship_update(topic=t, user=c.user, domain=obj.domain, is_comment=True, num=-1) elif isinstance(obj, Discuss): for t in topics: topic_ship_update(topic=t, user=c.user, is_comment=True, num=-1) data = c.user.userdata data.n_comments -= 1 data.save() if c.parent_comment: c.parent_comment.n_comment -= 1 c.parent_comment.save() return True
def vote_obj(user, obj): ''' ''' v = Vote.objects.filter(user=user, object_id=obj.id) if v: return v[0] if not isinstance(obj, Link) and \ not isinstance(obj, Discuss) and \ not isinstance(obj, Comment): return False if user == obj.user: return True data = obj.user.userdata data.honor += 1 now = timezone.now() if is_this_month(now, data.this_month_start_time): data.this_month_vote += 1 elif is_last_month(now, data.this_month_start_time): if not is_last2_month(now, data.last_month_start_time): data.last_month_half_votes = 0 data.this_month_vote = (data.this_month_vote - data.last_month_half_votes) / 2 data.last_month_half_votes = data.this_month_vote data.last_month_start_time = data.this_month_start_time data.this_month_start_time = now data.this_month_vote += 1 else: data.this_month_vote = 1 data.this_month_start_time = now data.save() if isinstance(obj, Link): for topic in obj.topics.all(): topic_ship_update(topic, obj.user, domain=obj.domain, is_vote=True) elif isinstance(obj, Discuss): for topic in obj.topics.all(): topic_ship_update(topic, obj.user, is_vote=True) obj.n_supporter += 1 if isinstance(obj, Link): average_sum = 0 for topic in obj.topics.all(): if FILTER: hot_filter(obj, topic, topic.link_average_votes, WAY_LINK_TOPIC_POST) average_sum += topic.link_average_votes count = obj.topics.count() if count: average = average_sum * 1.0 / count else: average = get_averages().link_average_votes if obj.n_supporter >= int(BOUTIQUE_RATE * average) + 1: if average != 0: obj.is_boutique = True elif isinstance(obj, Discuss): average_sum = 0 for topic in obj.topics.all(): if filter: hot_filter(obj, topic, topic.discuss_average_votes, WAY_DISCUSS_TOPIC_POST) average_sum += topic.discuss_average_votes count = obj.topics.count() if count: average = average_sum * 1.0 / count else: average = get_averages().discuss_average_votes if obj.n_supporter >= int(BOUTIQUE_RATE * average) + 1: if average != 0: obj.is_boutique = True else: average_sum = 0 for topic in obj.content_object.topics.all(): average_sum += topic.comment_average_votes count = obj.content_object.topics.count() if count: average = average_sum * 1.0 / count else: average = get_averages().comment_average_votes if obj.n_supporter >= int(BOUTIQUE_RATE * average) + 1: if average != 0: obj.is_boutique = True UserData.objects.filter(user=user).update(n_supports=F('n_supports') + 1) obj.save() vote = Vote.objects.create(user=user, content_object=obj) return vote
def post_comment(user, content, obj, parent=None): ''' ''' comment = Comment(id=get_available_id(), user=user, content=content, content_object=obj) if parent and isinstance(parent, Comment): comment.parent_comment = parent parent.n_comment += 1 parent.save() topics = obj.topics.all() if isinstance(obj, Link): comment.way = 'l' for topic in topics: topic_ship_update(topic=topic, user=user, domain=obj.domain, is_comment=True) elif isinstance(obj, Discuss): comment.way = 'd' for topic in topics: topic_ship_update(topic=topic, user=user, is_comment=True) else: return False comment.save() if parent and isinstance(parent, Comment): if user != parent.user: creat_remind(parent.user, user, REMIND_NEW_COMMENT, comment) else: if user != obj.user: creat_remind(obj.user, user, REMIND_NEW_COMMENT, comment) if isinstance(obj, Link): Dynamic.objects.create(column=user.userprofile.get_column(), way=WAY_LINK_COMMENT, content_object=comment, comment_object=obj) elif isinstance(obj, Discuss): Dynamic.objects.create(column=user.userprofile.get_column(), way=WAY_DISCUSS_COMMENT, content_object=comment, comment_object=obj) DiscussIndex.objects.filter(discuss=obj).update( last_active_time=timezone.now(), last_active_user=user) obj.last_active_time = timezone.now() obj.last_active_user = user if not user.userdata.discusses.filter(id=obj.id).count(): user.userdata.discusses.add(obj) else: pass obj.n_comment += 1 obj.save() UserData.objects.filter(user=user).update(n_comments=F('n_comments') + 1) return comment
def vote_obj(user, obj): """ """ v = Vote.objects.filter(user=user, object_id=obj.id) if v: return v[0] if not isinstance(obj, Link) and not isinstance(obj, Discuss) and not isinstance(obj, Comment): return False if user == obj.user: return True data = obj.user.userdata data.honor += 1 now = timezone.now() if is_this_month(now, data.this_month_start_time): data.this_month_vote += 1 elif is_last_month(now, data.this_month_start_time): if not is_last2_month(now, data.last_month_start_time): data.last_month_half_votes = 0 data.this_month_vote = (data.this_month_vote - data.last_month_half_votes) / 2 data.last_month_half_votes = data.this_month_vote data.last_month_start_time = data.this_month_start_time data.this_month_start_time = now data.this_month_vote += 1 else: data.this_month_vote = 1 data.this_month_start_time = now data.save() if isinstance(obj, Link): for topic in obj.topics.all(): topic_ship_update(topic, obj.user, domain=obj.domain, is_vote=True) elif isinstance(obj, Discuss): for topic in obj.topics.all(): topic_ship_update(topic, obj.user, is_vote=True) obj.n_supporter += 1 if isinstance(obj, Link): average_sum = 0 for topic in obj.topics.all(): if FILTER: hot_filter(obj, topic, topic.link_average_votes, WAY_LINK_TOPIC_POST) average_sum += topic.link_average_votes count = obj.topics.count() if count: average = average_sum * 1.0 / count else: average = get_averages().link_average_votes if obj.n_supporter >= int(BOUTIQUE_RATE * average) + 1: if average != 0: obj.is_boutique = True elif isinstance(obj, Discuss): average_sum = 0 for topic in obj.topics.all(): if filter: hot_filter(obj, topic, topic.discuss_average_votes, WAY_DISCUSS_TOPIC_POST) average_sum += topic.discuss_average_votes count = obj.topics.count() if count: average = average_sum * 1.0 / count else: average = get_averages().discuss_average_votes if obj.n_supporter >= int(BOUTIQUE_RATE * average) + 1: if average != 0: obj.is_boutique = True else: average_sum = 0 for topic in obj.content_object.topics.all(): average_sum += topic.comment_average_votes count = obj.content_object.topics.count() if count: average = average_sum * 1.0 / count else: average = get_averages().comment_average_votes if obj.n_supporter >= int(BOUTIQUE_RATE * average) + 1: if average != 0: obj.is_boutique = True UserData.objects.filter(user=user).update(n_supports=F("n_supports") + 1) obj.save() vote = Vote.objects.create(user=user, content_object=obj) return vote