verbb / formie

The most user-friendly forms plugin for Craft CMS.
Other
94 stars 72 forks source link

Date inputs with specific default values cause timezone exception after upgrade to 2.1.21 #2012

Closed mikejpeters closed 1 month ago

mikejpeters commented 1 month ago

Describe the bug

We have a Formie form with a date field that has a specific default value.

After upgrading to Formie 2.1.21 the form fails to render with the error: IntlException: datefmt_create: No such time zone (see stack trace below).

Re-saving the form fixes the issues, and the issue doesn't occur for date fields created after the upgrade. So I think this is just an issue with data not being migrated to the newly expected format.

IntlException: datefmt_create: No such time zone: '-08:00': U_ILLEGAL_ARGUMENT_ERROR in /var/www/html/vendor/yiisoft/yii2/i18n/Formatter.php:809
Stack trace:
#0 /var/www/html/vendor/yiisoft/yii2/i18n/Formatter.php(809): IntlDateFormatter->__construct('en-CA', -1, -1, '-08:00', NULL, 'yyyy-MM-dd HH:m...')
#1 /var/www/html/vendor/yiisoft/yii2/i18n/Formatter.php(658): yii\i18n\Formatter->formatDateTimeValue(Object(DateTime), 'yyyy-MM-dd HH:m...', 'date')
#2 /var/www/html/vendor/craftcms/cms/src/i18n/Formatter.php(87): yii\i18n\Formatter->asDate(Object(DateTime), 'yyyy-MM-dd HH:m...')
#3 /var/www/html/vendor/craftcms/cms/src/i18n/Formatter.php(295): craft\i18n\Formatter->asDate(Object(DateTime), 'yyyy-MM-dd HH:m...')
#4 /var/www/html/vendor/craftcms/cms/src/i18n/Formatter.php(84): craft\i18n\Formatter->_formatDateTimeValueWithPhpFormat(Object(DateTime), 'Y-m-d H:i:s', 'date')
#5 /var/www/html/vendor/craftcms/cms/src/web/twig/Extension.php(973): craft\i18n\Formatter->asDate(Object(DateTime), 'php:Y-m-d H:i:s')
#6 /var/www/html/storage/runtime/compiled_templates/fd/fde1ac24cfd396a0af8fdcd6173f7ff3889269fa22ab12260548f31cdb5a3b5e.php(39): craft\web\twig\Extension->dateFilter(Object(craft\web\twig\Environment), Object(DateTime), 'php:Y-m-d H:i:s', false)
#7 /var/www/html/vendor/twig/twig/src/Template.php(394): __TwigTemplate_2eec4a79c8e3808b926d1fa690a85daacdb1dda16d3e38491973ac54dcf16646->doDisplay(Array, Array)
#8 /var/www/html/vendor/twig/twig/src/Template.php(367): Twig\Template->displayWithErrorHandling(Array, Array)
#9 /var/www/html/vendor/twig/twig/src/Template.php(379): Twig\Template->display(Array)
#10 /var/www/html/vendor/twig/twig/src/TemplateWrapper.php(38): Twig\Template->render(Array)
#11 /var/www/html/vendor/twig/twig/src/Environment.php(280): Twig\TemplateWrapper->render(Array)
#12 /var/www/html/vendor/craftcms/cms/src/web/View.php(495): Twig\Environment->render('formie/_special...', Array)
#13 /var/www/html/vendor/verbb/formie/src/elements/Form.php(1437): craft\web\View->renderTemplate('formie/_special...', Array, 'cp')
#14 /var/www/html/vendor/verbb/formie/src/web/twig/Extension.php(68): verbb\formie\elements\Form->renderTemplate(Array, Array)
#15 /var/www/html/storage/runtime/compiled_templates/70/70ba74d7f966c388f63b5b255519c3fe8e56978aef0bb835dc15ff8b49e7b510.php(41): verbb\formie\web\twig\Extension->formieInclude(Object(craft\web\twig\Environment), Array, 'fields/date/_da...')
#16 /var/www/html/vendor/twig/twig/src/Template.php(394): __TwigTemplate_2798200c130f63ff707dae90cf6eaaf73bd32cee63ff3487b4202b3c0f636456->doDisplay(Array, Array)
#17 /var/www/html/vendor/twig/twig/src/Template.php(367): Twig\Template->displayWithErrorHandling(Array, Array)
#18 /var/www/html/vendor/twig/twig/src/Template.php(379): Twig\Template->display(Array)
#19 /var/www/html/vendor/twig/twig/src/TemplateWrapper.php(38): Twig\Template->render(Array)
#20 /var/www/html/vendor/twig/twig/src/Environment.php(280): Twig\TemplateWrapper->render(Array)
#21 /var/www/html/vendor/craftcms/cms/src/web/View.php(495): Twig\Environment->render('formie/_special...', Array)
#22 /var/www/html/vendor/verbb/formie/src/elements/Form.php(1437): craft\web\View->renderTemplate('formie/_special...', Array, 'cp')
#23 /var/www/html/vendor/verbb/formie/src/base/FormFieldTrait.php(1078): verbb\formie\elements\Form->renderTemplate(Array, Array)
#24 /var/www/html/vendor/twig/twig/src/Extension/CoreExtension.php(1635): verbb\formie\base\FormField->getFrontEndInputHtml(Object(verbb\formie\elements\Form), Object(DateTime), Array)
#25 /var/www/html/vendor/craftcms/cms/src/helpers/Template.php(149): twig_get_attribute(Object(craft\web\twig\Environment), Object(Twig\Source), Object(verbb\formie\fields\formfields\Date), 'getFrontEndInpu...', Array, 'method', false, false, false, 22)
#26 /var/www/html/storage/runtime/compiled_templates/e0/e02ee05497d963cc056fa64b4e0836a6bd2b0a1d178a09e4c21e2095d6d60a55.php(98): craft\helpers\Template::attribute(Object(craft\web\twig\Environment), Object(Twig\Source), Object(verbb\formie\fields\formfields\Date), 'getFrontEndInpu...', Array, 'method', false, false, false, 22)
...

Steps to reproduce

  1. Install formie 2.1.20
  2. Create a form with a date field and a specific default value
  3. Update to forme 2.1.21

Form settings

Craft CMS version

4.11.0

Plugin version

2.1.21

Multi-site?

No

Additional context

I'm pretty sure this is caused by https://github.com/verbb/formie/commit/048cb9f865700a5e70003b3370707afc38cd01aa

engram-design commented 1 month ago

Ah, I actually didn't think we'd need to migrate those values, as that hasn't been an issue on my end for forms with a default date prior to 2.1.21.

Fixed for the next release. To get this early, run composer require verbb/formie:"dev-craft-4 as 2.1.21".

engram-design commented 1 month ago

Fixed in 2.1.24