0fb17c78fa
- Add 20-file limit validation to PhotoUpload component - Prevent Multer "Unexpected field" errors by enforcing client-side limit - Fix JSON parsing error in dateFormatter when value is already an object - Add missing translation keys for upload error messages - Handle both string and object values for date format settings These fixes resolve the 400 error when uploading more than 20 files and the "Unexpected token o in JSON" error during email queue creation. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
79 lines
2.3 KiB
JavaScript
79 lines
2.3 KiB
JavaScript
const { db } = require('../database/db');
|
|
|
|
// Default date format settings
|
|
const DEFAULT_FORMAT = {
|
|
format: 'DD/MM/YYYY',
|
|
locale: 'en-GB'
|
|
};
|
|
|
|
// Format date based on system settings
|
|
async function formatDate(date, language = 'en') {
|
|
try {
|
|
// Get date format setting from database
|
|
const setting = await db('app_settings').where('setting_key', 'general_date_format').first();
|
|
let dateConfig = DEFAULT_FORMAT;
|
|
|
|
if (setting && setting.setting_value) {
|
|
// Handle both string and object values
|
|
if (typeof setting.setting_value === 'string') {
|
|
try {
|
|
dateConfig = JSON.parse(setting.setting_value);
|
|
} catch (e) {
|
|
console.warn('Failed to parse date format setting:', e.message);
|
|
dateConfig = DEFAULT_FORMAT;
|
|
}
|
|
} else {
|
|
dateConfig = setting.setting_value;
|
|
}
|
|
}
|
|
|
|
const dateObj = date instanceof Date ? date : new Date(date);
|
|
|
|
// Use appropriate locale based on language
|
|
let locale = dateConfig.locale || 'en-GB';
|
|
if (language === 'de') {
|
|
locale = 'de-DE';
|
|
} else if (language === 'en' && dateConfig.format === 'MM/DD/YYYY') {
|
|
locale = 'en-US';
|
|
}
|
|
|
|
// Format based on the configured format
|
|
switch (dateConfig.format) {
|
|
case 'MM/DD/YYYY':
|
|
return dateObj.toLocaleDateString(locale, {
|
|
month: '2-digit',
|
|
day: '2-digit',
|
|
year: 'numeric'
|
|
});
|
|
case 'DD/MM/YYYY':
|
|
return dateObj.toLocaleDateString(locale, {
|
|
day: '2-digit',
|
|
month: '2-digit',
|
|
year: 'numeric'
|
|
});
|
|
case 'YYYY-MM-DD':
|
|
return dateObj.toISOString().split('T')[0];
|
|
case 'DD.MM.YYYY':
|
|
return dateObj.toLocaleDateString('de-DE', {
|
|
day: '2-digit',
|
|
month: '2-digit',
|
|
year: 'numeric'
|
|
});
|
|
default:
|
|
// Use long format as fallback
|
|
return dateObj.toLocaleDateString(locale, {
|
|
year: 'numeric',
|
|
month: 'long',
|
|
day: 'numeric'
|
|
});
|
|
}
|
|
} catch (error) {
|
|
console.error('Error formatting date:', error);
|
|
// Fallback to basic formatting
|
|
return date instanceof Date ? date.toLocaleDateString() : new Date(date).toLocaleDateString();
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
formatDate
|
|
}; |