diff options
author | Jayaram Pai | 2013-12-11 15:31:24 +0530 |
---|---|---|
committer | Jayaram Pai | 2013-12-11 15:31:24 +0530 |
commit | 3a680b5d2442268ab117c0f98f21a039d4544bd8 (patch) | |
tree | ad3b7e40a99cea53d63d0dc9e5fe216178dff7b9 /website | |
parent | 0dd964ec05401809a408ab55d5517d3b2fba3a85 (diff) | |
download | spoken-tutorial-forums-3a680b5d2442268ab117c0f98f21a039d4544bd8.tar.gz spoken-tutorial-forums-3a680b5d2442268ab117c0f98f21a039d4544bd8.tar.bz2 spoken-tutorial-forums-3a680b5d2442268ab117c0f98f21a039d4544bd8.zip |
base one
Diffstat (limited to 'website')
-rw-r--r-- | website/models.py | 7 | ||||
-rw-r--r-- | website/templatetags/notify.py | 23 | ||||
-rw-r--r-- | website/urls.py | 6 | ||||
-rw-r--r-- | website/views.py | 94 |
4 files changed, 127 insertions, 3 deletions
diff --git a/website/models.py b/website/models.py index 22a1fe8..52575b8 100644 --- a/website/models.py +++ b/website/models.py @@ -33,6 +33,13 @@ class Reply(models.Model): user = User.objects.get(id=self.uid) return user.username +class Notification(models.Model): + uid = models.IntegerField() + pid = models.IntegerField() + qid = models.IntegerField() + rid = models.IntegerField() + date_created = models.DateTimeField(auto_now_add=True) + # CDEEP database created using inspectdb arg of manage.py class TutorialDetails(models.Model): id = models.IntegerField(primary_key=True) diff --git a/website/templatetags/notify.py b/website/templatetags/notify.py new file mode 100644 index 0000000..4c6692a --- /dev/null +++ b/website/templatetags/notify.py @@ -0,0 +1,23 @@ +from django import template + +from website.models import Question, Reply, Notification + +register = template.Library() + +def get_notification(nid): + notification = Notification.objects.get(pk=nid) + question = Question.objects.get(pk=notification.qid); + reply = Reply.objects.get(pk=notification.rid) + context = { + 'notification': notification, + 'question': question, + 'reply': reply, + } + return context +register.inclusion_tag('website/templates/notify.html')(get_notification) + +def notification_count(user_id): + count = Notification.objects.filter(uid=user_id).count() + return count +register.simple_tag(notification_count) + diff --git a/website/urls.py b/website/urls.py index c385ea0..20f8201 100644 --- a/website/urls.py +++ b/website/urls.py @@ -9,10 +9,16 @@ urlpatterns = patterns('', 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'), + url(r'^user/(?P<user_id>\d+)/notifications/$', 'website.views.user_notifications', name='user_notifications'), + url(r'^user/(?P<user_id>\d+)/questions/$', 'website.views.user_questions', name='user_questions'), + url(r'^user/(?P<user_id>\d+)/replies/$', 'website.views.user_replies', name='user_replies'), + url(r'^clear-notifications/$', 'website.views.clear_notifications', name='clear_notifications'), # Ajax helpers url(r'^ajax-tutorials/$', 'website.views.ajax_tutorials', name='ajax_tutorials'), url(r'^ajax-duration/$', 'website.views.ajax_duration', name='ajax_duration'), url(r'^ajax-question-update/$', 'website.views.ajax_question_update', name='ajax_question_update'), + url(r'^ajax-reply-update/$', 'website.views.ajax_reply_update', name='ajax_reply_update'), url(r'^ajax-similar-questions/$', 'website.views.ajax_similar_questions', name='ajax_similar_questions'), + url(r'^ajax-notification-remove/$', 'website.views.ajax_notification_remove', name='ajax_notification_remove'), ) diff --git a/website/views.py b/website/views.py index 538d90e..b6c6670 100644 --- a/website/views.py +++ b/website/views.py @@ -5,7 +5,7 @@ from django.views.decorators.csrf import csrf_exempt from django.contrib.auth.decorators import login_required from django.db.models import Q -from website.models import Question, Reply, TutorialDetails, TutorialResources +from website.models import Question, Reply, Notification, TutorialDetails, TutorialResources from website.forms import NewQuestionForm, ReplyQuesitionForm from website.helpers import get_video_info @@ -28,10 +28,17 @@ categories = [ ] def home(request): - questions = Question.objects.all().order_by('date_created').reverse()[:10] + marker = 0 + if 'marker' in request.GET: + marker = int(request.GET['marker']) + + total = Question.objects.all().count() + total = int(total - (total % 10 - 10)) + questions = Question.objects.all().order_by('date_created').reverse()[marker:marker+10] context = { 'questions': questions, - 'user': request.user + 'total': total, + 'marker': marker } return render(request, 'website/templates/index.html', context) @@ -64,6 +71,13 @@ def question_reply(request): reply.question = question reply.body = body reply.save() + if question.uid != request.user.id: + notification = Notification() + notification.uid = question.uid + notification.pid = request.user.id + notification.qid = qid + notification.rid = reply.id + notification.save() return HttpResponseRedirect('/question/'+str(qid)) def filter(request, category=None, tutorial=None, minute_range=None, second_range=None): @@ -112,6 +126,58 @@ def new_question(request): context.update(csrf(request)) return render(request, 'website/templates/new-question.html', context) +@login_required +def user_questions(request, user_id): + marker = 0 + if 'marker' in request.GET: + marker = int(request.GET['marker']) + + if str(user_id) == str(request.user.id): + total = Question.objects.filter(uid=user_id).count() + total = int(total - (total % 10 - 10)) + questions = Question.objects.filter(uid=user_id).order_by('date_created').reverse()[marker:marker+10] + + context = { + 'questions': questions, + 'total': total, + 'marker': marker + } + return render(request, 'website/templates/user-questions.html', context) + return HttpResponse("go away") + +@login_required +def user_replies(request, user_id): + marker = 0 + if 'marker' in request.GET: + marker = int(request.GET['marker']) + + if str(user_id) == str(request.user.id): + total = Reply.objects.filter(uid=user_id).count() + total = int(total - (total % 10 - 10)) + replies =Reply.objects.filter(uid=user_id).order_by('date_created').reverse()[marker:marker+10] + context = { + 'replies': replies, + 'total': total, + 'marker': marker + } + return render(request, 'website/templates/user-replies.html', context) + return HttpResponse("go away") + +@login_required +def user_notifications(request, user_id): + if str(user_id) == str(request.user.id): + notifications = Notification.objects.filter(uid=user_id).order_by('date_created').reverse() + context = { + 'notifications': notifications + } + return render(request, 'website/templates/notifications.html', context) + return HttpResponse("go away ...") + +@login_required +def clear_notifications(request): + Notification.objects.filter(uid=request.user.id).delete() + return HttpResponseRedirect("/user/{}/notifications/".format(request.user.id)) + @csrf_exempt def ajax_tutorials(request): if request.method == 'POST': @@ -157,6 +223,18 @@ def ajax_question_update(request): return HttpResponse("saved") @csrf_exempt +def ajax_reply_update(request): + if request.method == 'POST': + rid = request.POST['reply_id'] + body = request.POST['reply_body'] + reply= get_object_or_404(Reply, pk=rid) + if reply: + if reply.uid == request.user.id: + reply.body = body + reply.save() + return HttpResponse("saved") + +@csrf_exempt def ajax_similar_questions(request): if request.method == 'POST': category = request.POST['category'] @@ -171,3 +249,13 @@ def ajax_similar_questions(request): } return render(request, 'website/templates/ajax-similar-questions.html', context); +@csrf_exempt +def ajax_notification_remove(request): + if request.method == "POST": + nid = request.POST["notification_id"] + notification = Notification.objects.get(pk=nid) + if notification: + if notification.uid == request.user.id: + notification.delete() + return HttpResponse("removed") + return HttpResponse("failed") |