-from django.shortcuts import render_to_response, get_object_or_404\r
-from django.http import HttpResponseRedirect, HttpResponse, HttpResponseForbidden, Http404\r
-from django.template import RequestContext\r
-from django.contrib.auth.decorators import login_required\r
-from django.core.urlresolvers import reverse\r
-from django.utils.html import *\r
-\r
-from models import *\r
-\r
-from forum.forms import AskForm\r
-from forum.views.readers import _get_tags_cache_json\r
-from forum.models import *\r
-from forum.utils.html import sanitize_html\r
-\r
-def books(request):\r
- return HttpResponseRedirect(reverse('books') + '/mysql-zhaoyang')\r
-\r
-def book(request, short_name, unanswered=False):\r
- """\r
- 1. questions list\r
- 2. book info\r
- 3. author info and blog rss items\r
- """\r
- """\r
- List of Questions, Tagged questions, and Unanswered questions.\r
- """\r
- books = Book.objects.extra(where=['short_name = %s'], params=[short_name])\r
- match_count = len(books)\r
- if match_count == 0:\r
- raise Http404\r
- else:\r
- # the book info\r
- book = books[0]\r
- # get author info\r
- author_info = BookAuthorInfo.objects.get(book=book)\r
- # get author rss info\r
- author_rss = BookAuthorRss.objects.filter(book=book)\r
-\r
- # get pagesize from session, if failed then get default value\r
- user_page_size = request.session.get("pagesize", QUESTIONS_PAGE_SIZE)\r
- # set pagesize equal to logon user specified value in database\r
- if request.user.is_authenticated() and request.user.questions_per_page > 0:\r
- user_page_size = request.user.questions_per_page\r
-\r
- try:\r
- page = int(request.GET.get('page', '1'))\r
- except ValueError:\r
- page = 1\r
-\r
- view_id = request.GET.get('sort', None)\r
- view_dic = {"latest":"-added_at", "active":"-last_activity_at", "hottest":"-answer_count", "mostvoted":"-score" }\r
- try:\r
- orderby = view_dic[view_id]\r
- except KeyError:\r
- view_id = "latest"\r
- orderby = "-added_at"\r
-\r
- # check if request is from tagged questions\r
- if unanswered:\r
- # check if request is from unanswered questions\r
- # Article.objects.filter(publications__id__exact=1)\r
- objects = Question.objects.filter(book__id__exact=book.id, deleted=False, answer_count=0).order_by(orderby)\r
- else:\r
- objects = Question.objects.filter(book__id__exact=book.id, deleted=False).order_by(orderby)\r
-\r
- # RISK - inner join queries\r
- objects = objects.select_related();\r
- objects_list = Paginator(objects, user_page_size)\r
- questions = objects_list.page(page)\r
-\r
- return render_to_response('book.html', {\r
- "book" : book,\r
- "author_info" : author_info,\r
- "author_rss" : author_rss,\r
- "questions" : questions,\r
- "context" : {\r
- 'is_paginated' : True,\r
- 'pages': objects_list.num_pages,\r
- 'page': page,\r
- 'has_previous': questions.has_previous(),\r
- 'has_next': questions.has_next(),\r
- 'previous': questions.previous_page_number(),\r
- 'next': questions.next_page_number(),\r
- 'base_url' : request.path + '?sort=%s&' % view_id,\r
- 'pagesize' : user_page_size\r
- }\r
- }, context_instance=RequestContext(request))\r
-\r
-@login_required\r
-def ask_book(request, short_name):\r
- if request.method == "POST":\r
- form = AskForm(request.POST)\r
- if form.is_valid():\r
- added_at = datetime.datetime.now()\r
- html = sanitize_html(markdowner.convert(form.cleaned_data['text']))\r
- question = Question(\r
- title = strip_tags(form.cleaned_data['title']),\r
- author = request.user,\r
- added_at = added_at,\r
- last_activity_at = added_at,\r
- last_activity_by = request.user,\r
- wiki = form.cleaned_data['wiki'],\r
- tagnames = form.cleaned_data['tags'].strip(),\r
- html = html,\r
- summary = strip_tags(html)[:120]\r
- )\r
- if question.wiki:\r
- question.last_edited_by = question.author\r
- question.last_edited_at = added_at\r
- question.wikified_at = added_at\r
-\r
- question.save()\r
-\r
- # create the first revision\r
- QuestionRevision.objects.create(\r
- question = question,\r
- revision = 1,\r
- title = question.title,\r
- author = request.user,\r
- revised_at = added_at,\r
- tagnames = question.tagnames,\r
- summary = CONST['default_version'],\r
- text = form.cleaned_data['text']\r
- )\r
-\r
- books = Book.objects.extra(where=['short_name = %s'], params=[short_name])\r
- match_count = len(books)\r
- if match_count == 1:\r
- # the book info\r
- book = books[0]\r
- book.questions.add(question)\r
-\r
- return HttpResponseRedirect(question.get_absolute_url())\r
- else:\r
- form = AskForm()\r
-\r
- tags = _get_tags_cache_json()\r
- return render_to_response('ask.html', {\r
- 'form' : form,\r
- 'tags' : tags,\r
- 'email_validation_faq_url': reverse('faq') + '#validate',\r
+from django.shortcuts import render_to_response, get_object_or_404
+from django.http import HttpResponseRedirect, HttpResponse, HttpResponseForbidden, Http404
+from django.template import RequestContext
+from django.contrib.auth.decorators import login_required
+from django.core.urlresolvers import reverse
+from django.utils.html import *
+
+from models import *
+
+from forum.forms import AskForm
+from forum.views.readers import _get_tags_cache_json
+from forum.models import *
+from forum.utils.html import sanitize_html
+
+def books(request):
+ return HttpResponseRedirect(reverse('books') + '/mysql-zhaoyang')
+
+def book(request, short_name, unanswered=False):
+ """
+ 1. questions list
+ 2. book info
+ 3. author info and blog rss items
+ """
+ """
+ List of Questions, Tagged questions, and Unanswered questions.
+ """
+ books = Book.objects.extra(where=['short_name = %s'], params=[short_name])
+ match_count = len(books)
+ if match_count == 0:
+ raise Http404
+ else:
+ # the book info
+ book = books[0]
+ # get author info
+ author_info = BookAuthorInfo.objects.get(book=book)
+ # get author rss info
+ author_rss = BookAuthorRss.objects.filter(book=book)
+
+ # get pagesize from session, if failed then get default value
+ user_page_size = request.session.get("pagesize", QUESTIONS_PAGE_SIZE)
+ # set pagesize equal to logon user specified value in database
+ if request.user.is_authenticated() and request.user.questions_per_page > 0:
+ user_page_size = request.user.questions_per_page
+
+ try:
+ page = int(request.GET.get('page', '1'))
+ except ValueError:
+ page = 1
+
+ view_id = request.GET.get('sort', None)
+ view_dic = {"latest":"-added_at", "active":"-last_activity_at", "hottest":"-answer_count", "mostvoted":"-score" }
+ try:
+ orderby = view_dic[view_id]
+ except KeyError:
+ view_id = "latest"
+ orderby = "-added_at"
+
+ # check if request is from tagged questions
+ if unanswered:
+ # check if request is from unanswered questions
+ # Article.objects.filter(publications__id__exact=1)
+ objects = Question.objects.filter(book__id__exact=book.id, deleted=False, answer_count=0).order_by(orderby)
+ else:
+ objects = Question.objects.filter(book__id__exact=book.id, deleted=False).order_by(orderby)
+
+ # RISK - inner join queries
+ objects = objects.select_related();
+ objects_list = Paginator(objects, user_page_size)
+ questions = objects_list.page(page)
+
+ return render_to_response('book.html', {
+ "book" : book,
+ "author_info" : author_info,
+ "author_rss" : author_rss,
+ "questions" : questions,
+ "context" : {
+ 'is_paginated' : True,
+ 'pages': objects_list.num_pages,
+ 'page': page,
+ 'has_previous': questions.has_previous(),
+ 'has_next': questions.has_next(),
+ 'previous': questions.previous_page_number(),
+ 'next': questions.next_page_number(),
+ 'base_url' : request.path + '?sort=%s&' % view_id,
+ 'pagesize' : user_page_size
+ }
+ }, context_instance=RequestContext(request))
+
+@login_required
+def ask_book(request, short_name):
+ if request.method == "POST":
+ form = AskForm(request.POST)
+ if form.is_valid():
+ added_at = datetime.datetime.now()
+ html = sanitize_html(markdowner.convert(form.cleaned_data['text']))
+ question = Question(
+ title = strip_tags(form.cleaned_data['title']),
+ author = request.user,
+ added_at = added_at,
+ last_activity_at = added_at,
+ last_activity_by = request.user,
+ wiki = form.cleaned_data['wiki'],
+ tagnames = form.cleaned_data['tags'].strip(),
+ html = html,
+ summary = strip_tags(html)[:120]
+ )
+ if question.wiki:
+ question.last_edited_by = question.author
+ question.last_edited_at = added_at
+ question.wikified_at = added_at
+
+ question.save()
+
+ # create the first revision
+ QuestionRevision.objects.create(
+ question = question,
+ revision = 1,
+ title = question.title,
+ author = request.user,
+ revised_at = added_at,
+ tagnames = question.tagnames,
+ summary = CONST['default_version'],
+ text = form.cleaned_data['text']
+ )
+
+ books = Book.objects.extra(where=['short_name = %s'], params=[short_name])
+ match_count = len(books)
+ if match_count == 1:
+ # the book info
+ book = books[0]
+ book.questions.add(question)
+
+ return HttpResponseRedirect(question.get_absolute_url())
+ else:
+ form = AskForm()
+
+ tags = _get_tags_cache_json()
+ return render_to_response('ask.html', {
+ 'form' : form,
+ 'tags' : tags,
+ 'email_validation_faq_url': reverse('faq') + '#validate',