message) . " (Linea: " . $error->line . ")"); } libxml_clear_errors(); return false; } } return self::$radioXML; } /** * Carica e cachea il file XML delle TV */ public static function getTVXML() { if (self::$tvXML === null) { $xmlPath = './data/tv.xml'; if (!file_exists($xmlPath)) { error_log("File XML non trovato: $xmlPath"); return false; } if (!is_readable($xmlPath)) { error_log("File XML non leggibile: $xmlPath"); return false; } libxml_use_internal_errors(true); self::$tvXML = simplexml_load_file($xmlPath); if (self::$tvXML === false) { $errors = libxml_get_errors(); foreach ($errors as $error) { error_log("Errore XML tv.xml: " . trim($error->message) . " (Linea: " . $error->line . ")"); } libxml_clear_errors(); return false; } } return self::$tvXML; } /** * Carica e cachea il file XML del changelog */ public static function getChangelogXML() { if (self::$changelogXML === null) { $xmlPath = './data/changelog.xml'; if (!file_exists($xmlPath)) { error_log("File XML non trovato: $xmlPath"); return false; } if (!is_readable($xmlPath)) { error_log("File XML non leggibile: $xmlPath"); return false; } libxml_use_internal_errors(true); self::$changelogXML = simplexml_load_file($xmlPath); if (self::$changelogXML === false) { $errors = libxml_get_errors(); foreach ($errors as $error) { error_log("Errore XML changelog.xml: " . trim($error->message) . " (Linea: " . $error->line . ")"); } libxml_clear_errors(); return false; } } return self::$changelogXML; } } /** * Funzione per caricare tutte le stazioni radio * @return array|SimpleXMLElement Array di stazioni o array vuoto in caso di errore */ function loadRadioStations() { $xml = StationCache::getRadioXML(); if ($xml === false || !isset($xml->station)) { error_log("Impossibile caricare le stazioni radio"); return []; } return $xml->station; } /** * Funzione per ottenere una singola stazione radio * @param int $id ID della stazione * @return SimpleXMLElement|null Stazione o null se non trovata */ function getRadioStation($id) { $xml = StationCache::getRadioXML(); if ($xml === false) { error_log("Impossibile caricare XML radio per ID: $id"); return null; } if (!isset($xml->station)) { error_log("Nessuna stazione trovata nel file XML"); return null; } foreach ($xml->station as $station) { if ((int)$station->id === (int)$id) { return $station; } } error_log("Stazione radio non trovata con ID: $id"); return null; } /** * Funzione per caricare tutte le stazioni TV * @return array|SimpleXMLElement Array di stazioni o array vuoto in caso di errore */ function loadTVStations() { $xml = StationCache::getTVXML(); if ($xml === false || !isset($xml->station)) { error_log("Impossibile caricare le stazioni TV"); return []; } return $xml->station; } /** * Funzione per ottenere una singola stazione TV * @param int $id ID della stazione * @return SimpleXMLElement|null Stazione o null se non trovata */ function getTVStation($id) { $xml = StationCache::getTVXML(); if ($xml === false) { error_log("Impossibile caricare XML TV per ID: $id"); return null; } if (!isset($xml->station)) { error_log("Nessuna stazione TV trovata nel file XML"); return null; } foreach ($xml->station as $station) { if ((int)$station->id === (int)$id) { return $station; } } error_log("Stazione TV non trovata con ID: $id"); return null; } /** * Carica il changelog e la versione dell'app */ $changelog = StationCache::getChangelogXML(); $version_app = "1.0.0"; // Versione di default if ($changelog !== false && isset($changelog->version) && isset($changelog->version[0]->number)) { $version_app = (string)$changelog->version[0]->number; } else { error_log("Impossibile leggere la versione dal changelog.xml, uso versione di default: $version_app"); }