'Feiert Jesus 1', 'FJ2' => 'Feiert Jesus 2', 'FJ3' => 'Feiert Jesus 3', 'FJ4' => 'Feiert Jesus 4', 'FJ5' => 'Feiert Jesus 5', 'FJ6' => 'Feiert Jesus 6', 'CTW' => 'Come to worship', 'DLB' => 'Das Liederbuch', 'EG' => 'Evangelisches Gesangsbuch', 'EG-PLUS' => 'Evangelisches Gesangsbuch Plus', 'FL' => 'Feiern & Loben', 'GL' => 'Gemeindelieder', 'IWDD' => 'Ich will Dir danken', 'KAA' => 'Kommt atmet auf', 'SVJ1' => 'Singt von Jesus 1', 'SVJ2' => 'Singt von Jesus 2', 'SVJ3' => 'Singt von Jesus 3', 'NGL' => 'Neue Gemeindelieder', 'DBH1' => 'Du bist Herr 1', 'DBH2' => 'Du bist Herr 2', 'DBH3' => 'Du bist Herr 3', 'DBH4' => 'Du bist Herr 4', 'DBH5' => 'Du bist Herr 5', 'MoLi' => 'Monatslied', ]; $umlaut_blacklist = [ 'neue','neuer', 'neuen', 'streu', 'streue','streuen', 'freue', 'lasst', 'feuer' ]; function decodeTitleGermanSmart($title, $umlaut_blacklist) { $map = [ 'Ae' => 'Ä', 'ae' => 'ä', 'Oe' => 'Ö', 'oe' => 'ö', 'Ue' => 'Ü', 'ue' => 'ü' ]; $words = preg_split('/(\s+)/u', $title, -1, PREG_SPLIT_DELIM_CAPTURE); foreach ($words as &$word) { if (!in_array(mb_strtolower($word), $umlaut_blacklist, true)) { $word = strtr($word, $map); } } return implode('', $words); } function extractLanguages($title) { if(preg_match('/(.+?)(?:_([A-Z]{2}(?:_[A-Z]{2})*))?$/', $title, $m)) { $main = $m[1]; $lang = []; if(isset($m[2]) && $m[2] !== '') $lang = explode('_', $m[2]); return [ $main, $lang ]; } return [$title, []]; } function parseNeu($file, $liederbuecher, $umlaut_blacklist) { $name = pathinfo($file, PATHINFO_FILENAME); $parts = explode('_', $name, 5); if($parts[0] !== 'N') return null; if($parts[1] === '000') { $rest = isset($parts[2]) ? implode('_', array_slice($parts,2)) : ''; list($titel, $sprachen) = extractLanguages($rest); $liederbuch = '---'; $nummer = '---'; } elseif($parts[1] === 'Band' || $parts[1] === 'Singteam') { $rest = isset($parts[2]) ? implode('_', array_slice($parts,2)) : ''; list($titel, $sprachen) = extractLanguages($rest); $liederbuch = $parts[1]; $nummer = '---'; } elseif($parts[1] === 'LB') { if(count($parts)>=5) { $lbParts = explode('_', $name, 5); $code = $lbParts[2]; $nummer = $lbParts[3]; list($titel, $sprachen) = extractLanguages($lbParts[4]); $liederbuch = $liederbuecher[$code] ?? $code; } else { return null; } } elseif(isset($liederbuecher[$parts[1]]) && count($parts)>=4) { $code = $parts[1]; $nummer = $parts[2]; $rest = isset($parts[3]) ? implode('_', array_slice($parts,3)) : ''; list($titel, $sprachen) = extractLanguages($rest); $liederbuch = $liederbuecher[$code]; } else { $rest = isset($parts[2]) ? implode('_', array_slice($parts,2)) : ''; list($titel, $sprachen) = extractLanguages($rest); $liederbuch = $parts[1]; $nummer = '---'; } $titel = str_replace('_', ' ', $titel); if(empty($sprachen)) $sprachen = ['DE']; if(in_array('DE', array_map('strtoupper',$sprachen))) { $titel = decodeTitleGermanSmart($titel, $umlaut_blacklist); } return [ 'filename' => $file, 'titel' => $titel, 'liederbuch' => $liederbuch, 'nummer' => $nummer ?? '---', 'sprachen' => $sprachen ]; } function parseAlt($file, $liederbuecher, $umlaut_blacklist) { $name = pathinfo($file, PATHINFO_FILENAME); $parts = explode('_', $name, 5); if($parts[0] === 'AAA') { $rest = isset($parts[1]) ? implode('_', array_slice($parts,1)) : ''; list($titel, $sprachen) = extractLanguages($rest); $liederbuch = '---'; $nummer = '---'; } elseif($parts[0] === 'Band' || $parts[0] === 'Singteam') { $rest = isset($parts[1]) ? implode('_', array_slice($parts,1)) : ''; list($titel, $sprachen) = extractLanguages($rest); $liederbuch = $parts[0]; $nummer = '---'; } elseif($parts[0]==='LB' && count($parts)>=4) { $code = $parts[1]; $nummer = $parts[2]; $rest = $parts[3]; if(count($parts)>4) $rest .= '_'.implode('_',array_slice($parts,4)); list($titel,$sprachen) = extractLanguages($rest); $liederbuch = $liederbuecher[$code] ?? $code; } elseif(isset($liederbuecher[$parts[0]]) && count($parts)>=3) { $code = $parts[0]; $nummer = $parts[1]; $rest = implode('_',array_slice($parts,2)); list($titel, $sprachen) = extractLanguages($rest); $liederbuch = $liederbuecher[$code]; } else { $rest = isset($parts[1]) ? implode('_', array_slice($parts,1)) : ''; list($titel, $sprachen) = extractLanguages($rest); $liederbuch = $parts[0]; $nummer = '---'; } $titel = str_replace('_', ' ', $titel); if(empty($sprachen)) $sprachen = ['DE']; if(in_array('DE', array_map('strtoupper',$sprachen))) { $titel = decodeTitleGermanSmart($titel, $umlaut_blacklist); } return [ 'filename' => $file, 'titel' => $titel, 'liederbuch' => $liederbuch, 'nummer' => $nummer ?? '---', 'sprachen' => $sprachen ]; } function loadSongs($dir, $type, $liederbuecher, $umlaut_blacklist) { if(!is_dir($dir)) return []; $files = array_filter(scandir($dir), fn($f) => preg_match('/\.(pptx|ppt)$/i', $f)); $songs = []; foreach($files as $file) { $parsed = ($type==="neu") ? parseNeu($file, $liederbuecher, $umlaut_blacklist) : parseAlt($file, $liederbuecher, $umlaut_blacklist); if($parsed) $songs[] = $parsed; } usort($songs, fn($a,$b)=>strcasecmp($a['titel'],$b['titel'])); return $songs; } $songsNeu = loadSongs(DIR_NEU, 'neu', $liederbuecher, $umlaut_blacklist); $songsAlt = loadSongs(DIR_ALT, 'alt', $liederbuecher, $umlaut_blacklist); // ... ab hier ggf. weitere Filter, Statistik-Generierung, Download/PDF-Logik, $sprachen_stats, $liederbuch_stats usw. ... ?>