summaryrefslogtreecommitdiff
path: root/website
diff options
context:
space:
mode:
authorJayaram Pai2013-12-11 15:31:24 +0530
committerJayaram Pai2013-12-11 15:31:24 +0530
commit3a680b5d2442268ab117c0f98f21a039d4544bd8 (patch)
treead3b7e40a99cea53d63d0dc9e5fe216178dff7b9 /website
parent0dd964ec05401809a408ab55d5517d3b2fba3a85 (diff)
downloadspoken-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.py7
-rw-r--r--website/templatetags/notify.py23
-rw-r--r--website/urls.py6
-rw-r--r--website/views.py94
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")