Date exposed filter with "between" operator errors in BEF settings
>>> [!note] Migrated issue
<!-- Drupal.org comment -->
<!-- Migrated from issue #3506688. -->
Reported by: [deimos](https://www.drupal.org/user/875278)
Related to !151
>>>
<h3 id="summary-problem-motivation">Problem/Motivation</h3>
<pre> <br>TypeError: Drupal\Core\Form\FormState::setUserInput(): Argument #1 ($user_input) must be of type array, null given, called in /var/www/web/core/modules/views/src/Plugin/views/filter/Date.php on line 261 in Drupal\Core\Form\FormState->setUserInput() (line 1018 of core/lib/Drupal/Core/Form/FormState.php).<br><br>Drupal\views\Plugin\views\filter\Date->buildExposedForm(Array, Object) (Line: 399)<br>Drupal\better_exposed_filters\Plugin\better_exposed_filters\filter\FilterWidgetBase->getExposedFilterWidgetType() (Line: 96)<br>Drupal\better_exposed_filters\Plugin\better_exposed_filters\filter\FilterWidgetBase->buildConfigurationForm(Array, Object) (Line: 586)<br>Drupal\better_exposed_filters\Plugin\views\exposed_form\BetterExposedFilters->buildOptionsForm(Array, Object) (Line: 1833)<br>Drupal\views\Plugin\views\display\DisplayPluginBase->buildOptionsForm(Array, Object) (Line: 438)<br>Drupal\views\Plugin\views\display\PathPluginBase->buildOptionsForm(Array, Object) (Line: 279)<br>Drupal\views\Plugin\views\display\Page->buildOptionsForm(Array, Object) (Line: 74)<br>Drupal\views_ui\Form\Ajax\Display->buildForm(Array, Object)<br>call_user_func_array(Array, Array) (Line: 536)<br>Drupal\Core\Form\FormBuilder->retrieveForm('views_ui_edit_display_form', Object) (Line: 284)<br>Drupal\Core\Form\FormBuilder->buildForm('Drupal\views_ui\Form\Ajax\Display', Object) (Line: 97)</pre><h4 id="summary-steps-reproduce">Steps to reproduce</h4>
<p>Issue discovered with <code>better_exposed_filters: 6.0.6</code></p>
<ol>
<li>Install BEF module.</li>
<li>Create or edit any view.</li>
<li>Set <b>Exposed form style</b> to use <i>Better Exposed Filters</i> in <b> Exposed form </b> settings.</li>
<li>Add any date exposed filter with <i>Is between</i> operator. For example, node's created date filter.</li>
<li>Go to <b>Exposed form style</b> settings and open it in new tab.</li>
<li>Observe error.</li>
</ol>
<h3 id="summary-proposed-resolution">Proposed resolution</h3>
<p>I don't know exact cause of the issue but for Date plugin' exposed form when it is built from BEF <b>user input is NULL</b>. And farther set of user input causes error.<br>
At the same time user input isn't NULL when Date exposed filter form is built as usual when you view page/block.</p>
<p><code>core/modules/views/src/Plugin/views/filter/Date.php</code></p>
<div class="codeblock">
<pre><span style="color: #000000"><span style="color: #0000BB"><?php<br></span><span style="color: #FF8000">/**<br> * Filter to handle dates stored as a timestamp.<br> *<br> * @ingroup views_filter_handlers<br> */<br>#[ViewsFilter("date")]<br></span><span style="color: #007700">class </span><span style="color: #0000BB">Date </span><span style="color: #007700">extends </span><span style="color: #0000BB">NumericFilter </span><span style="color: #007700">{<br><br>...<br><br> </span><span style="color: #FF8000">/**<br> * Override parent method to change input type.<br> */<br> </span><span style="color: #007700">public function </span><span style="color: #0000BB">buildExposedForm</span><span style="color: #007700">(&</span><span style="color: #0000BB">$form</span><span style="color: #007700">, </span><span style="color: #0000BB">FormStateInterface $form_state</span><span style="color: #007700">) {<br> </span><span style="color: #0000BB">parent</span><span style="color: #007700">::</span><span style="color: #0000BB">buildExposedForm</span><span style="color: #007700">(</span><span style="color: #0000BB">$form</span><span style="color: #007700">, </span><span style="color: #0000BB">$form_state</span><span style="color: #007700">);<br><br>...<br><br> if (</span><span style="color: #0000BB">in_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">operator</span><span style="color: #007700">, [</span><span style="color: #DD0000">'between'</span><span style="color: #007700">, </span><span style="color: #DD0000">'not between'</span><span style="color: #007700">], </span><span style="color: #0000BB">TRUE</span><span style="color: #007700">)) {<br> </span><span style="color: #FF8000">// Check the element input matches the form structure.<br> </span><span style="color: #0000BB">$input </span><span style="color: #007700">= </span><span style="color: #0000BB">$form_state</span><span style="color: #007700">-></span><span style="color: #0000BB">getUserInput</span><span style="color: #007700">(); </span><span style="color: #FF8000">// $input === NULL;<br> </span><span style="color: #007700">if (isset(</span><span style="color: #0000BB">$input</span><span style="color: #007700">[</span><span style="color: #0000BB">$field_identifier</span><span style="color: #007700">], </span><span style="color: #0000BB">$input</span><span style="color: #007700">[</span><span style="color: #0000BB">$field_identifier</span><span style="color: #007700">][</span><span style="color: #DD0000">'min'</span><span style="color: #007700">]) && !</span><span style="color: #0000BB">is_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$input</span><span style="color: #007700">[</span><span style="color: #0000BB">$field_identifier</span><span style="color: #007700">][</span><span style="color: #DD0000">'min'</span><span style="color: #007700">]) && </span><span style="color: #0000BB">$value </span><span style="color: #007700">= </span><span style="color: #0000BB">$input</span><span style="color: #007700">[</span><span style="color: #0000BB">$field_identifier</span><span style="color: #007700">][</span><span style="color: #DD0000">'min'</span><span style="color: #007700">]) {<br> </span><span style="color: #0000BB">$date </span><span style="color: #007700">= new </span><span style="color: #0000BB">DrupalDateTime</span><span style="color: #007700">(</span><span style="color: #0000BB">$value</span><span style="color: #007700">);<br> </span><span style="color: #0000BB">$input</span><span style="color: #007700">[</span><span style="color: #0000BB">$field_identifier</span><span style="color: #007700">][</span><span style="color: #DD0000">'min'</span><span style="color: #007700">] = [<br> </span><span style="color: #DD0000">'date' </span><span style="color: #007700">=> </span><span style="color: #0000BB">$date</span><span style="color: #007700">-></span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">'Y-m-d'</span><span style="color: #007700">),<br> </span><span style="color: #DD0000">'time' </span><span style="color: #007700">=> </span><span style="color: #0000BB">$date</span><span style="color: #007700">-></span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">'H:i:s'</span><span style="color: #007700">),<br> ];<br> }<br> if (isset(</span><span style="color: #0000BB">$input</span><span style="color: #007700">[</span><span style="color: #0000BB">$field_identifier</span><span style="color: #007700">], </span><span style="color: #0000BB">$input</span><span style="color: #007700">[</span><span style="color: #0000BB">$field_identifier</span><span style="color: #007700">][</span><span style="color: #DD0000">'max'</span><span style="color: #007700">]) && !</span><span style="color: #0000BB">is_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$input</span><span style="color: #007700">[</span><span style="color: #0000BB">$field_identifier</span><span style="color: #007700">][</span><span style="color: #DD0000">'max'</span><span style="color: #007700">]) && </span><span style="color: #0000BB">$value </span><span style="color: #007700">= </span><span style="color: #0000BB">$input</span><span style="color: #007700">[</span><span style="color: #0000BB">$field_identifier</span><span style="color: #007700">][</span><span style="color: #DD0000">'max'</span><span style="color: #007700">]) {<br> </span><span style="color: #0000BB">$date </span><span style="color: #007700">= new </span><span style="color: #0000BB">DrupalDateTime</span><span style="color: #007700">(</span><span style="color: #0000BB">$value</span><span style="color: #007700">);<br> </span><span style="color: #0000BB">$input</span><span style="color: #007700">[</span><span style="color: #0000BB">$field_identifier</span><span style="color: #007700">][</span><span style="color: #DD0000">'max'</span><span style="color: #007700">] = [<br> </span><span style="color: #DD0000">'date' </span><span style="color: #007700">=> </span><span style="color: #0000BB">$date</span><span style="color: #007700">-></span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">'Y-m-d'</span><span style="color: #007700">),<br> </span><span style="color: #DD0000">'time' </span><span style="color: #007700">=> </span><span style="color: #0000BB">$date</span><span style="color: #007700">-></span><span style="color: #0000BB">format</span><span style="color: #007700">(</span><span style="color: #DD0000">'H:i:s'</span><span style="color: #007700">),<br> ];<br> }<br> </span><span style="color: #0000BB">$form_state</span><span style="color: #007700">-></span><span style="color: #0000BB">setUserInput</span><span style="color: #007700">(</span><span style="color: #0000BB">$input</span><span style="color: #007700">); </span><span style="color: #FF8000">// Error here.<br> </span><span style="color: #007700">}<br></span><span style="color: #0000BB">?></span></span></pre></div>
issue