annotate gpp/weblinks/views.py @ 133:c515b7401078

Use the new common way to apply markItUp to textareas and to get the smiley and markdown help dialogs for all the remaining apps except for forums and comments.
author Brian Neal <bgneal@gmail.com>
date Fri, 27 Nov 2009 00:21:47 +0000
parents 62eb9cbbcffc
children 952e05cb3d80
rev   line source
gremmie@1 1 """
gremmie@1 2 Views for the weblinks application.
gremmie@1 3 """
gremmie@1 4
gremmie@1 5 import datetime
gremmie@1 6 import random
gremmie@1 7 from django.shortcuts import render_to_response
gremmie@1 8 from django.template import RequestContext
gremmie@1 9 from django.contrib import auth
bgneal@92 10 from django.core.paginator import InvalidPage
gremmie@1 11 from django.http import HttpResponseRedirect
gremmie@1 12 from django.contrib.auth.decorators import login_required
gremmie@1 13 from django.shortcuts import get_object_or_404
gremmie@1 14 from django.core.urlresolvers import reverse
gremmie@1 15 from django.db.models import Q
gremmie@1 16 from django.http import Http404
gremmie@1 17
gremmie@1 18 from core.paginator import DiggPaginator
gremmie@1 19 from core.functions import email_admins
gremmie@1 20 from weblinks.models import Category
gremmie@1 21 from weblinks.models import Link
gremmie@1 22 from weblinks.models import FlaggedLink
gremmie@1 23 from weblinks.forms import SearchForm
gremmie@1 24 from weblinks.forms import AddLinkForm
gremmie@1 25
gremmie@1 26 #######################################################################
gremmie@1 27
gremmie@1 28 LINKS_PER_PAGE = 10
gremmie@1 29
gremmie@1 30 def create_paginator(links):
gremmie@1 31 return DiggPaginator(links, LINKS_PER_PAGE, body=5, tail=3, margin=3, padding=2)
gremmie@1 32
gremmie@1 33 #######################################################################
gremmie@1 34
gremmie@1 35 def link_index(request):
gremmie@1 36 categories = Category.objects.all()
gremmie@1 37 total_links = Link.public_objects.all().count()
gremmie@1 38 return render_to_response('weblinks/index.html', {
gremmie@1 39 'categories': categories,
gremmie@1 40 'total_links': total_links,
gremmie@1 41 },
gremmie@1 42 context_instance = RequestContext(request))
gremmie@1 43
gremmie@1 44 #######################################################################
gremmie@1 45
gremmie@1 46 def new_links(request):
gremmie@1 47 links = Link.public_objects.order_by('-date_added')[:LINKS_PER_PAGE]
gremmie@1 48 return render_to_response('weblinks/link_summary.html', {
gremmie@1 49 'links': links,
gremmie@1 50 'title': 'Newest Links',
gremmie@1 51 },
gremmie@1 52 context_instance = RequestContext(request))
gremmie@1 53
gremmie@1 54 #######################################################################
gremmie@1 55
gremmie@1 56 def popular_links(request):
gremmie@1 57 links = Link.public_objects.order_by('-hits')[:LINKS_PER_PAGE]
gremmie@1 58 return render_to_response('weblinks/link_summary.html', {
gremmie@1 59 'links': links,
gremmie@1 60 'title': 'Popular Links',
gremmie@1 61 },
gremmie@1 62 context_instance = RequestContext(request))
gremmie@1 63
gremmie@1 64 #######################################################################
gremmie@1 65
gremmie@1 66 @login_required
gremmie@1 67 def add_link(request):
gremmie@1 68 if request.method == 'POST':
gremmie@1 69 add_form = AddLinkForm(request.POST)
gremmie@1 70 if add_form.is_valid():
gremmie@1 71 new_link = add_form.save(commit=False)
gremmie@1 72 new_link.user = request.user
gremmie@1 73 new_link.is_public = False
gremmie@1 74 new_link.save()
gremmie@1 75 email_admins('New link for approval', """Hello,
gremmie@1 76
gremmie@1 77 A user has added a new link for your approval.
gremmie@1 78 """)
gremmie@1 79 return HttpResponseRedirect(reverse('weblinks.views.add_thanks'))
gremmie@1 80 else:
gremmie@1 81 add_form = AddLinkForm()
gremmie@1 82
gremmie@1 83 return render_to_response('weblinks/add_link.html', {
gremmie@1 84 'add_form': add_form,
gremmie@1 85 },
gremmie@1 86 context_instance = RequestContext(request))
gremmie@1 87
gremmie@1 88 #######################################################################
gremmie@1 89
gremmie@1 90 @login_required
gremmie@1 91 def add_thanks(request):
gremmie@1 92 return render_to_response('weblinks/add_link.html', {
gremmie@1 93 },
gremmie@1 94 context_instance = RequestContext(request))
gremmie@1 95
gremmie@1 96 #######################################################################
gremmie@1 97
gremmie@1 98 # Maps URL component to database field name for the links table:
gremmie@1 99
gremmie@1 100 LINK_FIELD_MAP = {
gremmie@1 101 'title': 'title',
gremmie@1 102 'date': '-date_added',
gremmie@1 103 'hits': '-hits'
gremmie@1 104 }
gremmie@1 105
gremmie@1 106 def view_links(request, category, sort='title', page='1'):
gremmie@1 107 try:
gremmie@1 108 cat = Category.objects.get(pk=category)
gremmie@1 109 except Category.DoesNotExist:
gremmie@1 110 raise Http404
gremmie@1 111
gremmie@1 112 if sort in LINK_FIELD_MAP:
gremmie@1 113 order_by = LINK_FIELD_MAP[sort]
gremmie@1 114 else:
gremmie@1 115 sort = 'title'
gremmie@1 116 order_by = LINK_FIELD_MAP['title']
gremmie@1 117
gremmie@1 118 links = Link.public_objects.filter(category = category).order_by(order_by)
gremmie@1 119 paginator = create_paginator(links)
gremmie@1 120 try:
gremmie@1 121 the_page = paginator.page(int(page))
gremmie@1 122 except InvalidPage:
gremmie@1 123 raise Http404
gremmie@1 124
gremmie@1 125 return render_to_response('weblinks/view_links.html', {
gremmie@1 126 's' : sort,
gremmie@1 127 'category' : cat,
gremmie@1 128 'page' : the_page,
gremmie@1 129 },
gremmie@1 130 context_instance = RequestContext(request))
gremmie@1 131
gremmie@1 132 #######################################################################
gremmie@1 133
gremmie@1 134 def _visit_link(request, link):
gremmie@1 135 link.hits += 1
gremmie@1 136 link.save()
gremmie@1 137 return HttpResponseRedirect(link.url)
gremmie@1 138
gremmie@1 139 #######################################################################
gremmie@1 140
gremmie@1 141 def visit(request, link_id):
gremmie@1 142 link = get_object_or_404(Link, pk = link_id)
gremmie@1 143 return _visit_link(request, link)
gremmie@1 144
gremmie@1 145 #######################################################################
gremmie@1 146
gremmie@1 147 def random_link(request):
gremmie@1 148 ids = Link.public_objects.values_list('id', flat=True)
gremmie@1 149 if not ids:
gremmie@1 150 raise Http404
gremmie@1 151 id = random.choice(ids)
gremmie@1 152 random_link = Link.public_objects.get(pk=id)
gremmie@1 153 return _visit_link(request, random_link)
gremmie@1 154
gremmie@1 155 #######################################################################
gremmie@1 156
gremmie@1 157 @login_required
gremmie@1 158 def report_link(request, link_id):
gremmie@1 159 link = get_object_or_404(Link, pk = link_id)
gremmie@1 160 if request.method == "POST":
gremmie@1 161 FlaggedLink.objects.create(link, request.user)
gremmie@1 162 email_admins('A Link Has Been Flagged as Broken', """Hello,
gremmie@1 163
gremmie@1 164 A user has flagged a link as broken.
gremmie@1 165 """)
gremmie@1 166 return HttpResponseRedirect(reverse('weblinks.views.report_thanks', args = (link_id, )))
gremmie@1 167
gremmie@1 168 return render_to_response('weblinks/report_link.html', {
gremmie@1 169 'link': link,
gremmie@1 170 'report_thanks': False,
gremmie@1 171 },
gremmie@1 172 context_instance = RequestContext(request))
gremmie@1 173
gremmie@1 174
gremmie@1 175 #######################################################################
gremmie@1 176
gremmie@1 177 @login_required
gremmie@1 178 def report_thanks(request, link_id):
gremmie@1 179 link = get_object_or_404(Link, pk = link_id)
gremmie@1 180 return render_to_response('weblinks/report_link.html', {
gremmie@1 181 'link': link,
gremmie@1 182 'report_thanks': True,
gremmie@1 183 },
gremmie@1 184 context_instance = RequestContext(request))
gremmie@1 185
gremmie@1 186 #######################################################################
gremmie@1 187
gremmie@1 188 def search_links(request, page=1):
gremmie@1 189 if request.method == 'POST':
gremmie@1 190 form = SearchForm(request.POST)
gremmie@1 191 if form.is_valid():
gremmie@1 192 query_text = form.query()
gremmie@1 193 page = 1
gremmie@1 194 else:
gremmie@1 195 return HttpResponseRedirect(reverse('weblinks.views.link_index'))
gremmie@1 196 else:
gremmie@1 197 if 'query' in request.GET:
gremmie@1 198 query_text = request.GET['query']
gremmie@1 199 else:
gremmie@1 200 return HttpResponseRedirect(reverse('weblinks.views.link_index'))
gremmie@1 201
gremmie@1 202 links = Link.public_objects.filter(
gremmie@1 203 Q(title__icontains = query_text) |
gremmie@1 204 Q(description__icontains = query_text)).order_by('title')
gremmie@1 205 paginator = create_paginator(links)
gremmie@1 206 try:
gremmie@1 207 the_page = paginator.page(int(page))
gremmie@1 208 except EmptyPage:
gremmie@1 209 links = Link.public_objects.none()
gremmie@1 210 except InvalidPage:
gremmie@1 211 raise Http404
gremmie@1 212
gremmie@1 213 return render_to_response('weblinks/search_results.html', {
gremmie@1 214 'query': query_text,
gremmie@1 215 'page': the_page,
gremmie@1 216 },
gremmie@1 217 context_instance = RequestContext(request))
bgneal@20 218
bgneal@20 219 #######################################################################
bgneal@20 220
bgneal@20 221 def link_detail(request, id):
bgneal@20 222 link = get_object_or_404(Link, pk=id)
bgneal@20 223 return render_to_response('weblinks/link_detail.html', {
bgneal@20 224 'link': link,
bgneal@20 225 },
bgneal@20 226 context_instance = RequestContext(request))