Problem/Motivation
Using datetime views filter and filtering with an invalid date, there is no validation and fatal error occured.
To reproduce:
- Add a datetime field in an entity bundle.
- Create a view to list this entities and add a filter on this datetime field
- Search for a date with wrong format or for example day in french:
lun 2018-04-27
. The following error occur:<em class="placeholder">Exception</em>: DateTime object not set. in <em class="placeholder">Drupal\Component\Datetime\DateTimePlus->__call()</em> (line <em class="placeholder">355</em> of <em class="placeholder">core/lib/Drupal/Component/Datetime/DateTimePlus.php</em>). <pre class="backtrace">Drupal\datetime\Plugin\views\filter\Date->opSimple('sesame_quota_option__field_sesame_opt_date.field_sesame_opt_date_value') (Line: 314) Drupal\views\Plugin\views\filter\NumericFilter->query() (Line: 1370) Drupal\views\ViewExecutable->_build('filter') (Line: 1259) Drupal\views\ViewExecutable->build() (Line: 390) Drupal\views\Plugin\views\display\PathPluginBase->execute() (Line: 180) Drupal\views\Plugin\views\display\Page->execute() (Line: 1627) Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 77) Drupal\views\Element\View::preRenderViewElement(Array) call_user_func(Array, Array) (Line: 378) Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 195) Drupal\Core\Render\Renderer->render(Array, ) (Line: 226) Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 582) Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 227) Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 117) Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90) Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object) (Line: 76) Drupal\webprofiler\EventDispatcher\TraceableEventDispatcher->dispatch('kernel.view', Object) (Line: 156) Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 68) Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 57) Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 47) Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 99) Drupal\page_cache\StackMiddleware\PageCache->pass(Object, 1, 1) (Line: 78) Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 47) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 38) Drupal\webprofiler\StackMiddleware\WebprofilerMiddleware->handle(Object, 1, 1) (Line: 50) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23) Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 664) Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Search for the same date with day in english works:
mon 2018-04-27
. Same for date only:2018-04-27
Proposed resolution
Mimic the date filter validation from views module.
Remaining tasks
- Add tests
- Review