- moderate_user_form = None\r
-\r
- return render_to_response(user_view.template_file,{\r
- 'moderate_user_form': moderate_user_form,\r
- "tab_name" : user_view.id,\r
- "tab_description" : user_view.tab_description,\r
- "page_title" : user_view.page_title,\r
- "view_user" : user,\r
- "questions" : questions,\r
- "answers" : answers,\r
- "up_votes" : up_votes,\r
- "down_votes" : down_votes,\r
- "total_votes": up_votes + down_votes,\r
- "votes_today_left": votes_total-votes_today,\r
- "votes_total_per_day": votes_total,\r
- "user_tags" : user_tags[:50],\r
- "awards": awards,\r
- "total_awards" : awards.count(),\r
- }, context_instance=RequestContext(request))\r
-\r
-def user_recent(request, user_id, user_view):\r
- user = get_object_or_404(User, id=user_id)\r
- def get_type_name(type_id):\r
- for item in TYPE_ACTIVITY:\r
- if type_id in item:\r
- return item[1]\r
-\r
- class Event:\r
- def __init__(self, time, type, title, summary, answer_id, question_id):\r
- self.time = time\r
- self.type = get_type_name(type)\r
- self.type_id = type\r
- self.title = title\r
- self.summary = summary\r
- slug_title = slugify(title)\r
- self.title_link = reverse('question', kwargs={'id':question_id, 'slug':slug_title})\r
- if int(answer_id) > 0:\r
- self.title_link += '#%s' % answer_id\r
-\r
- class AwardEvent:\r
- def __init__(self, time, type, id):\r
- self.time = time\r
- self.type = get_type_name(type)\r
- self.type_id = type\r
- self.badge = get_object_or_404(Badge, id=id)\r
-\r
- activities = []\r
- # ask questions\r
- questions = Activity.objects.extra(\r
- select={\r
- 'title' : 'question.title',\r
- 'question_id' : 'question.id',\r
- 'active_at' : 'activity.active_at',\r
- 'activity_type' : 'activity.activity_type'\r
- },\r
- tables=['activity', 'question'],\r
- where=['activity.content_type_id = %s AND activity.object_id = ' +\r
- 'question.id AND NOT question.deleted AND activity.user_id = %s AND activity.activity_type = %s'],\r
- params=[question_type_id, user_id, TYPE_ACTIVITY_ASK_QUESTION],\r
- order_by=['-activity.active_at']\r
- ).values(\r
- 'title',\r
- 'question_id',\r
- 'active_at',\r
- 'activity_type'\r
- )\r
- if len(questions) > 0:\r
- questions = [(Event(q['active_at'], q['activity_type'], q['title'], '', '0', \\r
- q['question_id'])) for q in questions]\r
- activities.extend(questions)\r
-\r
- # answers\r
- answers = Activity.objects.extra(\r
- select={\r
- 'title' : 'question.title',\r
- 'question_id' : 'question.id',\r
- 'answer_id' : 'answer.id',\r
- 'active_at' : 'activity.active_at',\r
- 'activity_type' : 'activity.activity_type'\r
- },\r
- tables=['activity', 'answer', 'question'],\r
- where=['activity.content_type_id = %s AND activity.object_id = answer.id AND ' + \r
- 'answer.question_id=question.id AND NOT answer.deleted AND activity.user_id=%s AND '+\r
- 'activity.activity_type=%s AND NOT question.deleted'],\r
- params=[answer_type_id, user_id, TYPE_ACTIVITY_ANSWER],\r
- order_by=['-activity.active_at']\r
- ).values(\r
- 'title',\r
- 'question_id',\r
- 'answer_id',\r
- 'active_at',\r
- 'activity_type'\r
- )\r
- if len(answers) > 0:\r
- answers = [(Event(q['active_at'], q['activity_type'], q['title'], '', q['answer_id'], \\r
- q['question_id'])) for q in answers]\r
- activities.extend(answers)\r
-\r
- # question comments\r
- comments = Activity.objects.extra(\r
- select={\r
- 'title' : 'question.title',\r
- 'question_id' : 'comment.object_id',\r
- 'added_at' : 'comment.added_at',\r
- 'activity_type' : 'activity.activity_type'\r
- },\r
- tables=['activity', 'question', 'comment'],\r
-\r
- where=['activity.content_type_id = %s AND activity.object_id = comment.id AND '+\r
- 'activity.user_id = comment.user_id AND comment.object_id=question.id AND '+\r
- 'comment.content_type_id=%s AND activity.user_id = %s AND activity.activity_type=%s AND ' +\r
- 'NOT question.deleted'],\r
- params=[comment_type_id, question_type_id, user_id, TYPE_ACTIVITY_COMMENT_QUESTION],\r
- order_by=['-comment.added_at']\r
- ).values(\r
- 'title',\r
- 'question_id',\r
- 'added_at',\r
- 'activity_type'\r
- )\r
-\r
- if len(comments) > 0:\r
- comments = [(Event(q['added_at'], q['activity_type'], q['title'], '', '0', \\r
- q['question_id'])) for q in comments]\r
- activities.extend(comments)\r
-\r
- # answer comments\r
- comments = Activity.objects.extra(\r
- select={\r
- 'title' : 'question.title',\r
- 'question_id' : 'question.id',\r
- 'answer_id' : 'answer.id',\r
- 'added_at' : 'comment.added_at',\r
- 'activity_type' : 'activity.activity_type'\r
- },\r
- tables=['activity', 'question', 'answer', 'comment'],\r
-\r
- where=['activity.content_type_id = %s AND activity.object_id = comment.id AND '+\r
- 'activity.user_id = comment.user_id AND comment.object_id=answer.id AND '+\r
- 'comment.content_type_id=%s AND question.id = answer.question_id AND '+\r
- 'activity.user_id = %s AND activity.activity_type=%s AND '+\r
- 'NOT answer.deleted AND NOT question.deleted'],\r
- params=[comment_type_id, answer_type_id, user_id, TYPE_ACTIVITY_COMMENT_ANSWER],\r
- order_by=['-comment.added_at']\r
- ).values(\r
- 'title',\r
- 'question_id',\r
- 'answer_id',\r
- 'added_at',\r
- 'activity_type'\r
- )\r
-\r
- if len(comments) > 0:\r
- comments = [(Event(q['added_at'], q['activity_type'], q['title'], '', q['answer_id'], \\r
- q['question_id'])) for q in comments]\r
- activities.extend(comments)\r
-\r
- # question revisions\r
- revisions = Activity.objects.extra(\r
- select={\r
- 'title' : 'question_revision.title',\r
- 'question_id' : 'question_revision.question_id',\r
- 'added_at' : 'activity.active_at',\r
- 'activity_type' : 'activity.activity_type',\r
- 'summary' : 'question_revision.summary'\r
- },\r
- tables=['activity', 'question_revision', 'question'],\r
- where=['activity.content_type_id = %s AND activity.object_id = question_revision.id AND '+\r
- 'question_revision.id=question.id AND NOT question.deleted AND '+\r
- 'activity.user_id = question_revision.author_id AND activity.user_id = %s AND '+\r
- 'activity.activity_type=%s'],\r
- params=[question_revision_type_id, user_id, TYPE_ACTIVITY_UPDATE_QUESTION],\r
- order_by=['-activity.active_at']\r
- ).values(\r
- 'title',\r
- 'question_id',\r
- 'added_at',\r
- 'activity_type',\r
- 'summary'\r
- )\r
-\r
- if len(revisions) > 0:\r
- revisions = [(Event(q['added_at'], q['activity_type'], q['title'], q['summary'], '0', \\r
- q['question_id'])) for q in revisions]\r
- activities.extend(revisions)\r
-\r
- # answer revisions\r
- revisions = Activity.objects.extra(\r
- select={\r
- 'title' : 'question.title',\r
- 'question_id' : 'question.id',\r
- 'answer_id' : 'answer.id',\r
- 'added_at' : 'activity.active_at',\r
- 'activity_type' : 'activity.activity_type',\r
- 'summary' : 'answer_revision.summary'\r
- },\r
- tables=['activity', 'answer_revision', 'question', 'answer'],\r
-\r
- where=['activity.content_type_id = %s AND activity.object_id = answer_revision.id AND '+\r
- 'activity.user_id = answer_revision.author_id AND activity.user_id = %s AND '+\r
- 'answer_revision.answer_id=answer.id AND answer.question_id = question.id AND '+\r
- 'NOT question.deleted AND NOT answer.deleted AND '+\r
- 'activity.activity_type=%s'],\r
- params=[answer_revision_type_id, user_id, TYPE_ACTIVITY_UPDATE_ANSWER],\r
- order_by=['-activity.active_at']\r
- ).values(\r
- 'title',\r
- 'question_id',\r
- 'added_at',\r
- 'answer_id',\r
- 'activity_type',\r
- 'summary'\r
- )\r
-\r
- if len(revisions) > 0:\r
- revisions = [(Event(q['added_at'], q['activity_type'], q['title'], q['summary'], \\r
- q['answer_id'], q['question_id'])) for q in revisions]\r
- activities.extend(revisions)\r
-\r
- # accepted answers\r
- accept_answers = Activity.objects.extra(\r
- select={\r
- 'title' : 'question.title',\r
- 'question_id' : 'question.id',\r
- 'added_at' : 'activity.active_at',\r
- 'activity_type' : 'activity.activity_type',\r
- },\r
- tables=['activity', 'answer', 'question'],\r
- where=['activity.content_type_id = %s AND activity.object_id = answer.id AND '+\r
- 'activity.user_id = question.author_id AND activity.user_id = %s AND '+\r
- 'NOT answer.deleted AND NOT question.deleted AND '+\r
- 'answer.question_id=question.id AND activity.activity_type=%s'],\r
- params=[answer_type_id, user_id, TYPE_ACTIVITY_MARK_ANSWER],\r
- order_by=['-activity.active_at']\r
- ).values(\r
- 'title',\r
- 'question_id',\r
- 'added_at',\r
- 'activity_type',\r
- )\r
- if len(accept_answers) > 0:\r
- accept_answers = [(Event(q['added_at'], q['activity_type'], q['title'], '', '0', \\r
- q['question_id'])) for q in accept_answers]\r
- activities.extend(accept_answers)\r
- #award history\r
- awards = Activity.objects.extra(\r
- select={\r
- 'badge_id' : 'badge.id',\r
- 'awarded_at': 'award.awarded_at',\r
- 'activity_type' : 'activity.activity_type'\r
- },\r
- tables=['activity', 'award', 'badge'],\r
- where=['activity.user_id = award.user_id AND activity.user_id = %s AND '+\r
- 'award.badge_id=badge.id AND activity.object_id=award.id AND activity.activity_type=%s'],\r
- params=[user_id, TYPE_ACTIVITY_PRIZE],\r
- order_by=['-activity.active_at']\r
- ).values(\r
- 'badge_id',\r
- 'awarded_at',\r
- 'activity_type'\r
- )\r
- if len(awards) > 0:\r
- awards = [(AwardEvent(q['awarded_at'], q['activity_type'], q['badge_id'])) for q in awards]\r
- activities.extend(awards)\r
-\r
- activities.sort(lambda x,y: cmp(y.time, x.time))\r
-\r
- return render_to_response(user_view.template_file,{\r
- "tab_name" : user_view.id,\r
- "tab_description" : user_view.tab_description,\r
- "page_title" : user_view.page_title,\r
- "view_user" : user,\r
- "activities" : activities[:user_view.data_size]\r
- }, context_instance=RequestContext(request))\r
-\r
-def user_responses(request, user_id, user_view):\r
- """\r
- We list answers for question, comments, and answer accepted by others for this user.\r
- """\r
- class Response:\r
- def __init__(self, type, title, question_id, answer_id, time, username, user_id, content):\r
- self.type = type\r
- self.title = title\r
- self.titlelink = reverse('question', kwargs={'id': question_id, 'slug': slugify(title)}) +u'#%s' % answer_id\r
- self.time = time\r
- self.userlink = reverse('users') + u'%s/%s/' % (user_id, username)\r
- self.username = username\r
- self.content = u'%s ...' % strip_tags(content)[:300]\r
-\r
- def __unicode__(self):\r
- return u'%s %s' % (self.type, self.titlelink)\r
-\r
- user = get_object_or_404(User, id=user_id)\r
- responses = []\r
- answers = Answer.objects.extra(\r
- select={\r
- 'title' : 'question.title',\r
- 'question_id' : 'question.id',\r
- 'answer_id' : 'answer.id',\r
- 'added_at' : 'answer.added_at',\r
- 'html' : 'answer.html',\r
- 'username' : 'auth_user.username',\r
- 'user_id' : 'auth_user.id'\r
- },\r
- select_params=[user_id],\r
- tables=['answer', 'question', 'auth_user'],\r
- where=['answer.question_id = question.id AND NOT answer.deleted AND NOT question.deleted AND '+\r
- 'question.author_id = %s AND answer.author_id <> %s AND answer.author_id=auth_user.id'],\r
- params=[user_id, user_id],\r
- order_by=['-answer.id']\r
- ).values(\r
- 'title',\r
- 'question_id',\r
- 'answer_id',\r
- 'added_at',\r
- 'html',\r
- 'username',\r
- 'user_id'\r
- )\r
- if len(answers) > 0:\r
- answers = [(Response(TYPE_RESPONSE['QUESTION_ANSWERED'], a['title'], a['question_id'],\r
- a['answer_id'], a['added_at'], a['username'], a['user_id'], a['html'])) for a in answers]\r
- responses.extend(answers)\r
-\r
-\r
- # question comments\r
- comments = Comment.active.extra(\r
- select={\r
- 'title' : 'question.title',\r
- 'question_id' : 'comment.object_id',\r
- 'added_at' : 'comment.added_at',\r
- 'comment' : 'comment.comment',\r
- 'username' : 'auth_user.username',\r
- 'user_id' : 'auth_user.id'\r
- },\r
- tables=['question', 'auth_user', 'comment'],\r
- where=['NOT question.deleted AND question.author_id = %s AND comment.object_id=question.id AND '+\r
- 'comment.content_type_id=%s AND comment.user_id <> %s AND comment.user_id = auth_user.id'],\r
- params=[user_id, question_type_id, user_id],\r
- order_by=['-comment.added_at']\r
- ).values(\r
- 'title',\r
- 'question_id',\r
- 'added_at',\r
- 'comment',\r
- 'username',\r
- 'user_id'\r
- )\r
-\r
- if len(comments) > 0:\r
- comments = [(Response(TYPE_RESPONSE['QUESTION_COMMENTED'], c['title'], c['question_id'],\r
- '', c['added_at'], c['username'], c['user_id'], c['comment'])) for c in comments]\r
- responses.extend(comments)\r
-\r
- # answer comments\r
- comments = Comment.active.extra(\r
- select={\r
- 'title' : 'question.title',\r
- 'question_id' : 'question.id',\r
- 'answer_id' : 'answer.id',\r
- 'added_at' : 'comment.added_at',\r
- 'comment' : 'comment.comment',\r
- 'username' : 'auth_user.username',\r
- 'user_id' : 'auth_user.id'\r
- },\r
- tables=['answer', 'auth_user', 'comment', 'question'],\r
- where=['NOT answer.deleted AND answer.author_id = %s AND comment.object_id=answer.id AND '+\r
- 'comment.content_type_id=%s AND comment.user_id <> %s AND comment.user_id = auth_user.id '+\r
- 'AND question.id = answer.question_id'],\r
- params=[user_id, answer_type_id, user_id],\r
- order_by=['-comment.added_at']\r
- ).values(\r
- 'title',\r
- 'question_id',\r
- 'answer_id',\r
- 'added_at',\r
- 'comment',\r
- 'username',\r
- 'user_id'\r
- )\r
-\r
- if len(comments) > 0:\r
- comments = [(Response(TYPE_RESPONSE['ANSWER_COMMENTED'], c['title'], c['question_id'],\r
- c['answer_id'], c['added_at'], c['username'], c['user_id'], c['comment'])) for c in comments]\r
- responses.extend(comments)\r
-\r
- # answer has been accepted\r
- answers = Answer.objects.extra(\r
- select={\r
- 'title' : 'question.title',\r
- 'question_id' : 'question.id',\r
- 'answer_id' : 'answer.id',\r
- 'added_at' : 'answer.accepted_at',\r
- 'html' : 'answer.html',\r
- 'username' : 'auth_user.username',\r
- 'user_id' : 'auth_user.id'\r
- },\r
- select_params=[user_id],\r
- tables=['answer', 'question', 'auth_user'],\r
- where=['answer.question_id = question.id AND NOT answer.deleted AND NOT question.deleted AND '+\r
- 'answer.author_id = %s AND answer.accepted=True AND question.author_id=auth_user.id'],\r
- params=[user_id],\r
- order_by=['-answer.id']\r
- ).values(\r
- 'title',\r
- 'question_id',\r
- 'answer_id',\r
- 'added_at',\r
- 'html',\r
- 'username',\r
- 'user_id'\r
- )\r
- if len(answers) > 0:\r
- answers = [(Response(TYPE_RESPONSE['ANSWER_ACCEPTED'], a['title'], a['question_id'],\r
- a['answer_id'], a['added_at'], a['username'], a['user_id'], a['html'])) for a in answers]\r
- responses.extend(answers)\r
-\r
- # sort posts by time\r
- responses.sort(lambda x,y: cmp(y.time, x.time))\r
-\r
- return render_to_response(user_view.template_file,{\r
- "tab_name" : user_view.id,\r
- "tab_description" : user_view.tab_description,\r
- "page_title" : user_view.page_title,\r
- "view_user" : user,\r
- "responses" : responses[:user_view.data_size],\r