'lazanzara.greenpirates.org',
'dirfiles' => 'lazanzara',
'base_dir' => __DIR__,
'file_pattern' => '/^(\d{8})-lazanzara\.mp3$/i',
'cache_file' => __DIR__ . '/cache/valid_dates.json',
'cache_timeout' => 3600, // 1 ora
'show_download_link' => false // Mostra/nascondi link download diretto
];
/**
* Scansiona ricorsivamente le directory per trovare i file mp3
*
* @param string $dir Directory da scansionare
* @param array $config Configurazione
* @return array Array di date valide (formato YYYYMMDD)
*/
function findValidDates($dir, $config) {
$validDates = [];
// Costruisci il percorso completo
$fullPath = $config['base_dir'] . DIRECTORY_SEPARATOR . $dir;
if (!is_dir($fullPath)) {
return $validDates;
}
// Scansiona tutte le sottodirectory (anni)
$years = scandir($fullPath);
foreach ($years as $year) {
// Salta . e .. e verifica che sia una directory anno valida
if ($year === '.' || $year === '..' || !preg_match('/^\d{4}$/', $year)) {
continue;
}
$yearPath = $fullPath . DIRECTORY_SEPARATOR . $year;
if (!is_dir($yearPath)) {
continue;
}
// Scansiona i file nella directory dell'anno
$files = scandir($yearPath);
foreach ($files as $file) {
// Verifica se il file corrisponde al pattern
if (preg_match($config['file_pattern'], $file, $matches)) {
$validDates[] = $matches[1];
}
}
}
// Ordina le date in ordine cronologico
sort($validDates);
return $validDates;
}
/**
* Ottiene le date valide con cache
*/
function getValidDates($config) {
// Verifica se usare la cache
$useCache = false;
if (file_exists($config['cache_file'])) {
$cacheAge = time() - filemtime($config['cache_file']);
if ($cacheAge < $config['cache_timeout']) {
$useCache = true;
}
}
if ($useCache) {
// Usa i dati dalla cache
return json_decode(file_get_contents($config['cache_file']), true);
} else {
// Scansiona le directory
$validDates = findValidDates($config['dirfiles'], $config);
// Salva nella cache (se la directory cache esiste)
$cacheDir = dirname($config['cache_file']);
if (is_dir($cacheDir) || @mkdir($cacheDir, 0755, true)) {
file_put_contents($config['cache_file'], json_encode($validDates));
}
return $validDates;
}
}
// Funzione per validare e formattare la data
function validateDate($date) {
// Verifica se la data è nel formato YYYYMMDD
if (!preg_match('/^\d{8}$/', $date)) {
return false;
}
$year = substr($date, 0, 4);
$month = substr($date, 4, 2);
$day = substr($date, 6, 2);
// Verifica se è una data valida
return checkdate($month, $day, $year) ? $date : false;
}
// Funzione per generare il percorso del file
function generateFilePath($date, $config) {
$year = substr($date, 0, 4);
return [
'local_path' => sprintf("%s/%s/%s/%s-lazanzara.mp3",
$config['base_dir'],
$config['dirfiles'],
$year,
$date
),
'url' => sprintf("https://%s/%s/%s/%s-lazanzara.mp3",
$config['urlname'],
$config['dirfiles'],
$year,
$date
),
'filename' => sprintf("%s-lazanzara.mp3", $date)
];
}
// Gestione richiesta AJAX per date valide
if (isset($_GET['action']) && $_GET['action'] === 'get_valid_dates') {
header('Content-Type: application/json');
header('Cache-Control: max-age=3600');
echo json_encode(getValidDates($config));
exit;
}
?>
Crux mea lux - LaZanzara Repository
- - - Crux mea Lux - - -
Unofficial LaZanzara Repository
0) {
$randomIndex = array_rand($validDates);
$_POST['datepicker'] = $validDates[$randomIndex];
}
}
// Determina il valore da mostrare nell'input
$inputValue = '';
if (isset($_POST['datepicker']) && !empty($_POST['datepicker'])) {
$inputValue = $_POST['datepicker'];
}
?>
';
if (file_exists($paths['local_path'])) {
// File trovato
$year = substr($selectedDate, 0, 4);
$month = substr($selectedDate, 4, 2);
$day = substr($selectedDate, 6, 2);
$formattedDate = sprintf("%s/%s/%s", $day, $month, $year);
// Ottieni dimensione file
$fileSize = filesize($paths['local_path']);
$fileSizeMB = round($fileSize / 1024 / 1024, 1);
// Trova puntata precedente e successiva
$validDates = getValidDates($config);
$currentIndex = array_search($selectedDate, $validDates);
$prevDate = ($currentIndex > 0) ? $validDates[$currentIndex - 1] : null;
$nextDate = ($currentIndex < count($validDates) - 1) ? $validDates[$currentIndex + 1] : null;
// Mostra se è una puntata random
if (isset($_POST['random']) && $_POST['random'] == '1') {
echo '🎲 Random episode • ' . htmlspecialchars($formattedDate) . ' • ' . $fileSizeMB . ' MB
';
} else {
echo 'Selected episode • ' . htmlspecialchars($formattedDate) . ' • ' . $fileSizeMB . ' MB
';
}
// Audio player custom
echo '';
echo '
';
// Layout principale
echo '
';
// Controlli principali con navigazione
echo '
';
// Pulsante precedente
if ($prevDate) {
echo '
';
} else {
echo '
';
}
// Pulsante Play/Pause
echo '
';
// Pulsante successivo
if ($nextDate) {
echo '
';
} else {
echo '
';
}
echo '
'; // Chiude main-controls
// Container progresso
echo '
';
echo '
';
echo '
';
echo '
0:00 ';
echo '
';
echo '
0:00 ';
echo '
';
echo '
';
echo '
'; // Chiude player-layout
echo '
'; // Chiude custom-audio-player
// JavaScript per il player
echo '';
// Mostra link download solo se configurato
if ($config['show_download_link']) {
echo '
Or download directly:
' .
htmlspecialchars($paths['filename']) . '
';
}
} else {
// File non trovato
echo 'File not found for date: ' .
htmlspecialchars($selectedDate) . '
';
}
echo ' ';
} else {
echo '
Invalid date. Use format YYYYMMDD
';
}
}
// Mostra statistiche
$validDates = getValidDates($config);
$totalFiles = count($validDates);
if ($totalFiles > 0) {
$firstDate = $validDates[0];
$lastDate = $validDates[$totalFiles - 1];
echo '';
echo '
Archive Statistics ';
echo '
Available files: ' . $totalFiles . '
';
echo '
First episode: ' . substr($firstDate, 6, 2) . '/' . substr($firstDate, 4, 2) . '/' . substr($firstDate, 0, 4) . '
';
echo '
Last episode: ' . substr($lastDate, 6, 2) . '/' . substr($lastDate, 4, 2) . '/' . substr($lastDate, 0, 4) . '
';
// Conta file per anno
$yearCount = [];
foreach ($validDates as $date) {
$year = substr($date, 0, 4);
if (!isset($yearCount[$year])) {
$yearCount[$year] = 0;
}
$yearCount[$year]++;
}
echo '
';
echo 'Files per year ';
echo '';
foreach ($yearCount as $year => $count) {
echo '' . $year . ': ' . $count . ' episodes ';
}
echo ' ';
echo ' ';
echo '
';
}
?>
Shortcuts: ← → to navigate | R for random | Space for play/pause