diff -r 7075c27170f2 -r 4a86df751222 app/soc/views/site/user/profile.py --- a/app/soc/views/site/user/profile.py Fri Sep 26 19:47:07 2008 +0000 +++ b/app/soc/views/site/user/profile.py Mon Sep 29 14:03:45 2008 +0000 @@ -169,7 +169,7 @@ class EditForm(forms_helpers.DbModelForm): - """Django form displayed when Developer creates or edits a User. + """Django form displayed when Developer edits a User. This form is manually specified, instead of using model = soc.models.user.User @@ -319,3 +319,99 @@ 'existing_user': user}) return response_helpers.respond(request, template, context) + + +class CreateForm(forms_helpers.DbModelForm): + """Django form displayed when Developer creates a User. + + This form is manually specified, instead of using + model = soc.models.user.User + in the Meta class, because the form behavior is unusual and normally + required Properties of the User model need to sometimes be omitted. + """ + id = forms.EmailField( + label=soc.models.user.User.id.verbose_name, + help_text=soc.models.user.User.id.help_text) + + link_name = forms.CharField( + label=soc.models.user.User.link_name.verbose_name, + help_text=soc.models.user.User.link_name.help_text) + + nick_name = forms.CharField( + label=soc.models.user.User.nick_name.verbose_name) + + is_developer = forms.BooleanField(required=False, + label=soc.models.user.User.is_developer.verbose_name, + help_text=soc.models.user.User.is_developer.help_text) + + class Meta: + model = None + + + def clean_link_name(self): + link_name = self.cleaned_data.get('link_name') + if not id_user.isLinkNameFormatValid(link_name): + raise forms.ValidationError("This link name is in wrong format.") + else: + if id_user.doesLinkNameExist(link_name): + raise forms.ValidationError("This link name is already in use.") + return link_name + + def clean_id(self): + new_email = self.cleaned_data.get('id') + form_id = users.User(email=new_email) + if id_user.isIdUser(form_id): + raise forms.ValidationError("This account is already in use.") + return form_id + + +DEF_SITE_CREATE_USER_PROFILE_TMPL = 'soc/site/user/profile/edit.html' + +def create(request, template=DEF_SITE_CREATE_USER_PROFILE_TMPL): + """View for a Developer to modify the properties of a User Model entity. + + Args: + request: the standard django request object + template: the "sibling" template (or a search list of such templates) + from which to construct the public.html template name (or names) + + Returns: + A subclass of django.http.HttpResponse which either contains the form to + be filled out, or a redirect to the correct view in the interface. + """ + # create default template context for use with any templates + context = response_helpers.getUniversalContext(request) + + alt_response = simple.getAltResponseIfNotDeveloper(request, + context=context) + if alt_response: + return alt_response + + if request.method == 'POST': + form = CreateForm(request.POST) + + if form.is_valid(): + form_id = form.cleaned_data.get('id') + new_linkname = form.cleaned_data.get('link_name') + nickname = form.cleaned_data.get('nick_name') + is_developer = form.cleaned_data.get('is_developer') + + user = id_user.updateOrCreateUserFromId(id=form_id, + link_name=new_linkname, nick_name=nickname, + is_developer=is_developer) + + if not user: + return http.HttpResponseRedirect('/') + + # redirect to new /site/user/profile/new_linkname?s=0 + # (causes 'Profile saved' message to be displayed) + return response_helpers.redirectToChangedSuffix( + request, None, new_linkname, + params=profile.SUBMIT_PROFILE_SAVED_PARAMS) + else: # method == 'GET': + # no link name specified, so start with an empty form + form = CreateForm() + + context.update({'form': form}) + + return response_helpers.respond(request, template, context) \ No newline at end of file