summaryrefslogtreecommitdiffstats
path: root/devel/views.py
blob: 95c90f3f4cd21fd4ccf8c7a8b48338bd7a17cc5d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
from django import forms
from django.http import HttpResponse, HttpResponseRedirect
from django.contrib.auth.models import User
from archweb_dev.main.utils import render_response
from archweb_dev.main.models import Package, Todolist
from archweb_dev.main.models import Arch, Repo
from archweb_dev.main.models import UserProfile, News, Donor, Mirror

def index(request):
    try:
        thismaint = User.objects.get(username=request.user.username)
    except User.DoesNotExist:
        # weird, we don't have a maintainer record for this logged-in user
        thismaint = None

    # get a list of incomplete package todo lists
    todos = Todolist.objects.get_incomplete()
    # get flagged-package stats for all maintainers
    stats = Package.objects.get_flag_stats()
    if thismaint:
        # get list of flagged packages for this maintainer
        pkgs = Package.objects.filter(
            maintainer=thismaint.id).filter(
                needupdate=True).order_by('repo', 'pkgname')
    else:
        pkgs = None

    arch_stats = []
    for xarch in Arch.objects.all():
        arch_stats.append({ 
            'name': xarch.name,
            'count': Package.objects.filter(arch=xarch).count(),
            'flagged': Package.objects.filter(arch=xarch).filter(
                needupdate=True).exclude(
                    repo__name__iexact='testing').count()
        })

    repo_stats = []
    for xrepo in Repo.objects.all():
        repo_stats.append({ 
            'name': xrepo.name,
            'count': Package.objects.filter(repo=xrepo).count(),
            'flagged': Package.objects.filter(
                repo=xrepo).filter(needupdate=True).count()
        })

    return render_response(
        request, 'devel/index.html',
        {'stats': stats, 'pkgs': pkgs, 'todos': todos, 'maint': thismaint, 
         'repos': repo_stats, 'arches': arch_stats})

#@is_maintainer
def change_notify(request):
    maint = User.objects.get(username=request.user.username)
    notify = request.POST.get('notify', 'no')
    try:
        maint.get_profile().notify = notify == 'yes'
    except UserProfile.DoesNotExist:
        UserProfile(user_id=maint.id ,notify=notify == 'yes').save()
    maint.get_profile().save()
    return HttpResponseRedirect('/devel/')

class ProfileForm(forms.Form):
    email = forms.EmailField('E-mail Address')
    passwd1 = forms.CharField('New Password', required=False,
            widget=forms.PasswordInput)
    passwd2 = forms.CharField('Confirm Password', required=False,
            widget=forms.PasswordInput)

    def clean(self):
        if ('passwd1' not in self.cleaned_data and
                'passwd2' not in self.cleaned_data):
            return self.cleaned_data
            
        if self.cleaned_data['passwd1'] != self.cleaned_data['passwd2']:
            raise forms.ValidationError('Passwords do not match')
        return self.cleaned_data

def change_profile(request):
    if request.POST:
        form = ProfileForm(request.POST)
        if form.is_valid():
            request.user.email = form.cleaned_data['email']
            request.user.set_password(form.cleaned_data['passwd1'])
            request.user.save()
            return HttpResponseRedirect('/devel/')
    else:
        form = ProfileForm(initial={'email': request.user.email})
    return render_response(request, 'devel/profile.html', {'form': form})

def siteindex(request):
    # get the most recent 10 news items
    news  = News.objects.order_by('-postdate', '-id')[:10]
    pkgs  = Package.objects.exclude(repo__name__iexact='testing').order_by('-last_update')[:15]
    repos = Repo.objects.all()
    return render_response(
        request, 'devel/siteindex.html', 
        {'news_updates': news, 'pkg_updates': pkgs, 'repos': repos})

def developers(request):
    devs = User.objects.filter(is_active=True).order_by('username')
    return render_response(request, 'devel/developers.html', {'devs':devs})

def fellows(request):
    fellows = User.objects.filter(is_active=False).order_by('username')
    return render_response(request, 'devel/fellows.html', {'fellows':fellows})

def donate(request):
    donor_count = Donor.objects.count()
    splitval = donor_count / 4
    slice1 = Donor.objects.all()[:splitval]
    slice2 = Donor.objects.all()[(splitval):(splitval*2)]
    slice3 = Donor.objects.all()[(splitval*2):(donor_count-splitval)]
    slice4 = Donor.objects.all()[(donor_count-splitval):donor_count]
    return render_response(request, 'devel/donate.html',
        {'slice1':slice1,'slice2':slice2,'slice3':slice3,'slice4':slice4})

def download(request):
    mirrors = Mirror.objects.order_by('country', 'domain')
    return render_response(request, 'devel/download.html', {'mirrors':mirrors})

def projects(request):
    return render_response(request, 'devel/projects.html')

def robots(request):
    return HttpResponse("User-agent: *\nDisallow: /\n", mimetype="text/plain")

def denied(request):
    return render_response(request, 'devel/denied.html')

# vim: set ts=4 sw=4 et: