def validate_settings(self, data):
	#
		"""
Called to validate the given settings.

:param data: Setting dict to be verified

:since: v0.1.00
		"""

		_return = False

		if (isinstance(data, dict)
		    and DatabaseTasks.is_available()
		    and "recipient" in data
		    and "email_content_field_names" in data
		    and ("email_subject_field_name" in data or "email_subject_title" in data)
		   ):
		#
			_return = True

			recipient = InputFilter.filter_email_address(data['recipient'])
			if (recipient == ""): _return = False

			if (type(data['email_content_field_names']) is not list): _return = False
			if ("email_subject_title" in data and len(data['email_subject_title']) < 1): _return = False
		#

		return _return
	#
#

##j## EOF
    def _execute_register(self, username = None, email = None, ex_type = None, source_iline = "", target_iline = "", is_save_mode = False):
        """
Action for "register"

:param username: User name to be used
:param email: Verified e-mail address to be used
:param ex_type: Externally verified service identifier string
:param source_iline: Source URI query string
:param target_iline: Target URI query string
:param is_save_mode: True if the form is submitted

:since: v0.2.00
        """

        # pylint: disable=star-args

        source = source_iline
        if (source_iline == ""): source_iline = "m=user;a=services"

        target = target_iline

        if (target_iline == ""):
            if (Settings.is_defined("pas_http_user_register_default_target_lang_{0}".format(self.request.get_lang()))): target_iline = Settings.get("pas_http_user_register_default_target_lang_{0}".format(self.request.get_lang()))
            elif (Settings.is_defined("pas_http_user_register_default_target")): target_iline = Settings.get("pas_http_user_register_default_target")
            else: target_iline = source_iline
        #

        L10n.init("pas_http_core_form")
        L10n.init("pas_http_user")

        if (not Settings.get("pas_http_user_registration_allowed", True)): raise TranslatableError("pas_http_user_registration_disabled", 403)

        if (self.response.is_supported("html_css_files")): self.response.add_theme_css_file("mini_default_sprite.min.css")

        Link.set_store("servicemenu",
                       Link.TYPE_RELATIVE_URL,
                       L10n.get("core_back"),
                       { "__query__": re.sub("\\_\\_\\w+\\_\\_", "", source_iline) },
                       icon = "mini-default-back",
                       priority = 7
                      )

        if (not DatabaseTasks.is_available()): raise TranslatableException("pas_core_tasks_daemon_not_available")

        form_id = InputFilter.filter_control_chars(self.request.get_parameter("form_id"))

        form = FormProcessor(form_id)
        if (is_save_mode): form.set_input_available()

        is_email_verified = (email is not None)

        if (not is_email_verified):
            field = EMailField("uemail")
            field.set_title(L10n.get("pas_http_user_email"))
            field.set_required()
            field.set_limits(_max = 255)
            field.set_validators([ self._check_email_not_registered ])
            form.add(field)
        #

        if (username is None):
            field = TextField("uusername")
            field.set_required()
            field.set_limits(int(Settings.get("pas_http_core_username_min", 3)), 100)
            field.set_size(TextField.SIZE_SMALL)
        else:
            field = InfoField("uusername")
            field.set_value(username)
        #

        field.set_title(L10n.get("pas_core_username"))
        field.set_validators([ self._check_username_not_registered ])
        form.add(field)

        if (is_email_verified):
            field = InfoField("uemail")
            field.set_title(L10n.get("pas_http_user_email"))
            field.set_value(email)
            field.set_validators([ self._check_email_not_registered ])
            form.add(field)
        #

        if (ex_type is None):
            field = PasswordField("upassword")
            field.set_title(L10n.get("pas_http_user_password"))
            field.set_required()
            field.set_limits(int(Settings.get("pas_http_user_password_min", 6)))
            field.set_mode(PasswordField.PASSWORD_CLEARTEXT | PasswordField.PASSWORD_WITH_REPETITION)
            form.add(field)
        #

        tos_filepath = Settings.get_lang_associated("pas_http_user_tos_filepath",
                                                    self.request.get_lang(),
                                                    "{0}/settings/pas_user_tos.ftg".format(Settings.get("path_data"))
                                                   )

        field = FormTagsFileField("utos")
        field.set_title(L10n.get("pas_http_user_tos"))
        field.set_required()
        field.set_formtags_filepath(tos_filepath)
        form.add(field)

        tos_choices = [ { "title": L10n.get("core_yes"), "value": "accepted" },
                        { "title": L10n.get("core_no"), "value": "denied" }
                      ]

        field = RadioField("utos_accepted")
        field.set_title(L10n.get("pas_http_user_tos_accepted"))
        field.set_choices(tos_choices)
        field.set_required()
        field.set_validators([ self._check_tos_accepted ])
        form.add(field)

        if (is_save_mode and form.check()):
            if (not is_email_verified): email = InputFilter.filter_email_address(form.get_value("uemail"))
            if (username is None): username = InputFilter.filter_control_chars(form.get_value("uusername"))

            user_profile_class = NamedLoader.get_class("dNG.data.user.Profile")
            if (user_profile_class is None): raise TranslatableException("core_unknown_error")

            user_profile = user_profile_class()

            user_profile_data = { "name": username,
                                  "lang": self.request.get_lang(),
                                  "email": email
                                }

            if (ex_type is None):
                password = InputFilter.filter_control_chars(form.get_value("upassword"))
                user_profile.set_password(password)
            else:
                user_profile_data['type'] = user_profile_class.TYPE_EXTERNAL_VERIFIED_MEMBER
                user_profile_data['type_ex'] = ex_type
            #

            with TransactionContext():
                user_profile.set_data_attributes(**user_profile_data)

                if (not is_email_verified): user_profile.lock()
                else: user_profile.unlock()

                user_profile.save()
            #

            user_id = user_profile.get_id()

            if (not is_email_verified):
                cleanup_timeout_days = int(Settings.get("pas_http_user_registration_days", 28))

                cleanup_timeout = (cleanup_timeout_days * 86400)
                vid = Md5.hash(urandom(32))

                database_tasks = DatabaseTasks.get_instance()

                database_tasks.add("dNG.pas.user.Profile.delete.{0}".format(username),
                                   "dNG.pas.user.Profile.delete",
                                   cleanup_timeout,
                                   username = username
                                  )

                database_tasks.add("dNG.pas.user.Profile.sendRegistrationEMail.{0}".format(username),
                                   "dNG.pas.user.Profile.sendRegistrationEMail",
                                   1,
                                   username = username,
                                   vid = vid,
                                   vid_timeout_days = cleanup_timeout_days
                                  )

                database_tasks.register_timeout(vid,
                                                "dNG.pas.user.Profile.registrationValidated",
                                                cleanup_timeout,
                                                username = username,
                                                vid = vid
                                               )

                self._on_pending_registration(user_id, source_iline, target_iline)
            else: self._on_registration_completed(user_id, source_iline, target_iline)
        else:
            content = { "title": L10n.get("pas_http_user_registration") }

            content['form'] = { "object": form,
                                "url_parameters": { "__request__": True, "a": "register-save", "dsd": { "source": source, "target": target } },
                                "button_title": "core_continue"
                              }

            self.response.init()
            self.response.set_title(content['title'])
            self.response.add_oset_content("core.form", content)