2008-10-05 18:46:28 -07:00
|
|
|
from django.http import HttpResponseRedirect
|
2007-11-03 00:45:10 -07:00
|
|
|
from django.shortcuts import get_object_or_404
|
|
|
|
from django.contrib.auth.models import User
|
|
|
|
from datetime import datetime
|
2008-10-05 18:41:08 -07:00
|
|
|
from archweb_dev.main.utils import render_response
|
2008-10-05 18:46:28 -07:00
|
|
|
from archweb_dev.main.models import Package, PackageFile
|
2008-08-16 10:36:15 -07:00
|
|
|
from archweb_dev.main.models import Arch, Repo, Signoff
|
2008-02-26 18:36:20 -08:00
|
|
|
|
2007-11-03 00:45:10 -07:00
|
|
|
|
|
|
|
def update(request):
|
2007-12-29 15:34:02 -08:00
|
|
|
if request.POST.has_key('adopt'):
|
|
|
|
mode = 'adopt'
|
|
|
|
message = 'Adoption was successful'
|
|
|
|
if request.POST.has_key('disown'):
|
|
|
|
mode = 'disown'
|
|
|
|
message = 'Disown was successful'
|
2008-06-29 17:44:02 -07:00
|
|
|
|
2007-12-29 15:34:02 -08:00
|
|
|
ids = request.POST.getlist('pkgid')
|
|
|
|
for id in ids:
|
|
|
|
pkg = Package.objects.get(id=id)
|
2008-07-30 10:02:44 -07:00
|
|
|
if mode == 'adopt':
|
|
|
|
pkg.maintainer = request.user
|
|
|
|
elif mode == 'disown':
|
2007-12-29 15:34:02 -08:00
|
|
|
pkg.maintainer_id = 0
|
|
|
|
pkg.save()
|
|
|
|
return render_response(request, 'status_page.html', {'message':message})
|
2007-11-03 00:45:10 -07:00
|
|
|
|
2008-07-05 17:28:29 -07:00
|
|
|
def details(request, pkgid=0, name='', repo='', arch=''):
|
|
|
|
if pkgid != 0:
|
|
|
|
pkg = get_object_or_404(Package, id=pkgid)
|
|
|
|
elif all([name, repo, arch]):
|
|
|
|
pkg= get_object_or_404(Package,
|
|
|
|
pkgname=name, repo__name__iexact=repo, arch__name=arch)
|
|
|
|
else:
|
2007-12-29 15:34:02 -08:00
|
|
|
p = Package.objects.filter(pkgname=name)
|
2008-04-09 19:28:24 -07:00
|
|
|
if repo: p = p.filter(repo__name__iexact=repo)
|
2008-07-05 17:28:29 -07:00
|
|
|
lenp = p.count()
|
2007-12-29 15:34:02 -08:00
|
|
|
# if more then one result, send to the search view
|
2008-07-05 17:28:29 -07:00
|
|
|
if lenp > 1: return search(request, name)
|
|
|
|
if lenp < 1: return render_response(request, 'error_page.html',
|
2007-12-29 15:34:02 -08:00
|
|
|
{'errmsg': 'No matching packages.'})
|
2008-07-05 17:28:29 -07:00
|
|
|
pkg = p[0]
|
2007-12-29 15:34:02 -08:00
|
|
|
|
2008-03-08 12:11:02 -08:00
|
|
|
return render_response(request, 'packages/details.html', {'pkg': pkg})
|
2007-11-03 00:45:10 -07:00
|
|
|
|
2008-07-05 17:28:29 -07:00
|
|
|
|
2008-06-29 17:08:18 -07:00
|
|
|
# @TODO: replace search form with a newform
|
2007-11-03 00:45:10 -07:00
|
|
|
def search(request, query=''):
|
2007-12-29 15:34:02 -08:00
|
|
|
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')
|
2008-03-08 12:11:02 -08:00
|
|
|
arch = request.GET.get('arch', 'all')
|
2007-12-29 15:34:02 -08:00
|
|
|
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')
|
2008-03-22 21:01:16 -07:00
|
|
|
flagged_only = request.GET.get('flagged_only', 'n')
|
2007-12-29 15:34:02 -08:00
|
|
|
|
|
|
|
# build the form lists
|
2008-04-09 19:28:24 -07:00
|
|
|
repos = Repo.objects.all()
|
|
|
|
arches = Arch.objects.all()
|
2008-06-29 17:08:18 -07:00
|
|
|
users = User.objects.all()
|
2007-12-29 15:34:02 -08:00
|
|
|
# copy GET data over and add the lists
|
|
|
|
c = request.GET.copy()
|
2008-03-22 19:51:01 -07:00
|
|
|
c['repos'], c['arches'] = repos, arches
|
2008-06-29 17:08:18 -07:00
|
|
|
c['users'] = users
|
2007-12-29 15:34:02 -08:00
|
|
|
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()
|
2008-04-09 19:28:24 -07:00
|
|
|
if repo != 'all' and repo in [x.name for x in repos]:
|
|
|
|
results = results.filter(repo__name__iexact=repo)
|
|
|
|
if arch != 'all' and arch in [x.name for x in arches]:
|
|
|
|
results = results.filter(arch__name__iexact=arch)
|
2008-03-22 19:51:01 -07:00
|
|
|
if maint != 'all':
|
|
|
|
results = results.filter(maintainer=maint)
|
2008-03-22 21:01:16 -07:00
|
|
|
if flagged_only != 'n':
|
|
|
|
results = results.filter(needupdate=1)
|
2008-03-22 19:51:01 -07:00
|
|
|
if lastupdate:
|
|
|
|
results = results.filter(
|
|
|
|
last_update__gte=datetime(
|
|
|
|
int(lastupdate[0:4]),
|
|
|
|
int(lastupdate[5:7]),
|
|
|
|
int(lastupdate[8:10])))
|
2007-12-29 15:34:02 -08:00
|
|
|
|
|
|
|
# sort results
|
|
|
|
if sort == '':
|
2008-06-19 16:18:44 -07:00
|
|
|
results = results.order_by('repo', 'arch', '-last_update', 'pkgname')
|
2007-12-29 15:34:02 -08:00
|
|
|
else:
|
|
|
|
# duplicate sort fields shouldn't hurt anything
|
2008-03-08 12:11:02 -08:00
|
|
|
results = results.order_by(sort, 'repo', 'arch', 'pkgname')
|
2007-12-29 15:34:02 -08:00
|
|
|
|
|
|
|
qs = request.GET.copy()
|
|
|
|
# build pagination urls
|
2008-04-28 19:39:03 -07:00
|
|
|
if results.count() > (skip + limit) and limit > 0:
|
2007-12-29 15:34:02 -08:00
|
|
|
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)
|
2007-11-03 00:45:10 -07:00
|
|
|
|
|
|
|
def files(request, pkgid):
|
2007-12-29 15:34:02 -08:00
|
|
|
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})
|
2007-11-03 00:45:10 -07:00
|
|
|
|
|
|
|
def unflag(request, pkgid):
|
2007-12-29 15:34:02 -08:00
|
|
|
pkg = get_object_or_404(Package, id=pkgid)
|
|
|
|
pkg.needupdate = 0
|
|
|
|
pkg.save()
|
|
|
|
return HttpResponseRedirect('/packages/%d/' % (pkg.id))
|
2007-12-29 16:42:55 -08:00
|
|
|
|
2008-08-16 10:36:15 -07:00
|
|
|
def signoffs(request, message=None):
|
2008-08-06 14:58:15 -07:00
|
|
|
packages = Package.objects.filter(repo__name="Testing").order_by("pkgname")
|
2008-08-06 14:54:11 -07:00
|
|
|
return render_response(request, 'packages/signoffs.html',
|
2008-08-16 10:36:15 -07:00
|
|
|
{'packages': packages, 'message': message})
|
|
|
|
|
|
|
|
def signoff_package(request, arch, pkgname):
|
|
|
|
pkg = get_object_or_404(Package,
|
|
|
|
arch__name=arch,
|
|
|
|
pkgname=pkgname,
|
|
|
|
repo__name="Testing")
|
|
|
|
|
|
|
|
signoff, created = Signoff.objects.get_or_create(
|
|
|
|
pkg=pkg,
|
|
|
|
pkgver=pkg.pkgver,
|
|
|
|
pkgrel=pkg.pkgrel,
|
|
|
|
packager=request.user)
|
|
|
|
|
|
|
|
if created:
|
|
|
|
message = "You have successfully signed off for %s on %s" % (
|
|
|
|
pkg.pkgname, pkg.arch)
|
|
|
|
else:
|
|
|
|
message = "You have already signed off for %s on %s" % (
|
|
|
|
pkg.pkgname, pkg.arch)
|
|
|
|
|
|
|
|
return signoffs(request, message)
|
|
|
|
|
2008-08-06 14:54:11 -07:00
|
|
|
|
|
|
|
|
2007-12-29 16:42:55 -08:00
|
|
|
# vim: set ts=4 sw=4 et:
|
|
|
|
|