def edit_emails(request): """Edit alternate email addresses.""" user = User.objects.get(pk=request.user.id) profile = user.userprofile emails = ExternalAccount.objects.filter(type=ExternalAccount.TYPE_EMAIL) email_privacy_form = forms.EmailPrivacyForm(request.POST or None, instance=profile) alternate_email_formset = forms.AlternateEmailFormset(request.POST or None, instance=profile, queryset=emails) if alternate_email_formset.is_valid() and email_privacy_form.is_valid(): alternate_email_formset.save() email_privacy_form.save() return redirect('phonebook:edit_emails') return render(request, 'phonebook/edit_emails.html', {'alternate_email_formset': alternate_email_formset, 'email_privacy_form': email_privacy_form})
def edit_profile(request): """Edit user profile view.""" # Don't use request.user user = User.objects.get(pk=request.user.id) profile = user.userprofile user_groups = profile.groups.all().order_by('name') emails = ExternalAccount.objects.filter(type=ExternalAccount.TYPE_EMAIL) accounts_qs = ExternalAccount.objects.exclude(type=ExternalAccount.TYPE_EMAIL) sections = { 'registration_section': ['user_form', 'registration_form'], 'basic_section': ['user_form', 'basic_information_form'], 'groups_section': ['groups_privacy_form'], 'skills_section': ['skills_form'], 'email_section': ['email_privacy_form', 'alternate_email_formset'], 'languages_section': ['language_privacy_form', 'language_formset'], 'accounts_section': ['accounts_formset'], 'location_section': ['location_form'], 'irc_section': ['irc_form'], 'contribution_section': ['contribution_form'], 'tshirt_section': ['tshirt_form'], } curr_sect = next((s for s in sections.keys() if s in request.POST), None) def get_request_data(form): if curr_sect and form in sections[curr_sect]: return request.POST return None ctx = {} ctx['user_form'] = forms.UserForm(get_request_data('user_form'), instance=user) ctx['registration_form'] = forms.RegisterForm(get_request_data('registration_form'), request.FILES or None, instance=profile) basic_information_data = get_request_data('basic_information_form') ctx['basic_information_form'] = forms.BasicInformationForm(basic_information_data, request.FILES or None, instance=profile) ctx['accounts_formset'] = forms.AccountsFormset(get_request_data('accounts_formset'), instance=profile, queryset=accounts_qs) ctx['location_form'] = forms.LocationForm(get_request_data('location_form'), instance=profile) ctx['language_formset'] = forms.LanguagesFormset(get_request_data('language_formset'), instance=profile, locale=request.locale) language_privacy_data = get_request_data('language_privacy_form') ctx['language_privacy_form'] = forms.LanguagesPrivacyForm(language_privacy_data, instance=profile) ctx['skills_form'] = forms.SkillsForm(get_request_data('skills_form'), instance=profile) ctx['contribution_form'] = forms.ContributionForm(get_request_data('contribution_form'), instance=profile) ctx['tshirt_form'] = forms.TshirtForm(get_request_data('tshirt_form'), instance=profile) ctx['groups_privacy_form'] = forms.GroupsPrivacyForm(get_request_data('groups_privacy_form'), instance=profile) ctx['irc_form'] = forms.IRCForm(get_request_data('irc_form'), instance=profile) ctx['email_privacy_form'] = forms.EmailPrivacyForm(get_request_data('email_privacy_form'), instance=profile) alternate_email_formset_data = get_request_data('alternate_email_formset') ctx['alternate_email_formset'] = forms.AlternateEmailFormset(alternate_email_formset_data, instance=profile, queryset=emails) ctx['autocomplete_form_media'] = ctx['registration_form'].media + ctx['skills_form'].media forms_valid = True if request.POST: if not curr_sect: raise Http404 curr_forms = map(lambda x: ctx[x], sections[curr_sect]) forms_valid = all(map(lambda x: x.is_valid(), curr_forms)) if forms_valid: old_username = request.user.username for f in curr_forms: f.save() # Spawn task to check for spam if not profile.can_vouch: params = { 'instance_id': profile.id, 'user_ip': request.META.get('REMOTE_ADDR'), 'user_agent': request.META.get('HTTP_USER_AGENT'), 'referrer': request.META.get('HTTP_REFERER'), 'comment_author': profile.full_name, 'comment_author_email': profile.email, 'comment_content': profile.bio } check_spam_account.delay(**params) next_section = request.GET.get('next') next_url = urlparams(reverse('phonebook:profile_edit'), next_section) if curr_sect == 'registration_section': settings_url = reverse('phonebook:profile_edit') settings_link = '<a href="{0}">settings</a>'.format(settings_url) msg = _(u'Your registration is complete. ' u'Feel free to visit the {0} page to add ' u'additional information to your profile.'.format(settings_link)) messages.info(request, mark_safe(msg)) redeem_invite(profile, request.session.get('invite-code')) next_url = reverse('phonebook:profile_view', args=[user.username]) elif user.username != old_username: msg = _(u'You changed your username; ' u'please note your profile URL has also changed.') messages.info(request, _(msg)) return HttpResponseRedirect(next_url) ctx.update({ 'user_groups': user_groups, 'profile': request.user.userprofile, 'vouch_threshold': settings.CAN_VOUCH_THRESHOLD, 'appsv2': profile.apps.filter(enabled=True), 'forms_valid': forms_valid }) return render(request, 'phonebook/edit_profile.html', ctx)
def edit_profile(request): """Edit user profile view.""" # Don't use request.user user = User.objects.get(pk=request.user.id) profile = user.userprofile user_groups = profile.groups.all().order_by('name') emails = ExternalAccount.objects.filter(type=ExternalAccount.TYPE_EMAIL) accounts_qs = ExternalAccount.objects.exclude( type=ExternalAccount.TYPE_EMAIL) sections = { 'registration_section': ['user_form', 'registration_form'], 'basic_section': ['user_form', 'basic_information_form'], 'groups_section': ['groups_privacy_form'], 'skills_section': ['skills_form'], 'email_section': ['email_privacy_form', 'alternate_email_formset'], 'languages_section': ['language_privacy_form', 'language_formset'], 'accounts_section': ['accounts_formset'], 'irc_section': ['irc_form'], 'location_section': ['location_form'], 'contribution_section': ['contribution_form'], 'tshirt_section': ['tshirt_form'], 'developer_section': ['developer_form'] } curr_sect = next((s for s in sections.keys() if s in request.POST), None) def get_request_data(form): if curr_sect and form in sections[curr_sect]: return request.POST return None ctx = {} ctx['user_form'] = forms.UserForm(get_request_data('user_form'), instance=user) ctx['registration_form'] = forms.RegisterForm( get_request_data('registration_form'), request.FILES or None, instance=profile) basic_information_data = get_request_data('basic_information_form') ctx['basic_information_form'] = forms.BasicInformationForm( basic_information_data, request.FILES or None, instance=profile) ctx['accounts_formset'] = forms.AccountsFormset( get_request_data('accounts_formset'), instance=profile, queryset=accounts_qs) ctx['language_formset'] = forms.LanguagesFormset( get_request_data('language_formset'), instance=profile, locale=request.locale) language_privacy_data = get_request_data('language_privacy_form') ctx['language_privacy_form'] = forms.LanguagesPrivacyForm( language_privacy_data, instance=profile) ctx['skills_form'] = forms.SkillsForm(get_request_data('skills_form'), instance=profile) location_initial = { 'saveregion': True if profile.geo_region else False, 'savecity': True if profile.geo_city else False, 'lat': profile.lat, 'lng': profile.lng } ctx['location_form'] = forms.LocationForm( get_request_data('location_form'), instance=profile, initial=location_initial) ctx['contribution_form'] = forms.ContributionForm( get_request_data('contribution_form'), instance=profile) ctx['tshirt_form'] = forms.TshirtForm(get_request_data('tshirt_form'), instance=profile) ctx['groups_privacy_form'] = forms.GroupsPrivacyForm( get_request_data('groups_privacy_form'), instance=profile) ctx['irc_form'] = forms.IRCForm(get_request_data('irc_form'), instance=profile) ctx['developer_form'] = forms.DeveloperForm( get_request_data('developer_form'), instance=profile) ctx['email_privacy_form'] = forms.EmailPrivacyForm( get_request_data('email_privacy_form'), instance=profile) alternate_email_formset_data = get_request_data('alternate_email_formset') ctx['alternate_email_formset'] = forms.AlternateEmailFormset( alternate_email_formset_data, instance=profile, queryset=emails) forms_valid = True if request.POST: if not curr_sect: raise Http404 curr_forms = map(lambda x: ctx[x], sections[curr_sect]) forms_valid = all(map(lambda x: x.is_valid(), curr_forms)) if forms_valid: old_username = request.user.username for f in curr_forms: f.save() next_section = request.GET.get('next') next_url = urlparams(reverse('phonebook:profile_edit'), next_section) if curr_sect == 'registration_section': settings_url = reverse('phonebook:profile_edit') settings_link = '<a href="{0}">settings</a>'.format( settings_url) msg = _(u'Your registration is complete. ' u'Feel free to visit the {0} page to add ' u'additional information to your profile.'.format( settings_link)) messages.info(request, mark_safe(msg)) redeem_invite(profile, request.session.get('invite-code')) next_url = reverse('phonebook:profile_view', args=[user.username]) elif user.username != old_username: msg = _(u'You changed your username; ' u'please note your profile URL has also changed.') messages.info(request, _(msg)) return HttpResponseRedirect(next_url) ctx.update({ 'user_groups': user_groups, 'profile': request.user.userprofile, 'vouch_threshold': settings.CAN_VOUCH_THRESHOLD, 'mapbox_id': settings.MAPBOX_PROFILE_ID, 'apps': user.apiapp_set.filter(is_active=True), 'appsv2': profile.apps.filter(enabled=True), 'forms_valid': forms_valid }) return render(request, 'phonebook/edit_profile.html', ctx)