From 168e6b2c92ea6ad87f50af86ce8a7f8e5e73d231 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 15 Jan 2025 10:02:09 -0500 Subject: [PATCH] fix: closes #13051, catch errors from widget render --- src/widgets/index.js | 61 ++++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/src/widgets/index.js b/src/widgets/index.js index 0478b8dc3a..67ab20607b 100644 --- a/src/widgets/index.js +++ b/src/widgets/index.js @@ -64,35 +64,40 @@ async function renderWidget(widget, uid, options, location) { const userLang = config.userLang || meta.config.defaultLang || 'en-GB'; const templateData = _.assign({ }, options.templateData, { config: config }); - const data = await plugins.hooks.fire(`filter:widget.render:${widget.widget}`, { - uid: uid, - area: options, - templateData: templateData, - data: widget.data, - req: options.req, - res: options.res, - location, - }); - - if (!data) { - return; - } - - let { html } = data; - - if (widget.data.container && widget.data.container.match('{body}')) { - html = await Benchpress.compileRender(widget.data.container, { - title: widget.data.title, - body: html, - template: data.templateData && data.templateData.template, + try { + const data = await plugins.hooks.fire(`filter:widget.render:${widget.widget}`, { + uid: uid, + area: options, + templateData: templateData, + data: widget.data, + req: options.req, + res: options.res, + location, }); - } - - if (html) { - html = await translator.translate(html, userLang); - } - - return { html }; + + if (!data) { + return; + } + + let { html } = data; + + if (widget.data.container && widget.data.container.match('{body}')) { + html = await Benchpress.compileRender(widget.data.container, { + title: widget.data.title, + body: html, + template: data.templateData && data.templateData.template, + }); + } + + if (html) { + html = await translator.translate(html, userLang); + } + + return { html }; + } catch (err) { + winston.error(err.stack); + return { html: '' } + } } widgets.checkVisibility = async function (data, uid) {