from django import forms from django.http import HttpResponseRedirect from django.contrib.auth.decorators import login_required, user_passes_test from django.contrib.auth.models import User from django.contrib.sites.models import Site from django.shortcuts import render_to_response from django.template import RequestContext from django.core.mail import send_mail from django.db.models import Q from django.views.decorators.cache import never_cache from main.models import Package, Todolist, TodolistPkg from main.models import Arch, Repo from main.models import UserProfile, News from main.models import Mirror from packages.models import PackageRelation import random from string import ascii_letters, digits pwletters = ascii_letters + digits @login_required @never_cache def index(request): '''the Developer dashboard''' inner_q = PackageRelation.objects.filter(user=request.user).values('pkgbase') flagged = Package.objects.select_related('arch', 'repo').filter(needupdate=True) flagged = flagged.filter(pkgbase__in=inner_q) todopkgs = TodolistPkg.objects.select_related( 'pkg', 'pkg__arch', 'pkg__repo').filter(complete=False) todopkgs = todopkgs.filter(pkg__pkgbase__in=inner_q) page_dict = { 'todos': Todolist.objects.incomplete(), 'repos': Repo.objects.all(), 'arches': Arch.objects.all(), 'maintainers': User.objects.filter(is_active=True).order_by('last_name'), 'flagged' : flagged, 'todopkgs' : todopkgs, } return render_to_response('devel/index.html', RequestContext(request, page_dict)) @login_required def change_notify(request): maint = User.objects.get(username=request.user.username) notify = request.POST.get('notify', 'no') pf = maint.get_profile() pf.notify = (notify == 'yes') pf.save() return HttpResponseRedirect('/devel/') class ProfileForm(forms.Form): email = forms.EmailField(label='E-mail Address') passwd1 = forms.CharField(label='New Password', required=False, widget=forms.PasswordInput) passwd2 = forms.CharField(label='Confirm Password', required=False, widget=forms.PasswordInput) def clean(self): if self.cleaned_data['passwd1'] != self.cleaned_data['passwd2']: raise forms.ValidationError('Passwords do not match.') return self.cleaned_data @login_required @never_cache def change_profile(request): if request.POST: form = ProfileForm(request.POST) if form.is_valid(): request.user.email = form.cleaned_data['email'] if form.cleaned_data['passwd1']: request.user.set_password(form.cleaned_data['passwd1']) request.user.save() return HttpResponseRedirect('/devel/') else: form = ProfileForm(initial={'email': request.user.email}) return render_to_response('devel/profile.html', RequestContext(request, {'form': form})) @login_required def mirrorlist(request): mirrors = Mirror.objects.select_related().all() return render_to_response('devel/mirrorlist.html', RequestContext(request, {'mirror_list': mirrors})) class NewUserForm(forms.ModelForm): class Meta: model = UserProfile exclude = ('picture', 'user') username = forms.CharField(max_length=30) email = forms.EmailField() first_name = forms.CharField(required=False) last_name = forms.CharField(required=False) def save(self): profile = forms.ModelForm.save(self, False) pw = ''.join([random.choice(pwletters) for i in xrange(8)]) user = User.objects.create_user(username=self.cleaned_data['username'], email=self.cleaned_data['email'], password=pw) user.first_name = self.cleaned_data['first_name'] user.last_name = self.cleaned_data['last_name'] user.save() profile.user = user profile.save() domain = Site.objects.get_current().domain send_mail("Your new archweb account", """You can now log into: https://%s/login/ with these login details: Username: %s Password: %s""" % (domain, user.username, pw), 'Arch Website Notification ', [user.email], fail_silently=False) @user_passes_test(lambda u: u.is_superuser) @never_cache def new_user_form(request): if request.POST: form = NewUserForm(request.POST) if form.is_valid(): form.save() return HttpResponseRedirect('/admin/auth/user/%d/' %form.instance.user.id) else: form = NewUserForm() return render_to_response('general_form.html', RequestContext( request, {'description': '''A new user will be created with the following properties in their profile. A random password will be generated and the user will be e-mailed with their account details n plaintext.''', 'form': form, 'title': 'Create User', 'submit_text': 'Create User'})) # vim: set ts=4 sw=4 et: