diff --git a/includes/lang/ca.php b/includes/lang/ca.php index 450c0fc..af81c32 100644 --- a/includes/lang/ca.php +++ b/includes/lang/ca.php @@ -1035,4 +1035,5 @@ return [ 'food_err_no_views' => "Cap vista activada per a aquest mòdul. Modifiqueu la vostra configuració d'espai.", 'food_err_no_views_desc' => 'Heu desactivat totes les funcions d\'aquest mòdul. Aneu a la configuració per reactivar-les.', 'meal_paste_success' => 'Graella enganxada amb èxit!', + 'meal_err_filename' => 'Format del nom del fitxer no reconegut. Exemple esperat: "Menus-du-28-septembre-au-4-octobre-2026.pdf".', ]; \ No newline at end of file diff --git a/includes/lang/en.php b/includes/lang/en.php index 1dcc13b..1edb341 100644 --- a/includes/lang/en.php +++ b/includes/lang/en.php @@ -1038,5 +1038,6 @@ return [ 'food_err_no_views' => "No view is enabled for this module. Please check your space settings.", 'food_err_no_views_desc' => 'You have disabled all features for this module. Please visit your settings to re-enable them.', 'meal_paste_success' => 'Grid pasted successfully!', + 'meal_err_filename' => 'Unrecognized file name format. Expected example: "Menus-du-28-septembre-au-4-octobre-2026.pdf".', ]; \ No newline at end of file diff --git a/includes/lang/fr.php b/includes/lang/fr.php index cd72334..d08fb25 100644 --- a/includes/lang/fr.php +++ b/includes/lang/fr.php @@ -1033,6 +1033,7 @@ return [ 'cta_food' => 'Mijoter', 'food_err_no_views' => "Aucune vue n'est activée pour ce module. Modifiez vos paramètres d'espace.", 'food_err_no_views_desc' => 'Vous avez désactivé toutes les fonctionnalités de ce module. Rendez-vous dans vos paramètres pour les réactiver.', + 'meal_err_filename' => 'Format de nom de fichier non reconnu. Exemple attendu : "Menus-du-28-septembre-au-4-octobre-2026.pdf".', 'meal_paste_success' => 'Grille collée avec succès !', ]; \ No newline at end of file diff --git a/modules/food/includes/api/import-pdf.php b/modules/food/includes/api/import-pdf.php index f497af3..3697d70 100644 --- a/modules/food/includes/api/import-pdf.php +++ b/modules/food/includes/api/import-pdf.php @@ -190,14 +190,26 @@ try { // 1. Extraction robuste de la date depuis le nom de fichier (Menus-du-14-au-20-septembre-2026.pdf) $mondayDate = null; - if (preg_match('/(\d{1,2})[\s-]+au[\s-]+\d{1,2}[\s-]+([a-zèéû]+)[\s-]+(\d{4})/i', $filename, $m)) { + if (preg_match('/(?:du[\s-]+)?(\d{1,2})[\s-]+(?:([a-zèéû]+)[\s-]+)?au[\s-]+\d{1,2}[\s-]+([a-zèéû]+)[\s-]+(\d{4})/i', $filename, $m)) { $monthsMap = ['janvier'=>'01','fevrier'=>'02','février'=>'02','mars'=>'03','avril'=>'04','mai'=>'05','juin'=>'06','juillet'=>'07','aout'=>'08','août'=>'08','septembre'=>'09','octobre'=>'10','novembre'=>'11','decembre'=>'12','décembre'=>'12']; - $month = $monthsMap[strtolower($m[2])] ?? '09'; - $mondayDate = $m[3] . '-' . $month . '-' . str_pad($m[1], 2, '0', STR_PAD_LEFT); + + $startMonthRaw = !empty($m[2]) ? strtolower($m[2]) : strtolower($m[3]); + $endMonthRaw = strtolower($m[3]); + + $startMonthNum = $monthsMap[$startMonthRaw] ?? '09'; + $endMonthNum = $monthsMap[$endMonthRaw] ?? '09'; + + $startYear = (int)$m[4]; + // Règle métier : Bascule d'année (ex: 28 décembre au 3 janvier 2026 -> 2025-12-28) + if ($startMonthNum === '12' && $endMonthNum === '01') { + $startYear--; + } + + $mondayDate = $startYear . '-' . $startMonthNum . '-' . str_pad($m[1], 2, '0', STR_PAD_LEFT); } if (!$mondayDate) { - echo json_encode(['success' => false, 'error' => 'Veuillez nommer le fichier "Menus-du-14-au-20-septembre-2026.pdf".']); + echo json_encode(['success' => false, 'error' => tr('meal_err_filename')]); exit; }