def save_profile_changes(self, REQUEST):
        """!TXT! Save changes to the user's profile."""

        profile_id = self._get_profile_id(request.AUTHENTICATED_USER)
        settings = self.__profiles.get(profile_id, {})

        for formkey in REQUEST.form.keys():
            if formkey.startswith('value_'):
                key = formkey[6:]
                value = eval_valuestring(REQUEST[formkey], settings[key])
                if value:
                    settings[key] = value

        for key in REQUEST.get('delete_keys', []):
            del settings[key]

        profiles = self.__profiles
        profiles[profile_id] = settings
        self.__profiles = profiles

        self.redirect(
            REQUEST,
            'profiles_form',
            message='!TXT! The changes to your profile have been saved.',
        )
    def set_profile_variable(self, request, key, value):
        """!TXT! Set the value of the specified variable in the User's profile."""

        profile_id = self._get_profile_id(request.AUTHENTICATED_USER)
        settings = self.__profiles.get(profile_id, {})
        if key in settings:
            value = eval_valuestring(value, settings[key])
            if not value:
                return

        settings[key] = value
        profiles = self.__profiles
        profiles[profile_id] = settings
        self.__profiles = profiles
    def update_profile(self, request, variables):
        """!TXT! Set the value of the specified variable in the User's profile."""

        form = request.form
        form_has_key = form.has_key
        profile_id = self._get_profile_id(request.AUTHENTICATED_USER)
        settings = self.__profiles.get(profile_id, {})
        settings_changed = false

        for key, default in variables:
            value = eval_valuestring(form.get(key, settings.get(key, default)), default)
            if value is not None:
                request.set(key, value)
                if value != settings.get(key, None):
                    settings_changed = true
                    settings[key] = value

        if settings_changed:
            profiles = self.__profiles
            profiles[profile_id] = settings
            self.__profiles = profiles