Class for a protector using a link count.
Description
Source
File: src/modules/protectors/linkcount.php
class Linkcount extends Protector { /** * Bootstraps the submodule by setting properties. * * @since 1.0.0 */ protected function bootstrap() { $this->slug = 'linkcount'; $this->title = __( 'Link Count', 'torro-forms' ); $this->description = __( 'Tries to detect bots by the amount of links in the form submission data.', 'torro-forms' ); } /** * Verifies a request by ensuring that it is not spammy. * * @since 1.0.0 * * @param array $data Submission POST data. * @param Form $form Form object. * @param Submission|null $submission Submission object, or null if a new submission. * @return bool|WP_Error True if request is not spammy, false or error object otherwise. */ public function verify_request( $data, $form, $submission = null ) { $trigger = $this->get_form_option( $form->id, 'trigger', 3 ); foreach ( $data['values'] as $element_id => $fields ) { foreach ( $fields as $field_slug => $value ) { if ( empty( $value ) ) { continue; } if ( ! is_string( $value ) ) { continue; } preg_match_all('@https?://@' , $value, $matches ); if ( count( $matches[0] ) < $trigger ) { continue; } return new WP_Error( 'too_many_links', __( 'Your submission contains too many links and was therefore considered spam.', 'torro-forms' ) ); } } return true; } /** * Renders the output for the protector before the Submit button. * * @since 1.0.0 * * @param Form $form Form object. */ public function render_output( $form ) { // This does not need any output. } /** * Returns the available meta fields for the submodule. * * @since 1.0.0 * * @return array Associative array of `$field_slug => $field_args` pairs. */ public function get_meta_fields() { $meta_fields = parent::get_meta_fields(); $meta_fields['trigger'] = array( 'type' => 'number', 'label' => __( 'Link Count Trigger', 'torro-forms' ), 'description' => __( 'Specify the maximum number of links a field is allowed to contain before it is considered spam.', 'torro-forms' ), 'default' => 3, 'min' => 1, 'step' => 1, 'wrap_classes' => array( 'has-torro-tooltip-description' ), ); return $meta_fields; } }
Changelog
Version | Description |
---|---|
1.0.0 | Introduced. |
Methods
- enabled — Checks whether the protector is enabled for a specific form.
- get_meta_fields — Returns the available meta fields for the submodule.
- render_output — Renders the output for the protector before the Submit button.
- verify_request — Verifies a request by ensuring that it is not spammy.
- wrap_form_name — Wraps a non-prefixed form input name attribute so that it will be properly included the submission POST data.