summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-rw-r--r--packages/views.py296
1 files changed, 148 insertions, 148 deletions
diff --git a/packages/views.py b/packages/views.py
index 7b1ae1fa..aaf4deed 100644
--- a/packages/views.py
+++ b/packages/views.py
@@ -5,168 +5,168 @@ from django.template import Context, loader
from django.core import validators
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
-from archweb_dev.utils import validate, render_template
+from archweb_dev.lib.utils import validate, render_response
from datetime import datetime
from archweb_dev.packages.models import Package, PackageFile, Repo, Category
def update(request):
- if request.POST.has_key('adopt'):
- mode = 'adopt'
- message = 'Adoption was successful'
- if request.POST.has_key('disown'):
- mode = 'disown'
- message = 'Disown was successful'
- try:
- maint = User.objects.get(username=request.user.username)
- except User.DoesNotExist:
- return render_template('error_page.html', request, {'errmsg':'No maintainer record found! Are you a maintainer?'})
- ids = request.POST.getlist('pkgid')
- for id in ids:
- pkg = Package.objects.get(id=id)
- if mode == 'adopt' and pkg.maintainer_id == 0:
- pkg.maintainer = maint
- elif mode == 'disown' and pkg.maintainer == maint:
- pkg.maintainer_id = 0
- else:
- message = "You are not the current maintainer"
- pkg.save()
- return render_template('status_page.html', request, {'message':message})
+ if request.POST.has_key('adopt'):
+ mode = 'adopt'
+ message = 'Adoption was successful'
+ if request.POST.has_key('disown'):
+ mode = 'disown'
+ message = 'Disown was successful'
+ try:
+ maint = User.objects.get(username=request.user.username)
+ except User.DoesNotExist:
+ return render_response(request, 'error_page.html', {'errmsg':'No maintainer record found! Are you a maintainer?'})
+ ids = request.POST.getlist('pkgid')
+ for id in ids:
+ pkg = Package.objects.get(id=id)
+ if mode == 'adopt' and pkg.maintainer_id == 0:
+ pkg.maintainer = maint
+ elif mode == 'disown' and pkg.maintainer == maint:
+ pkg.maintainer_id = 0
+ else:
+ message = "You are not the current maintainer"
+ pkg.save()
+ return render_response(request, 'status_page.html', {'message':message})
def details(request, pkgid=0, name='', repo=''):
- if pkgid == 0:
- p = Package.objects.filter(pkgname=name)
- if repo: p = p.filter(repo__name__exact=repo)
- # if more then one result, send to the search view
- if len(p) > 1: return search(request, name)
- if len(p) < 1: return render_template('error_page.html', request,
- {'errmsg': 'No matching packages.'})
- pkgid = p[0].id
-
- pkg = get_object_or_404(Package, id=pkgid)
- return render_template('packages/details.html', request, {'pkg':pkg})
+ if pkgid == 0:
+ p = Package.objects.filter(pkgname=name)
+ if repo: p = p.filter(repo__name__exact=repo)
+ # if more then one result, send to the search view
+ if len(p) > 1: return search(request, name)
+ if len(p) < 1: return render_response(request, 'error_page.html',
+ {'errmsg': 'No matching packages.'})
+ pkgid = p[0].id
+
+ pkg = get_object_or_404(Package, id=pkgid)
+ return render_response(request, 'packages/details.html', {'pkg':pkg})
def search(request, query=''):
- if request.GET.has_key('q'):
- # take the q GET var over the one passed on the URL
- query = request.GET['q'].strip()
-
- # fetch the form vars
- repo = request.GET.get('repo', 'all')
- category = request.GET.get('category', 'all')
- lastupdate = request.GET.get('lastupdate', '')
- limit = int(request.GET.get('limit', '50'))
- skip = int(request.GET.get('skip', '0'))
- sort = request.GET.get('sort', '')
- maint = request.GET.get('maint', 'all')
-
- # build the form lists
- repos = Repo.objects.order_by('name')
- cats = Category.objects.order_by('category')
- # copy GET data over and add the lists
- c = request.GET.copy()
- c['repos'], c['categories'] = repos, cats
- c['limit'], c['skip'] = limit, skip
- c['lastupdate'] = lastupdate
- c['sort'] = sort
- # 'q' gets renamed to 'query', so it's not in GET
- c['query'] = query
-
- # validate
- errors = {}
- validate(errors, 'Last Update', lastupdate, validators.isValidANSIDate, True, request)
- validate(errors, 'Page Limit', str(limit), validators.isOnlyDigits, True, request)
- validate(errors, 'Page Skip', str(skip), validators.isOnlyDigits, True, request)
- if errors:
- c['errors'] = errors
- return render_template('packages/search.html', request, c)
-
- if query:
- res1 = Package.objects.filter(pkgname__icontains=query)
- res2 = Package.objects.filter(pkgdesc__icontains=query)
- results = res1 | res2
- else:
- results = Package.objects.all()
- if repo != 'all': results = results.filter(repo__name__exact=repo)
- if category != 'all': results = results.filter(category__category__exact=category)
- if maint != 'all': results = results.filter(maintainer=maint)
- if lastupdate: results = results.filter(last_update__gte=datetime(int(lastupdate[0:4]),int(lastupdate[5:7]),int(lastupdate[8:10])))
- # select_related() shouldn't be needed -- we're working around a Django bug
- #results = results.select_related().order_by('repos.name', 'category', 'pkgname')
-
- # sort results
- if sort == '':
- results = results.order_by('repo', 'category', 'pkgname')
- else:
- # duplicate sort fields shouldn't hurt anything
- results = results.order_by(sort, 'repo', 'category', 'pkgname')
-
- qs = request.GET.copy()
- # build pagination urls
- if results.count() > (skip + limit):
- qs['skip'] = skip + limit
- c['nextpage'] = '?' + qs.urlencode()
- if skip > 0:
- qs['skip'] = max(0, skip - limit)
- c['prevpage'] = '?' + qs.urlencode()
- # pass the querystring to the template so we can build sort queries
- c['querystring'] = request.GET
-
- # if only there's only one result, pass right to the package details view
- if results.count() == 1: return details(request, results[0].id)
- # limit result set
- if limit > 0: results = results[skip:(skip+limit)]
-
- c['results'] = results
- return render_template('packages/search.html', request, c)
+ if request.GET.has_key('q'):
+ # take the q GET var over the one passed on the URL
+ query = request.GET['q'].strip()
+
+ # fetch the form vars
+ repo = request.GET.get('repo', 'all')
+ category = request.GET.get('category', 'all')
+ lastupdate = request.GET.get('lastupdate', '')
+ limit = int(request.GET.get('limit', '50'))
+ skip = int(request.GET.get('skip', '0'))
+ sort = request.GET.get('sort', '')
+ maint = request.GET.get('maint', 'all')
+
+ # build the form lists
+ repos = Repo.objects.order_by('name')
+ cats = Category.objects.order_by('category')
+ # copy GET data over and add the lists
+ c = request.GET.copy()
+ c['repos'], c['categories'] = repos, cats
+ c['limit'], c['skip'] = limit, skip
+ c['lastupdate'] = lastupdate
+ c['sort'] = sort
+ # 'q' gets renamed to 'query', so it's not in GET
+ c['query'] = query
+
+ # validate
+ errors = {}
+ validate(errors, 'Last Update', lastupdate, validators.isValidANSIDate, True, request)
+ validate(errors, 'Page Limit', str(limit), validators.isOnlyDigits, True, request)
+ validate(errors, 'Page Skip', str(skip), validators.isOnlyDigits, True, request)
+ if errors:
+ c['errors'] = errors
+ return render_response(request, 'packages/search.html', c)
+
+ if query:
+ res1 = Package.objects.filter(pkgname__icontains=query)
+ res2 = Package.objects.filter(pkgdesc__icontains=query)
+ results = res1 | res2
+ else:
+ results = Package.objects.all()
+ if repo != 'all': results = results.filter(repo__name__exact=repo)
+ if category != 'all': results = results.filter(category__category__exact=category)
+ if maint != 'all': results = results.filter(maintainer=maint)
+ if lastupdate: results = results.filter(last_update__gte=datetime(int(lastupdate[0:4]),int(lastupdate[5:7]),int(lastupdate[8:10])))
+ # select_related() shouldn't be needed -- we're working around a Django bug
+ #results = results.select_related().order_by('repos.name', 'category', 'pkgname')
+
+ # sort results
+ if sort == '':
+ results = results.order_by('repo', 'category', 'pkgname')
+ else:
+ # duplicate sort fields shouldn't hurt anything
+ results = results.order_by(sort, 'repo', 'category', 'pkgname')
+
+ qs = request.GET.copy()
+ # build pagination urls
+ if results.count() > (skip + limit):
+ qs['skip'] = skip + limit
+ c['nextpage'] = '?' + qs.urlencode()
+ if skip > 0:
+ qs['skip'] = max(0, skip - limit)
+ c['prevpage'] = '?' + qs.urlencode()
+ # pass the querystring to the template so we can build sort queries
+ c['querystring'] = request.GET
+
+ # if only there's only one result, pass right to the package details view
+ if results.count() == 1: return details(request, results[0].id)
+ # limit result set
+ if limit > 0: results = results[skip:(skip+limit)]
+
+ c['results'] = results
+ return render_response(request, 'packages/search.html', c)
def files(request, pkgid):
- pkg = get_object_or_404(Package, id=pkgid)
- files = PackageFile.objects.filter(pkg=pkgid)
- return render_template('packages/files.html', request, {'pkg':pkg,'files':files})
+ pkg = get_object_or_404(Package, id=pkgid)
+ files = PackageFile.objects.filter(pkg=pkgid)
+ return render_response(request, 'packages/files.html', {'pkg':pkg,'files':files})
def flaghelp(request):
- return render_template('packages/flaghelp.html', request)
+ return render_response(request, 'packages/flaghelp.html')
def flag(request, pkgid):
- pkg = get_object_or_404(Package, id=pkgid)
- context = {'pkg': pkg}
- if request.POST.has_key('confirmemail'):
- email = request.POST['confirmemail']
- if request.POST.has_key('usermessage'):
- message = request.POST['usermessage']
- else:
- message = None
- # validate
- errors = {}
- validate(errors, 'Email Address', email, validators.isValidEmail, False, request)
- if errors:
- context['errors'] = errors
- return render_template('packages/flag.html', request, context)
-
- context['confirmemail'] = email
- pkg.needupdate = 1
- pkg.save()
- if pkg.maintainer_id > 0:
- # send notification email to the maintainer
- t = loader.get_template('packages/outofdate.txt')
- c = Context({
- 'email': request.POST['confirmemail'],
- 'message': message,
- 'pkgname': pkg.pkgname,
- 'weburl': 'http://www.archlinux.org/packages/' + str(pkg.id) + '/'
- })
- send_mail('arch: Package [%s] marked out-of-date' % pkg.pkgname,
- t.render(c),
- 'Arch Website Notification <nobody@archlinux.org>',
- [pkg.maintainer.email],
- fail_silently=True)
- return render_template('packages/flag.html', request, context)
+ pkg = get_object_or_404(Package, id=pkgid)
+ context = {'pkg': pkg}
+ if request.POST.has_key('confirmemail'):
+ email = request.POST['confirmemail']
+ if request.POST.has_key('usermessage'):
+ message = request.POST['usermessage']
+ else:
+ message = None
+ # validate
+ errors = {}
+ validate(errors, 'Email Address', email, validators.isValidEmail, False, request)
+ if errors:
+ context['errors'] = errors
+ return render_response(request, 'packages/flag.html', context)
+
+ context['confirmemail'] = email
+ pkg.needupdate = 1
+ pkg.save()
+ if pkg.maintainer_id > 0:
+ # send notification email to the maintainer
+ t = loader.get_template('packages/outofdate.txt')
+ c = Context({
+ 'email': request.POST['confirmemail'],
+ 'message': message,
+ 'pkgname': pkg.pkgname,
+ 'weburl': 'http://www.archlinux.org/packages/' + str(pkg.id) + '/'
+ })
+ send_mail('arch: Package [%s] marked out-of-date' % pkg.pkgname,
+ t.render(c),
+ 'Arch Website Notification <nobody@archlinux.org>',
+ [pkg.maintainer.email],
+ fail_silently=True)
+ return render_response(request, 'packages/flag.html', context)
@login_required
def unflag(request, pkgid):
- pkg = get_object_or_404(Package, id=pkgid)
- if pkg.maintainer.username != request.user.username:
- return render_template('error_page.html', request, {'errmsg': 'You do not own this package.'})
- pkg.needupdate = 0
- pkg.save()
- return HttpResponseRedirect('/packages/%d/' % (pkg.id))
+ pkg = get_object_or_404(Package, id=pkgid)
+ if pkg.maintainer.username != request.user.username:
+ return render_response(request, 'error_page.html', {'errmsg': 'You do not own this package.'})
+ pkg.needupdate = 0
+ pkg.save()
+ return HttpResponseRedirect('/packages/%d/' % (pkg.id))