Commit vers. 2.1.0
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
<?php
|
||||
|
||||
header('Content-Type: text/html; charset=UTF-8');
|
||||
|
||||
// Verifica se è una richiesta AJAX
|
||||
$is_ajax = !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
|
||||
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
<?php
|
||||
|
||||
header('Content-Type: text/html; charset=UTF-8');
|
||||
|
||||
|
||||
// Information App
|
||||
$title_site = "RPIGroup Play";
|
||||
$description_site = "Ascolta le radio del gruppo RPIGroup";
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
<?php
|
||||
|
||||
header('Content-Type: text/html; charset=UTF-8');
|
||||
|
||||
// Determina il percorso base dell'applicazione
|
||||
$script_name = $_SERVER['SCRIPT_NAME'];
|
||||
$script_path = dirname($script_name);
|
||||
|
||||
@@ -1,10 +1,27 @@
|
||||
<?php
|
||||
|
||||
header('Content-Type: text/html; charset=UTF-8');
|
||||
|
||||
// File: config/getPage.inc.php
|
||||
|
||||
// Whitelist delle pagine valide
|
||||
$validPages = ['home', 'radio', 'tv', 'play', 'playtv', 'page'];
|
||||
$validSubPages = ['about', 'contact', 'copyright', 'addradio', 'termini-condizioni', 'policy-privacy', 'changelog'];
|
||||
|
||||
// Rileva se l'utente sta usando un dispositivo mobile
|
||||
function isMobile() {
|
||||
return preg_match("/(android|avantgo|blackberry|bolt|boost|cricket|docomo|fone|hiptop|mini|mobi|palm|phone|pie|tablet|up\.browser|up\.link|webos|wos)/i", $_SERVER["HTTP_USER_AGENT"]);
|
||||
}
|
||||
|
||||
// Funzione per sanitizzare l'input
|
||||
function sanitizePageInput($input) {
|
||||
// Rimuovi caratteri pericolosi
|
||||
$input = preg_replace('/[^a-zA-Z0-9\-_]/', '', $input);
|
||||
// Previeni path traversal
|
||||
$input = str_replace(['..', '/', '\\'], '', $input);
|
||||
return $input;
|
||||
}
|
||||
|
||||
// Recupera l'URL richiesto
|
||||
$request_uri = $_SERVER['REQUEST_URI'];
|
||||
$path = substr(urldecode($request_uri), strlen($base_path));
|
||||
@@ -23,9 +40,45 @@ if (isset($path_parts[0]) && $path_parts[0] == 'index.php') {
|
||||
array_shift($path_parts);
|
||||
}
|
||||
|
||||
// Determina la pagina da mostrare in base all'URL
|
||||
$page = isset($path_parts[0]) && !empty($path_parts[0]) ? $path_parts[0] : 'home';
|
||||
$param = isset($path_parts[1]) && !empty($path_parts[1]) ? $path_parts[1] : '';
|
||||
// Determina la pagina da mostrare in base all'URL con validazione
|
||||
$page = 'home'; // Default sicuro
|
||||
$param = '';
|
||||
|
||||
if (isset($path_parts[0]) && !empty($path_parts[0])) {
|
||||
$requestedPage = sanitizePageInput($path_parts[0]);
|
||||
|
||||
// Verifica se la pagina è nella whitelist
|
||||
if (in_array($requestedPage, $validPages)) {
|
||||
$page = $requestedPage;
|
||||
} else {
|
||||
// Pagina non valida, redirect a 404
|
||||
$page = 'home';
|
||||
error_log("Tentativo di accesso a pagina non valida: " . $path_parts[0]);
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($path_parts[1]) && !empty($path_parts[1])) {
|
||||
$requestedParam = sanitizePageInput($path_parts[1]);
|
||||
|
||||
// Validazione specifica per tipo di pagina
|
||||
if ($page === 'play' || $page === 'playtv') {
|
||||
// Per play/playtv, il parametro deve essere un numero
|
||||
if (ctype_digit($requestedParam)) {
|
||||
$param = $requestedParam;
|
||||
} else {
|
||||
error_log("ID stazione non valido: " . $path_parts[1]);
|
||||
$page = 'home';
|
||||
}
|
||||
} elseif ($page === 'page') {
|
||||
// Per page, il parametro deve essere nella whitelist
|
||||
if (in_array($requestedParam, $validSubPages)) {
|
||||
$param = $requestedParam;
|
||||
} else {
|
||||
error_log("Sottopagina non valida: " . $path_parts[1]);
|
||||
$page = 'home';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Debug (rimuovi in produzione)
|
||||
error_log("Page: $page, Param: $param, Path: $path");
|
||||
error_log("Page: $page, Param: $param, Path: $path");
|
||||
@@ -1,54 +1,202 @@
|
||||
<?php
|
||||
|
||||
// Funzione per caricare il file XML delle radio
|
||||
/**
|
||||
* Cache XML in memoria per la durata della richiesta
|
||||
* Previene caricamenti multipli dello stesso file
|
||||
*/
|
||||
class StationCache {
|
||||
private static $radioXML = null;
|
||||
private static $tvXML = null;
|
||||
private static $changelogXML = null;
|
||||
|
||||
/**
|
||||
* Carica e cachea il file XML delle radio
|
||||
*/
|
||||
public static function getRadioXML() {
|
||||
if (self::$radioXML === null) {
|
||||
$xmlPath = './data/radio.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::$radioXML = simplexml_load_file($xmlPath);
|
||||
|
||||
if (self::$radioXML === false) {
|
||||
$errors = libxml_get_errors();
|
||||
foreach ($errors as $error) {
|
||||
error_log("Errore XML radio.xml: " . trim($error->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 = simplexml_load_file('./data/radio.xml');
|
||||
if ($xml === false) {
|
||||
error_log("Errore nel caricamento del file XML: data/radio.xml");
|
||||
$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
|
||||
/**
|
||||
* 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 = simplexml_load_file('./data/radio.xml');
|
||||
$xml = StationCache::getRadioXML();
|
||||
if ($xml === false) {
|
||||
error_log("Errore nel caricamento del file XML: data/radio.xml");
|
||||
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 === $id) {
|
||||
if ((int)$station->id === (int)$id) {
|
||||
return $station;
|
||||
}
|
||||
}
|
||||
|
||||
error_log("Stazione radio non trovata con ID: $id");
|
||||
return null;
|
||||
}
|
||||
|
||||
// Funzione per caricare il file XML delle TV
|
||||
/**
|
||||
* Funzione per caricare tutte le stazioni TV
|
||||
* @return array|SimpleXMLElement Array di stazioni o array vuoto in caso di errore
|
||||
*/
|
||||
function loadTVStations() {
|
||||
$xml = simplexml_load_file('./data/tv.xml');
|
||||
if ($xml === false) {
|
||||
error_log("Errore nel caricamento del file XML: data/tv.xml");
|
||||
$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
|
||||
/**
|
||||
* 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 = simplexml_load_file('./data/tv.xml');
|
||||
$xml = StationCache::getTVXML();
|
||||
if ($xml === false) {
|
||||
error_log("Errore nel caricamento del file XML: data/tv.xml");
|
||||
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 === $id) {
|
||||
if ((int)$station->id === (int)$id) {
|
||||
return $station;
|
||||
}
|
||||
}
|
||||
|
||||
error_log("Stazione TV non trovata con ID: $id");
|
||||
return null;
|
||||
}
|
||||
|
||||
$changelog = simplexml_load_file("./data/changelog.xml") or die("Errore: Impossibile accedere al file CHANGELOG");
|
||||
$version_app = $changelog->version->number[0];
|
||||
/**
|
||||
* 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");
|
||||
}
|
||||
Reference in New Issue
Block a user