Release v2.4.2

This commit is contained in:
2026-08-03 12:45:27 +01:00
parent 2b9cabdab2
commit e95928f31c
141 changed files with 7694 additions and 5078 deletions
+33 -20
View File
@@ -90,25 +90,31 @@ function getCanvasSignature(width, height) {
return normalizedWidth + 'x' + normalizedHeight;
}
async function fetchPlaylistCanvasSignature(pool, playlistId) {
async function fetchPlaylistCanvasId(pool, playlistId) {
const [playlistRows] = await pool.query('SELECT canvas_id FROM c_playlists WHERE id = ?', [playlistId]);
const storedCanvasId = Number(playlistRows && playlistRows[0] && playlistRows[0].canvas_id);
if (Number.isInteger(storedCanvasId) && storedCanvasId > 0) {
return storedCanvasId;
}
const [rows] = await pool.query(
`SELECT DISTINCT cs.width AS canvas_width, cs.height AS canvas_height
`SELECT DISTINCT st.canvas_size_id AS canvas_id
FROM c_playlist_slides ps
JOIN c_slides sl ON sl.id = ps.slide_id
LEFT JOIN c_templates st ON st.id = sl.template_id
LEFT JOIN c_canvas_sizes cs ON cs.id = st.canvas_size_id
WHERE ps.playlist_id = ?
AND cs.width IS NOT NULL
AND cs.height IS NOT NULL`,
AND st.canvas_size_id IS NOT NULL`,
[playlistId]
);
const signatures = Array.from(new Set(rows.map(function (row) {
return getCanvasSignature(row.canvas_width, row.canvas_height);
}).filter(Boolean)));
if (!signatures.length) {
const canvasIds = Array.from(new Set(rows.map(function (row) {
return Number(row.canvas_id);
}).filter(function (value) {
return Number.isInteger(value) && value > 0;
})));
if (!canvasIds.length) {
return null;
}
return signatures.length === 1 ? signatures[0] : 'mismatch';
return canvasIds.length === 1 ? canvasIds[0] : 'mismatch';
}
async function fetchScreensByPlaylistId(connection, playlistId) {
@@ -160,19 +166,25 @@ async function fetchOrderedPlaylistSlides(connection, playlistId) {
function redirectAfterSave(req, res, defaultUrl, options) {
const safeOptions = options || {};
const action = String((req && req.body && req.body.action) || req.query.action || '').toLowerCase();
const action = String((req && req.body && (req.body.action || req.body.save_action)) || req.query.action || '').toLowerCase();
const message = safeOptions.message || '';
function withMessage(url) {
if (!message) {
return url;
}
const joiner = String(url || '').indexOf('?') === -1 ? '?' : '&';
return url + joiner + 'message=' + encodeURIComponent(message);
}
if (action === 'close') {
return res.redirect(safeOptions.closeUrl || defaultUrl);
return res.redirect(withMessage(safeOptions.closeUrl || defaultUrl));
}
if (action === 'new') {
return res.redirect(safeOptions.newUrl || defaultUrl);
return res.redirect(withMessage(safeOptions.newUrl || defaultUrl));
}
const message = safeOptions.message || '';
if (message) {
const joiner = defaultUrl.indexOf('?') === -1 ? '?' : '&';
return res.redirect(defaultUrl + joiner + 'message=' + encodeURIComponent(message));
}
return res.redirect(defaultUrl);
return res.redirect(withMessage(defaultUrl));
}
module.exports = {
@@ -185,7 +197,8 @@ module.exports = {
normalizeScheduleMode: normalizeScheduleMode,
getAuditUserId: getAuditUserId,
getCanvasSignature: getCanvasSignature,
fetchPlaylistCanvasSignature: fetchPlaylistCanvasSignature,
fetchPlaylistCanvasId: fetchPlaylistCanvasId,
fetchPlaylistCanvasSignature: fetchPlaylistCanvasId,
fetchScreensByPlaylistId: fetchScreensByPlaylistId,
fetchScreensBySlideId: fetchScreensBySlideId,
fetchScreensByTemplateId: fetchScreensByTemplateId,