summaryrefslogtreecommitdiff
path: root/website
diff options
context:
space:
mode:
authorashwinishinde2015-06-19 15:39:01 +0530
committerashwinishinde2015-06-19 15:39:01 +0530
commitbf20363adec8afed8d8e10ad7e0b641c51568cff (patch)
tree324a5ee334456c9ce602ee07aa43912ce5590adb /website
parent23c44aa78fcf3c015dd4bcaf5b7e8a223e1b6950 (diff)
downloadFOSSEE-Forum-bf20363adec8afed8d8e10ad7e0b641c51568cff.tar.gz
FOSSEE-Forum-bf20363adec8afed8d8e10ad7e0b641c51568cff.tar.bz2
FOSSEE-Forum-bf20363adec8afed8d8e10ad7e0b641c51568cff.zip
Subject: Added Vote Functionality
Description: 1) Implementation of vote for question 2) Added CSS for vote-up and vope-down
Diffstat (limited to 'website')
-rw-r--r--website/models.py10
-rw-r--r--website/urls.py4
-rw-r--r--website/views.py58
3 files changed, 67 insertions, 5 deletions
diff --git a/website/models.py b/website/models.py
index c7e43aa..b0a9fc3 100644
--- a/website/models.py
+++ b/website/models.py
@@ -23,13 +23,14 @@ class Issue(models.Model):
class Question(models.Model):
user = models.ForeignKey(User)
category = models.ForeignKey(FossCategory)
- #tutorial = models.ForeignKey(Issue)
title = models.CharField(max_length=200)
body = models.TextField()
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
views = models.IntegerField(default=1)
- # votes = models.IntegerField(default=0)
+ userUpVotes = models.ManyToManyField(User, blank=True, related_name='postUpVotes')
+ userDownVotes = models.ManyToManyField(User, blank=True, related_name='postDownVotes')
+ num_votes = models.IntegerField(default=0)
def __unicode__(self):
return '%s' % (self.user)
@@ -53,7 +54,10 @@ class Answer(models.Model):
body = models.TextField()
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
- # votes = models.IntegerField(default=0)
+ #userUpVotes = models.ManyToManyField(User, blank=True, related_name='postUpVotes')
+ #userDownVotes = models.ManyToManyField(User, blank=True, related_name='postDownVotes')
+ upvotes = models.IntegerField(default=0)
+ num_votes = models.IntegerField(default=0)
def user(self):
user = User.objects.get(id=self.uid)
diff --git a/website/urls.py b/website/urls.py
index 1c7d75e..71588af 100644
--- a/website/urls.py
+++ b/website/urls.py
@@ -1,4 +1,5 @@
from django.conf.urls import patterns, include, url
+from website import views
urlpatterns = patterns('',
url(r'^$', 'website.views.home', name='home'),
@@ -9,6 +10,7 @@ urlpatterns = patterns('',
url(r'^answer-comment/$', 'website.views.answer_comment', name='answer_comment'),
url(r'^filter/(?P<category>[^/]+)/$', 'website.views.filter', name='filter'),
url(r'^filter/(?P<category>[^/]+)/$', 'website.views.filter', name='filter'),
+
#url(r'^filter/(?P<category>[^/]+)/(?P<tutorial>[^/]+)/(?P<minute_range>[^/]+)/$', 'website.views.filter', name='filter'),
#url(r'^filter/(?P<category>[^/]+)/(?P<tutorial>[^/]+)/(?P<minute_range>[^/]+)/(?P<second_range>[^/]+)/$', 'website.views.filter', name='filter'),
url(r'^new-question/$', 'website.views.new_question', name='new_question'),
@@ -18,7 +20,7 @@ urlpatterns = patterns('',
url(r'^clear-notifications/$', 'website.views.clear_notifications', name='clear_notifications'),
url(r'^search/$', 'website.views.search', name='search'),
url(r'^unanswered-notification/$', 'website.views.unanswered_notification', name='unanswered_notification'),
-
+ url(r'^vote_post/$', 'website.views.vote_post', name='vote_post'),
# Ajax helpers
url(r'^ajax-tutorials/$', 'website.views.ajax_tutorials', name='ajax_tutorials'),
url(r'^ajax-duration/$', 'website.views.ajax_duration', name='ajax_duration'),
diff --git a/website/views.py b/website/views.py
index f80ee13..c9a2a5f 100644
--- a/website/views.py
+++ b/website/views.py
@@ -55,10 +55,17 @@ def get_question(request, question_id=None, pretty_url=None):
return HttpResponseRedirect('/question/'+ question_id + '/' + pretty_title)
answers = question.answer_set.all()
form = AnswerQuestionForm()
+ thisuserupvote = question.userUpVotes.filter(id=request.user.id).count()
+ thisuserdownvote = question.userDownVotes.filter(id=request.user.id).count()
+
+ net_count = question.userUpVotes.count() - question.userDownVotes.count()
context = {
'question': question,
'answers': answers,
- 'form': form
+ 'form': form,
+ 'thisUserUpvote': thisuserupvote,
+ 'thisUserDownvote': thisuserdownvote,
+ 'net_count': net_count
}
context.update(csrf(request))
@@ -292,6 +299,55 @@ def new_question(request):
context.update(csrf(request))
return render(request, 'website/templates/new-question.html', context)
+
+def vote_post(request):
+
+ print "post"
+ post_id = int(request.POST.get('id'))
+
+ vote_type = request.POST.get('type')
+ vote_action = request.POST.get('action')
+ print post_id
+ cur_post = get_object_or_404(Question, id=post_id)
+
+ thisuserupvote = cur_post.userUpVotes.filter(id=request.user.id).count()
+ thisuserdownvote = cur_post.userDownVotes.filter(id=request.user.id).count()
+
+ initial_votes = cur_post.userUpVotes.count() - cur_post.userDownVotes.count()
+
+ # print "User Initial Upvote and Downvote: %d %d %s " % (thisuserupvote, thisuserdownvote, vote_action)
+
+ #This loop is for voting
+ if vote_action == 'vote':
+ if (thisuserupvote == 0) and (thisuserdownvote == 0):
+ if vote_type == 'up':
+ cur_post.userUpVotes.add(request.user)
+ elif vote_type == 'down':
+ cur_post.userDownVotes.add(request.user)
+ else:
+ return HttpResponse("Error: Unknown vote-type passed.")
+ else:
+ return HttpResponse(initial_votes)
+ #This loop is for canceling vote
+ elif vote_action == 'recall-vote':
+ if (vote_type == 'up') and (thisuserupvote == 1):
+ cur_post.userUpVotes.remove(request.user)
+ elif (vote_type == 'down') and (thisuserdownvote == 1):
+ cur_post.userDownVotes.remove(request.user)
+ else:
+ # "Error - Unknown vote type or no vote to recall"
+ return HttpResponse(initial_votes)
+ else:
+ return HttpResponse("Error: Bad Action.")
+
+ num_votes = cur_post.userUpVotes.count() - cur_post.userDownVotes.count()
+ cur_post.num_votes = num_votes
+ cur_post.save()
+
+ print "Num Votes: %s" % num_votes
+
+ return HttpResponse(num_votes)
+
# Notification Section
@login_required
def user_questions(request, user_id):