Event registration under Windows fails
Overview
This is similar to #4928 (closed), but a different problem. See also Stack Exchange smarty - Is it the end of the road for CiviCRM under Windows? - CiviCRM Stack Exchange and registration - Fatal error - unable to register for events with Smarty3 enabled - CiviCRM Stack Exchange. I wonder if it is an issue with the use of Smarty3.
The final Register page crashes with:
The website encountered an unexpected error. Try again later.TypeError: Unsupported operand types: float + string in content_65ba5d1bd929c5_86413884() (line 408 of <drupal root>\vendor\civicrm\civicrm-packages\smarty3\vendor\smarty\smarty\libs\sysplugins\smarty_resource_recompiled.php(52) : eval()'d code).
followed by the stack trace.```
Reproduction steps
- Register for an event.
- Click on Review
- Click on Register.
Current behaviour
The web page returns:
The website encountered an unexpected error. Try again later.
TypeError: Unsupported operand types: float + string in content_65ba5d1bd929c5_86413884() (line 408 of <drupal root>\vendor\civicrm\civicrm-packages\smarty3\vendor\smarty\smarty\libs\sysplugins\smarty_resource_recompiled.php(52) : eval()'d code).
Smarty_Template_Resource_Base->getRenderedTemplateCode() (Line: 114)
Smarty_Template_Compiled->render() (Line: 216)
Smarty_Internal_Template->render() (Line: 232)
Smarty_Internal_TemplateBase->_execute() (Line: 116)
Smarty_Internal_TemplateBase->fetch() (Line: 24)
content_65ba5c676ca3f2_96523772() (Line: 123)
Smarty_Template_Resource_Base->getRenderedTemplateCode() (Line: 114)
Smarty_Template_Compiled->render() (Line: 216)
Smarty_Internal_Template->render() (Line: 232)
Smarty_Internal_TemplateBase->_execute() (Line: 116)
Smarty_Internal_TemplateBase->fetch() (Line: 1046)
CRM_Utils_String::parseOneOffStringThroughSmarty() (Line: 108)
Civi\Token\TokenCompatSubscriber->onRender() (Line: 220)
Symfony\Component\EventDispatcher\EventDispatcher->callListeners() (Line: 56)
Symfony\Component\EventDispatcher\EventDispatcher->dispatch() (Line: 263)
Civi\Core\CiviEventDispatcher->dispatch() (Line: 397)
Civi\Token\TokenProcessor->render() (Line: 327)
Civi\Token\TokenRow->render() (Line: 67)
CRM_Core_TokenSmarty::render() (Line: 374)
CRM_Core_BAO_MessageTemplate::renderTemplateRaw() (Line: 422)
CRM_Core_BAO_MessageTemplate::sendTemplate() (Line: 1254)
CRM_Event_BAO_Event::sendMail() (Line: 895)
CRM_Event_Form_Registration_Confirm->postProcess() (Line: 625)
CRM_Core_Form->mainProcess() (Line: 144)
CRM_Core_StateMachine->perform() (Line: 43)
CRM_Core_QuickForm_Action_Next->perform() (Line: 203)
HTML_QuickForm_Controller->handle() (Line: 103)
HTML_QuickForm_Page->handle() (Line: 355)
CRM_Core_Controller->run() (Line: 322)
CRM_Core_Invoke::runItem() (Line: 69)
CRM_Core_Invoke::_invoke() (Line: 36)
CRM_Core_Invoke::invoke() (Line: 88)
Drupal\civicrm\Civicrm->invoke() (Line: 83)
Drupal\civicrm\Controller\CivicrmController->main()
call_user_func_array() (Line: 123)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 627)
Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 121)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext() (Line: 97)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 181)
Symfony\Component\HttpKernel\HttpKernel->handleRaw() (Line: 76)
Symfony\Component\HttpKernel\HttpKernel->handle() (Line: 58)
Drupal\Core\StackMiddleware\Session->handle() (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle() (Line: 28)
Drupal\Core\StackMiddleware\ContentLength->handle() (Line: 32)
Drupal\big_pipe\StackMiddleware\ContentLength->handle() (Line: 106)
Drupal\page_cache\StackMiddleware\PageCache->pass() (Line: 85)
Drupal\page_cache\StackMiddleware\PageCache->handle() (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle() (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle() (Line: 36)
Drupal\Core\StackMiddleware\AjaxPageState->handle() (Line: 51)
Drupal\Core\StackMiddleware\StackedHttpKernel->handle() (Line: 704)
Drupal\Core\DrupalKernel->handle() (Line: 19)
Expected behaviour
A registration confirmation page is displayed.
Environment information
- Browser: Edge but probably irrelevant.
- CiviCRM: 5.69.3
- PHP: 8.3.1 but probably irrelevant.
- CMS: Drupal 10.2.2
- Database: MySQL 8.0.36 but probably irrelevant.
- Web Server: IIS 10
Comments
Anything else you would like the reviewer to note.
I have tried debugging the issue and spent quite some time on this. I raising it as an issue as my knowledge of Smarty isn't that great, but I hope a Smarty expert has better insight.
I think the issue is due to Smarty creating a template 'on the fly' rather than using a text file template. In the call stack, there is
CRM_Utils_String::parseOneOffStringThroughSmarty() (Line: 108) which passes plaintext 'eval:{eval var=$smartySingleUseString|smarty:nodefaults}'
.
Incidentally, the line numbers on the call stack are strange, they seem out by one entity - plaintext CRM_Utils_String::parseOneOffStringThroughSmarty() (Line: 108)
is actually line 1046 which is in the line above.
It seems that the system is calling some epheremal code which we can't see. The NetBeans call stack has transient entries like:
You are able to step through the entity beginning with dbgp:// but cannot see the code. I have been unable to find content_65ba5d1bd929c5_86413884() during debugging, let alone see line 408. This makes debugging rather difficult. If one could see the template it was trying to process, it would help.