diff options
author | ashwinishinde | 2015-06-19 15:39:01 +0530 |
---|---|---|
committer | ashwinishinde | 2015-06-19 15:39:01 +0530 |
commit | bf20363adec8afed8d8e10ad7e0b641c51568cff (patch) | |
tree | 324a5ee334456c9ce602ee07aa43912ce5590adb /website | |
parent | 23c44aa78fcf3c015dd4bcaf5b7e8a223e1b6950 (diff) | |
download | FOSSEE-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.py | 10 | ||||
-rw-r--r-- | website/urls.py | 4 | ||||
-rw-r--r-- | website/views.py | 58 |
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): |