]> git.openstreetmap.org Git - osqa.git/blobdiff - forum/views/readers.py
OSQA-263
[osqa.git] / forum / views / readers.py
index f756a9468f7c12042ec8d34c6104b5b177ec19d4..b5692fad4101955bf35f92a8047617db4764f454 100644 (file)
@@ -1,10 +1,10 @@
-# encoding:utf-8   
+# encoding:utf-8
 import datetime
 import logging
 from urllib import unquote
 from forum import settings as django_settings
 from django.shortcuts import render_to_response, get_object_or_404
 import datetime
 import logging
 from urllib import unquote
 from forum import settings as django_settings
 from django.shortcuts import render_to_response, get_object_or_404
-from django.http import HttpResponseRedirect, HttpResponse, HttpResponseForbidden, Http404, HttpResponsePermanentRedirect
+from django.http import HttpResponseRedirect, HttpResponse, Http404, HttpResponsePermanentRedirect
 from django.core.paginator import Paginator, EmptyPage, InvalidPage
 from django.template import RequestContext
 from django import template
 from django.core.paginator import Paginator, EmptyPage, InvalidPage
 from django.template import RequestContext
 from django import template
@@ -24,7 +24,7 @@ from forum.utils.html import sanitize_html
 from forum.utils.diff import textDiff as htmldiff
 from forum.forms import *
 from forum.models import *
 from forum.utils.diff import textDiff as htmldiff
 from forum.forms import *
 from forum.models import *
-from forum.utils.forms import get_next_url
+from forum.forms import get_next_url
 from forum.actions import QuestionViewAction
 from forum.modules.decorators import decoratable
 import decorators
 from forum.actions import QuestionViewAction
 from forum.modules.decorators import decoratable
 import decorators
@@ -45,8 +45,8 @@ ANSWERS_PAGE_SIZE = 10
 def index(request):
     return question_list(request,
                          Question.objects.all(),
 def index(request):
     return question_list(request,
                          Question.objects.all(),
-                         sort=request.utils.set_sort_method('active'),
-                         base_path=reverse('questions'))
+                         request.utils.set_sort_method('active'),
+                         reverse('questions'))
 
 @decorators.render('questions.html', 'unanswered')
 def unanswered(request):
 
 @decorators.render('questions.html', 'unanswered')
 def unanswered(request):
@@ -55,7 +55,7 @@ def unanswered(request):
                          _('open questions without an accepted answer'),
                          request.utils.set_sort_method('active'),
                          None,
                          _('open questions without an accepted answer'),
                          request.utils.set_sort_method('active'),
                          None,
-                         _("Unanswered questions"))
+                         _("Unanswered Questions"))
 
 @decorators.render('questions.html', 'questions')
 def questions(request):
 
 @decorators.render('questions.html', 'questions')
 def questions(request):
@@ -68,15 +68,22 @@ def tag(request, tag):
                          mark_safe(_('questions tagged <span class="tag">%(tag)s</span>') % {'tag': tag}),
                          request.utils.set_sort_method('active'),
                          None,
                          mark_safe(_('questions tagged <span class="tag">%(tag)s</span>') % {'tag': tag}),
                          request.utils.set_sort_method('active'),
                          None,
-                         mark_safe(_('questions tagged %(tag)s') % {'tag': tag}),
+                         mark_safe(_('Questions Tagged With <span class="tag">%(tag)s</span>') % {'tag': tag}),
                          False)
 
 @decorators.list('questions', QUESTIONS_PAGE_SIZE)
                          False)
 
 @decorators.list('questions', QUESTIONS_PAGE_SIZE)
-def question_list(request, initial, list_description=_('questions'), sort=None, base_path=None, page_title=None, allowIgnoreTags=True):
+def question_list(request, initial,
+                  list_description=_('questions'),
+                  sort=None,
+                  base_path=None,
+                  page_title=_("All Question"),
+                  allowIgnoreTags=True):
+
     questions = initial.filter_state(deleted=False)
 
     if request.user.is_authenticated() and allowIgnoreTags:
     questions = initial.filter_state(deleted=False)
 
     if request.user.is_authenticated() and allowIgnoreTags:
-        questions = questions.filter(~Q(tags__id__in = request.user.marked_tags.filter(user_selections__reason = 'bad')))
+        questions = questions.filter(~Q(tags__id__in = request.user.marked_tags.filter(user_selections__reason = 'bad'))
+                                     )
 
     if sort is not False:
         if sort is None:
 
     if sort is not False:
         if sort is None:
@@ -95,21 +102,21 @@ def question_list(request, initial, list_description=_('questions'), sort=None,
     if request.GET.get("q"):
         keywords = request.GET.get("q").strip()
 
     if request.GET.get("q"):
         keywords = request.GET.get("q").strip()
 
-    answer_count = Answer.objects.filter_state(deleted=False).filter(parent__in=questions).count()   
+    answer_count = Answer.objects.filter_state(deleted=False).filter(parent__in=questions).count()
     answer_description = _("answers")
 
     return {
     answer_description = _("answers")
 
     return {
-        "questions" : questions,
-        "questions_count" : questions.count(),
-        "answer_count" : answer_count,
-        "keywords" : keywords,
-        #"tags_autocomplete" : _get_tags_cache_json(),
-        "list_description": list_description,
-        "answer_description": answer_description,
-        "base_path" : base_path,
-        "page_title" : page_title,
-        "tab" : "questions",
-        }
+    "questions" : questions,
+    "questions_count" : questions.count(),
+    "answer_count" : answer_count,
+    "keywords" : keywords,
+    #"tags_autocomplete" : _get_tags_cache_json(),
+    "list_description": list_description,
+    "answer_description": answer_description,
+    "base_path" : base_path,
+    "page_title" : page_title,
+    "tab" : "questions",
+    }
 
 
 def search(request):
 
 
 def search(request):
@@ -120,9 +127,9 @@ def search(request):
         if not keywords:
             return HttpResponseRedirect(reverse(index))
         if search_type == 'tag':
         if not keywords:
             return HttpResponseRedirect(reverse(index))
         if search_type == 'tag':
-            return HttpResponseRedirect(reverse('tags') + '?q=%s' % (keywords.strip()))
+            return HttpResponseRedirect(reverse('tags') + '?q=%s' % urlquote(keywords.strip()))
         elif search_type == "user":
         elif search_type == "user":
-            return HttpResponseRedirect(reverse('users') + '?q=%s' % (keywords.strip()))
+            return HttpResponseRedirect(reverse('users') + '?q=%s' % urlquote(keywords.strip()))
         elif search_type == "question":
             return question_search(request, keywords)
     else:
         elif search_type == "question":
             return question_search(request, keywords)
     else:
@@ -132,8 +139,11 @@ def search(request):
 def question_search(request, keywords):
     initial = Question.objects.search(keywords)
 
 def question_search(request, keywords):
     initial = Question.objects.search(keywords)
 
-    return question_list(request, initial, _("questions matching '%(keywords)s'") % {'keywords': keywords},
-            base_path="%s?t=question&q=%s" % (reverse('search'), django_urlquote(keywords)), sort=False)
+    return question_list(request, initial,
+                         _("questions matching '%(keywords)s'") % {'keywords': keywords},
+                         False,
+                         "%s?t=question&q=%s" % (reverse('search'),django_urlquote(keywords)),
+                         _("questions matching '%(keywords)s'") % {'keywords': keywords})
 
 
 def tags(request):#view showing a listing of available tags - plain list
 
 
 def tags(request):#view showing a listing of available tags - plain list
@@ -161,21 +171,21 @@ def tags(request):#view showing a listing of available tags - plain list
         tags = objects_list.page(objects_list.num_pages)
 
     return render_to_response('tags.html', {
         tags = objects_list.page(objects_list.num_pages)
 
     return render_to_response('tags.html', {
-                                            "tags" : tags,
-                                            "stag" : stag,
-                                            "tab_id" : sortby,
-                                            "keywords" : stag,
-                                            "context" : {
-                                                'is_paginated' : is_paginated,
-                                                'pages': objects_list.num_pages,
-                                                'page': page,
-                                                'has_previous': tags.has_previous(),
-                                                'has_next': tags.has_next(),
-                                                'previous': tags.previous_page_number(),
-                                                'next': tags.next_page_number(),
-                                                'base_url' : reverse('tags') + '?sort=%s&' % sortby
-                                            }
-                                }, context_instance=RequestContext(request))
+    "tags" : tags,
+    "stag" : stag,
+    "tab_id" : sortby,
+    "keywords" : stag,
+    "context" : {
+    'is_paginated' : is_paginated,
+    'pages': objects_list.num_pages,
+    'page': page,
+    'has_previous': tags.has_previous(),
+    'has_next': tags.has_next(),
+    'previous': tags.previous_page_number(),
+    'next': tags.next_page_number(),
+    'base_url' : reverse('tags') + '?sort=%s&' % sortby
+    }
+    }, context_instance=RequestContext(request))
 
 def get_answer_sort_order(request):
     view_dic = {"latest":"-added_at", "oldest":"added_at", "votes":"-score" }
 
 def get_answer_sort_order(request):
     view_dic = {"latest":"-added_at", "oldest":"added_at", "votes":"-score" }
@@ -194,7 +204,7 @@ def update_question_view_times(request, question):
     if not 'last_seen_in_question' in request.session:
         request.session['last_seen_in_question'] = {}
 
     if not 'last_seen_in_question' in request.session:
         request.session['last_seen_in_question'] = {}
 
-    last_seen = request.session['last_seen_in_question'].get(question.id,None)
+    last_seen = request.session['last_seen_in_question'].get(question.id, None)
 
     if (not last_seen) or last_seen < question.last_activity_at:
         QuestionViewAction(question, request.user, ip=request.META['REMOTE_ADDR']).save()
 
     if (not last_seen) or last_seen < question.last_activity_at:
         QuestionViewAction(question, request.user, ip=request.META['REMOTE_ADDR']).save()
@@ -204,7 +214,7 @@ def update_question_view_times(request, question):
 
 def match_question_slug(slug):
     slug_words = slug.split('-')
 
 def match_question_slug(slug):
     slug_words = slug.split('-')
-    qs = Question.objects.filter(node_type="question", title__istartswith=slug_words[0])
+    qs = Question.objects.filter(title__istartswith=slug_words[0])
 
     for q in qs:
         if slug == urlquote(slugify(q.title)):
 
     for q in qs:
         if slug == urlquote(slugify(q.title)):
@@ -214,16 +224,14 @@ def match_question_slug(slug):
 
 def question(request, id, slug):
     try:
 
 def question(request, id, slug):
     try:
-        question = Question.objects.get(node_type="question", id=id)
+        question = Question.objects.get(id=id)
     except:
     except:
-        question = match_question_slug(slug)
-        if question is not None:
-            return HttpResponsePermanentRedirect(question.get_absolute_url())
-        else:
-            raise Http404()
+        if slug:
+            question = match_question_slug(slug)
+            if question is not None:
+                return HttpResponsePermanentRedirect(question.get_absolute_url())
 
 
-    if slug != urlquote(slugify(question.title)):
-        return HttpResponsePermanentRedirect(question.get_absolute_url())
+        raise Http404()
 
     page = int(request.GET.get('page', 1))
     view_id, order_by = get_answer_sort_order(request)
 
     page = int(request.GET.get('page', 1))
     view_id, order_by = get_answer_sort_order(request)
@@ -256,24 +264,24 @@ def question(request, id, slug):
         subscription = False
 
     return render_to_response('question.html', {
         subscription = False
 
     return render_to_response('question.html', {
-        "question" : question,
-        "answer" : answer_form,
-        "answers" : page_objects.object_list,
-        "tab_id" : view_id,
-        "similar_questions" : question.get_related_questions(),
-        "subscription": subscription,
-        "context" : {
-            'is_paginated' : True,
-            'pages': objects_list.num_pages,
-            'page': page,
-            'has_previous': page_objects.has_previous(),
-            'has_next': page_objects.has_next(),
-            'previous': page_objects.previous_page_number(),
-            'next': page_objects.next_page_number(),
-            'base_url' : request.path + '?sort=%s&' % view_id,
-            'extend_url' : "#sort-top"
-        }
-        }, context_instance=RequestContext(request))
+    "question" : question,
+    "answer" : answer_form,
+    "answers" : page_objects.object_list,
+    "tab_id" : view_id,
+    "similar_questions" : question.get_related_questions(),
+    "subscription": subscription,
+    "context" : {
+    'is_paginated' : True,
+    'pages': objects_list.num_pages,
+    'page': page,
+    'has_previous': page_objects.has_previous(),
+    'has_next': page_objects.has_next(),
+    'previous': page_objects.previous_page_number(),
+    'next': page_objects.next_page_number(),
+    'base_url' : request.path + '?sort=%s&' % view_id,
+    'extend_url' : "#sort-top"
+    }
+    }, context_instance=RequestContext(request))
 
 
 REVISION_TEMPLATE = template.loader.get_template('node/revision.html')
 
 
 REVISION_TEMPLATE = template.loader.get_template('node/revision.html')
@@ -286,9 +294,9 @@ def revisions(request, id):
 
     for i, revision in enumerate(revisions):
         rev_ctx.append(dict(inst=revision, html=REVISION_TEMPLATE.render(template.Context({
 
     for i, revision in enumerate(revisions):
         rev_ctx.append(dict(inst=revision, html=REVISION_TEMPLATE.render(template.Context({
-                'title': revision.title,
-                'html': revision.html,
-                'tags': revision.tagname_list(),
+        'title': revision.title,
+        'html': revision.html,
+        'tags': revision.tagname_list(),
         }))))
 
         if i > 0:
         }))))
 
         if i > 0:
@@ -302,9 +310,9 @@ def revisions(request, id):
             rev_ctx[i]['summary'] = revision.summary
 
     return render_to_response('revisions.html', {
             rev_ctx[i]['summary'] = revision.summary
 
     return render_to_response('revisions.html', {
-                              'post': post,
-                              'revisions': rev_ctx,
-                              }, context_instance=RequestContext(request))
+    'post': post,
+    'revisions': rev_ctx,
+    }, context_instance=RequestContext(request))