Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
40 / 40
100.00% covered (success)
100.00%
5 / 5
CRAP
100.00% covered (success)
100.00%
1 / 1
Form
100.00% covered (success)
100.00%
40 / 40
100.00% covered (success)
100.00%
5 / 5
15
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 create
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
1
 process
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
1 / 1
7
 validate
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
3
 submit
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2
3namespace Drupal\visitors\Plugin\VisitorsEvent;
4
5use Drupal\Core\Form\FormStateInterface;
6use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
7use Drupal\Core\Routing\RouteMatchInterface;
8use Drupal\visitors\Attribute\VisitorsEvent;
9use Drupal\visitors\Plugin\VisitorsEventBase;
10use Drupal\visitors\VisitorsEventPluginInterface;
11use Symfony\Component\DependencyInjection\ContainerInterface;
12
13/**
14 * Plugin implementation for form event.
15 */
16#[VisitorsEvent(
17  id: "form",
18  label: "Form",
19  weight: 10,
20)]
21class Form extends VisitorsEventBase implements VisitorsEventPluginInterface, ContainerFactoryPluginInterface {
22
23  /**
24   * Constructs a new Form object.
25   *
26   * @param array $configuration
27   *   A configuration array containing information about the plugin instance.
28   * @param string $plugin_id
29   *   The plugin_id for the plugin instance.
30   * @param mixed $plugin_definition
31   *   The plugin implementation definition.
32   * @param \Drupal\Core\Routing\RouteMatchInterface $routeMatch
33   *   The route match service.
34   */
35  public function __construct(
36    array $configuration,
37    $plugin_id,
38    $plugin_definition,
39    protected readonly RouteMatchInterface $routeMatch,
40  ) {
41    parent::__construct($configuration, $plugin_id, $plugin_definition);
42
43  }
44
45  /**
46   * {@inheritdoc}
47   */
48  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
49    return new static(
50      $configuration,
51      $plugin_id,
52      $plugin_definition,
53      $container->get('current_route_match'),
54    );
55  }
56
57  /**
58   * {@inheritdoc}
59   */
60  public function process(array $context): ?array {
61
62    $forms = &drupal_static('visitors_form_alter') ?? [];
63
64    if ($forms && count($forms) == 1) {
65
66      $form_id = array_keys($forms)[0];
67      $base_form_id = array_values($forms)[0];
68      $return['event'] = 'view';
69      $return['variables']['plugin_var_3'] = $base_form_id ?? $form_id;
70      $return['variables']['plugin_var_4'] = $form_id;
71
72      $form_validate = &drupal_static('visitors_form_validate') ?? [];
73      if ($form_validate && count($form_validate) == 1) {
74        $return['event'] = 'validate';
75      }
76
77      $form_submit = &drupal_static('visitors_form_submit') ?? [];
78      if ($form_submit && count($form_submit) == 1) {
79        $return['event'] = 'submit';
80      }
81
82      return $return;
83    }
84
85    return NULL;
86  }
87
88  /**
89   * A validation callback for forms.
90   *
91   * @param array $form
92   *   The form array.
93   * @param \Drupal\Core\Form\FormStateInterface $form_state
94   *   The form state.
95   */
96  public static function validate(array &$form, FormStateInterface $form_state) {
97    $static = &drupal_static('visitors_form_validate');
98
99    $form_object = $form_state->getFormObject();
100    if (!$form_object) {
101      return;
102    }
103
104    $form_id = $form_object->getFormId();
105    $base_form_id = $form_id;
106    if (method_exists($form_object, 'getBaseFormId')) {
107      $base_form_id = $form_object->getBaseFormId();
108    }
109
110    $static[$form_id] = $base_form_id;
111  }
112
113  /**
114   * A submit callback for forms.
115   *
116   * @param array $form
117   *   The form array.
118   * @param \Drupal\Core\Form\FormStateInterface $form_state
119   *   The form state.
120   */
121  public static function submit(array &$form, FormStateInterface $form_state) {
122    $static = &drupal_static('visitors_form_submit');
123
124    $form_object = $form_state->getFormObject();
125    if (!$form_object) {
126      return;
127    }
128
129    $form_id = $form_object->getFormId();
130    $base_form_id = $form_id;
131    if (method_exists($form_object, 'getBaseFormId')) {
132      $base_form_id = $form_object->getBaseFormId();
133    }
134
135    $static[$form_id] = $base_form_id;
136  }
137
138}