Develop your own Condition
A condition is made up of two classes: a Command class and a Form class (for settings).
- The
Formwill define admin settings to customize the condition - The
Commandwill define how you run the condition.
These two classes will be the registred through Decidim::SpamSignal.config.conditions_manifest.
Condition Form
A Condition Form will define admin settings.
Inherit from Decidim::Form and include Decidim::SpamSignal::SettingsForm.
class CustomSettingsForm < Decidim::Form
include Decidim::SpamSignal::SettingsForm
attribute :foo_enabled, Boolean, default: false
end
The form attributes have some rules, to let you have a better form:
- If it starts with
is_or ends with_enabled, it will generate a checkbox. - If it ends with
_csv, it will generate a textarea. - The rest follows Decidim's default form builder conventions.
Condition Command
A condition command inherit from Decidim::SpamSignal::Conditions::ConditionHandler and will implement a call method.
This call method can return:
invalid: The submitted content is not ok, and should trigger the conditionvalid: The submitted content is ok, and should not trigger the condition.
class CustomConditionCommand < Decidim::SpamSignal::Conditions::ConditionHandler
def call
return broadcast(:invalid) if suspicious_content.include? "maga"
broadcast(:ok)
end
end
In a Condition command, you have access to these attributes:
| Attribute | Description | | ========= | =========== | | suspicious_content | The content that is suspicious | | config | The current command settings | | context.current_user | The current organization | | context.suspicious_user | The current user author of the suspicious_content |
Register the condition
Now, you can register your condition in an initializer:
Decidim::SpamSignal.config.conditions_registry.register(
:custom_condition, # The identifier of your condition
CustomSettingsForm,
CustomConditionCommand
)
And set the i18n fields:
decidim.spam_signal.conditions.custom_condition.namedecidim.spam_signal.conditions.custom_condition.descriptiondecidim.spam_signal.conditions.custom_condition.custom_settings_form.foo_enabled