コード例 #1
0
ファイル: views.py プロジェクト: okal/onadata
def profile_settings(request, username):
    context = RequestContext(request)
    content_user = check_and_set_user(request, username)
    context.content_user = content_user
    profile, created = UserProfile.objects.get_or_create(user=content_user)
    if request.method == 'POST':
        form = UserProfileForm(request.POST, instance=profile)
        if form.is_valid():
            # get user
            # user.email = cleaned_email
            form.instance.user.email = form.cleaned_data['email']
            form.instance.user.save()
            form.save()
            # todo: add string rep. of settings to see what changed
            audit = {}
            audit_log(
                Actions.PROFILE_SETTINGS_UPDATED, request.user, content_user,
                _("Profile settings updated."), audit, request)
            return HttpResponseRedirect(reverse(
                public_profile, kwargs={'username': request.user.username}
            ))
    else:
        form = UserProfileForm(
            instance=profile, initial={"email": content_user.email})
    return render_to_response("settings.html", {'form': form},
                              context_instance=context)
コード例 #2
0
ファイル: serializers.py プロジェクト: eHealthAfrica/onadata
 def restore_object(self, attrs, instance=None):
     def _get_first_last_names(name):
         name_split = name.split()
         first_name = name_split[0]
         last_name = u''
         if len(name_split) > 1:
             last_name = u' '.join(name_split[1:])
         return first_name, last_name
     params = copy.deepcopy(attrs)
     username = attrs.get('user.username', None)
     password = attrs.get('user.password', None)
     name = attrs.get('name', None)
     email = attrs.get('user.email', None)
     if username:
         params['username'] = username
     if email:
         params['email'] = email
     if password:
         params.update({'password1': password, 'password2': password})
     if instance:
         form = UserProfileForm(params, instance=instance)
         # form.is_valid affects instance object for partial updates [PATCH]
         # so only use it for full updates [PUT], i.e shallow copy effect
         if not self.partial and form.is_valid():
             instance = form.save()
         # get user
         if email:
             instance.user.email = form.cleaned_data['email']
         if name:
             first_name, last_name = _get_first_last_names(name)
             instance.user.first_name = first_name
             instance.user.last_name = last_name
         if email or name:
             instance.user.save()
         return super(
             UserProfileSerializer, self).restore_object(attrs, instance)
         #return instance  # TODO: updates
     form = RegistrationFormUserProfile(params)
     # does not require captcha
     form.REGISTRATION_REQUIRE_CAPTCHA = False
     if form.is_valid():
         first_name, last_name = _get_first_last_names(name)
         new_user = User(username=username, first_name=first_name,
                         last_name=last_name, email=email)
         new_user.set_password(password)
         new_user.save()
         created_by = self.context['request'].user
         profile = UserProfile(
             user=new_user, name=attrs.get('name', u''),
             created_by=created_by,
             city=attrs.get('city', u''),
             country=attrs.get('country', u''),
             organization=attrs.get('organization', u''),
             home_page=attrs.get('home_page', u''),
             twitter=attrs.get('twitter', u''))
         return profile
     else:
         self.errors.update(form.errors)
     return attrs
コード例 #3
0
    def update(self, instance, validated_data):

        params = copy.deepcopy(validated_data)
        username = validated_data.get('user.username', None)
        password = validated_data.get('user.password', None)
        name = validated_data.get('name', None)
        email = validated_data.get('user.email', None)

        if username:
            params['username'] = username

        if email:
            params['email'] = email

        if password:
            params.update({'password1': password, 'password2': password})

            form = UserProfileForm(params, instance=instance)

            # form.is_valid affects instance object for partial updates [PATCH]
            # so only use it for full updates [PUT], i.e shallow copy effect
            if not self.partial and form.is_valid():
                instance = form.save()

            # get user
            if email:
                instance.user.email = form.cleaned_data['email']

            if name:
                first_name, last_name = _get_first_last_names(name)
                instance.user.first_name = first_name
                instance.user.last_name = last_name

            if email or name:
                instance.user.save()

        return super(UserProfileSerializer,
                     self).update(instance, validated_data)
コード例 #4
0
    def update(self, instance, validated_data):

        params = copy.deepcopy(validated_data)
        username = validated_data.get("user.username", None)
        password = validated_data.get("user.password", None)
        name = validated_data.get("name", None)
        email = validated_data.get("user.email", None)

        if username:
            params["username"] = username

        if email:
            params["email"] = email

        if password:
            params.update({"password1": password, "password2": password})

            form = UserProfileForm(params, instance=instance)

            # form.is_valid affects instance object for partial updates [PATCH]
            # so only use it for full updates [PUT], i.e shallow copy effect
            if not self.partial and form.is_valid():
                instance = form.save()

            # get user
            if email:
                instance.user.email = form.cleaned_data["email"]

            if name:
                first_name, last_name = _get_first_last_names(name)
                instance.user.first_name = first_name
                instance.user.last_name = last_name

            if email or name:
                instance.user.save()

        return super(UserProfileSerializer, self).update(instance, validated_data)
コード例 #5
0
    def restore_object(self, attrs, instance=None):
        params = copy.deepcopy(attrs)
        username = attrs.get('user.username', None)
        password = attrs.get('user.password', None)
        name = attrs.get('name', None)
        email = attrs.get('user.email', None)

        if username:
            params['username'] = username

        if email:
            params['email'] = email

        if password:
            params.update({'password1': password, 'password2': password})

        if instance:
            form = UserProfileForm(params, instance=instance)

            # form.is_valid affects instance object for partial updates [PATCH]
            # so only use it for full updates [PUT], i.e shallow copy effect
            if not self.partial and form.is_valid():
                instance = form.save()

            # get user
            if email:
                instance.user.email = form.cleaned_data['email']

            if name:
                first_name, last_name = _get_first_last_names(name)
                instance.user.first_name = first_name
                instance.user.last_name = last_name

            if email or name:
                instance.user.save()

            return super(
                UserProfileSerializer, self).restore_object(attrs, instance)

        form = RegistrationFormUserProfile(params)
        # does not require captcha
        form.REGISTRATION_REQUIRE_CAPTCHA = False

        if form.is_valid():
            site = Site.objects.get(pk=settings.SITE_ID)
            new_user = RegistrationProfile.objects.create_inactive_user(
                username=username,
                password=password,
                email=email,
                site=site,
                send_email=True)
            new_user.is_active = True
            new_user.save()

            created_by = self.context['request'].user
            created_by = None if created_by.is_anonymous() else created_by
            profile = UserProfile(
                user=new_user, name=attrs.get('name', u''),
                created_by=created_by,
                city=attrs.get('city', u''),
                country=attrs.get('country', u''),
                organization=attrs.get('organization', u''),
                home_page=attrs.get('home_page', u''),
                twitter=attrs.get('twitter', u''))

            return profile

        else:
            self.errors.update(form.errors)

        return attrs