O resumo de contribuição do Smarty funciona em um site, mas não em outro no mesmo servidor
Eu gastei horas nisso e sinto uma parede. Gostaria de receber alguns olhos novos para lançar luz sobre novos caminhos de exploração.
Estou usando "localizar contribuições" para gerar uma lista de contribuições. Em seguida, escolho "Cartas de agradecimento" e o modelo que criei.
No modelo, estou usando um código Smarty que encontrei online no ano passado que resume as contribuições e cria uma tabela organizada:
{foreach from=$contributions item=contribution} {assign var="date" value=$contribution.receive_date|date_format:"%d %b %Y"}
<tr>
<td>{$date}</td> <td style="text-align:right;">${$contribution.total_amount|number_format:2:".":","}</td> <td>{$contribution.payment_instrument}{if $contribution.check_number neq""} - #{$contribution.check_number}{/if}</td>
<td>{$contribution.campaign}</td> <td>{$contribution.contribution_source}</td>
</tr>
{/foreach}
<tr>
<th>2020 TOTAL</th>
<th style="text-align:right;">${$contribution_aggregate|number_format:2:".":","}</th>
<th> </th>
<th> </th>
<th> </th>
</tr>
Funciona muito bem em um site, produzindo uma mesa organizada:

No entanto, em outro site no mesmo servidor, recebo "Ocorreu um erro crítico neste site. Verifique a caixa de entrada de e-mail do administrador do site para obter instruções."
Verificando o log de erros do Apache, encontro um erro um tanto não específico:
[Wed Dec 23 13:51:44.466136 2020] [php7:error] [pid 31786] [client maskedIP:43002] PHP Fatal error: Smarty error: [in string:<table align="left" border="1" cellpadding="5" cellspacing="0" class="table" style="margin-top:15px;">\r\n\t<tbody>\r\n\t\t<tr>\r\n\t\t\t<th>Date</th>\r\n\t\t\t<th style="text-align:right;">Amount</th>\r\n\t\t\t<th>Method</th>\r\n\t\t\t<th>Campaign</th>\r\n\t\t\t<th>Note</th>\r\n\t\t</tr>\r\n\t\t<!--\r\n {foreach from=$contributions item=contribution} {assign\r\n var="date" value=$contribution.receive_date|date_format:"%d %b\r\n %Y"}\r\n -->\r\n\t\t<tr>\r\n\t\t\t<td>{$date}</td>\r\n\t\t\t<td style="text-align:right;">${$contribution.total_amount|number_format:2:".":","}</td>\r\n\t\t\t<td>{$contribution.payment_instrument}{if $contribution.check_number neq""} - #{$contribution.check_number}{/if}</td>\r\n\t\t\t<td>{$contribution.campaign}</td>\r\n\t\t\t<td>{$contribution.contri in /var/www/masked-url.org/wordpress/wp-content/plugins/civicrm/civicrm/packages/Smarty/Smarty.class.php on line 1100, referer: https://masked-url.org/wp-admin/admin.php?page=CiviCRM&q=civicrm%2Fcontribute%2Fsearch&_qf_PDFLetter_display=true&qfKey=bd001d277ba51fe3447c1acb3c2bed4dceb754c89022040c362d62bb4e04b4b3_9738
Desativei entidades no CKEditor em ambos os sites:

Assegurei-me de que o Smarty está habilitado nos modelos de mensagem e o log de erros confirma isso porque o erro está claramente relacionado ao Smarty.
Eu literalmente recortei e colei o código de um site para outro e não o alterei de forma alguma.
Consigo fazer um teste muito simples com sucesso, colocando o seguinte código em um modelo:
<p>{$smarty.now|date_format}</p> <p>{$smarty.version}</p>
Recebo uma saída válida para esse teste simples em ambos os sites:

Eu também tentei escrever outro código Smarty, mas não tive sorte em fazer nada além daquele case básico funcionar. Provavelmente isso tem algo a ver com minha experiência limitada no Smarty. No entanto, o primeiro código que compartilhei funciona muito bem em um site e falha no outro.
Site 1 (funciona): WordPress 5.6, PHP 7.3.22, CiviCRM 5.30.0, Smarty 2.6.31 (embora pareça muito antigo, então espero que seja a versão CiviCRM há muito tempo)
Site 2 (não funciona - erro acima): WordPress 5.6, PHP 7.3.22, CiviCRM 5.32.2, Smarty 2.6.31
Embora as versões do CiviCRM sejam diferentes, espero que isso não seja uma regressão. Parece especialmente improvável, uma vez que a versão do Smarty não mudou.
Esperar que alguém possa lançar alguma luz ou oferecer outros lugares para procurar troncos úteis que possam fornecer uma pista.
Respostas
Obrigado a @demerit por sugerir uma maneira de capturar o erro completo do Smarty no log. Descobri que não estava obtendo o erro completo no log do Apache. Usando, CRM_Core_Error::debug_log_message($error_msg);
fui capaz de capturar todo o erro que incluía a seguinte linha útil:
line 17]: [plugin] (secure mode) modifier 'number_format' is not allowed (Smarty_Compiler.class.php, line 1934)
Pesquisando na web por esse erro revelou uma postagem de janeiro de 2016 que mostrou que number_format
não é compatível, mas deve-se usar em seu crmNumberFormat
lugar.
Fazer essa substituição resolveu o problema. Permanece um mistério por que number_format
funciona em outra das minhas instalações CiviCRM quando parece ter sido um problema desde pelo menos 2016. No entanto, isso é um problema para outro dia. Por enquanto, estou feliz por ter resolvido o problema desta instalação.
A tabela corrigida é a seguinte:
<table align="left" border="1" cellpadding="5" cellspacing="0" class="table" style="margin-top:15px;">
<tbody>
<tr>
<th>Date</th>
<th style="text-align:right;">Amount</th>
<th>Method</th>
<th>Campaign</th>
<th>Note</th>
</tr>
<!--
{foreach from=$contributions item=contribution} {assign
var="date" value=$contribution.receive_date|date_format:"%d %b %Y"} --> <tr> <td>{$date}</td>
<td style="text-align:right;">${$contribution.total_amount|crmNumberFormat:2:".":","}</td>
<td>{$contribution.payment_instrument}{if $contribution.check_number neq""} - #{$contribution.check_number}{/if}</td> <td>{$contribution.campaign}</td>
<td>{$contribution.contribution_source}</td> </tr> <!-- {/foreach} --> <tr> <th>2019 TOTAL</th> <th style="text-align:right;">${$contribution_aggregate|crmNumberFormat:2:".":","}</th>
<th> </th>
<th> </th>
<th> </th>
</tr>
</tbody>
Recentemente, gastei muito tempo com o que parece ser o mesmo problema. Para mim, era um editor CK persistindo no cache do navegador, recusando-se a pegar a configuração atualizada (que parece certo em sua imagem).
Tente um navegador diferente (ou limpe o cache do navegador) e salve o modelo correto novamente. Em seguida, teste. Deve funcionar.