def edituser(request, username, chapter=None): pwerr = '' usererr = '' new_username = '' if username == '': join = True u = User() if request.user.is_superuser or (request.user.is_staff and request.user.chapter == chapter): adduser = True else: adduser = False else: join = False adduser = False if not request.user.is_authenticated(): return HttpResponseRedirect("/login/?next=/profile/edit/") u = get_object_or_404(User, username__exact=username) chapter = u.chapter if join or request.user.is_superuser or request.user.id == u.id or (request.user.is_staff and request.user.chapter == u.chapter): if request.method == 'POST': if join: new_username = request.POST['username'].strip() formpart1 = FormPartOne(request.POST, chapter=chapter, user_id=u.id) formpart2 = FormPartTwo(request.POST, chapter=chapter) formpart3 = FormPartThree(request.POST, chapter=chapter) formpart4 = FormPartFour(request.POST, chapter=chapter) formpart5 = FormPartFive(request.POST, chapter=chapter) if formpart1.is_valid() and formpart2.is_valid() and formpart3.is_valid() and formpart4.is_valid() and formpart5.is_valid(): if join: username_len = len(new_username) if username_len < 3: usererr = _('Your username must be 3 or more characters') elif username_len > 30: usererr = _('Your username must be less than 30 characters') matches = re.compile(r'^\w+$').findall(new_username) if matches == []: usererr = _('Your username must contain only letters, numbers and underscores') else: try: usercheck = User.objects.get(username=new_username) except User.DoesNotExist: if request.POST['password1'] == request.POST['password2']: if len(request.POST['password1']) < 5: pwerr = _('Your password must be at least 5 characters long') else: u = User.objects.create_user(new_username, '', request.POST['password1']) u.chapter = chapter mt = MemberStatus(user_id=u.pk, statusType_id=1) mt.save() u.is_active = True u.is_staff = False u.is_superuser = False u.save() else: pwerr = _('The password and repeated password did not match. Please try again') else: usererr = _('That username is already taken') if request.user.is_staff and request.user != u: if len(request.POST['password1']) > 0: if request.POST['password1'] == request.POST['password2']: u.set_password(request.POST['password1']) else: pwerr = _('The password and repeated password did not match. Please try again') if pwerr == '' and usererr == '': data = formpart1.cleaned_data u.first_name = data['first_name'] u.last_name = data['last_name'] u.email = data['email'] u.alt_email = data['alt_email'] u.mobile = data['mobile'] u.gender = data['gender'] if 'student_number' in data: u.student_number = data['student_number'] if 'union_member' in data: u.union_member = data['union_member'] if 'tshirt' in data: u.tshirt = data['tshirt'] data = formpart2.cleaned_data u.privacy = data['privacy'] u.dob_public = data['dob_public'] u.email_public = data['email_public'] data = formpart3.cleaned_data u.dob = data['dob'] u.course = data['course'] u.uni_start = data['uni_start'] u.uni_end = data['uni_end'] u.university = data['university'] u.course_type = data['course_type'] u.student_type = data['student_type'] u.bio = data['bio'] #u.job_title = data['job_title'] #u.company = data['company'] data = formpart4.cleaned_data u.email_reminder_optin = data['email_reminder_optin'] u.email_chapter_optin = data['email_chapter_optin'] u.mobile_reminder_optin = data['mobile_reminder_optin'] u.mobile_marketing_optin = data['mobile_marketing_optin'] u.email_newsletter_optin = data['email_newsletter_optin'] data = formpart5.cleaned_data if 'internal_notes' in data: u.internal_notes = data['internal_notes'] if 'trained' in data: u.trained = data['trained'] u.save() if 'return' in request.POST: request.user.message_set.create(message=unicode(_("Profile and settings updated!"))) return HttpResponseRedirect(request.POST['return']) elif join: if chapter.welcome_email_enable: message = EmailMessage() message.subject = chapter.welcome_email_subject try: message.subject = chapter.welcome_email_subject.format( chapter=chapter, user=u, plaintext_password=request.POST['password1']) except Exception: message.subject = chapter.welcome_email_subject try: message.body = chapter.welcome_email_msg.format( chapter=chapter, user=u, plaintext_password=request.POST['password1']) except Exception: message.body = chapter.welcome_email_msg message.from_address = '*****@*****.**' message.reply_address = '*****@*****.**' message.from_name = chapter.name message.sender = User.objects.get(username='******') message.html = chapter.welcome_email_html message.status = -1 message.save() recipient = EmailRecipient() recipient.message = message recipient.user = u recipient.to_name = u.get_full_name() recipient.to_address = u.email recipient.save() message.status = 0 message.save() return HttpResponseRedirect("/welcome/" + chapter.myrobogals_url + "/") else: request.user.message_set.create(message=unicode(_("Profile and settings updated!"))) return HttpResponseRedirect("/profile/" + username + "/") else: if join: formpart1 = FormPartOne(None, chapter=chapter, user_id=0) formpart2 = FormPartTwo(None, chapter=chapter) formpart3 = FormPartThree(None, chapter=chapter) formpart4 = FormPartFour(None, chapter=chapter) formpart5 = FormPartFive(None, chapter=chapter) else: if u.tshirt: tshirt_id = u.tshirt.pk else: tshirt_id = None formpart1 = FormPartOne({ 'first_name': u.first_name, 'last_name': u.last_name, 'email': u.email, 'alt_email': u.alt_email, 'mobile': u.mobile, 'gender': u.gender, 'student_number': u.student_number, 'union_member': u.union_member, 'tshirt': tshirt_id}, chapter=chapter, user_id=u.pk) formpart2 = FormPartTwo({ 'privacy': u.privacy, 'dob_public': u.dob_public, 'email_public': u.email_public}, chapter=chapter) if u.university: uni = u.university.pk else: uni = None formpart3 = FormPartThree({ 'dob': u.dob, 'course': u.course, 'uni_start': u.uni_start, 'uni_end': u.uni_end, 'university': uni, 'job_title': u.job_title, 'company': u.company, 'course_type': u.course_type, 'student_type': u.student_type, 'bio': u.bio}, chapter=chapter) formpart4 = FormPartFour({ 'email_reminder_optin': u.email_reminder_optin, 'email_chapter_optin': u.email_chapter_optin, 'mobile_reminder_optin': u.mobile_reminder_optin, 'mobile_marketing_optin': u.mobile_marketing_optin, 'email_newsletter_optin': u.email_newsletter_optin}, chapter=chapter) formpart5 = FormPartFive({ 'internal_notes': u.internal_notes, 'trained': u.trained}, chapter=chapter) if 'return' in request.GET: return_url = request.GET['return'] elif 'return' in request.POST: return_url = request.POST['return'] else: return_url = '' chpass = (join or (request.user.is_staff and request.user != u)) exec_fields = request.user.is_superuser or (request.user.is_staff and request.user.chapter == chapter) return render_to_response('profile_edit.html', {'join': join, 'adduser': adduser, 'chpass': chpass, 'exec_fields': exec_fields, 'formpart1': formpart1, 'formpart2': formpart2, 'formpart3': formpart3, 'formpart4': formpart4, 'formpart5': formpart5, 'u': u, 'chapter': chapter, 'usererr': usererr, 'pwerr': pwerr, 'new_username': new_username, 'return': return_url}, context_instance=RequestContext(request)) else: raise Http404 # don't have permission to change