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-&gt;setUserInput() (line 1018 of core/lib/Drupal/Core/Form/FormState.php).<br><br>Drupal\views\Plugin\views\filter\Date-&gt;buildExposedForm(Array, Object) (Line: 399)<br>Drupal\better_exposed_filters\Plugin\better_exposed_filters\filter\FilterWidgetBase-&gt;getExposedFilterWidgetType() (Line: 96)<br>Drupal\better_exposed_filters\Plugin\better_exposed_filters\filter\FilterWidgetBase-&gt;buildConfigurationForm(Array, Object) (Line: 586)<br>Drupal\better_exposed_filters\Plugin\views\exposed_form\BetterExposedFilters-&gt;buildOptionsForm(Array, Object) (Line: 1833)<br>Drupal\views\Plugin\views\display\DisplayPluginBase-&gt;buildOptionsForm(Array, Object) (Line: 438)<br>Drupal\views\Plugin\views\display\PathPluginBase-&gt;buildOptionsForm(Array, Object) (Line: 279)<br>Drupal\views\Plugin\views\display\Page-&gt;buildOptionsForm(Array, Object) (Line: 74)<br>Drupal\views_ui\Form\Ajax\Display-&gt;buildForm(Array, Object)<br>call_user_func_array(Array, Array) (Line: 536)<br>Drupal\Core\Form\FormBuilder-&gt;retrieveForm('views_ui_edit_display_form', Object) (Line: 284)<br>Drupal\Core\Form\FormBuilder-&gt;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">&lt;?php<br></span><span style="color: #FF8000">/**<br>&nbsp;* Filter to handle dates stored as a timestamp.<br>&nbsp;*<br>&nbsp;* @ingroup views_filter_handlers<br>&nbsp;*/<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>&nbsp; </span><span style="color: #FF8000">/**<br>&nbsp;&nbsp; * Override parent method to change input type.<br>&nbsp;&nbsp; */<br>&nbsp; </span><span style="color: #007700">public function </span><span style="color: #0000BB">buildExposedForm</span><span style="color: #007700">(&amp;</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>&nbsp;&nbsp;&nbsp; </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (</span><span style="color: #0000BB">in_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #FF8000">// Check the element input matches the form structure.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000BB">$input </span><span style="color: #007700">= </span><span style="color: #0000BB">$form_state</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getUserInput</span><span style="color: #007700">(); </span><span style="color: #FF8000">// $input === NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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">]) &amp;&amp; !</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">]) &amp;&amp; </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #DD0000">'date' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$date</span><span style="color: #007700">-&gt;</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #DD0000">'time' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$date</span><span style="color: #007700">-&gt;</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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">]) &amp;&amp; !</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">]) &amp;&amp; </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #DD0000">'date' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$date</span><span style="color: #007700">-&gt;</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #DD0000">'time' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$date</span><span style="color: #007700">-&gt;</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000BB">$form_state</span><span style="color: #007700">-&gt;</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #007700">}<br></span><span style="color: #0000BB">?&gt;</span></span></pre></div>
issue