ver. 2.1.1
This commit is contained in:
152
.htaccess
152
.htaccess
@@ -1,77 +1,77 @@
|
|||||||
# Abilita il rewrite engine
|
# Abilita il rewrite engine
|
||||||
RewriteEngine On
|
RewriteEngine On
|
||||||
|
|
||||||
# Imposta la directory base (modifica se necessario)
|
# Imposta la directory base (modifica se necessario)
|
||||||
# Se l'app è in una sottocartella, usa: RewriteBase /nome_cartella/
|
# Se l'app è in una sottocartella, usa: RewriteBase /nome_cartella/
|
||||||
RewriteBase /newapp.rpigroup.it/
|
RewriteBase /newapp.rpigroup.it/
|
||||||
|
|
||||||
# Reindirizza richieste HTTP a HTTPS (opzionale, decommentare se necessario)
|
# Reindirizza richieste HTTP a HTTPS (opzionale, decommentare se necessario)
|
||||||
# RewriteCond %{HTTPS} off
|
# RewriteCond %{HTTPS} off
|
||||||
# RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
|
# RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
|
||||||
|
|
||||||
# Non reindirizzare file e cartelle esistenti
|
# Non reindirizzare file e cartelle esistenti
|
||||||
RewriteCond %{REQUEST_FILENAME} !-f
|
RewriteCond %{REQUEST_FILENAME} !-f
|
||||||
RewriteCond %{REQUEST_FILENAME} !-d
|
RewriteCond %{REQUEST_FILENAME} !-d
|
||||||
|
|
||||||
# Escludi file statici dal rewriting
|
# Escludi file statici dal rewriting
|
||||||
RewriteCond %{REQUEST_URI} !\.(css|js|jpg|jpeg|png|gif|svg|ico|xml|json|woff|woff2|ttf|eot)$ [NC]
|
RewriteCond %{REQUEST_URI} !\.(css|js|jpg|jpeg|png|gif|svg|ico|xml|json|woff|woff2|ttf|eot)$ [NC]
|
||||||
|
|
||||||
# Reindirizza tutto a index.php mantenendo il path
|
# Reindirizza tutto a index.php mantenendo il path
|
||||||
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
|
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
|
||||||
|
|
||||||
# Impedisci l'accesso diretto a file sensibili
|
# Impedisci l'accesso diretto a file sensibili
|
||||||
<FilesMatch "^(config|\.htaccess|\.env)">
|
<FilesMatch "^(config|\.htaccess|\.env)">
|
||||||
Order Allow,Deny
|
Order Allow,Deny
|
||||||
Deny from all
|
Deny from all
|
||||||
</FilesMatch>
|
</FilesMatch>
|
||||||
|
|
||||||
# Gestione MIME types
|
# Gestione MIME types
|
||||||
<IfModule mod_mime.c>
|
<IfModule mod_mime.c>
|
||||||
AddType application/javascript js
|
AddType application/javascript js
|
||||||
AddType text/css css
|
AddType text/css css
|
||||||
AddType image/svg+xml svg
|
AddType image/svg+xml svg
|
||||||
AddType application/vnd.ms-fontobject eot
|
AddType application/vnd.ms-fontobject eot
|
||||||
AddType font/ttf ttf
|
AddType font/ttf ttf
|
||||||
AddType font/otf otf
|
AddType font/otf otf
|
||||||
AddType font/woff woff
|
AddType font/woff woff
|
||||||
AddType font/woff2 woff2
|
AddType font/woff2 woff2
|
||||||
</IfModule>
|
</IfModule>
|
||||||
|
|
||||||
# Abilita compressione GZIP (opzionale)
|
# Abilita compressione GZIP (opzionale)
|
||||||
<IfModule mod_deflate.c>
|
<IfModule mod_deflate.c>
|
||||||
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json
|
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json
|
||||||
</IfModule>
|
</IfModule>
|
||||||
|
|
||||||
# Cache control (opzionale - commentato perché hai lo script no-cache)
|
# Cache control (opzionale - commentato perché hai lo script no-cache)
|
||||||
# <IfModule mod_expires.c>
|
# <IfModule mod_expires.c>
|
||||||
# ExpiresActive On
|
# ExpiresActive On
|
||||||
# ExpiresByType image/jpg "access plus 1 month"
|
# ExpiresByType image/jpg "access plus 1 month"
|
||||||
# ExpiresByType image/jpeg "access plus 1 month"
|
# ExpiresByType image/jpeg "access plus 1 month"
|
||||||
# ExpiresByType image/gif "access plus 1 month"
|
# ExpiresByType image/gif "access plus 1 month"
|
||||||
# ExpiresByType image/png "access plus 1 month"
|
# ExpiresByType image/png "access plus 1 month"
|
||||||
# ExpiresByType image/svg+xml "access plus 1 month"
|
# ExpiresByType image/svg+xml "access plus 1 month"
|
||||||
# ExpiresByType text/css "access plus 1 week"
|
# ExpiresByType text/css "access plus 1 week"
|
||||||
# ExpiresByType application/javascript "access plus 1 week"
|
# ExpiresByType application/javascript "access plus 1 week"
|
||||||
# </IfModule>
|
# </IfModule>
|
||||||
|
|
||||||
# Header no-cache per sviluppo (rimuovi in produzione se usi la cache)
|
# Header no-cache per sviluppo (rimuovi in produzione se usi la cache)
|
||||||
<IfModule mod_headers.c>
|
<IfModule mod_headers.c>
|
||||||
<FilesMatch "\.(html|php)$">
|
<FilesMatch "\.(html|php)$">
|
||||||
Header set Cache-Control "no-cache, no-store, must-revalidate"
|
Header set Cache-Control "no-cache, no-store, must-revalidate"
|
||||||
Header set Pragma "no-cache"
|
Header set Pragma "no-cache"
|
||||||
Header set Expires "0"
|
Header set Expires "0"
|
||||||
</FilesMatch>
|
</FilesMatch>
|
||||||
</IfModule>
|
</IfModule>
|
||||||
|
|
||||||
# Sicurezza aggiuntiva
|
# Sicurezza aggiuntiva
|
||||||
<IfModule mod_headers.c>
|
<IfModule mod_headers.c>
|
||||||
Header set X-Content-Type-Options "nosniff"
|
Header set X-Content-Type-Options "nosniff"
|
||||||
Header set X-Frame-Options "SAMEORIGIN"
|
Header set X-Frame-Options "SAMEORIGIN"
|
||||||
Header set X-XSS-Protection "1; mode=block"
|
Header set X-XSS-Protection "1; mode=block"
|
||||||
</IfModule>
|
</IfModule>
|
||||||
|
|
||||||
# Disabilita directory listing
|
# Disabilita directory listing
|
||||||
Options -Indexes
|
Options -Indexes
|
||||||
|
|
||||||
# Abilita follow symlinks (necessario per RewriteRule)
|
# Abilita follow symlinks (necessario per RewriteRule)
|
||||||
Options +FollowSymLinks
|
Options +FollowSymLinks
|
||||||
@@ -1,69 +1,69 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
header('Content-Type: text/html; charset=UTF-8');
|
header('Content-Type: text/html; charset=UTF-8');
|
||||||
|
|
||||||
// Verifica se è una richiesta AJAX
|
// Verifica se è una richiesta AJAX
|
||||||
$is_ajax = !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
|
$is_ajax = !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
|
||||||
|
|
||||||
// Se è una richiesta AJAX, carica solo il contenuto della pagina
|
// Se è una richiesta AJAX, carica solo il contenuto della pagina
|
||||||
if ($is_ajax) {
|
if ($is_ajax) {
|
||||||
switch ($page) {
|
switch ($page) {
|
||||||
case 'home':
|
case 'home':
|
||||||
include './pages/page/home.php';
|
include './pages/page/home.php';
|
||||||
break;
|
break;
|
||||||
case 'radio':
|
case 'radio':
|
||||||
include './pages/page/radio.php';
|
include './pages/page/radio.php';
|
||||||
break;
|
break;
|
||||||
case 'tv':
|
case 'tv':
|
||||||
include './pages/page/tv.php';
|
include './pages/page/tv.php';
|
||||||
break;
|
break;
|
||||||
case 'play':
|
case 'play':
|
||||||
$stationId = (int)$param;
|
$stationId = (int)$param;
|
||||||
$station = getRadioStation($stationId);
|
$station = getRadioStation($stationId);
|
||||||
if ($station !== null) {
|
if ($station !== null) {
|
||||||
include './pages/page/player.php';
|
include './pages/page/player.php';
|
||||||
} else {
|
} else {
|
||||||
include './pages/page/404.php';
|
include './pages/page/404.php';
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'playtv':
|
case 'playtv':
|
||||||
$stationId = (int)$param;
|
$stationId = (int)$param;
|
||||||
$station = getTVStation($stationId);
|
$station = getTVStation($stationId);
|
||||||
if ($station !== null) {
|
if ($station !== null) {
|
||||||
include './pages/page/player_tv.php';
|
include './pages/page/player_tv.php';
|
||||||
} else {
|
} else {
|
||||||
include './pages/page/404.php';
|
include './pages/page/404.php';
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'page':
|
case 'page':
|
||||||
switch ($param) {
|
switch ($param) {
|
||||||
case 'about':
|
case 'about':
|
||||||
include './pages/page/about.php';
|
include './pages/page/about.php';
|
||||||
break;
|
break;
|
||||||
case 'contact':
|
case 'contact':
|
||||||
include './pages/page/contact.php';
|
include './pages/page/contact.php';
|
||||||
break;
|
break;
|
||||||
case 'copyright':
|
case 'copyright':
|
||||||
include './pages/page/copyright.php';
|
include './pages/page/copyright.php';
|
||||||
break;
|
break;
|
||||||
case 'addradio':
|
case 'addradio':
|
||||||
include './pages/page/addradio.php';
|
include './pages/page/addradio.php';
|
||||||
break;
|
break;
|
||||||
case 'termini-condizioni':
|
case 'termini-condizioni':
|
||||||
include './pages/page/terminicondizioni.php';
|
include './pages/page/terminicondizioni.php';
|
||||||
break;
|
break;
|
||||||
case 'policy-privacy':
|
case 'policy-privacy':
|
||||||
include './pages/page/policyprivacy.php';
|
include './pages/page/policyprivacy.php';
|
||||||
break;
|
break;
|
||||||
case 'changelog':
|
case 'changelog':
|
||||||
include './pages/page/changelog.php';
|
include './pages/page/changelog.php';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
include './pages/page/404.php';
|
include './pages/page/404.php';
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
include './pages/page/404.php';
|
include './pages/page/404.php';
|
||||||
}
|
}
|
||||||
exit; // Termina l'esecuzione per le richieste AJAX
|
exit; // Termina l'esecuzione per le richieste AJAX
|
||||||
}
|
}
|
||||||
@@ -1,29 +1,29 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
header('Content-Type: text/html; charset=UTF-8');
|
header('Content-Type: text/html; charset=UTF-8');
|
||||||
|
|
||||||
|
|
||||||
// Information App
|
// Information App
|
||||||
$title_site = "RPIGroup Play";
|
$title_site = "RPIGroup Play";
|
||||||
$description_site = "Ascolta le radio del gruppo RPIGroup";
|
$description_site = "Ascolta le radio del gruppo RPIGroup";
|
||||||
$logo_site = "./img/logoapp.png";
|
$logo_site = "./img/logoapp.png";
|
||||||
|
|
||||||
include_once './config/getBasePath.inc.php';
|
include_once './config/getBasePath.inc.php';
|
||||||
include_once './config/getStation.inc.php';
|
include_once './config/getStation.inc.php';
|
||||||
include_once './config/getPage.inc.php';
|
include_once './config/getPage.inc.php';
|
||||||
|
|
||||||
// Controllo se l'utente è su mobile o desktop
|
// Controllo se l'utente è su mobile o desktop
|
||||||
$is_mobile = isMobile();
|
$is_mobile = isMobile();
|
||||||
|
|
||||||
// Se l'utente è su mobile, mostra l'app direttamente
|
// Se l'utente è su mobile, mostra l'app direttamente
|
||||||
// Se è su desktop, mostra prima la pagina con il pulsante "Apri l'app"
|
// Se è su desktop, mostra prima la pagina con il pulsante "Apri l'app"
|
||||||
$show_app = $is_mobile || (isset($_GET['app']) && $_GET['app'] == 'true');
|
$show_app = $is_mobile || (isset($_GET['app']) && $_GET['app'] == 'true');
|
||||||
|
|
||||||
if ($show_app && isset($_GET['redirect']) && !empty($_GET['redirect'])) {
|
if ($show_app && isset($_GET['redirect']) && !empty($_GET['redirect'])) {
|
||||||
$redirect_parts = explode('/', $_GET['redirect']);
|
$redirect_parts = explode('/', $_GET['redirect']);
|
||||||
$page = isset($redirect_parts[0]) ? $redirect_parts[0] : 'home';
|
$page = isset($redirect_parts[0]) ? $redirect_parts[0] : 'home';
|
||||||
$param = isset($redirect_parts[1]) ? $redirect_parts[1] : '';
|
$param = isset($redirect_parts[1]) ? $redirect_parts[1] : '';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Include AJAX module DOPO aver definito le variabili
|
// Include AJAX module DOPO aver definito le variabili
|
||||||
include_once './config/ajaxModule.inc.php';
|
include_once './config/ajaxModule.inc.php';
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
header('Content-Type: text/html; charset=UTF-8');
|
header('Content-Type: text/html; charset=UTF-8');
|
||||||
|
|
||||||
// Determina il percorso base dell'applicazione
|
// Determina il percorso base dell'applicazione
|
||||||
$script_name = $_SERVER['SCRIPT_NAME'];
|
$script_name = $_SERVER['SCRIPT_NAME'];
|
||||||
$script_path = dirname($script_name);
|
$script_path = dirname($script_name);
|
||||||
$base_path = rtrim($script_path, '/');
|
$base_path = rtrim($script_path, '/');
|
||||||
$base_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$base_path";
|
$base_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$base_path";
|
||||||
@@ -1,84 +1,84 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
header('Content-Type: text/html; charset=UTF-8');
|
header('Content-Type: text/html; charset=UTF-8');
|
||||||
|
|
||||||
// File: config/getPage.inc.php
|
// File: config/getPage.inc.php
|
||||||
|
|
||||||
// Whitelist delle pagine valide
|
// Whitelist delle pagine valide
|
||||||
$validPages = ['home', 'radio', 'tv', 'play', 'playtv', 'page'];
|
$validPages = ['home', 'radio', 'tv', 'play', 'playtv', 'page'];
|
||||||
$validSubPages = ['about', 'contact', 'copyright', 'addradio', 'termini-condizioni', 'policy-privacy', 'changelog'];
|
$validSubPages = ['about', 'contact', 'copyright', 'addradio', 'termini-condizioni', 'policy-privacy', 'changelog'];
|
||||||
|
|
||||||
// Rileva se l'utente sta usando un dispositivo mobile
|
// Rileva se l'utente sta usando un dispositivo mobile
|
||||||
function isMobile() {
|
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"]);
|
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
|
// Funzione per sanitizzare l'input
|
||||||
function sanitizePageInput($input) {
|
function sanitizePageInput($input) {
|
||||||
// Rimuovi caratteri pericolosi
|
// Rimuovi caratteri pericolosi
|
||||||
$input = preg_replace('/[^a-zA-Z0-9\-_]/', '', $input);
|
$input = preg_replace('/[^a-zA-Z0-9\-_]/', '', $input);
|
||||||
// Previeni path traversal
|
// Previeni path traversal
|
||||||
$input = str_replace(['..', '/', '\\'], '', $input);
|
$input = str_replace(['..', '/', '\\'], '', $input);
|
||||||
return $input;
|
return $input;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Recupera l'URL richiesto
|
// Recupera l'URL richiesto
|
||||||
$request_uri = $_SERVER['REQUEST_URI'];
|
$request_uri = $_SERVER['REQUEST_URI'];
|
||||||
$path = substr(urldecode($request_uri), strlen($base_path));
|
$path = substr(urldecode($request_uri), strlen($base_path));
|
||||||
$path = parse_url($path, PHP_URL_PATH);
|
$path = parse_url($path, PHP_URL_PATH);
|
||||||
$path = trim($path, '/');
|
$path = trim($path, '/');
|
||||||
|
|
||||||
// Rimuovi parametri GET dall'URL se presenti
|
// Rimuovi parametri GET dall'URL se presenti
|
||||||
if (strpos($path, '?') !== false) {
|
if (strpos($path, '?') !== false) {
|
||||||
$path = substr($path, 0, strpos($path, '?'));
|
$path = substr($path, 0, strpos($path, '?'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$path_parts = explode('/', $path);
|
$path_parts = explode('/', $path);
|
||||||
|
|
||||||
// Rimuovi index.php dall'URL se presente
|
// Rimuovi index.php dall'URL se presente
|
||||||
if (isset($path_parts[0]) && $path_parts[0] == 'index.php') {
|
if (isset($path_parts[0]) && $path_parts[0] == 'index.php') {
|
||||||
array_shift($path_parts);
|
array_shift($path_parts);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determina la pagina da mostrare in base all'URL con validazione
|
// Determina la pagina da mostrare in base all'URL con validazione
|
||||||
$page = 'home'; // Default sicuro
|
$page = 'home'; // Default sicuro
|
||||||
$param = '';
|
$param = '';
|
||||||
|
|
||||||
if (isset($path_parts[0]) && !empty($path_parts[0])) {
|
if (isset($path_parts[0]) && !empty($path_parts[0])) {
|
||||||
$requestedPage = sanitizePageInput($path_parts[0]);
|
$requestedPage = sanitizePageInput($path_parts[0]);
|
||||||
|
|
||||||
// Verifica se la pagina è nella whitelist
|
// Verifica se la pagina è nella whitelist
|
||||||
if (in_array($requestedPage, $validPages)) {
|
if (in_array($requestedPage, $validPages)) {
|
||||||
$page = $requestedPage;
|
$page = $requestedPage;
|
||||||
} else {
|
} else {
|
||||||
// Pagina non valida, redirect a 404
|
// Pagina non valida, redirect a 404
|
||||||
$page = 'home';
|
$page = 'home';
|
||||||
error_log("Tentativo di accesso a pagina non valida: " . $path_parts[0]);
|
error_log("Tentativo di accesso a pagina non valida: " . $path_parts[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($path_parts[1]) && !empty($path_parts[1])) {
|
if (isset($path_parts[1]) && !empty($path_parts[1])) {
|
||||||
$requestedParam = sanitizePageInput($path_parts[1]);
|
$requestedParam = sanitizePageInput($path_parts[1]);
|
||||||
|
|
||||||
// Validazione specifica per tipo di pagina
|
// Validazione specifica per tipo di pagina
|
||||||
if ($page === 'play' || $page === 'playtv') {
|
if ($page === 'play' || $page === 'playtv') {
|
||||||
// Per play/playtv, il parametro deve essere un numero
|
// Per play/playtv, il parametro deve essere un numero
|
||||||
if (ctype_digit($requestedParam)) {
|
if (ctype_digit($requestedParam)) {
|
||||||
$param = $requestedParam;
|
$param = $requestedParam;
|
||||||
} else {
|
} else {
|
||||||
error_log("ID stazione non valido: " . $path_parts[1]);
|
error_log("ID stazione non valido: " . $path_parts[1]);
|
||||||
$page = 'home';
|
$page = 'home';
|
||||||
}
|
}
|
||||||
} elseif ($page === 'page') {
|
} elseif ($page === 'page') {
|
||||||
// Per page, il parametro deve essere nella whitelist
|
// Per page, il parametro deve essere nella whitelist
|
||||||
if (in_array($requestedParam, $validSubPages)) {
|
if (in_array($requestedParam, $validSubPages)) {
|
||||||
$param = $requestedParam;
|
$param = $requestedParam;
|
||||||
} else {
|
} else {
|
||||||
error_log("Sottopagina non valida: " . $path_parts[1]);
|
error_log("Sottopagina non valida: " . $path_parts[1]);
|
||||||
$page = 'home';
|
$page = 'home';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Debug (rimuovi in produzione)
|
// Debug (rimuovi in produzione)
|
||||||
error_log("Page: $page, Param: $param, Path: $path");
|
error_log("Page: $page, Param: $param, Path: $path");
|
||||||
@@ -1,202 +1,202 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cache XML in memoria per la durata della richiesta
|
* Cache XML in memoria per la durata della richiesta
|
||||||
* Previene caricamenti multipli dello stesso file
|
* Previene caricamenti multipli dello stesso file
|
||||||
*/
|
*/
|
||||||
class StationCache {
|
class StationCache {
|
||||||
private static $radioXML = null;
|
private static $radioXML = null;
|
||||||
private static $tvXML = null;
|
private static $tvXML = null;
|
||||||
private static $changelogXML = null;
|
private static $changelogXML = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Carica e cachea il file XML delle radio
|
* Carica e cachea il file XML delle radio
|
||||||
*/
|
*/
|
||||||
public static function getRadioXML() {
|
public static function getRadioXML() {
|
||||||
if (self::$radioXML === null) {
|
if (self::$radioXML === null) {
|
||||||
$xmlPath = './data/radio.xml';
|
$xmlPath = './data/radio.xml';
|
||||||
|
|
||||||
if (!file_exists($xmlPath)) {
|
if (!file_exists($xmlPath)) {
|
||||||
error_log("File XML non trovato: $xmlPath");
|
error_log("File XML non trovato: $xmlPath");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_readable($xmlPath)) {
|
if (!is_readable($xmlPath)) {
|
||||||
error_log("File XML non leggibile: $xmlPath");
|
error_log("File XML non leggibile: $xmlPath");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
libxml_use_internal_errors(true);
|
libxml_use_internal_errors(true);
|
||||||
self::$radioXML = simplexml_load_file($xmlPath);
|
self::$radioXML = simplexml_load_file($xmlPath);
|
||||||
|
|
||||||
if (self::$radioXML === false) {
|
if (self::$radioXML === false) {
|
||||||
$errors = libxml_get_errors();
|
$errors = libxml_get_errors();
|
||||||
foreach ($errors as $error) {
|
foreach ($errors as $error) {
|
||||||
error_log("Errore XML radio.xml: " . trim($error->message) . " (Linea: " . $error->line . ")");
|
error_log("Errore XML radio.xml: " . trim($error->message) . " (Linea: " . $error->line . ")");
|
||||||
}
|
}
|
||||||
libxml_clear_errors();
|
libxml_clear_errors();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return self::$radioXML;
|
return self::$radioXML;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Carica e cachea il file XML delle TV
|
* Carica e cachea il file XML delle TV
|
||||||
*/
|
*/
|
||||||
public static function getTVXML() {
|
public static function getTVXML() {
|
||||||
if (self::$tvXML === null) {
|
if (self::$tvXML === null) {
|
||||||
$xmlPath = './data/tv.xml';
|
$xmlPath = './data/tv.xml';
|
||||||
|
|
||||||
if (!file_exists($xmlPath)) {
|
if (!file_exists($xmlPath)) {
|
||||||
error_log("File XML non trovato: $xmlPath");
|
error_log("File XML non trovato: $xmlPath");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_readable($xmlPath)) {
|
if (!is_readable($xmlPath)) {
|
||||||
error_log("File XML non leggibile: $xmlPath");
|
error_log("File XML non leggibile: $xmlPath");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
libxml_use_internal_errors(true);
|
libxml_use_internal_errors(true);
|
||||||
self::$tvXML = simplexml_load_file($xmlPath);
|
self::$tvXML = simplexml_load_file($xmlPath);
|
||||||
|
|
||||||
if (self::$tvXML === false) {
|
if (self::$tvXML === false) {
|
||||||
$errors = libxml_get_errors();
|
$errors = libxml_get_errors();
|
||||||
foreach ($errors as $error) {
|
foreach ($errors as $error) {
|
||||||
error_log("Errore XML tv.xml: " . trim($error->message) . " (Linea: " . $error->line . ")");
|
error_log("Errore XML tv.xml: " . trim($error->message) . " (Linea: " . $error->line . ")");
|
||||||
}
|
}
|
||||||
libxml_clear_errors();
|
libxml_clear_errors();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return self::$tvXML;
|
return self::$tvXML;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Carica e cachea il file XML del changelog
|
* Carica e cachea il file XML del changelog
|
||||||
*/
|
*/
|
||||||
public static function getChangelogXML() {
|
public static function getChangelogXML() {
|
||||||
if (self::$changelogXML === null) {
|
if (self::$changelogXML === null) {
|
||||||
$xmlPath = './data/changelog.xml';
|
$xmlPath = './data/changelog.xml';
|
||||||
|
|
||||||
if (!file_exists($xmlPath)) {
|
if (!file_exists($xmlPath)) {
|
||||||
error_log("File XML non trovato: $xmlPath");
|
error_log("File XML non trovato: $xmlPath");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_readable($xmlPath)) {
|
if (!is_readable($xmlPath)) {
|
||||||
error_log("File XML non leggibile: $xmlPath");
|
error_log("File XML non leggibile: $xmlPath");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
libxml_use_internal_errors(true);
|
libxml_use_internal_errors(true);
|
||||||
self::$changelogXML = simplexml_load_file($xmlPath);
|
self::$changelogXML = simplexml_load_file($xmlPath);
|
||||||
|
|
||||||
if (self::$changelogXML === false) {
|
if (self::$changelogXML === false) {
|
||||||
$errors = libxml_get_errors();
|
$errors = libxml_get_errors();
|
||||||
foreach ($errors as $error) {
|
foreach ($errors as $error) {
|
||||||
error_log("Errore XML changelog.xml: " . trim($error->message) . " (Linea: " . $error->line . ")");
|
error_log("Errore XML changelog.xml: " . trim($error->message) . " (Linea: " . $error->line . ")");
|
||||||
}
|
}
|
||||||
libxml_clear_errors();
|
libxml_clear_errors();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return self::$changelogXML;
|
return self::$changelogXML;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Funzione per caricare tutte le stazioni radio
|
* Funzione per caricare tutte le stazioni radio
|
||||||
* @return array|SimpleXMLElement Array di stazioni o array vuoto in caso di errore
|
* @return array|SimpleXMLElement Array di stazioni o array vuoto in caso di errore
|
||||||
*/
|
*/
|
||||||
function loadRadioStations() {
|
function loadRadioStations() {
|
||||||
$xml = StationCache::getRadioXML();
|
$xml = StationCache::getRadioXML();
|
||||||
if ($xml === false || !isset($xml->station)) {
|
if ($xml === false || !isset($xml->station)) {
|
||||||
error_log("Impossibile caricare le stazioni radio");
|
error_log("Impossibile caricare le stazioni radio");
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
return $xml->station;
|
return $xml->station;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Funzione per ottenere una singola stazione radio
|
* Funzione per ottenere una singola stazione radio
|
||||||
* @param int $id ID della stazione
|
* @param int $id ID della stazione
|
||||||
* @return SimpleXMLElement|null Stazione o null se non trovata
|
* @return SimpleXMLElement|null Stazione o null se non trovata
|
||||||
*/
|
*/
|
||||||
function getRadioStation($id) {
|
function getRadioStation($id) {
|
||||||
$xml = StationCache::getRadioXML();
|
$xml = StationCache::getRadioXML();
|
||||||
if ($xml === false) {
|
if ($xml === false) {
|
||||||
error_log("Impossibile caricare XML radio per ID: $id");
|
error_log("Impossibile caricare XML radio per ID: $id");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isset($xml->station)) {
|
if (!isset($xml->station)) {
|
||||||
error_log("Nessuna stazione trovata nel file XML");
|
error_log("Nessuna stazione trovata nel file XML");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($xml->station as $station) {
|
foreach ($xml->station as $station) {
|
||||||
if ((int)$station->id === (int)$id) {
|
if ((int)$station->id === (int)$id) {
|
||||||
return $station;
|
return $station;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
error_log("Stazione radio non trovata con ID: $id");
|
error_log("Stazione radio non trovata con ID: $id");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Funzione per caricare tutte le stazioni TV
|
* Funzione per caricare tutte le stazioni TV
|
||||||
* @return array|SimpleXMLElement Array di stazioni o array vuoto in caso di errore
|
* @return array|SimpleXMLElement Array di stazioni o array vuoto in caso di errore
|
||||||
*/
|
*/
|
||||||
function loadTVStations() {
|
function loadTVStations() {
|
||||||
$xml = StationCache::getTVXML();
|
$xml = StationCache::getTVXML();
|
||||||
if ($xml === false || !isset($xml->station)) {
|
if ($xml === false || !isset($xml->station)) {
|
||||||
error_log("Impossibile caricare le stazioni TV");
|
error_log("Impossibile caricare le stazioni TV");
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
return $xml->station;
|
return $xml->station;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Funzione per ottenere una singola stazione TV
|
* Funzione per ottenere una singola stazione TV
|
||||||
* @param int $id ID della stazione
|
* @param int $id ID della stazione
|
||||||
* @return SimpleXMLElement|null Stazione o null se non trovata
|
* @return SimpleXMLElement|null Stazione o null se non trovata
|
||||||
*/
|
*/
|
||||||
function getTVStation($id) {
|
function getTVStation($id) {
|
||||||
$xml = StationCache::getTVXML();
|
$xml = StationCache::getTVXML();
|
||||||
if ($xml === false) {
|
if ($xml === false) {
|
||||||
error_log("Impossibile caricare XML TV per ID: $id");
|
error_log("Impossibile caricare XML TV per ID: $id");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isset($xml->station)) {
|
if (!isset($xml->station)) {
|
||||||
error_log("Nessuna stazione TV trovata nel file XML");
|
error_log("Nessuna stazione TV trovata nel file XML");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($xml->station as $station) {
|
foreach ($xml->station as $station) {
|
||||||
if ((int)$station->id === (int)$id) {
|
if ((int)$station->id === (int)$id) {
|
||||||
return $station;
|
return $station;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
error_log("Stazione TV non trovata con ID: $id");
|
error_log("Stazione TV non trovata con ID: $id");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Carica il changelog e la versione dell'app
|
* Carica il changelog e la versione dell'app
|
||||||
*/
|
*/
|
||||||
$changelog = StationCache::getChangelogXML();
|
$changelog = StationCache::getChangelogXML();
|
||||||
$version_app = "1.0.0"; // Versione di default
|
$version_app = "1.0.0"; // Versione di default
|
||||||
|
|
||||||
if ($changelog !== false && isset($changelog->version) && isset($changelog->version[0]->number)) {
|
if ($changelog !== false && isset($changelog->version) && isset($changelog->version[0]->number)) {
|
||||||
$version_app = (string)$changelog->version[0]->number;
|
$version_app = (string)$changelog->version[0]->number;
|
||||||
} else {
|
} else {
|
||||||
error_log("Impossibile leggere la versione dal changelog.xml, uso versione di default: $version_app");
|
error_log("Impossibile leggere la versione dal changelog.xml, uso versione di default: $version_app");
|
||||||
}
|
}
|
||||||
@@ -1,260 +1,260 @@
|
|||||||
/* ========================================
|
/* ========================================
|
||||||
TRANSIZIONI E ANIMAZIONI
|
TRANSIZIONI E ANIMAZIONI
|
||||||
======================================== */
|
======================================== */
|
||||||
|
|
||||||
|
|
||||||
/* Transizione per i link di navigazione */
|
/* Transizione per i link di navigazione */
|
||||||
.navLink,
|
.navLink,
|
||||||
.nav-link,
|
.nav-link,
|
||||||
.station-link,
|
.station-link,
|
||||||
.linkBox {
|
.linkBox {
|
||||||
transition: all 0.3s ease;
|
transition: all 0.3s ease;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Effetto hover sui link */
|
/* Effetto hover sui link */
|
||||||
.navLink:hover,
|
.navLink:hover,
|
||||||
.nav-link:hover,
|
.nav-link:hover,
|
||||||
.station-link:hover,
|
.station-link:hover,
|
||||||
.linkBox:hover {
|
.linkBox:hover {
|
||||||
transform: translateY(-2px);
|
transform: translateY(-2px);
|
||||||
opacity: 0.8;
|
opacity: 0.8;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Effetto attivo sui link di navigazione del menu */
|
/* Effetto attivo sui link di navigazione del menu */
|
||||||
|
|
||||||
|
|
||||||
@keyframes pulseActive {
|
@keyframes pulseActive {
|
||||||
0%, 100% {
|
0%, 100% {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
transform: translateX(-50%) scale(1);
|
transform: translateX(-50%) scale(1);
|
||||||
}
|
}
|
||||||
50% {
|
50% {
|
||||||
opacity: 0.6;
|
opacity: 0.6;
|
||||||
transform: translateX(-50%) scale(1.2);
|
transform: translateX(-50%) scale(1.2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Effetto click/tap */
|
/* Effetto click/tap */
|
||||||
.navLink:active,
|
.navLink:active,
|
||||||
.nav-link:active,
|
.nav-link:active,
|
||||||
.station-link:active,
|
.station-link:active,
|
||||||
.linkBox:active {
|
.linkBox:active {
|
||||||
transform: scale(0.98);
|
transform: scale(0.98);
|
||||||
transition: transform 0.1s ease;
|
transition: transform 0.1s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Transizione per le card delle stazioni */
|
/* Transizione per le card delle stazioni */
|
||||||
.station-card {
|
.station-card {
|
||||||
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
.station-card:hover {
|
.station-card:hover {
|
||||||
transform: translateY(-5px);
|
transform: translateY(-5px);
|
||||||
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
|
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Transizione per i clickBox della home */
|
/* Transizione per i clickBox della home */
|
||||||
.clickBox {
|
.clickBox {
|
||||||
transition: all 0.3s ease;
|
transition: all 0.3s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
.clickBox:hover {
|
.clickBox:hover {
|
||||||
transform: scale(1.05);
|
transform: scale(1.05);
|
||||||
box-shadow: 0 5px 20px rgba(0, 0, 0, 0.2);
|
box-shadow: 0 5px 20px rgba(0, 0, 0, 0.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
.clickBox:active {
|
.clickBox:active {
|
||||||
transform: scale(0.98);
|
transform: scale(0.98);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Spinner di caricamento */
|
/* Spinner di caricamento */
|
||||||
.loading {
|
.loading {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
min-height: 200px;
|
min-height: 200px;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
animation: fadeIn 0.3s ease-in forwards;
|
animation: fadeIn 0.3s ease-in forwards;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes fadeIn {
|
@keyframes fadeIn {
|
||||||
to {
|
to {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.spinner {
|
.spinner {
|
||||||
width: 50px;
|
width: 50px;
|
||||||
height: 50px;
|
height: 50px;
|
||||||
border: 4px solid rgba(255, 255, 255, 0.3);
|
border: 4px solid rgba(255, 255, 255, 0.3);
|
||||||
border-top-color: #fff;
|
border-top-color: #fff;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
animation: spin 0.8s linear infinite;
|
animation: spin 0.8s linear infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes spin {
|
@keyframes spin {
|
||||||
to {
|
to {
|
||||||
transform: rotate(360deg);
|
transform: rotate(360deg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Transizione per elementi che appaiono */
|
/* Transizione per elementi che appaiono */
|
||||||
.content-page,
|
.content-page,
|
||||||
.station-list,
|
.station-list,
|
||||||
.player-container {
|
.player-container {
|
||||||
animation: fadeInContent 0.5s ease-out;
|
animation: fadeInContent 0.5s ease-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes fadeInContent {
|
@keyframes fadeInContent {
|
||||||
from {
|
from {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
to {
|
to {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Transizione per le immagini */
|
/* Transizione per le immagini */
|
||||||
.station-logo,
|
.station-logo,
|
||||||
.station-logo-large {
|
.station-logo-large {
|
||||||
transition: transform 0.3s ease, filter 0.3s ease;
|
transition: transform 0.3s ease, filter 0.3s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
.station-logo:hover,
|
.station-logo:hover,
|
||||||
.station-logo-large:hover {
|
.station-logo-large:hover {
|
||||||
transform: scale(1.05);
|
transform: scale(1.05);
|
||||||
filter: brightness(1.1);
|
filter: brightness(1.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Transizione per i pulsanti */
|
/* Transizione per i pulsanti */
|
||||||
button,
|
button,
|
||||||
.submit-btn,
|
.submit-btn,
|
||||||
.play-pause-btn {
|
.play-pause-btn {
|
||||||
transition: all 0.3s ease;
|
transition: all 0.3s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
button:hover,
|
button:hover,
|
||||||
.submit-btn:hover,
|
.submit-btn:hover,
|
||||||
.play-pause-btn:hover {
|
.play-pause-btn:hover {
|
||||||
transform: scale(1.05);
|
transform: scale(1.05);
|
||||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
button:active,
|
button:active,
|
||||||
.submit-btn:active,
|
.submit-btn:active,
|
||||||
.play-pause-btn:active {
|
.play-pause-btn:active {
|
||||||
transform: scale(0.95);
|
transform: scale(0.95);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Transizione smooth per tutti gli elementi interattivi */
|
/* Transizione smooth per tutti gli elementi interattivi */
|
||||||
a, button, input, textarea, select {
|
a, button, input, textarea, select {
|
||||||
transition: all 0.2s ease;
|
transition: all 0.2s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* RIMOSSO: underline animato per il menu */
|
/* RIMOSSO: underline animato per il menu */
|
||||||
/* Non ci sono più after pseudo-elementi per le underline */
|
/* Non ci sono più after pseudo-elementi per le underline */
|
||||||
|
|
||||||
/* Transizione per il back-link */
|
/* Transizione per il back-link */
|
||||||
.back-link a {
|
.back-link a {
|
||||||
transition: all 0.3s ease;
|
transition: all 0.3s ease;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.back-link a:hover {
|
.back-link a:hover {
|
||||||
transform: translateX(-5px);
|
transform: translateX(-5px);
|
||||||
color: #4a90e2;
|
color: #4a90e2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Animazione per le liste */
|
/* Animazione per le liste */
|
||||||
.stations-container {
|
.stations-container {
|
||||||
display: grid;
|
display: grid;
|
||||||
gap: 1rem;
|
gap: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.station-card {
|
.station-card {
|
||||||
animation: fadeInScale 0.4s ease-out backwards;
|
animation: fadeInScale 0.4s ease-out backwards;
|
||||||
}
|
}
|
||||||
|
|
||||||
.station-card:nth-child(1) { animation-delay: 0.05s; }
|
.station-card:nth-child(1) { animation-delay: 0.05s; }
|
||||||
.station-card:nth-child(2) { animation-delay: 0.1s; }
|
.station-card:nth-child(2) { animation-delay: 0.1s; }
|
||||||
.station-card:nth-child(3) { animation-delay: 0.15s; }
|
.station-card:nth-child(3) { animation-delay: 0.15s; }
|
||||||
.station-card:nth-child(4) { animation-delay: 0.2s; }
|
.station-card:nth-child(4) { animation-delay: 0.2s; }
|
||||||
.station-card:nth-child(5) { animation-delay: 0.25s; }
|
.station-card:nth-child(5) { animation-delay: 0.25s; }
|
||||||
|
|
||||||
@keyframes fadeInScale {
|
@keyframes fadeInScale {
|
||||||
from {
|
from {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
transform: scale(0.95);
|
transform: scale(0.95);
|
||||||
}
|
}
|
||||||
to {
|
to {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
transform: scale(1);
|
transform: scale(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Transizione per i form */
|
/* Transizione per i form */
|
||||||
.form-group input,
|
.form-group input,
|
||||||
.form-group textarea,
|
.form-group textarea,
|
||||||
.form-group select {
|
.form-group select {
|
||||||
transition: border-color 0.3s ease, box-shadow 0.3s ease;
|
transition: border-color 0.3s ease, box-shadow 0.3s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-group input:focus,
|
.form-group input:focus,
|
||||||
.form-group textarea:focus,
|
.form-group textarea:focus,
|
||||||
.form-group select:focus {
|
.form-group select:focus {
|
||||||
border-color: #4a90e2;
|
border-color: #4a90e2;
|
||||||
box-shadow: 0 0 0 3px rgba(74, 144, 226, 0.1);
|
box-shadow: 0 0 0 3px rgba(74, 144, 226, 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Animazione per i messaggi di risposta */
|
/* Animazione per i messaggi di risposta */
|
||||||
.form-response {
|
.form-response {
|
||||||
animation: slideInDown 0.4s ease-out;
|
animation: slideInDown 0.4s ease-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes slideInDown {
|
@keyframes slideInDown {
|
||||||
from {
|
from {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
transform: translateY(-20px);
|
transform: translateY(-20px);
|
||||||
}
|
}
|
||||||
to {
|
to {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
transform: translateY(0);
|
transform: translateY(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Transizione per video e iframe */
|
/* Transizione per video e iframe */
|
||||||
video,
|
video,
|
||||||
iframe {
|
iframe {
|
||||||
transition: opacity 0.3s ease;
|
transition: opacity 0.3s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
video:hover,
|
video:hover,
|
||||||
iframe:hover {
|
iframe:hover {
|
||||||
opacity: 0.95;
|
opacity: 0.95;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Performance optimization */
|
/* Performance optimization */
|
||||||
* {
|
* {
|
||||||
-webkit-tap-highlight-color: transparent;
|
-webkit-tap-highlight-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Smooth scrolling */
|
/* Smooth scrolling */
|
||||||
html {
|
html {
|
||||||
scroll-behavior: smooth;
|
scroll-behavior: smooth;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Riduzione movimento per chi ha impostato preferenze di accessibilità */
|
/* Riduzione movimento per chi ha impostato preferenze di accessibilità */
|
||||||
@media (prefers-reduced-motion: reduce) {
|
@media (prefers-reduced-motion: reduce) {
|
||||||
*,
|
*,
|
||||||
*::before,
|
*::before,
|
||||||
*::after {
|
*::after {
|
||||||
animation-duration: 0.01ms !important;
|
animation-duration: 0.01ms !important;
|
||||||
animation-iteration-count: 1 !important;
|
animation-iteration-count: 1 !important;
|
||||||
transition-duration: 0.01ms !important;
|
transition-duration: 0.01ms !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navLink.active::before {
|
.navLink.active::before {
|
||||||
animation: none !important;
|
animation: none !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
22530
css/bootstrap.css
vendored
22530
css/bootstrap.css
vendored
File diff suppressed because it is too large
Load Diff
@@ -1,93 +1,93 @@
|
|||||||
Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins)
|
Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins)
|
||||||
|
|
||||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||||
This license is copied below, and is also available with a FAQ at:
|
This license is copied below, and is also available with a FAQ at:
|
||||||
https://openfontlicense.org
|
https://openfontlicense.org
|
||||||
|
|
||||||
|
|
||||||
-----------------------------------------------------------
|
-----------------------------------------------------------
|
||||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||||
-----------------------------------------------------------
|
-----------------------------------------------------------
|
||||||
|
|
||||||
PREAMBLE
|
PREAMBLE
|
||||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||||
development of collaborative font projects, to support the font creation
|
development of collaborative font projects, to support the font creation
|
||||||
efforts of academic and linguistic communities, and to provide a free and
|
efforts of academic and linguistic communities, and to provide a free and
|
||||||
open framework in which fonts may be shared and improved in partnership
|
open framework in which fonts may be shared and improved in partnership
|
||||||
with others.
|
with others.
|
||||||
|
|
||||||
The OFL allows the licensed fonts to be used, studied, modified and
|
The OFL allows the licensed fonts to be used, studied, modified and
|
||||||
redistributed freely as long as they are not sold by themselves. The
|
redistributed freely as long as they are not sold by themselves. The
|
||||||
fonts, including any derivative works, can be bundled, embedded,
|
fonts, including any derivative works, can be bundled, embedded,
|
||||||
redistributed and/or sold with any software provided that any reserved
|
redistributed and/or sold with any software provided that any reserved
|
||||||
names are not used by derivative works. The fonts and derivatives,
|
names are not used by derivative works. The fonts and derivatives,
|
||||||
however, cannot be released under any other type of license. The
|
however, cannot be released under any other type of license. The
|
||||||
requirement for fonts to remain under this license does not apply
|
requirement for fonts to remain under this license does not apply
|
||||||
to any document created using the fonts or their derivatives.
|
to any document created using the fonts or their derivatives.
|
||||||
|
|
||||||
DEFINITIONS
|
DEFINITIONS
|
||||||
"Font Software" refers to the set of files released by the Copyright
|
"Font Software" refers to the set of files released by the Copyright
|
||||||
Holder(s) under this license and clearly marked as such. This may
|
Holder(s) under this license and clearly marked as such. This may
|
||||||
include source files, build scripts and documentation.
|
include source files, build scripts and documentation.
|
||||||
|
|
||||||
"Reserved Font Name" refers to any names specified as such after the
|
"Reserved Font Name" refers to any names specified as such after the
|
||||||
copyright statement(s).
|
copyright statement(s).
|
||||||
|
|
||||||
"Original Version" refers to the collection of Font Software components as
|
"Original Version" refers to the collection of Font Software components as
|
||||||
distributed by the Copyright Holder(s).
|
distributed by the Copyright Holder(s).
|
||||||
|
|
||||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||||
or substituting -- in part or in whole -- any of the components of the
|
or substituting -- in part or in whole -- any of the components of the
|
||||||
Original Version, by changing formats or by porting the Font Software to a
|
Original Version, by changing formats or by porting the Font Software to a
|
||||||
new environment.
|
new environment.
|
||||||
|
|
||||||
"Author" refers to any designer, engineer, programmer, technical
|
"Author" refers to any designer, engineer, programmer, technical
|
||||||
writer or other person who contributed to the Font Software.
|
writer or other person who contributed to the Font Software.
|
||||||
|
|
||||||
PERMISSION & CONDITIONS
|
PERMISSION & CONDITIONS
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||||
redistribute, and sell modified and unmodified copies of the Font
|
redistribute, and sell modified and unmodified copies of the Font
|
||||||
Software, subject to the following conditions:
|
Software, subject to the following conditions:
|
||||||
|
|
||||||
1) Neither the Font Software nor any of its individual components,
|
1) Neither the Font Software nor any of its individual components,
|
||||||
in Original or Modified Versions, may be sold by itself.
|
in Original or Modified Versions, may be sold by itself.
|
||||||
|
|
||||||
2) Original or Modified Versions of the Font Software may be bundled,
|
2) Original or Modified Versions of the Font Software may be bundled,
|
||||||
redistributed and/or sold with any software, provided that each copy
|
redistributed and/or sold with any software, provided that each copy
|
||||||
contains the above copyright notice and this license. These can be
|
contains the above copyright notice and this license. These can be
|
||||||
included either as stand-alone text files, human-readable headers or
|
included either as stand-alone text files, human-readable headers or
|
||||||
in the appropriate machine-readable metadata fields within text or
|
in the appropriate machine-readable metadata fields within text or
|
||||||
binary files as long as those fields can be easily viewed by the user.
|
binary files as long as those fields can be easily viewed by the user.
|
||||||
|
|
||||||
3) No Modified Version of the Font Software may use the Reserved Font
|
3) No Modified Version of the Font Software may use the Reserved Font
|
||||||
Name(s) unless explicit written permission is granted by the corresponding
|
Name(s) unless explicit written permission is granted by the corresponding
|
||||||
Copyright Holder. This restriction only applies to the primary font name as
|
Copyright Holder. This restriction only applies to the primary font name as
|
||||||
presented to the users.
|
presented to the users.
|
||||||
|
|
||||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||||
Software shall not be used to promote, endorse or advertise any
|
Software shall not be used to promote, endorse or advertise any
|
||||||
Modified Version, except to acknowledge the contribution(s) of the
|
Modified Version, except to acknowledge the contribution(s) of the
|
||||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||||
permission.
|
permission.
|
||||||
|
|
||||||
5) The Font Software, modified or unmodified, in part or in whole,
|
5) The Font Software, modified or unmodified, in part or in whole,
|
||||||
must be distributed entirely under this license, and must not be
|
must be distributed entirely under this license, and must not be
|
||||||
distributed under any other license. The requirement for fonts to
|
distributed under any other license. The requirement for fonts to
|
||||||
remain under this license does not apply to any document created
|
remain under this license does not apply to any document created
|
||||||
using the Font Software.
|
using the Font Software.
|
||||||
|
|
||||||
TERMINATION
|
TERMINATION
|
||||||
This license becomes null and void if any of the above conditions are
|
This license becomes null and void if any of the above conditions are
|
||||||
not met.
|
not met.
|
||||||
|
|
||||||
DISCLAIMER
|
DISCLAIMER
|
||||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||||
|
|||||||
800
css/style.css
800
css/style.css
@@ -1,400 +1,400 @@
|
|||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Poppins';
|
font-family: 'Poppins';
|
||||||
src: url('fonts/Poppins-Black.ttf') format('truetype');
|
src: url('fonts/Poppins-Black.ttf') format('truetype');
|
||||||
font-weight: 900;
|
font-weight: 900;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Poppins';
|
font-family: 'Poppins';
|
||||||
src: url('fonts/Poppins-BlackItalic.ttf') format('truetype');
|
src: url('fonts/Poppins-BlackItalic.ttf') format('truetype');
|
||||||
font-weight: 900;
|
font-weight: 900;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Poppins';
|
font-family: 'Poppins';
|
||||||
src: url('fonts/Poppins-Bold.ttf') format('truetype');
|
src: url('fonts/Poppins-Bold.ttf') format('truetype');
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Poppins';
|
font-family: 'Poppins';
|
||||||
src: url('fonts/Poppins-BoldItalic.ttf') format('truetype');
|
src: url('fonts/Poppins-BoldItalic.ttf') format('truetype');
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Poppins';
|
font-family: 'Poppins';
|
||||||
src: url('fonts/Poppins-Medium.ttf') format('truetype');
|
src: url('fonts/Poppins-Medium.ttf') format('truetype');
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Poppins';
|
font-family: 'Poppins';
|
||||||
src: url('fonts/Poppins-MediumItalic.ttf') format('truetype');
|
src: url('fonts/Poppins-MediumItalic.ttf') format('truetype');
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Poppins';
|
font-family: 'Poppins';
|
||||||
src: url('fonts/Poppins-Regular.ttf') format('truetype');
|
src: url('fonts/Poppins-Regular.ttf') format('truetype');
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Poppins';
|
font-family: 'Poppins';
|
||||||
src: url('fonts/Poppins-Italic.ttf') format('truetype');
|
src: url('fonts/Poppins-Italic.ttf') format('truetype');
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Poppins';
|
font-family: 'Poppins';
|
||||||
src: url('fonts/Poppins-Light.ttf') format('truetype');
|
src: url('fonts/Poppins-Light.ttf') format('truetype');
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Poppins';
|
font-family: 'Poppins';
|
||||||
src: url('fonts/Poppins-LightItalic.ttf') format('truetype');
|
src: url('fonts/Poppins-LightItalic.ttf') format('truetype');
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
font-family: 'Poppins', sans-serif !important;
|
font-family: 'Poppins', sans-serif !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
* {
|
* {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
html,
|
html,
|
||||||
body {
|
body {
|
||||||
overscroll-behavior: none;
|
overscroll-behavior: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
font-family: "Poppins", sans-serif;
|
font-family: "Poppins", sans-serif;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* DESKTOP SECTION */
|
/* DESKTOP SECTION */
|
||||||
body.desktopBody {
|
body.desktopBody {
|
||||||
background: #2a377e;
|
background: #2a377e;
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.dbox,
|
div.dbox,
|
||||||
div.dbox_mobile {
|
div.dbox_mobile {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
transform: translate(-50%, -50%);
|
transform: translate(-50%, -50%);
|
||||||
background: #4358ca8f;
|
background: #4358ca8f;
|
||||||
padding: 25px;
|
padding: 25px;
|
||||||
border-radius: 50px;
|
border-radius: 50px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
width: 500px;
|
width: 500px;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.dbox_mobile {
|
div.dbox_mobile {
|
||||||
width: 90%;
|
width: 90%;
|
||||||
max-width: 450px;
|
max-width: 450px;
|
||||||
color: white;
|
color: white;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
max-height: 475px;
|
max-height: 475px;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.dbox>h1.title,
|
div.dbox>h1.title,
|
||||||
div.dbox_mobile>h1.title {
|
div.dbox_mobile>h1.title {
|
||||||
margin-bottom: 0px;
|
margin-bottom: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.dbox>hr,
|
div.dbox>hr,
|
||||||
div.dbox_mobile>hr {
|
div.dbox_mobile>hr {
|
||||||
margin: 2rem 0;
|
margin: 2rem 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.dbox>.dbtn,
|
div.dbox>.dbtn,
|
||||||
div.dbox_mobile>.dbtn {
|
div.dbox_mobile>.dbtn {
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: 50px;
|
border-radius: 50px;
|
||||||
padding: 10px 20px;
|
padding: 10px 20px;
|
||||||
background: #f0f0f0;
|
background: #f0f0f0;
|
||||||
color: black;
|
color: black;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
-webkit-appearance: button;
|
-webkit-appearance: button;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.dbox>.dbtn:hover {
|
div.dbox>.dbtn:hover {
|
||||||
background: #e0e0e0;
|
background: #e0e0e0;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.dfooter {
|
div.dfooter {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
bottom: 15px;
|
bottom: 15px;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
transform: translateX(-50%);
|
transform: translateX(-50%);
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: #ffffff90;
|
color: #ffffff90;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* MOBILE SECTION */
|
/* MOBILE SECTION */
|
||||||
|
|
||||||
.appBody {
|
.appBody {
|
||||||
background-color: #10194b;
|
background-color: #10194b;
|
||||||
max-width: 450px;
|
max-width: 450px;
|
||||||
min-width: 330px;
|
min-width: 330px;
|
||||||
margin: auto;
|
margin: auto;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header>.logo-section,
|
.header>.logo-section,
|
||||||
.header>.menu-section {
|
.header>.menu-section {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header>.logo-section,
|
.header>.logo-section,
|
||||||
.footer>.copyright-section {
|
.footer>.copyright-section {
|
||||||
background-color: #2a377e;
|
background-color: #2a377e;
|
||||||
padding: 15px 0;
|
padding: 15px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header>.menu-section {
|
.header>.menu-section {
|
||||||
background-color: #3849a8;
|
background-color: #3849a8;
|
||||||
padding: 13px 0;
|
padding: 13px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header>.logo-section>img {
|
.header>.logo-section>img {
|
||||||
width: 250px;
|
width: 250px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header>.menu-section>.navLink {
|
.header>.menu-section>.navLink {
|
||||||
color: white;
|
color: white;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
margin: 0 15px;
|
margin: 0 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header>.menu-section>.navLink.active {
|
.header>.menu-section>.navLink.active {
|
||||||
color: #2a377e;
|
color: #2a377e;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 3px 15px;
|
padding: 3px 15px;
|
||||||
background: white;
|
background: white;
|
||||||
border-radius: 50px;
|
border-radius: 50px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
main {
|
main {
|
||||||
background-color: white;
|
background-color: white;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.titlePage {
|
.titlePage {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
margin: 15px 0 20px;
|
margin: 15px 0 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.subtitlePage {
|
.subtitlePage {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
margin: -15px 0 20px;
|
margin: -15px 0 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.linkBox {
|
.linkBox {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: black;
|
color: black;
|
||||||
}
|
}
|
||||||
|
|
||||||
.clickBox {
|
.clickBox {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border: 2px solid #2a377e;
|
border: 2px solid #2a377e;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
border-radius: 20px;
|
border-radius: 20px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
/* margin-bottom: 10px; */
|
/* margin-bottom: 10px; */
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.clickBox.Squared {
|
.clickBox.Squared {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
border: solid 4px #2a377e;
|
border: solid 4px #2a377e;
|
||||||
}
|
}
|
||||||
|
|
||||||
.clickBox>img {
|
.clickBox>img {
|
||||||
width: 80%;
|
width: 80%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.changelogTitle {
|
.changelogTitle {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
padding: 0 13px;
|
padding: 0 13px;
|
||||||
margin: 0 0 15px;
|
margin: 0 0 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.changelogList,
|
.changelogList,
|
||||||
.tec,
|
.tec,
|
||||||
.stationList {
|
.stationList {
|
||||||
padding: 0 13px;
|
padding: 0 13px;
|
||||||
margin: 0 0 7px;
|
margin: 0 0 7px;
|
||||||
text-align: justify;
|
text-align: justify;
|
||||||
hyphens: auto;
|
hyphens: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.stationList {
|
.stationList {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.stationCard>a.stationLink {
|
.stationCard>a.stationLink {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.stationCard>a.stationLink>img {
|
.stationCard>a.stationLink>img {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border-radius: 20px;
|
border-radius: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* .stationCard>.thematicBadge {
|
/* .stationCard>.thematicBadge {
|
||||||
position: relative;
|
position: relative;
|
||||||
background: #f7b835;
|
background: #f7b835;
|
||||||
padding: 1px 5px;
|
padding: 1px 5px;
|
||||||
font-size: 0.8rem;
|
font-size: 0.8rem;
|
||||||
border-radius: 27px;
|
border-radius: 27px;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
top: 31px;
|
top: 31px;
|
||||||
left: 35px;
|
left: 35px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
} */
|
} */
|
||||||
|
|
||||||
.stationCard.isthematic{
|
.stationCard.isthematic{
|
||||||
text-align: right;
|
text-align: right;
|
||||||
margin-top: -24px;
|
margin-top: -24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.stationCard.isthematic:before{
|
.stationCard.isthematic:before{
|
||||||
content: "Tematica";
|
content: "Tematica";
|
||||||
position: relative;
|
position: relative;
|
||||||
background: #f7b835;
|
background: #f7b835;
|
||||||
padding: 1px 5px;
|
padding: 1px 5px;
|
||||||
font-size: 0.8rem;
|
font-size: 0.8rem;
|
||||||
border-radius: 27px;
|
border-radius: 27px;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
top: 30px;
|
top: 30px;
|
||||||
right: 7px;
|
right: 7px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
iframe.contentplayer{
|
iframe.contentplayer{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
height: calc(100vh - 312px);
|
height: calc(100vh - 312px);
|
||||||
width: 100%;
|
width: 100%;
|
||||||
max-width: 450px;
|
max-width: 450px;
|
||||||
transform: translateX(-50%);
|
transform: translateX(-50%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.footer_player{
|
.footer_player{
|
||||||
background: #f7b835;
|
background: #f7b835;
|
||||||
color: #2a377d;
|
color: #2a377d;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
z-index: 90;
|
z-index: 90;
|
||||||
bottom: 70px;
|
bottom: 70px;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
transform: translateX(-50%);
|
transform: translateX(-50%);
|
||||||
width: 100%;
|
width: 100%;
|
||||||
max-width: 450px;
|
max-width: 450px;
|
||||||
height: 100px;
|
height: 100px;
|
||||||
border-top-left-radius: 8px;
|
border-top-left-radius: 8px;
|
||||||
border-top-right-radius: 8px;
|
border-top-right-radius: 8px;
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.footer_player > .row > .col-2 > img{
|
.footer_player > .row > .col-2 > img{
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
button#playPauseBtn{
|
button#playPauseBtn{
|
||||||
background: none;
|
background: none;
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.footer{
|
.footer{
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.footer>.menu-section {
|
.footer>.menu-section {
|
||||||
background: #3849a8;
|
background: #3849a8;
|
||||||
font-size: 0.7rem;
|
font-size: 0.7rem;
|
||||||
padding: 7px 0;
|
padding: 7px 0;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.footer>.menu-section>a {
|
.footer>.menu-section>a {
|
||||||
color: white;
|
color: white;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
margin: 0 5px;
|
margin: 0 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.footer>.copyright-section {
|
.footer>.copyright-section {
|
||||||
color: white;
|
color: white;
|
||||||
font-size: 0.8rem;
|
font-size: 0.8rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 450px) {
|
@media (max-width: 450px) {
|
||||||
.appBody {
|
.appBody {
|
||||||
background-color: #2a377e;
|
background-color: #2a377e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Loading spinner */
|
/* Loading spinner */
|
||||||
.loading {
|
.loading {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
min-height: 200px;
|
min-height: 200px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.spinner {
|
.spinner {
|
||||||
width: 40px;
|
width: 40px;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
border: 4px solid rgba(0, 0, 0, 0.1);
|
border: 4px solid rgba(0, 0, 0, 0.1);
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
border-top-color: #3498db;
|
border-top-color: #3498db;
|
||||||
animation: spin 1s ease-in-out infinite;
|
animation: spin 1s ease-in-out infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes spin {
|
@keyframes spin {
|
||||||
to {
|
to {
|
||||||
transform: rotate(360deg);
|
transform: rotate(360deg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,310 +1,318 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<changelog>
|
<changelog>
|
||||||
|
|
||||||
<version>
|
<version>
|
||||||
<number>2.1.0</number>
|
<number>2.1.1</number>
|
||||||
<logs>
|
<logs>
|
||||||
<log>Risoluzione dei problemi minori presenti nel codice, che causava problemi nella navigazione in app</log>
|
<log>Corretti alcuni bug che impedivano l'accesso al player dal link esterno</log>
|
||||||
<log>Risoluzione dei problemi minori presenti nel codice, che causava problemi di riproduzione audio al player</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
<log>Correzione e bugfix di problematiche varie.</log>
|
</logs>
|
||||||
</logs>
|
</version>
|
||||||
</version>
|
|
||||||
|
<version>
|
||||||
<version>
|
<number>2.1.0</number>
|
||||||
<number>2.0.4</number>
|
<logs>
|
||||||
<logs>
|
<log>Risoluzione dei problemi minori presenti nel codice, che causava problemi nella navigazione in app</log>
|
||||||
<log>Blocco rotazione: è stato risolto il problema della rotazione schermo dell'applicazione. Ora rimane fissa in verticale.</log>
|
<log>Risoluzione dei problemi minori presenti nel codice, che causava problemi di riproduzione audio al player</log>
|
||||||
<log>Correzione e bugfix di problematiche varie.</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
</logs>
|
</logs>
|
||||||
</version>
|
</version>
|
||||||
|
|
||||||
<version>
|
<version>
|
||||||
<number>2.0.3</number>
|
<number>2.0.4</number>
|
||||||
<logs>
|
<logs>
|
||||||
<log>Corretta la visualizzazione dei contenuti forniti dalle emittenti all'interno del player</log>
|
<log>Blocco rotazione: è stato risolto il problema della rotazione schermo dell'applicazione. Ora rimane fissa in verticale.</log>
|
||||||
<log>Corretta la visualizzazione del player audio</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
<log>Correzione e bugfix di problematiche varie.</log>
|
</logs>
|
||||||
</logs>
|
</version>
|
||||||
</version>
|
|
||||||
|
<version>
|
||||||
<version>
|
<number>2.0.3</number>
|
||||||
<number>2.0.2</number>
|
<logs>
|
||||||
<logs>
|
<log>Corretta la visualizzazione dei contenuti forniti dalle emittenti all'interno del player</log>
|
||||||
<log>Inserita la pagina statica per le emittenti tematiche</log>
|
<log>Corretta la visualizzazione del player audio</log>
|
||||||
<log>Correzione e bugfix di problematiche varie.</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
</logs>
|
</logs>
|
||||||
</version>
|
</version>
|
||||||
|
|
||||||
<version>
|
<version>
|
||||||
<number>2.0.1</number>
|
<number>2.0.2</number>
|
||||||
<logs>
|
<logs>
|
||||||
<log>Aggiunta la Visual Radio dell'emittente "Radio Città 105</log>
|
<log>Inserita la pagina statica per le emittenti tematiche</log>
|
||||||
<log>Correzione e bugfix di problematiche varie.</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
</logs>
|
</logs>
|
||||||
</version>
|
</version>
|
||||||
|
|
||||||
<version>
|
<version>
|
||||||
<number>2.0.0</number>
|
<number>2.0.1</number>
|
||||||
<logs>
|
<logs>
|
||||||
<log>Nuova UI/UX: RPIGroup aggiorna la veste grafica della sua applicazione, rendendola più "fumettosa" e "giocattolosa". Un'estetica completamente diversa da tutte le altre varie app radiofoniche</log>
|
<log>Aggiunta la Visual Radio dell'emittente "Radio Città 105</log>
|
||||||
<log>Nuova Engine: Nuovo motore e struttura dell'applicazione. Lato backend è cambiato completamente rispetto alla versione 1.</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
<log>Nuovo Player Audio/Video: Player più semplice, ma conserva le caratteristiche della precedente versione.</log>
|
</logs>
|
||||||
<log>Termini e Condizioni: inserimento per obblighi di legge dei corrispettivi "Termini e Condizioni"</log>
|
</version>
|
||||||
<log>Policy Privacy: inserimento per obblighi di legge dei corrispettivi "Policy Privacy"</log>
|
|
||||||
<log>Dalla versione 2 e successive, è stata rimossa la dicitura "stable" in quanto non esistono più varie versioni dell'applicazione.</log>
|
<version>
|
||||||
<log>Correzione e bugfix di problematiche varie.</log>
|
<number>2.0.0</number>
|
||||||
</logs>
|
<logs>
|
||||||
</version>
|
<log>Nuova UI/UX: RPIGroup aggiorna la veste grafica della sua applicazione, rendendola più "fumettosa" e "giocattolosa". Un'estetica completamente diversa da tutte le altre varie app radiofoniche</log>
|
||||||
|
<log>Nuova Engine: Nuovo motore e struttura dell'applicazione. Lato backend è cambiato completamente rispetto alla versione 1.</log>
|
||||||
<version>
|
<log>Nuovo Player Audio/Video: Player più semplice, ma conserva le caratteristiche della precedente versione.</log>
|
||||||
<number>1.2.1 Stable</number>
|
<log>Termini e Condizioni: inserimento per obblighi di legge dei corrispettivi "Termini e Condizioni"</log>
|
||||||
<logs>
|
<log>Policy Privacy: inserimento per obblighi di legge dei corrispettivi "Policy Privacy"</log>
|
||||||
<log>Aggiunta la pagina sul chiarimento dei "Diritti d'Autore".</log>
|
<log>Dalla versione 2 e successive, è stata rimossa la dicitura "stable" in quanto non esistono più varie versioni dell'applicazione.</log>
|
||||||
<log>Correzione e bugfix di problematiche varie.</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
</logs>
|
</logs>
|
||||||
</version>
|
</version>
|
||||||
|
|
||||||
<version>
|
<version>
|
||||||
<number>1.2.0 Stable</number>
|
<number>1.2.1 Stable</number>
|
||||||
<logs>
|
<logs>
|
||||||
<log>Implementato il "Media Sessions" che permette di visualizzare la radio in riproduzione nel centro notifiche su iOS e Android</log>
|
<log>Aggiunta la pagina sul chiarimento dei "Diritti d'Autore".</log>
|
||||||
<log>Preparazione dell'ottimizzazione del software in occasione della terza versione dell'app.</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
<log>Correzione e bugfix di problematiche varie.</log>
|
</logs>
|
||||||
</logs>
|
</version>
|
||||||
</version>
|
|
||||||
|
<version>
|
||||||
<version>
|
<number>1.2.0 Stable</number>
|
||||||
<number>1.1.1 Stable</number>
|
<logs>
|
||||||
<logs>
|
<log>Implementato il "Media Sessions" che permette di visualizzare la radio in riproduzione nel centro notifiche su iOS e Android</log>
|
||||||
<log>Correzione bug che impediva il caricamento del logo nell'icona dell'app sui smartphone.</log>
|
<log>Preparazione dell'ottimizzazione del software in occasione della terza versione dell'app.</log>
|
||||||
<log>Risolto il problema dell'overscrolling su smartphone.</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
<log>Correzione e bugfix di problematiche varie.</log>
|
</logs>
|
||||||
</logs>
|
</version>
|
||||||
</version>
|
|
||||||
|
<version>
|
||||||
<version>
|
<number>1.1.1 Stable</number>
|
||||||
<number>1.1.0 Stable</number>
|
<logs>
|
||||||
<logs>
|
<log>Correzione bug che impediva il caricamento del logo nell'icona dell'app sui smartphone.</log>
|
||||||
<log>Aggiunta la nuova stazione radio tematica "RDL Revival 70-80-90"</log>
|
<log>Risolto il problema dell'overscrolling su smartphone.</log>
|
||||||
<log>Migliorata la visualizzazione del selettore radio della pagina home</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
<log>Implementato nel player la visualizzazione della pagina statica per le radio tematiche</log>
|
</logs>
|
||||||
<log>Correzione e bugfix di problematiche varie causate dall'ultima versione "Beta".</log>
|
</version>
|
||||||
</logs>
|
|
||||||
</version>
|
<version>
|
||||||
|
<number>1.1.0 Stable</number>
|
||||||
<version>
|
<logs>
|
||||||
<number>1.0.0 Stable</number>
|
<log>Aggiunta la nuova stazione radio tematica "RDL Revival 70-80-90"</log>
|
||||||
<logs>
|
<log>Migliorata la visualizzazione del selettore radio della pagina home</log>
|
||||||
<log>Passaggio alla versione "Stable" dell'applicazione</log>
|
<log>Implementato nel player la visualizzazione della pagina statica per le radio tematiche</log>
|
||||||
<log>Verifica di ulteriori correzioni dal passaggio della versione stabile</log>
|
<log>Correzione e bugfix di problematiche varie causate dall'ultima versione "Beta".</log>
|
||||||
<log>Leggerimento dell'applicazione a livello backend</log>
|
</logs>
|
||||||
<log>Ulteriori analisi di stabilità dal momento del passaggio alla versione stabile</log>
|
</version>
|
||||||
<log>Correzione e bugfix di problematiche varie causate dall'ultima versione "Beta".</log>
|
|
||||||
</logs>
|
<version>
|
||||||
</version>
|
<number>1.0.0 Stable</number>
|
||||||
|
<logs>
|
||||||
<version>
|
<log>Passaggio alla versione "Stable" dell'applicazione</log>
|
||||||
<number>0.24.0 Beta</number>
|
<log>Verifica di ulteriori correzioni dal passaggio della versione stabile</log>
|
||||||
<logs>
|
<log>Leggerimento dell'applicazione a livello backend</log>
|
||||||
<log>Aggiormaneto player audio - Riproduzione dei flussi audio in HLS per il bitrate adattivo. Le radio iscritte devono supportare il protocollo HLS.</log>
|
<log>Ulteriori analisi di stabilità dal momento del passaggio alla versione stabile</log>
|
||||||
<log>Supporto all'interscambio della connessione - Al cambiare di tipologia (Wifi o Rete Cellulare), il flusso audio non si interrompe.</log>
|
<log>Correzione e bugfix di problematiche varie causate dall'ultima versione "Beta".</log>
|
||||||
<log>Preparazione del codice alla versione "1.0.0 Stable"</log>
|
</logs>
|
||||||
<log>Correzione e bugfix di problematiche varie.</log>
|
</version>
|
||||||
</logs>
|
|
||||||
</version>
|
<version>
|
||||||
|
<number>0.24.0 Beta</number>
|
||||||
<version>
|
<logs>
|
||||||
<number>0.23.3 Beta</number>
|
<log>Aggiormaneto player audio - Riproduzione dei flussi audio in HLS per il bitrate adattivo. Le radio iscritte devono supportare il protocollo HLS.</log>
|
||||||
<logs>
|
<log>Supporto all'interscambio della connessione - Al cambiare di tipologia (Wifi o Rete Cellulare), il flusso audio non si interrompe.</log>
|
||||||
<log>Inserimento del nuovo flusso video per il canale "RC105 TV".</log>
|
<log>Preparazione del codice alla versione "1.0.0 Stable"</log>
|
||||||
<log>Aggiornamento player video - Inserita l'anteprima del flusso video</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
<log>Correzione accesso al player video con l'inserimento automatico dell'anteprima e flusso video del canale selezionato</log>
|
</logs>
|
||||||
<log>Correzione e bugfix di problematiche varie.</log>
|
</version>
|
||||||
</logs>
|
|
||||||
</version>
|
<version>
|
||||||
|
<number>0.23.3 Beta</number>
|
||||||
<version>
|
<logs>
|
||||||
<number>0.23.2 Beta</number>
|
<log>Inserimento del nuovo flusso video per il canale "RC105 TV".</log>
|
||||||
<logs>
|
<log>Aggiornamento player video - Inserita l'anteprima del flusso video</log>
|
||||||
<log>Inizializzazione cambio interfaccia e modernamento.</log>
|
<log>Correzione accesso al player video con l'inserimento automatico dell'anteprima e flusso video del canale selezionato</log>
|
||||||
<log>Reinserimento della schermata di caricamento nel player.</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
<log>Correzione e bugfix di problematiche varie.</log>
|
</logs>
|
||||||
</logs>
|
</version>
|
||||||
</version>
|
|
||||||
|
<version>
|
||||||
<version>
|
<number>0.23.2 Beta</number>
|
||||||
<number>0.23.1 Beta</number>
|
<logs>
|
||||||
<logs>
|
<log>Inizializzazione cambio interfaccia e modernamento.</log>
|
||||||
<log>Rimozione del logo al caricamento di ogni singola pagina (tranne all'avvio dell'app)</log>
|
<log>Reinserimento della schermata di caricamento nel player.</log>
|
||||||
<log>Correzione e bugfix di problematiche varie.</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
</logs>
|
</logs>
|
||||||
</version>
|
</version>
|
||||||
|
|
||||||
<version>
|
<version>
|
||||||
<number>0.23.0 Beta</number>
|
<number>0.23.1 Beta</number>
|
||||||
<logs>
|
<logs>
|
||||||
<log>Rilasciato il nuovo player video</log>
|
<log>Rimozione del logo al caricamento di ogni singola pagina (tranne all'avvio dell'app)</log>
|
||||||
<log>Inserimento dell'emittente RC105TV nella lista delle WebTV</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
<log>Correzione e bugfix di problematiche varie.</log>
|
</logs>
|
||||||
</logs>
|
</version>
|
||||||
</version>
|
|
||||||
|
<version>
|
||||||
<version>
|
<number>0.23.0 Beta</number>
|
||||||
<number>0.22.4 Beta</number>
|
<logs>
|
||||||
<logs>
|
<log>Rilasciato il nuovo player video</log>
|
||||||
<log>Correzione errori minimi nel sistema</log>
|
<log>Inserimento dell'emittente RC105TV nella lista delle WebTV</log>
|
||||||
<log>Aggiunta indicatore della versione app nella schermata desktop</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
<log>Preparazione player video - Correzioni minimi player e aggiunta di pagine mancanti</log>
|
</logs>
|
||||||
<log>Correzione e bugfix di problematiche varie.</log>
|
</version>
|
||||||
</logs>
|
|
||||||
</version>
|
<version>
|
||||||
|
<number>0.22.4 Beta</number>
|
||||||
<version>
|
<logs>
|
||||||
<number>0.22.3 Beta</number>
|
<log>Correzione errori minimi nel sistema</log>
|
||||||
<logs>
|
<log>Aggiunta indicatore della versione app nella schermata desktop</log>
|
||||||
<log>Migliorati i tempi di caricamento dei player</log>
|
<log>Preparazione player video - Correzioni minimi player e aggiunta di pagine mancanti</log>
|
||||||
<log>Aggiunta nuovi file di Configurazione</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
<log>Correzione e bugfix di problematiche varie.</log>
|
</logs>
|
||||||
</logs>
|
</version>
|
||||||
</version>
|
|
||||||
|
<version>
|
||||||
<version>
|
<number>0.22.3 Beta</number>
|
||||||
<number>0.22.2 Beta</number>
|
<logs>
|
||||||
<logs>
|
<log>Migliorati i tempi di caricamento dei player</log>
|
||||||
<log>Corretto la visualizzazione del player da desktop.</log>
|
<log>Aggiunta nuovi file di Configurazione</log>
|
||||||
<log>Corretto la visualizzazione del font scelto per la webapp "Rubik".</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
<log>Varie ottimizzazioni per la valutazione finale di Google Page Speed.</log>
|
</logs>
|
||||||
<log>Correzione e bugfix di problematiche varie.</log>
|
</version>
|
||||||
</logs>
|
|
||||||
</version>
|
<version>
|
||||||
|
<number>0.22.2 Beta</number>
|
||||||
<version>
|
<logs>
|
||||||
<number>0.22.1 Beta</number>
|
<log>Corretto la visualizzazione del player da desktop.</log>
|
||||||
<logs>
|
<log>Corretto la visualizzazione del font scelto per la webapp "Rubik".</log>
|
||||||
<log>Corretto il bug del logo all'interno dell'homepage</log>
|
<log>Varie ottimizzazioni per la valutazione finale di Google Page Speed.</log>
|
||||||
<log>Corretto la riproduzione audio dell'emittente Radio Città 105</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
<log>Correzione e bugfix di problematiche varie.</log>
|
</logs>
|
||||||
</logs>
|
</version>
|
||||||
</version>
|
|
||||||
|
<version>
|
||||||
<version>
|
<number>0.22.1 Beta</number>
|
||||||
<number>0.22.0 Beta</number>
|
<logs>
|
||||||
<logs>
|
<log>Corretto il bug del logo all'interno dell'homepage</log>
|
||||||
<log>Cambiata la struttura interna dell'app, con unificazione della visualizzazione mobile con quella desktop.</log>
|
<log>Corretto la riproduzione audio dell'emittente Radio Città 105</log>
|
||||||
<log>Cambiata la configurazione dell'app. Ottimizzata per ridurre i tempi di attesa e output della pagina.</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
<log>Le emittenti registrate sono inserite all'interno di un file XML apposito.</log>
|
</logs>
|
||||||
<log>Aggiornato il player interattivo. Ora disponibile di default per tutte le emittenti.</log>
|
</version>
|
||||||
<log>Ottimizzata la homescreen con correzioni di vari bug.</log>
|
|
||||||
<log>Correzione e bugfix di problematiche varie.</log>
|
<version>
|
||||||
</logs>
|
<number>0.22.0 Beta</number>
|
||||||
</version>
|
<logs>
|
||||||
|
<log>Cambiata la struttura interna dell'app, con unificazione della visualizzazione mobile con quella desktop.</log>
|
||||||
<version>
|
<log>Cambiata la configurazione dell'app. Ottimizzata per ridurre i tempi di attesa e output della pagina.</log>
|
||||||
<number>0.21.0 Beta</number>
|
<log>Le emittenti registrate sono inserite all'interno di un file XML apposito.</log>
|
||||||
<logs>
|
<log>Aggiornato il player interattivo. Ora disponibile di default per tutte le emittenti.</log>
|
||||||
<log>Realizzazione del nuovo player interattivo. Disponibile per smartphone e desktop (Al momento, è disponibile solo per l'emittente RDL).</log>
|
<log>Ottimizzata la homescreen con correzioni di vari bug.</log>
|
||||||
<log>Disattivato il precedente player mobile. Verrà riattivato esclusivamente per "emittenti" sprovviste di pagine dinamiche.</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
<log>Correzione e bugfix di problematiche varie.</log>
|
</logs>
|
||||||
</logs>
|
</version>
|
||||||
</version>
|
|
||||||
|
<version>
|
||||||
<version>
|
<number>0.21.0 Beta</number>
|
||||||
<number>0.20.0 Beta</number>
|
<logs>
|
||||||
<logs>
|
<log>Realizzazione del nuovo player interattivo. Disponibile per smartphone e desktop (Al momento, è disponibile solo per l'emittente RDL).</log>
|
||||||
<log>L'app entra ufficialmente nello stato di Beta-testing.</log>
|
<log>Disattivato il precedente player mobile. Verrà riattivato esclusivamente per "emittenti" sprovviste di pagine dinamiche.</log>
|
||||||
<log>Cambiata la modalità di indicazione della versione, non più basata sulla data di aggiornamento, ma sul numero di update dell'app.</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
<log>Avviata ufficialmente la "Roadmap" sulla Versione 1.0.0 (indicata a fine pagina CHANGELOG).</log>
|
</logs>
|
||||||
<log>Aggiunto script per iOS e iPadOS sul rilevamento uso browser/app.</log>
|
</version>
|
||||||
<log>Correzione e bugfix script rilevamento app Android.</log>
|
|
||||||
</logs>
|
<version>
|
||||||
</version>
|
<number>0.20.0 Beta</number>
|
||||||
|
<logs>
|
||||||
<version>
|
<log>L'app entra ufficialmente nello stato di Beta-testing.</log>
|
||||||
<number>0.12.6 Alpha (Last Release)</number>
|
<log>Cambiata la modalità di indicazione della versione, non più basata sulla data di aggiornamento, ma sul numero di update dell'app.</log>
|
||||||
<logs>
|
<log>Avviata ufficialmente la "Roadmap" sulla Versione 1.0.0 (indicata a fine pagina CHANGELOG).</log>
|
||||||
<log>Aggiornata la lista emittenti nel menu in alto sinistra.</log>
|
<log>Aggiunto script per iOS e iPadOS sul rilevamento uso browser/app.</log>
|
||||||
<log>Aggiornate le pagine "Cosa è RPIGRPUP PLAY", "COME FUNZIONA L'APP" e "HAI BISOGNO DI AIUTO".</log>
|
<log>Correzione e bugfix script rilevamento app Android.</log>
|
||||||
<log>Corretto bug inizializzazione app per iOS e iPadOS.</log>
|
</logs>
|
||||||
<log>Aggiunto script di controllo gestione app per iOS e iPadOS.</log>
|
</version>
|
||||||
<log>Correzione e bugfix di problematiche varie.</log>
|
|
||||||
</logs>
|
<version>
|
||||||
</version>
|
<number>0.12.6 Alpha (Last Release)</number>
|
||||||
|
<logs>
|
||||||
<version>
|
<log>Aggiornata la lista emittenti nel menu in alto sinistra.</log>
|
||||||
<number>0.12.5 Aplha</number>
|
<log>Aggiornate le pagine "Cosa è RPIGRPUP PLAY", "COME FUNZIONA L'APP" e "HAI BISOGNO DI AIUTO".</log>
|
||||||
<logs>
|
<log>Corretto bug inizializzazione app per iOS e iPadOS.</log>
|
||||||
<log>Realizzazione file XML per il Changelog.</log>
|
<log>Aggiunto script di controllo gestione app per iOS e iPadOS.</log>
|
||||||
<log>Aggiunto pulsante per la visualizzazione del Changelog.</log>
|
<log>Correzione e bugfix di problematiche varie.</log>
|
||||||
<log>Correzione pagina About per la visualizzazione del Changelog.</log>
|
</logs>
|
||||||
<log>Correzione visualizzazione del Home Page.</log>
|
</version>
|
||||||
<log>Reso automatico il cambio di versione dell'app in base all'ultima versione disponibile e dichiarata all'intero del Changelog.</log>
|
|
||||||
</logs>
|
<version>
|
||||||
</version>
|
<number>0.12.5 Aplha</number>
|
||||||
|
<logs>
|
||||||
<version>
|
<log>Realizzazione file XML per il Changelog.</log>
|
||||||
<number>0.12.2 Alpha</number>
|
<log>Aggiunto pulsante per la visualizzazione del Changelog.</log>
|
||||||
<logs>
|
<log>Correzione pagina About per la visualizzazione del Changelog.</log>
|
||||||
<log>Corretto il problema del caricamento del "Player Mobile" su iOS e derivati.</log>
|
<log>Correzione visualizzazione del Home Page.</log>
|
||||||
<log>Corretto e aggiunto nuovi script del "Player Mobile"</log>
|
<log>Reso automatico il cambio di versione dell'app in base all'ultima versione disponibile e dichiarata all'intero del Changelog.</log>
|
||||||
<log>Aggiornato slogan dell'emittente "RDL XMAS"</log>
|
</logs>
|
||||||
<log>Aggiunto il Changelog</log>
|
</version>
|
||||||
</logs>
|
|
||||||
</version>
|
<version>
|
||||||
|
<number>0.12.2 Alpha</number>
|
||||||
<version>
|
<logs>
|
||||||
<number>0.11.30 Alpha</number>
|
<log>Corretto il problema del caricamento del "Player Mobile" su iOS e derivati.</log>
|
||||||
<logs>
|
<log>Corretto e aggiunto nuovi script del "Player Mobile"</log>
|
||||||
<log>Corretto la visualizzazione del "Player Mobile"</log>
|
<log>Aggiornato slogan dell'emittente "RDL XMAS"</log>
|
||||||
<log>Aggiornata la lista emittenti nel menu in alto sinistra</log>
|
<log>Aggiunto il Changelog</log>
|
||||||
<log>Rimosse momentaneamente le WebTV nel menu in alto sinistra</log>
|
</logs>
|
||||||
</logs>
|
</version>
|
||||||
</version>
|
|
||||||
|
<version>
|
||||||
<version>
|
<number>0.11.30 Alpha</number>
|
||||||
<number>0.11.29 Alpha</number>
|
<logs>
|
||||||
<logs>
|
<log>Corretto la visualizzazione del "Player Mobile"</log>
|
||||||
<log>Aggiunta nuova emittente "RDL XMAS"</log>
|
<log>Aggiornata la lista emittenti nel menu in alto sinistra</log>
|
||||||
<log>Corretta la visualizzazione del "PLAYER DESKTOP"</log>
|
<log>Rimosse momentaneamente le WebTV nel menu in alto sinistra</log>
|
||||||
<log>Corretta la visualizzazione della lista emittenti in "Home Desktop" e "Home Mobile"</log>
|
</logs>
|
||||||
<log>Abilitato il "Player Mobile" anche in ambiente Desktop</log>
|
</version>
|
||||||
<log>Aggiornato script che impedisce il refresh della pagina da Mobile</log>
|
|
||||||
</logs>
|
<version>
|
||||||
</version>
|
<number>0.11.29 Alpha</number>
|
||||||
|
<logs>
|
||||||
<version>
|
<log>Aggiunta nuova emittente "RDL XMAS"</log>
|
||||||
<number>0.9.26 Alpha</number>
|
<log>Corretta la visualizzazione del "PLAYER DESKTOP"</log>
|
||||||
<logs>
|
<log>Corretta la visualizzazione della lista emittenti in "Home Desktop" e "Home Mobile"</log>
|
||||||
<log>Cambiata l'URL del flusso audio di RDL e RC105</log>
|
<log>Abilitato il "Player Mobile" anche in ambiente Desktop</log>
|
||||||
<log>Correzione e bugfix all'interno dello stile dell'app</log>
|
<log>Aggiornato script che impedisce il refresh della pagina da Mobile</log>
|
||||||
<log>Correzione e bugfix all'interno dei metatag</log>
|
</logs>
|
||||||
<log>Aggiunto script di disabilitazione pulsante F5 da tastiera</log>
|
</version>
|
||||||
</logs>
|
|
||||||
</version>
|
<version>
|
||||||
|
<number>0.9.26 Alpha</number>
|
||||||
<version>
|
<logs>
|
||||||
<number>0.9.24 Alpha</number>
|
<log>Cambiata l'URL del flusso audio di RDL e RC105</log>
|
||||||
<logs>
|
<log>Correzione e bugfix all'interno dello stile dell'app</log>
|
||||||
<log>Correzione e bugfix player video</log>
|
<log>Correzione e bugfix all'interno dei metatag</log>
|
||||||
</logs>
|
<log>Aggiunto script di disabilitazione pulsante F5 da tastiera</log>
|
||||||
</version>
|
</logs>
|
||||||
|
</version>
|
||||||
<version>
|
|
||||||
<number>0.9.23 Alpha</number>
|
<version>
|
||||||
<logs>
|
<number>0.9.24 Alpha</number>
|
||||||
<log>Aggiunto player video</log>
|
<logs>
|
||||||
<log>Aggiunto collegamenti dei canali video delle emittenti</log>
|
<log>Correzione e bugfix player video</log>
|
||||||
<log>Aggiunto in configurazione gli URL dei canali video delle emittenti</log>
|
</logs>
|
||||||
</logs>
|
</version>
|
||||||
</version>
|
|
||||||
|
<version>
|
||||||
<version>
|
<number>0.9.23 Alpha</number>
|
||||||
<number>0.7.31 Alpha</number>
|
<logs>
|
||||||
<logs>
|
<log>Aggiunto player video</log>
|
||||||
<log>Correzione e bugfix all'interno della configurazione dell'app</log>
|
<log>Aggiunto collegamenti dei canali video delle emittenti</log>
|
||||||
<log>Rimozione dello script per lo "scroll to update page" da smartphone</log>
|
<log>Aggiunto in configurazione gli URL dei canali video delle emittenti</log>
|
||||||
<log>Aggiunti i metodi di contatto in About</log>
|
</logs>
|
||||||
</logs>
|
</version>
|
||||||
</version>
|
|
||||||
|
<version>
|
||||||
|
<number>0.7.31 Alpha</number>
|
||||||
|
<logs>
|
||||||
|
<log>Correzione e bugfix all'interno della configurazione dell'app</log>
|
||||||
|
<log>Rimozione dello script per lo "scroll to update page" da smartphone</log>
|
||||||
|
<log>Aggiunti i metodi di contatto in About</log>
|
||||||
|
</logs>
|
||||||
|
</version>
|
||||||
|
|
||||||
</changelog>
|
</changelog>
|
||||||
118
data/radio.xml
118
data/radio.xml
@@ -1,60 +1,60 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<radio>
|
<radio>
|
||||||
|
|
||||||
<station>
|
<station>
|
||||||
<id>1</id>
|
<id>1</id>
|
||||||
<name>RDL Radio Diffusione Libera</name>
|
<name>RDL Radio Diffusione Libera</name>
|
||||||
<slogan>O Sei Fuori, O Sei Dei Nostri</slogan>
|
<slogan>O Sei Fuori, O Sei Dei Nostri</slogan>
|
||||||
<thematic>false</thematic>
|
<thematic>false</thematic>
|
||||||
<logo>https://i0.wp.com/www.radiodiffusionelibera.com/wp-content/uploads/2017/01/RDL-Facebook.png</logo>
|
<logo>https://i0.wp.com/www.radiodiffusionelibera.com/wp-content/uploads/2017/01/RDL-Facebook.png</logo>
|
||||||
<stream>https://asvradiostream.asvstudios.it/radio/8000/radio.mp3</stream>
|
<stream>https://asvradiostream.asvstudios.it/radio/8000/radio.mp3</stream>
|
||||||
<streamhls>https://srvone.radio.asvhosting.com/hls/rdlradio/live.m3u8</streamhls>
|
<streamhls>https://srvone.radio.asvhosting.com/hls/rdlradio/live.m3u8</streamhls>
|
||||||
<contentplayer>https://www.radiodiffusionelibera.com/contentrpigplay</contentplayer>
|
<contentplayer>https://www.radiodiffusionelibera.com/contentrpigplay</contentplayer>
|
||||||
</station>
|
</station>
|
||||||
|
|
||||||
<station>
|
<station>
|
||||||
<id>2</id>
|
<id>2</id>
|
||||||
<name>Radio Città 105</name>
|
<name>Radio Città 105</name>
|
||||||
<slogan>La Radio Della Tua Città</slogan>
|
<slogan>La Radio Della Tua Città</slogan>
|
||||||
<thematic>false</thematic>
|
<thematic>false</thematic>
|
||||||
<logo>https://www.radiocitta105.it/wp-content/uploads/2020/06/26168468_1590103344416186_7025872599153073152_n-1.png</logo>
|
<logo>https://www.radiocitta105.it/wp-content/uploads/2020/06/26168468_1590103344416186_7025872599153073152_n-1.png</logo>
|
||||||
<stream>https://asvradiostream.asvstudios.it/radio/8020/auto.aac</stream>
|
<stream>https://asvradiostream.asvstudios.it/radio/8020/auto.aac</stream>
|
||||||
<streamhls>https://srvone.radio.asvhosting.com/hls/radiocitta105/live.m3u8</streamhls>
|
<streamhls>https://srvone.radio.asvhosting.com/hls/radiocitta105/live.m3u8</streamhls>
|
||||||
<contentplayer>https://www.radiocitta105.it/contentrpigplay</contentplayer>
|
<contentplayer>https://www.radiocitta105.it/contentrpigplay</contentplayer>
|
||||||
</station>
|
</station>
|
||||||
|
|
||||||
<station>
|
<station>
|
||||||
<id>3</id>
|
<id>3</id>
|
||||||
<name>RadioAI</name>
|
<name>RadioAI</name>
|
||||||
<slogan>Solo musica AI - Powered by RDL </slogan>
|
<slogan>Solo musica AI - Powered by RDL </slogan>
|
||||||
<thematic>true</thematic>
|
<thematic>true</thematic>
|
||||||
<logo>https://srvone.radio.asvhosting.com/static/uploads/radioai/album_art.1763568756.png</logo>
|
<logo>https://srvone.radio.asvhosting.com/static/uploads/radioai/album_art.1763568756.png</logo>
|
||||||
<stream>https://srvone.radio.asvhosting.com/listen/radioai/radio.mp3</stream>
|
<stream>https://srvone.radio.asvhosting.com/listen/radioai/radio.mp3</stream>
|
||||||
<streamhls>https://srvone.radio.asvhosting.com/hls/radioai/live.m3u8</streamhls>
|
<streamhls>https://srvone.radio.asvhosting.com/hls/radioai/live.m3u8</streamhls>
|
||||||
<contentplayer></contentplayer>
|
<contentplayer></contentplayer>
|
||||||
</station>
|
</station>
|
||||||
|
|
||||||
<!-- <station>
|
<!-- <station>
|
||||||
<id>4</id>
|
<id>4</id>
|
||||||
<name>RC105 Christmas - Eboli</name>
|
<name>RC105 Christmas - Eboli</name>
|
||||||
<slogan>La musica di Natale, in giro per Eboli</slogan>
|
<slogan>La musica di Natale, in giro per Eboli</slogan>
|
||||||
<thematic>true</thematic>
|
<thematic>true</thematic>
|
||||||
<logo>https://www.radiocitta105.it/wp-content/uploads/2020/06/christmaseboli.png</logo>
|
<logo>https://www.radiocitta105.it/wp-content/uploads/2020/06/christmaseboli.png</logo>
|
||||||
<stream>https://srvone.radio.asvhosting.com/listen/rc105_christmas/radio.aac</stream>
|
<stream>https://srvone.radio.asvhosting.com/listen/rc105_christmas/radio.aac</stream>
|
||||||
<streamhls>https://srvone.radio.asvhosting.com/hls/rc105_christmas/live.m3u8</streamhls>
|
<streamhls>https://srvone.radio.asvhosting.com/hls/rc105_christmas/live.m3u8</streamhls>
|
||||||
<contentplayer></contentplayer>
|
<contentplayer></contentplayer>
|
||||||
</station> -->
|
</station> -->
|
||||||
|
|
||||||
<station>
|
<station>
|
||||||
<id>5</id>
|
<id>5</id>
|
||||||
<name>Radio People Italy</name>
|
<name>Radio People Italy</name>
|
||||||
<slogan>La radio della Gente</slogan>
|
<slogan>La radio della Gente</slogan>
|
||||||
<thematic>false</thematic>
|
<thematic>false</thematic>
|
||||||
<logo>https://www.rpigroup.it/wp-content/uploads/2020/06/radiopeopleitaly_logo_squared-1.png</logo>
|
<logo>https://www.rpigroup.it/wp-content/uploads/2020/06/radiopeopleitaly_logo_squared-1.png</logo>
|
||||||
<stream></stream>
|
<stream></stream>
|
||||||
<streamhls></streamhls>
|
<streamhls></streamhls>
|
||||||
<contentplayer>https://www.rpigroup.it/radiopeopleitaly_contentrpigroup/</contentplayer>
|
<contentplayer>https://www.rpigroup.it/radiopeopleitaly_contentrpigroup/</contentplayer>
|
||||||
</station>
|
</station>
|
||||||
|
|
||||||
</radio>
|
</radio>
|
||||||
40
data/tv.xml
40
data/tv.xml
@@ -1,21 +1,21 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<tv>
|
<tv>
|
||||||
|
|
||||||
<!-- <station>
|
<!-- <station>
|
||||||
<id>1</id>
|
<id>1</id>
|
||||||
<name>RDL TV</name>
|
<name>RDL TV</name>
|
||||||
<logo>https://i0.wp.com/www.radiodiffusionelibera.com/wp-content/uploads/2017/01/RDL-Facebook.png</logo>
|
<logo>https://i0.wp.com/www.radiodiffusionelibera.com/wp-content/uploads/2017/01/RDL-Facebook.png</logo>
|
||||||
<stream>https://webtv.rpigroup.it/memfs/0a30f923-06b3-461c-8c68-297a66b29485.m3u8</stream>
|
<stream>https://webtv.rpigroup.it/memfs/0a30f923-06b3-461c-8c68-297a66b29485.m3u8</stream>
|
||||||
<poster>https://webtv.rpigroup.it/memfs/0a30f923-06b3-461c-8c68-297a66b29485.jpg</poster>
|
<poster>https://webtv.rpigroup.it/memfs/0a30f923-06b3-461c-8c68-297a66b29485.jpg</poster>
|
||||||
</station> -->
|
</station> -->
|
||||||
|
|
||||||
<station>
|
<station>
|
||||||
<id>1</id>
|
<id>1</id>
|
||||||
<name>Rc105 TV</name>
|
<name>Rc105 TV</name>
|
||||||
<logo>https://www.radiocitta105.it/wp-content/uploads/2020/06/26168468_1590103344416186_7025872599153073152_n-1.png</logo>
|
<logo>https://www.radiocitta105.it/wp-content/uploads/2020/06/26168468_1590103344416186_7025872599153073152_n-1.png</logo>
|
||||||
<stream>https://webtv.rpigroup.it/e1e55a4b-abec-4043-8f08-e2105b48b59b.m3u8</stream>
|
<stream>https://webtv.rpigroup.it/e1e55a4b-abec-4043-8f08-e2105b48b59b.m3u8</stream>
|
||||||
<poster>https://webtv.rpigroup.it/memfs/e1e55a4b-abec-4043-8f08-e2105b48b59b.jpg</poster>
|
<poster>https://webtv.rpigroup.it/memfs/e1e55a4b-abec-4043-8f08-e2105b48b59b.jpg</poster>
|
||||||
</station>
|
</station>
|
||||||
|
|
||||||
</tv>
|
</tv>
|
||||||
@@ -1,88 +1,88 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
<svg
|
<svg
|
||||||
width="254mm"
|
width="254mm"
|
||||||
height="69mm"
|
height="69mm"
|
||||||
viewBox="0 0 254 69"
|
viewBox="0 0 254 69"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
id="svg5"
|
id="svg5"
|
||||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||||
sodipodi:docname="RpiGroup Play.svg"
|
sodipodi:docname="RpiGroup Play.svg"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
<sodipodi:namedview
|
<sodipodi:namedview
|
||||||
id="namedview7"
|
id="namedview7"
|
||||||
pagecolor="#ffffff"
|
pagecolor="#ffffff"
|
||||||
bordercolor="#666666"
|
bordercolor="#666666"
|
||||||
borderopacity="1.0"
|
borderopacity="1.0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:pageopacity="0.0"
|
inkscape:pageopacity="0.0"
|
||||||
inkscape:pagecheckerboard="0"
|
inkscape:pagecheckerboard="0"
|
||||||
inkscape:document-units="mm"
|
inkscape:document-units="mm"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:zoom="1.0381216"
|
inkscape:zoom="1.0381216"
|
||||||
inkscape:cx="481.63913"
|
inkscape:cx="481.63913"
|
||||||
inkscape:cy="276.9425"
|
inkscape:cy="276.9425"
|
||||||
inkscape:window-width="1920"
|
inkscape:window-width="1920"
|
||||||
inkscape:window-height="1009"
|
inkscape:window-height="1009"
|
||||||
inkscape:window-x="-8"
|
inkscape:window-x="-8"
|
||||||
inkscape:window-y="-8"
|
inkscape:window-y="-8"
|
||||||
inkscape:window-maximized="1"
|
inkscape:window-maximized="1"
|
||||||
inkscape:current-layer="layer1" />
|
inkscape:current-layer="layer1" />
|
||||||
<defs
|
<defs
|
||||||
id="defs2">
|
id="defs2">
|
||||||
<rect
|
<rect
|
||||||
x="83.099152"
|
x="83.099152"
|
||||||
y="268.36938"
|
y="268.36938"
|
||||||
width="1046.9131"
|
width="1046.9131"
|
||||||
height="292.20932"
|
height="292.20932"
|
||||||
id="rect2696" />
|
id="rect2696" />
|
||||||
</defs>
|
</defs>
|
||||||
<g
|
<g
|
||||||
inkscape:label="Livello 1"
|
inkscape:label="Livello 1"
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer1">
|
id="layer1">
|
||||||
<g
|
<g
|
||||||
id="g115895"
|
id="g115895"
|
||||||
transform="translate(1.131366,1.3862444)">
|
transform="translate(1.131366,1.3862444)">
|
||||||
<text
|
<text
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
transform="matrix(0.26458333,0,0,0.26458333,-25.410801,-55.802387)"
|
transform="matrix(0.26458333,0,0,0.26458333,-25.410801,-55.802387)"
|
||||||
id="text2694"
|
id="text2694"
|
||||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:192px;line-height:0;font-family:'Malgun Gothic';-inkscape-font-specification:'Malgun Gothic Bold';letter-spacing:-7px;white-space:pre;shape-inside:url(#rect2696);fill:#2a377e;fill-opacity:1;stroke:none"><tspan
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:192px;line-height:0;font-family:'Malgun Gothic';-inkscape-font-specification:'Malgun Gothic Bold';letter-spacing:-7px;white-space:pre;shape-inside:url(#rect2696);fill:#2a377e;fill-opacity:1;stroke:none"><tspan
|
||||||
x="83.099609"
|
x="83.099609"
|
||||||
y="417.31399"
|
y="417.31399"
|
||||||
id="tspan121578"><tspan
|
id="tspan121578"><tspan
|
||||||
style="line-height:1;font-family:'Maiandra GD';-inkscape-font-specification:'Maiandra GD Bold';letter-spacing:-15px"
|
style="line-height:1;font-family:'Maiandra GD';-inkscape-font-specification:'Maiandra GD Bold';letter-spacing:-15px"
|
||||||
id="tspan121568">RPI</tspan><tspan
|
id="tspan121568">RPI</tspan><tspan
|
||||||
dx="-15"
|
dx="-15"
|
||||||
style="font-size:53.3333px;letter-spacing:0px"
|
style="font-size:53.3333px;letter-spacing:0px"
|
||||||
id="tspan121570"> </tspan><tspan
|
id="tspan121570"> </tspan><tspan
|
||||||
dx="10.000004"
|
dx="10.000004"
|
||||||
style="font-weight:600;font-size:133.333px;line-height:1;font-family:'Segoe UI';-inkscape-font-specification:'Segoe UI Semi-Bold';letter-spacing:-10px"
|
style="font-weight:600;font-size:133.333px;line-height:1;font-family:'Segoe UI';-inkscape-font-specification:'Segoe UI Semi-Bold';letter-spacing:-10px"
|
||||||
id="tspan121572">Group</tspan><tspan
|
id="tspan121572">Group</tspan><tspan
|
||||||
style="font-size:148px"
|
style="font-size:148px"
|
||||||
id="tspan121574"> </tspan><tspan
|
id="tspan121574"> </tspan><tspan
|
||||||
style="font-family:'Segoe UI';-inkscape-font-specification:'Segoe UI Bold';letter-spacing:-10px;fill:#f7b835"
|
style="font-family:'Segoe UI';-inkscape-font-specification:'Segoe UI Bold';letter-spacing:-10px;fill:#f7b835"
|
||||||
id="tspan121576">Play</tspan></tspan></text>
|
id="tspan121576">Play</tspan></tspan></text>
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#f7b835;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
style="fill:none;stroke:#f7b835;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
d="m 56.217322,11.650982 c 5.939254,0.41143 9.094873,5.4153 8.904918,10.27467"
|
d="m 56.217322,11.650982 c 5.939254,0.41143 9.094873,5.4153 8.904918,10.27467"
|
||||||
id="path42806"
|
id="path42806"
|
||||||
sodipodi:nodetypes="cc" />
|
sodipodi:nodetypes="cc" />
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#f7b835;stroke-width:2.44688;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
style="fill:none;stroke:#f7b835;stroke-width:2.44688;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
d="m 56.481391,6.7067586 c 8.705065,0.601213 13.330204,7.9132434 13.05179,15.0141214"
|
d="m 56.481391,6.7067586 c 8.705065,0.601213 13.330204,7.9132434 13.05179,15.0141214"
|
||||||
id="path42806-7"
|
id="path42806-7"
|
||||||
sodipodi:nodetypes="cc" />
|
sodipodi:nodetypes="cc" />
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#f7b835;stroke-width:3.15615;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
style="fill:none;stroke:#f7b835;stroke-width:3.15615;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
d="M 56.804607,1.2625936 C 68.853884,2.0652156 75.255859,11.826816 74.870479,21.306526"
|
d="M 56.804607,1.2625936 C 68.853884,2.0652156 75.255859,11.826816 74.870479,21.306526"
|
||||||
id="path42806-7-7"
|
id="path42806-7-7"
|
||||||
sodipodi:nodetypes="cc" />
|
sodipodi:nodetypes="cc" />
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.8 KiB |
@@ -1,88 +1,88 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
<svg
|
<svg
|
||||||
width="254mm"
|
width="254mm"
|
||||||
height="69mm"
|
height="69mm"
|
||||||
viewBox="0 0 254 69"
|
viewBox="0 0 254 69"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
id="svg5"
|
id="svg5"
|
||||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||||
sodipodi:docname="RpiGroup Play WHITE.svg"
|
sodipodi:docname="RpiGroup Play WHITE.svg"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
<sodipodi:namedview
|
<sodipodi:namedview
|
||||||
id="namedview7"
|
id="namedview7"
|
||||||
pagecolor="#ffffff"
|
pagecolor="#ffffff"
|
||||||
bordercolor="#666666"
|
bordercolor="#666666"
|
||||||
borderopacity="1.0"
|
borderopacity="1.0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:pageopacity="0.0"
|
inkscape:pageopacity="0.0"
|
||||||
inkscape:pagecheckerboard="0"
|
inkscape:pagecheckerboard="0"
|
||||||
inkscape:document-units="mm"
|
inkscape:document-units="mm"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:zoom="1.0381216"
|
inkscape:zoom="1.0381216"
|
||||||
inkscape:cx="481.63913"
|
inkscape:cx="481.63913"
|
||||||
inkscape:cy="276.9425"
|
inkscape:cy="276.9425"
|
||||||
inkscape:window-width="1920"
|
inkscape:window-width="1920"
|
||||||
inkscape:window-height="1009"
|
inkscape:window-height="1009"
|
||||||
inkscape:window-x="-8"
|
inkscape:window-x="-8"
|
||||||
inkscape:window-y="-8"
|
inkscape:window-y="-8"
|
||||||
inkscape:window-maximized="1"
|
inkscape:window-maximized="1"
|
||||||
inkscape:current-layer="layer1" />
|
inkscape:current-layer="layer1" />
|
||||||
<defs
|
<defs
|
||||||
id="defs2">
|
id="defs2">
|
||||||
<rect
|
<rect
|
||||||
x="83.099152"
|
x="83.099152"
|
||||||
y="268.36938"
|
y="268.36938"
|
||||||
width="1046.9131"
|
width="1046.9131"
|
||||||
height="292.20932"
|
height="292.20932"
|
||||||
id="rect2696" />
|
id="rect2696" />
|
||||||
</defs>
|
</defs>
|
||||||
<g
|
<g
|
||||||
inkscape:label="Livello 1"
|
inkscape:label="Livello 1"
|
||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
id="layer1">
|
id="layer1">
|
||||||
<g
|
<g
|
||||||
id="g115895"
|
id="g115895"
|
||||||
transform="translate(1.131366,1.3862444)">
|
transform="translate(1.131366,1.3862444)">
|
||||||
<text
|
<text
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
transform="matrix(0.26458333,0,0,0.26458333,-25.410801,-55.802387)"
|
transform="matrix(0.26458333,0,0,0.26458333,-25.410801,-55.802387)"
|
||||||
id="text2694"
|
id="text2694"
|
||||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:192px;line-height:0;font-family:'Malgun Gothic';-inkscape-font-specification:'Malgun Gothic Bold';letter-spacing:-7px;white-space:pre;shape-inside:url(#rect2696);fill:#2a377e;fill-opacity:1;stroke:none"><tspan
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:192px;line-height:0;font-family:'Malgun Gothic';-inkscape-font-specification:'Malgun Gothic Bold';letter-spacing:-7px;white-space:pre;shape-inside:url(#rect2696);fill:#2a377e;fill-opacity:1;stroke:none"><tspan
|
||||||
x="83.099609"
|
x="83.099609"
|
||||||
y="417.31399"
|
y="417.31399"
|
||||||
id="tspan123972"><tspan
|
id="tspan123972"><tspan
|
||||||
style="line-height:1;font-family:'Maiandra GD';-inkscape-font-specification:'Maiandra GD Bold';letter-spacing:-15px;fill:#ffffff"
|
style="line-height:1;font-family:'Maiandra GD';-inkscape-font-specification:'Maiandra GD Bold';letter-spacing:-15px;fill:#ffffff"
|
||||||
id="tspan123962">RPI</tspan><tspan
|
id="tspan123962">RPI</tspan><tspan
|
||||||
dx="-15"
|
dx="-15"
|
||||||
style="font-size:53.3333px;letter-spacing:0px;fill:#ffffff"
|
style="font-size:53.3333px;letter-spacing:0px;fill:#ffffff"
|
||||||
id="tspan123964"> </tspan><tspan
|
id="tspan123964"> </tspan><tspan
|
||||||
dx="10.000004"
|
dx="10.000004"
|
||||||
style="fill:#ffffff"
|
style="fill:#ffffff"
|
||||||
id="tspan123966">Group</tspan><tspan
|
id="tspan123966">Group</tspan><tspan
|
||||||
style="font-size:148px"
|
style="font-size:148px"
|
||||||
id="tspan123968"> </tspan><tspan
|
id="tspan123968"> </tspan><tspan
|
||||||
style="font-family:'Segoe UI';-inkscape-font-specification:'Segoe UI Bold';letter-spacing:-10px;fill:#f7b835"
|
style="font-family:'Segoe UI';-inkscape-font-specification:'Segoe UI Bold';letter-spacing:-10px;fill:#f7b835"
|
||||||
id="tspan123970">Play</tspan></tspan></text>
|
id="tspan123970">Play</tspan></tspan></text>
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#f7b835;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
style="fill:none;stroke:#f7b835;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
d="m 56.217322,11.650982 c 5.939254,0.41143 9.094873,5.4153 8.904918,10.27467"
|
d="m 56.217322,11.650982 c 5.939254,0.41143 9.094873,5.4153 8.904918,10.27467"
|
||||||
id="path42806"
|
id="path42806"
|
||||||
sodipodi:nodetypes="cc" />
|
sodipodi:nodetypes="cc" />
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#f7b835;stroke-width:2.44688;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
style="fill:none;stroke:#f7b835;stroke-width:2.44688;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
d="m 56.481391,6.7067586 c 8.705065,0.601213 13.330204,7.9132434 13.05179,15.0141214"
|
d="m 56.481391,6.7067586 c 8.705065,0.601213 13.330204,7.9132434 13.05179,15.0141214"
|
||||||
id="path42806-7"
|
id="path42806-7"
|
||||||
sodipodi:nodetypes="cc" />
|
sodipodi:nodetypes="cc" />
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#f7b835;stroke-width:3.15615;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
style="fill:none;stroke:#f7b835;stroke-width:3.15615;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
d="M 56.804607,1.2625936 C 68.853884,2.0652156 75.255859,11.826816 74.870479,21.306526"
|
d="M 56.804607,1.2625936 C 68.853884,2.0652156 75.255859,11.826816 74.870479,21.306526"
|
||||||
id="path42806-7-7"
|
id="path42806-7-7"
|
||||||
sodipodi:nodetypes="cc" />
|
sodipodi:nodetypes="cc" />
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.7 KiB |
64
index.php
64
index.php
@@ -1,33 +1,33 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
/*
|
||||||
# RPIGROUP PLAY - WebApp powered by A.S.V. Studios APPS for RPIGroup
|
# RPIGROUP PLAY - WebApp powered by A.S.V. Studios APPS for RPIGroup
|
||||||
# ---------------------------------------------------------------
|
# ---------------------------------------------------------------
|
||||||
# Author: A.S.V. Studios APPS
|
# Author: A.S.V. Studios APPS
|
||||||
# Website: https://app.rpigroup.net
|
# Website: https://app.rpigroup.net
|
||||||
# ---------------------------------------------------------------
|
# ---------------------------------------------------------------
|
||||||
# All Rights is reserved by A.S.V. Studios APPS.
|
# All Rights is reserved by A.S.V. Studios APPS.
|
||||||
#
|
#
|
||||||
# Version app: VEDERE IN CHANGELOG.XML
|
# Version app: VEDERE IN CHANGELOG.XML
|
||||||
*/
|
*/
|
||||||
|
|
||||||
header('Content-Type: text/html; charset=UTF-8');
|
header('Content-Type: text/html; charset=UTF-8');
|
||||||
|
|
||||||
|
|
||||||
# Import config file
|
# Import config file
|
||||||
include_once './config/config.php';
|
include_once './config/config.php';
|
||||||
|
|
||||||
# Import head file
|
# Import head file
|
||||||
include_once './static/head.php';
|
include_once './static/head.php';
|
||||||
|
|
||||||
|
|
||||||
# Load Pages
|
# Load Pages
|
||||||
if(!$show_app):
|
if(!$show_app):
|
||||||
include_once './pages/desktop.php';
|
include_once './pages/desktop.php';
|
||||||
else:
|
else:
|
||||||
include_once './pages/mobile.php';
|
include_once './pages/mobile.php';
|
||||||
endif;
|
endif;
|
||||||
|
|
||||||
|
|
||||||
# Import footer file
|
# Import footer file
|
||||||
include_once './static/footer.php';
|
include_once './static/footer.php';
|
||||||
@@ -1,94 +1,94 @@
|
|||||||
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
||||||
|
|
||||||
<div id="proradio-secondary-header" class="proradio-secondaryhead proradio-primary" style="border-bottom: solid 3px #3849a8;">
|
<div id="proradio-secondary-header" class="proradio-secondaryhead proradio-primary" style="border-bottom: solid 3px #3849a8;">
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.rpigroup-topbar {
|
.rpigroup-topbar {
|
||||||
background: #2a367b;
|
background: #2a367b;
|
||||||
padding: 0 40px;
|
padding: 0 40px;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
height: 55px;
|
height: 55px;
|
||||||
font-size: 0.8rem !important;
|
font-size: 0.8rem !important;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
font-family: 'Poppins';
|
font-family: 'Poppins';
|
||||||
letter-spacing: 0;
|
letter-spacing: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.rpigroup-topbar>a>.logo {
|
.rpigroup-topbar>a>.logo {
|
||||||
margin-right: 20px;
|
margin-right: 20px;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
display: flex;
|
display: flex;
|
||||||
border-right: solid 2px #3746a1;
|
border-right: solid 2px #3746a1;
|
||||||
padding-right: 20px;
|
padding-right: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.rpigroup-topbar>a {
|
.rpigroup-topbar>a {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
.rpigroup-topbar > .nolink {
|
.rpigroup-topbar > .nolink {
|
||||||
margin-right: 15px;
|
margin-right: 15px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
.rpigroup-topbar>a>.link {
|
.rpigroup-topbar>a>.link {
|
||||||
padding: 19px 25px 16px;
|
padding: 19px 25px 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.rpigroup-topbar>a>.link:hover {
|
.rpigroup-topbar>a>.link:hover {
|
||||||
background: #36449c;
|
background: #36449c;
|
||||||
border-bottom: 3px solid #36449c;
|
border-bottom: 3px solid #36449c;
|
||||||
}
|
}
|
||||||
|
|
||||||
.rpigroup-topbar>a>.active {
|
.rpigroup-topbar>a>.active {
|
||||||
background: #00000044;
|
background: #00000044;
|
||||||
border-bottom: 3px solid #f7b932;
|
border-bottom: 3px solid #f7b932;
|
||||||
}
|
}
|
||||||
|
|
||||||
.rpigroup-topbar>a>.active:hover {
|
.rpigroup-topbar>a>.active:hover {
|
||||||
background: #36449c;
|
background: #36449c;
|
||||||
border-bottom: 3px solid #f7b932;
|
border-bottom: 3px solid #f7b932;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<div class="rpigroup-topbar">
|
<div class="rpigroup-topbar">
|
||||||
<a href="https://www.rpigroup.it/" target="_blank">
|
<a href="https://www.rpigroup.it/" target="_blank">
|
||||||
<img src="https://www.rpigroup.it/wp-content/uploads/2025/01/RpiGroup-Play-WHITE-NEW-e1737078263620.png" alt="logoRPIGroup" class="logo">
|
<img src="https://www.rpigroup.it/wp-content/uploads/2025/01/RpiGroup-Play-WHITE-NEW-e1737078263620.png" alt="logoRPIGroup" class="logo">
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<span class="nolink">Vai al sito di:</span>
|
<span class="nolink">Vai al sito di:</span>
|
||||||
<a href="https://www.radiocitta105.it" target="_blank"><span class="link">Radio Città 105</span></a>
|
<a href="https://www.radiocitta105.it" target="_blank"><span class="link">Radio Città 105</span></a>
|
||||||
<a href="https://www.radiodiffusionelibera.com" target="_blank"><span class="link">Radio DiffusioneLibera</span></a>
|
<a href="https://www.radiodiffusionelibera.com" target="_blank"><span class="link">Radio DiffusioneLibera</span></a>
|
||||||
<a href="https://www.co-municare.it" target="_blank"><span class="link">Co-Municare.it</span></a>
|
<a href="https://www.co-municare.it" target="_blank"><span class="link">Co-Municare.it</span></a>
|
||||||
<a href="https://www.ineboli.it" target="_blank"><span class="link">InEboli</span></a>
|
<a href="https://www.ineboli.it" target="_blank"><span class="link">InEboli</span></a>
|
||||||
<a href="https://app.rpigroup.it" target="_blank"><span class="link active">RPIGroup Play</span></a>
|
<a href="https://app.rpigroup.it" target="_blank"><span class="link active">RPIGroup Play</span></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="dbox dbox-extra">
|
<div class="dbox dbox-extra">
|
||||||
<img src="<?=$base_path?>/img/RpiGroupPlayWHITE.png" alt="Logo" style="width: 315px;">
|
<img src="<?=$base_path?>/img/RpiGroupPlayWHITE.png" alt="Logo" style="width: 315px;">
|
||||||
<p class="subtitle"><i>Un nuovo modo di ascoltare musica</i></p>
|
<p class="subtitle"><i>Un nuovo modo di ascoltare musica</i></p>
|
||||||
<hr>
|
<hr>
|
||||||
<?php
|
<?php
|
||||||
switch ($page){
|
switch ($page){
|
||||||
case 'play':
|
case 'play':
|
||||||
if (!empty($param)) {
|
if (!empty($param)) {
|
||||||
$stationId = (int)$param;
|
$stationId = (int)$param;
|
||||||
$station = getRadioStation($stationId);
|
$station = getRadioStation($stationId);
|
||||||
echo 'Ascolta ora <b>' . htmlspecialchars($station->name) . '</b> su RPIGroup Play!';
|
echo 'Ascolta ora <b>' . htmlspecialchars($station->name) . '</b> su RPIGroup Play!';
|
||||||
}else{
|
}else{
|
||||||
echo 'Ascolta ora le tue radio preferite!';
|
echo 'Ascolta ora le tue radio preferite!';
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
echo 'Ascolta le nostre emittenti con la nostra nuova app disegnata per smartphone (e non...)';
|
echo 'Ascolta le nostre emittenti con la nostra nuova app disegnata per smartphone (e non...)';
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<hr>
|
<hr>
|
||||||
<a class="dbtn" id="openAppBtn" href="<?php echo $base_path . '/?app=true&redirect=' . urlencode($page . ($param ? '/' . $param : '')); ?>">ENTRA SU RPIGRPUP PLAY</a>
|
<a class="dbtn" id="openAppBtn" href="<?php echo $base_path . '/?app=true&redirect=' . urlencode($page . ($param ? '/' . $param : '')); ?>">ENTRA SU RPIGRPUP PLAY</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="dfooter">
|
<div class="dfooter">
|
||||||
App powered by A.S.V. Studios APPS • Versione App: <?php echo $version_app; ?>
|
App powered by A.S.V. Studios APPS • Versione App: <?php echo $version_app; ?>
|
||||||
</div>
|
</div>
|
||||||
199
pages/mobile.php
199
pages/mobile.php
@@ -1,98 +1,103 @@
|
|||||||
<div class="header">
|
<?php
|
||||||
<div class="logo-section">
|
// Debug: verifica valori delle variabili (rimuovi dopo aver risolto)
|
||||||
<img src="<?=$base_path?>/img/RpiGroupPlayWHITE.png" alt="Logo">
|
// echo "<!-- DEBUG - Page: " . htmlspecialchars($page) . " | Param: " . htmlspecialchars($param) . " -->\n";
|
||||||
</div>
|
?>
|
||||||
<div class="menu-section">
|
|
||||||
<a href="<?php echo $base_path; ?>/" data-page="home" class="navLink <?php echo $page == 'home' ? 'active' : ''; ?>">Home</a>
|
<div class="header">
|
||||||
<a href="<?php echo $base_path; ?>/radio" data-page="radio" class="navLink <?php echo ($page == 'radio' || $page == 'play') ? 'active' : ''; ?>">Radio</a>
|
<div class="logo-section">
|
||||||
<a href="<?php echo $base_path; ?>/tv" data-page="tv" class="navLink <?php echo ($page == 'tv' || $page == 'playtv') ? 'active' : ''; ?>">TV</a>
|
<img src="<?=$base_path?>/img/RpiGroupPlayWHITE.png" alt="Logo">
|
||||||
<a href="<?php echo $base_path; ?>/page/addradio" data-page="page/addradio" class="navLink <?php echo ($page == 'page' && $param == 'addradio') ? 'active' : ''; ?>">Add Radio</a>
|
</div>
|
||||||
</div>
|
<div class="menu-section">
|
||||||
</div>
|
<a href="<?php echo $base_path; ?>/" data-page="home" class="navLink <?php echo $page == 'home' ? 'active' : ''; ?>">Home</a>
|
||||||
|
<a href="<?php echo $base_path; ?>/radio" data-page="radio" class="navLink <?php echo ($page == 'radio' || $page == 'play') ? 'active' : ''; ?>">Radio</a>
|
||||||
<main class="container" id="content">
|
<a href="<?php echo $base_path; ?>/tv" data-page="tv" class="navLink <?php echo ($page == 'tv' || $page == 'playtv') ? 'active' : ''; ?>">TV</a>
|
||||||
<?php
|
<a href="<?php echo $base_path; ?>/page/addradio" data-page="page/addradio" class="navLink <?php echo ($page == 'page' && $param == 'addradio') ? 'active' : ''; ?>">Add Radio</a>
|
||||||
// Carica il contenuto iniziale in base all'URL
|
</div>
|
||||||
switch ($page) {
|
</div>
|
||||||
case 'home':
|
|
||||||
include './pages/page/home.php';
|
<main class="container" id="content">
|
||||||
break;
|
<?php
|
||||||
case 'radio':
|
// Carica il contenuto iniziale in base all'URL
|
||||||
include './pages/page/radio.php';
|
switch ($page) {
|
||||||
break;
|
case 'home':
|
||||||
case 'tv':
|
include './pages/page/home.php';
|
||||||
include './pages/page/tv.php';
|
break;
|
||||||
break;
|
case 'radio':
|
||||||
case 'play':
|
include './pages/page/radio.php';
|
||||||
if (!empty($param)) {
|
break;
|
||||||
$stationId = (int)$param;
|
case 'tv':
|
||||||
$station = getRadioStation($stationId);
|
include './pages/page/tv.php';
|
||||||
if ($station !== null) {
|
break;
|
||||||
include './pages/page/player.php';
|
case 'play':
|
||||||
} else {
|
if (!empty($param)) {
|
||||||
include './pages/page/404.php';
|
$stationId = (int)$param;
|
||||||
}
|
$station = getRadioStation($stationId);
|
||||||
} else {
|
if ($station !== null) {
|
||||||
// Se non c'è ID, torna alla home
|
include './pages/page/player.php';
|
||||||
include './pages/page/home.php';
|
} else {
|
||||||
}
|
include './pages/page/404.php';
|
||||||
break;
|
}
|
||||||
case 'playtv':
|
} else {
|
||||||
if (!empty($param)) {
|
// Se non c'è ID, torna alla home
|
||||||
$stationId = (int)$param;
|
include './pages/page/home.php';
|
||||||
$station = getTVStation($stationId);
|
}
|
||||||
if ($station !== null) {
|
break;
|
||||||
include './pages/page/player_tv.php';
|
case 'playtv':
|
||||||
} else {
|
if (!empty($param)) {
|
||||||
include './pages/page/404.php';
|
$stationId = (int)$param;
|
||||||
}
|
$station = getTVStation($stationId);
|
||||||
} else {
|
if ($station !== null) {
|
||||||
// Se non c'è ID, torna alla home
|
include './pages/page/player_tv.php';
|
||||||
include './pages/page/home.php';
|
} else {
|
||||||
}
|
include './pages/page/404.php';
|
||||||
break;
|
}
|
||||||
case 'page':
|
} else {
|
||||||
if (!empty($param)) {
|
// Se non c'è ID, torna alla home
|
||||||
switch ($param) {
|
include './pages/page/home.php';
|
||||||
case 'about':
|
}
|
||||||
include './pages/page/about.php';
|
break;
|
||||||
break;
|
case 'page':
|
||||||
case 'copyright':
|
if (!empty($param)) {
|
||||||
include './pages/page/copyright.php';
|
switch ($param) {
|
||||||
break;
|
case 'about':
|
||||||
case 'addradio':
|
include './pages/page/about.php';
|
||||||
include './pages/page/addradio.php';
|
break;
|
||||||
break;
|
case 'copyright':
|
||||||
case 'contact':
|
include './pages/page/copyright.php';
|
||||||
include './pages/page/contact.php';
|
break;
|
||||||
break;
|
case 'addradio':
|
||||||
case 'termini-condizioni':
|
include './pages/page/addradio.php';
|
||||||
include './pages/page/terminicondizioni.php';
|
break;
|
||||||
break;
|
case 'contact':
|
||||||
case 'policy-privacy':
|
include './pages/page/contact.php';
|
||||||
include './pages/page/policyprivacy.php';
|
break;
|
||||||
break;
|
case 'termini-condizioni':
|
||||||
case 'changelog':
|
include './pages/page/terminicondizioni.php';
|
||||||
include './pages/page/changelog.php';
|
break;
|
||||||
break;
|
case 'policy-privacy':
|
||||||
default:
|
include './pages/page/policyprivacy.php';
|
||||||
include './pages/page/404.php';
|
break;
|
||||||
}
|
case 'changelog':
|
||||||
} else {
|
include './pages/page/changelog.php';
|
||||||
include './pages/page/404.php';
|
break;
|
||||||
}
|
default:
|
||||||
break;
|
include './pages/page/404.php';
|
||||||
default:
|
}
|
||||||
include './pages/page/home.php';
|
} else {
|
||||||
}
|
include './pages/page/404.php';
|
||||||
?>
|
}
|
||||||
</main>
|
break;
|
||||||
|
default:
|
||||||
<div class="footer">
|
include './pages/page/home.php';
|
||||||
<div class="menu-section">
|
}
|
||||||
<a href="<?php echo $base_path; ?>/page/termini-condizioni" data-page="page/termini-condizioni" class="navLink">Termini e Condizioni</a> •
|
?>
|
||||||
<a href="<?php echo $base_path; ?>/page/policy-privacy" data-page="page/policy-privacy" class="navLink">Policy Privacy</a> •
|
</main>
|
||||||
<a href="<?php echo $base_path; ?>/page/changelog" data-page="page/changelog" class="navLink">Changelog</a>
|
|
||||||
</div>
|
<div class="footer">
|
||||||
<div class="copyright-section" <?php if($is_mobile){ ?> style="padding: 10px 0 25px;" <? } ?>>© 2025 RPIGroup • Versione: <?php echo $version_app; ?></div>
|
<div class="menu-section">
|
||||||
|
<a href="<?php echo $base_path; ?>/page/termini-condizioni" data-page="page/termini-condizioni" class="navLink">Termini e Condizioni</a> •
|
||||||
|
<a href="<?php echo $base_path; ?>/page/policy-privacy" data-page="page/policy-privacy" class="navLink">Policy Privacy</a> •
|
||||||
|
<a href="<?php echo $base_path; ?>/page/changelog" data-page="page/changelog" class="navLink">Changelog</a>
|
||||||
|
</div>
|
||||||
|
<div class="copyright-section" <?php if($is_mobile){ ?> style="padding: 10px 0 25px;" <?php } ?>>© 2025 RPIGroup • Versione: <?php echo $version_app; ?></div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
||||||
|
|
||||||
<h1 class="titlePage">Pagina non trovata</h1>
|
<h1 class="titlePage">Pagina non trovata</h1>
|
||||||
|
|
||||||
<p class="text-center">La pagina che hai provato a cercare non esiste o non è disponibile.</p>
|
<p class="text-center">La pagina che hai provato a cercare non esiste o non è disponibile.</p>
|
||||||
|
|
||||||
<a href="<?php echo $base_path; ?>/home" data-page="home" class="linkBox mt-3">
|
<a href="<?php echo $base_path; ?>/home" data-page="home" class="linkBox mt-3">
|
||||||
<div class="clickBox mt-5 mb-4">
|
<div class="clickBox mt-5 mb-4">
|
||||||
<svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12l4-4m-4 4 4 4"/></svg>
|
<svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12l4-4m-4 4 4 4"/></svg>
|
||||||
Torna alla Home
|
Torna alla Home
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
@@ -1,16 +1,16 @@
|
|||||||
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
||||||
|
|
||||||
<h1 class="titlePage">Come funziona RPIGroup Play?</h1>
|
<h1 class="titlePage">Come funziona RPIGroup Play?</h1>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
<div class="tec">
|
<div class="tec">
|
||||||
<p>La pagina è in fase di realizzazione... Attendi il prossimo aggiornamento per leggere le nostre istruzioni d'uso!</p>
|
<p>La pagina è in fase di realizzazione... Attendi il prossimo aggiornamento per leggere le nostre istruzioni d'uso!</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a href="<?php echo $base_path; ?>/home" data-page="home" class="linkBox mt-3">
|
<a href="<?php echo $base_path; ?>/home" data-page="home" class="linkBox mt-3">
|
||||||
<div class="clickBox mt-5 mb-4">
|
<div class="clickBox mt-5 mb-4">
|
||||||
<svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12l4-4m-4 4 4 4"/></svg>
|
<svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12l4-4m-4 4 4 4"/></svg>
|
||||||
Torna alla Home
|
Torna alla Home
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
@@ -1,17 +1,17 @@
|
|||||||
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
||||||
|
|
||||||
<h1 class="titlePage">Aggiungi la tua radio</h1>
|
<h1 class="titlePage">Aggiungi la tua radio</h1>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
<div class="tec">
|
<div class="tec">
|
||||||
<p>Al momento, il modulo è temporaneamente chiuso</p>
|
<p>Al momento, il modulo è temporaneamente chiuso</p>
|
||||||
<p>Ti invitiamo a controllare più tardi oppure, attendi l'uscita di un prossimo aggiornamento!</p>
|
<p>Ti invitiamo a controllare più tardi oppure, attendi l'uscita di un prossimo aggiornamento!</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a href="<?php echo $base_path; ?>/home" data-page="home" class="linkBox mt-3">
|
<a href="<?php echo $base_path; ?>/home" data-page="home" class="linkBox mt-3">
|
||||||
<div class="clickBox mt-5 mb-4">
|
<div class="clickBox mt-5 mb-4">
|
||||||
<svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12l4-4m-4 4 4 4"/></svg>
|
<svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12l4-4m-4 4 4 4"/></svg>
|
||||||
Torna alla Home
|
Torna alla Home
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
@@ -1,37 +1,37 @@
|
|||||||
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
||||||
|
|
||||||
<h1 class="titlePage">Changelog</h1>
|
<h1 class="titlePage">Changelog</h1>
|
||||||
<p class="subtitlePage">Visualizza tutti gli aggiornamenti ricevuti</p>
|
<p class="subtitlePage">Visualizza tutti gli aggiornamenti ricevuti</p>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
// Verifica che $changelog sia stato caricato correttamente in getStation.inc.php
|
// Verifica che $changelog sia stato caricato correttamente in getStation.inc.php
|
||||||
if (isset($changelog) && $changelog !== false && isset($changelog->version)) {
|
if (isset($changelog) && $changelog !== false && isset($changelog->version)) {
|
||||||
// Itera attraverso le versioni
|
// Itera attraverso le versioni
|
||||||
foreach($changelog->version as $version) {
|
foreach($changelog->version as $version) {
|
||||||
echo "<hr>";
|
echo "<hr>";
|
||||||
echo "<p class=\"changelogTitle\">Versione " . htmlspecialchars((string)$version->number) . "</p>";
|
echo "<p class=\"changelogTitle\">Versione " . htmlspecialchars((string)$version->number) . "</p>";
|
||||||
|
|
||||||
// Verifica che esistano i log prima di iterare
|
// Verifica che esistano i log prima di iterare
|
||||||
if (isset($version->logs) && isset($version->logs->log)) {
|
if (isset($version->logs) && isset($version->logs->log)) {
|
||||||
foreach($version->logs->log as $log_print) {
|
foreach($version->logs->log as $log_print) {
|
||||||
echo "<p class=\"changelogList\">• " . htmlspecialchars((string)$log_print) . "</p>";
|
echo "<p class=\"changelogList\">• " . htmlspecialchars((string)$log_print) . "</p>";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
echo "<p class=\"changelogList\" style=\"font-style: italic; color: #999;\">Nessun dettaglio disponibile per questa versione.</p>";
|
echo "<p class=\"changelogList\" style=\"font-style: italic; color: #999;\">Nessun dettaglio disponibile per questa versione.</p>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Messaggio di errore se il changelog non è disponibile
|
// Messaggio di errore se il changelog non è disponibile
|
||||||
echo "<hr>";
|
echo "<hr>";
|
||||||
echo "<div style=\"padding: 20px; background: #fff3cd; border: 1px solid #ffc107; border-radius: 5px; margin: 20px 0;\">";
|
echo "<div style=\"padding: 20px; background: #fff3cd; border: 1px solid #ffc107; border-radius: 5px; margin: 20px 0;\">";
|
||||||
echo "<p style=\"margin: 0; color: #856404;\"><strong>Attenzione:</strong> Impossibile caricare il changelog. Il file potrebbe essere mancante o corrotto.</p>";
|
echo "<p style=\"margin: 0; color: #856404;\"><strong>Attenzione:</strong> Impossibile caricare il changelog. Il file potrebbe essere mancante o corrotto.</p>";
|
||||||
echo "</div>";
|
echo "</div>";
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<a href="<?php echo $base_path; ?>/home" data-page="home" class="linkBox mt-3">
|
<a href="<?php echo $base_path; ?>/home" data-page="home" class="linkBox mt-3">
|
||||||
<div class="clickBox mt-5 mb-4">
|
<div class="clickBox mt-5 mb-4">
|
||||||
<svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12l4-4m-4 4 4 4"/></svg>
|
<svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12l4-4m-4 4 4 4"/></svg>
|
||||||
Torna alla Home
|
Torna alla Home
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
@@ -1,55 +1,55 @@
|
|||||||
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
||||||
|
|
||||||
<!-- <div class="content-page">
|
<!-- <div class="content-page">
|
||||||
<h2>Contatti</h2>
|
<h2>Contatti</h2>
|
||||||
<div class="content-box">
|
<div class="content-box">
|
||||||
<p>Hai domande, suggerimenti o riscontri problemi con l'applicazione? Contattaci!</p>
|
<p>Hai domande, suggerimenti o riscontri problemi con l'applicazione? Contattaci!</p>
|
||||||
|
|
||||||
<form class="contact-form" id="contactForm">
|
<form class="contact-form" id="contactForm">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="name">Nome:</label>
|
<label for="name">Nome:</label>
|
||||||
<input type="text" id="name" name="name" required>
|
<input type="text" id="name" name="name" required>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="email">Email:</label>
|
<label for="email">Email:</label>
|
||||||
<input type="email" id="email" name="email" required>
|
<input type="email" id="email" name="email" required>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="subject">Oggetto:</label>
|
<label for="subject">Oggetto:</label>
|
||||||
<input type="text" id="subject" name="subject" required>
|
<input type="text" id="subject" name="subject" required>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="message">Messaggio:</label>
|
<label for="message">Messaggio:</label>
|
||||||
<textarea id="message" name="message" rows="5" required></textarea>
|
<textarea id="message" name="message" rows="5" required></textarea>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button type="submit" class="submit-btn">Invia messaggio</button>
|
<button type="submit" class="submit-btn">Invia messaggio</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<div id="formResponse" class="form-response" style="display: none;"></div>
|
<div id="formResponse" class="form-response" style="display: none;"></div>
|
||||||
|
|
||||||
<div class="contact-info">
|
<div class="contact-info">
|
||||||
<h3>Informazioni di contatto</h3>
|
<h3>Informazioni di contatto</h3>
|
||||||
<p>Email: info@tuoaggregatore.it</p>
|
<p>Email: info@tuoaggregatore.it</p>
|
||||||
<p>Telefono: +39 123 456 7890</p>
|
<p>Telefono: +39 123 456 7890</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div> -->
|
</div> -->
|
||||||
|
|
||||||
<h1 class="titlePage">Contatti</h1>
|
<h1 class="titlePage">Contatti</h1>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
<div class="tec">
|
<div class="tec">
|
||||||
<p>La pagina è in fase di realizzazione... Attendi il prossimo aggiornamento per leggere le nostre istruzioni d'uso!</p>
|
<p>La pagina è in fase di realizzazione... Attendi il prossimo aggiornamento per leggere le nostre istruzioni d'uso!</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a href="<?php echo $base_path; ?>/home" data-page="home" class="linkBox mt-3">
|
<a href="<?php echo $base_path; ?>/home" data-page="home" class="linkBox mt-3">
|
||||||
<div class="clickBox mt-5 mb-4">
|
<div class="clickBox mt-5 mb-4">
|
||||||
<svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12l4-4m-4 4 4 4"/></svg>
|
<svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12l4-4m-4 4 4 4"/></svg>
|
||||||
Torna alla Home
|
Torna alla Home
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
@@ -1,20 +1,20 @@
|
|||||||
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
||||||
|
|
||||||
<h1 class="titlePage">Diritti d'Autore</h1>
|
<h1 class="titlePage">Diritti d'Autore</h1>
|
||||||
<p class="subtitlePage">Come funziona e chi lo gestisce</p>
|
<p class="subtitlePage">Come funziona e chi lo gestisce</p>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
<div class="tec">
|
<div class="tec">
|
||||||
<p>RPIGroup è un player audio e video, che aggrega i flussi audio in streaming di emittenti iscritte all'interno del gruppo RPIGroup.</p>
|
<p>RPIGroup è un player audio e video, che aggrega i flussi audio in streaming di emittenti iscritte all'interno del gruppo RPIGroup.</p>
|
||||||
<p>I flussi presenti all'interno della seguente app non provvengono direttamente da quest'ultima, ma dal sito web dell'emittente stessa.</p>
|
<p>I flussi presenti all'interno della seguente app non provvengono direttamente da quest'ultima, ma dal sito web dell'emittente stessa.</p>
|
||||||
<p>L'applicazione funge come semplice ripetitore audio. Per tanto, i diritti musicali sono a carico dell'emittente presente nell'app, inserendo all'interno della pagina dedicata alle informazioni sulla trasmissione, i numeri licenze dei diritti d'autore e discografici dei brani trasmessi.</p>
|
<p>L'applicazione funge come semplice ripetitore audio. Per tanto, i diritti musicali sono a carico dell'emittente presente nell'app, inserendo all'interno della pagina dedicata alle informazioni sulla trasmissione, i numeri licenze dei diritti d'autore e discografici dei brani trasmessi.</p>
|
||||||
<p>Pertanto, se si ritiene che una delle emittenti non ha le licenze per la diffusione dei brani, invitiamo al segnalante di inoltrare una mail ad <a href="mailto:abuse@asvhosting.com">abuse@asvhosting.com</a> per la rimozione definitiva dell'emittente.</p>
|
<p>Pertanto, se si ritiene che una delle emittenti non ha le licenze per la diffusione dei brani, invitiamo al segnalante di inoltrare una mail ad <a href="mailto:abuse@asvhosting.com">abuse@asvhosting.com</a> per la rimozione definitiva dell'emittente.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a href="<?php echo $base_path; ?>/home" data-page="home" class="linkBox mt-3">
|
<a href="<?php echo $base_path; ?>/home" data-page="home" class="linkBox mt-3">
|
||||||
<div class="clickBox mt-5 mb-4">
|
<div class="clickBox mt-5 mb-4">
|
||||||
<svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12l4-4m-4 4 4 4"/></svg>
|
<svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12l4-4m-4 4 4 4"/></svg>
|
||||||
Torna alla Home
|
Torna alla Home
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
@@ -1,61 +1,61 @@
|
|||||||
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
||||||
|
|
||||||
<h1 class="titlePage">Benvenuto</h1>
|
<h1 class="titlePage">Benvenuto</h1>
|
||||||
<p class="subtitlePage">nella nuova RPIGroup Play</p>
|
<p class="subtitlePage">nella nuova RPIGroup Play</p>
|
||||||
|
|
||||||
<div class="row g-2 mb-4">
|
<div class="row g-2 mb-4">
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
<a href="<?php echo $base_path; ?>/radio" data-page="radio" class="linkBox">
|
<a href="<?php echo $base_path; ?>/radio" data-page="radio" class="linkBox">
|
||||||
<div class="clickBox Squared">
|
<div class="clickBox Squared">
|
||||||
<img src="<?=$base_path?>/img/radio.png" alt="Radio">
|
<img src="<?=$base_path?>/img/radio.png" alt="Radio">
|
||||||
<p class="m-0 p-0">Radio</p>
|
<p class="m-0 p-0">Radio</p>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
<a href="<?php echo $base_path; ?>/tv" data-page="tv" class="linkBox">
|
<a href="<?php echo $base_path; ?>/tv" data-page="tv" class="linkBox">
|
||||||
<div class="clickBox Squared">
|
<div class="clickBox Squared">
|
||||||
<img src="<?=$base_path?>/img/tv.png" alt="tv">
|
<img src="<?=$base_path?>/img/tv.png" alt="tv">
|
||||||
<p class="m-0 p-0">TV</p>
|
<p class="m-0 p-0">TV</p>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row g-2 mb-4">
|
<div class="row g-2 mb-4">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<a href="https://www.co-municare.it" target="_blank" class="">
|
<a href="https://www.co-municare.it" target="_blank" class="">
|
||||||
<div class="clickBox p-2">
|
<div class="clickBox p-2">
|
||||||
<img src="https://www.co-municare.it/wp-content/uploads/2025/01/newlogo_co-municare-it.png" alt="logo Co-Municare.it">
|
<img src="https://www.co-municare.it/wp-content/uploads/2025/01/newlogo_co-municare-it.png" alt="logo Co-Municare.it">
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<a href="<?php echo $base_path; ?>/page/addradio" data-page="page/addradio" class="linkBox">
|
<a href="<?php echo $base_path; ?>/page/addradio" data-page="page/addradio" class="linkBox">
|
||||||
<div class="clickBox p-2">
|
<div class="clickBox p-2">
|
||||||
Aggiungi la tua radio
|
Aggiungi la tua radio
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-4">
|
<div class="col-4">
|
||||||
<a href="<?php echo $base_path; ?>/page/about" data-page="page/about" class="linkBox">
|
<a href="<?php echo $base_path; ?>/page/about" data-page="page/about" class="linkBox">
|
||||||
<div class="clickBox">
|
<div class="clickBox">
|
||||||
Come funziona?
|
Come funziona?
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-4">
|
<div class="col-4">
|
||||||
<a href="<?php echo $base_path; ?>/page/copyright" data-page="page/copyright" class="linkBox">
|
<a href="<?php echo $base_path; ?>/page/copyright" data-page="page/copyright" class="linkBox">
|
||||||
<div class="clickBox">
|
<div class="clickBox">
|
||||||
Diritti<br>d'Autore
|
Diritti<br>d'Autore
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-4">
|
<div class="col-4">
|
||||||
<a href="<?php echo $base_path; ?>/page/contact" data-page="page/contact" class="linkBox">
|
<a href="<?php echo $base_path; ?>/page/contact" data-page="page/contact" class="linkBox">
|
||||||
<div class="clickBox">
|
<div class="clickBox">
|
||||||
I nostri<br>Contatti
|
I nostri<br>Contatti
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1,62 +1,62 @@
|
|||||||
<?php
|
<?php
|
||||||
if($station->contentplayer == ""){
|
if($station->contentplayer == ""){
|
||||||
?>
|
?>
|
||||||
<style>
|
<style>
|
||||||
.staticpage{
|
.staticpage{
|
||||||
background: linear-gradient(45deg, #3849a8, #f7b835);
|
background: linear-gradient(45deg, #3849a8, #f7b835);
|
||||||
padding: 22px 35px 10px 35px;
|
padding: 22px 35px 10px 35px;
|
||||||
display: block;
|
display: block;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
height: calc(100vh - 312px);
|
height: calc(100vh - 312px);
|
||||||
color: white;
|
color: white;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
max-width: 450px;
|
max-width: 450px;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
transform: translateX(-50%);
|
transform: translateX(-50%);
|
||||||
}
|
}
|
||||||
.staticpage > .logo{
|
.staticpage > .logo{
|
||||||
width: 200px;
|
width: 200px;
|
||||||
border-radius: 15px;
|
border-radius: 15px;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
.staticpage > p{
|
.staticpage > p{
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
.staticpage > p.titleRadio{
|
.staticpage > p.titleRadio{
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<div class="staticpage">
|
<div class="staticpage">
|
||||||
<img src="<?php echo $station->logo; ?>" class="logo" alt="logo radio">
|
<img src="<?php echo $station->logo; ?>" class="logo" alt="logo radio">
|
||||||
<p class="titleRadio"><?php echo $station->name; ?></p>
|
<p class="titleRadio"><?php echo $station->name; ?></p>
|
||||||
<p class="subtitleRadio"><?php echo $station->slogan; ?></p>
|
<p class="subtitleRadio"><?php echo $station->slogan; ?></p>
|
||||||
</div>
|
</div>
|
||||||
<?php
|
<?php
|
||||||
}else{
|
}else{
|
||||||
?>
|
?>
|
||||||
<iframe src="<?php echo $station->contentplayer; ?>" class="contentplayer" frameborder="0"></iframe>
|
<iframe src="<?php echo $station->contentplayer; ?>" class="contentplayer" frameborder="0"></iframe>
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<div class="footer_player" <?php if($is_mobile){ ?> style="bottom: 84px;" <? } ?>>
|
<div class="footer_player" <?php if($is_mobile){ ?> style="bottom: 84px;" <? } ?>>
|
||||||
<div class="row align-items-center">
|
<div class="row align-items-center">
|
||||||
<div class="col-2" style="width: 70px;">
|
<div class="col-2" style="width: 70px;">
|
||||||
<img src="<?php echo $station->logo; ?>" alt="<?php echo $station->name; ?>" style="width: 60px;">
|
<img src="<?php echo $station->logo; ?>" alt="<?php echo $station->name; ?>" style="width: 60px;">
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<div id="artist" style="font-weight: 700; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden;"><?php echo $station->name; ?></div>
|
<div id="artist" style="font-weight: 700; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden;"><?php echo $station->name; ?></div>
|
||||||
<div id="playerStatus" style="text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical ;overflow: hidden;"><?php echo $station->slogan; ?></div>
|
<div id="playerStatus" style="text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical ;overflow: hidden;"><?php echo $station->slogan; ?></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-2" style="text-align: center; margin-top: 1px; margin-right: 5px; width: 67px;">
|
<div class="col-2" style="text-align: center; margin-top: 1px; margin-right: 5px; width: 67px;">
|
||||||
<button id="playPauseBtn" data-stream-hls="<?php echo $station->streamhls; ?>" data-stream-fallback="<?php echo $station->stream; ?>" data-station-name="<?php echo htmlspecialchars($station->name); ?>" data-station-logo="<?php echo $station->logo; ?>" data-station-slogan="<?php echo htmlspecialchars($station->slogan); ?>">
|
<button id="playPauseBtn" data-stream-hls="<?php echo $station->streamhls; ?>" data-stream-fallback="<?php echo $station->stream; ?>" data-station-name="<?php echo htmlspecialchars($station->name); ?>" data-station-logo="<?php echo $station->logo; ?>" data-station-slogan="<?php echo htmlspecialchars($station->slogan); ?>">
|
||||||
<i class="material-icons play-icon" id="play-pause" style="font-size: 35px; border-radius: 10px; border: 2px solid #ffffff; padding: 4px 5px 4px 4px; margin-top: -2px; background: #f7b835; color: #2a377e;">play_arrow</i>
|
<i class="material-icons play-icon" id="play-pause" style="font-size: 35px; border-radius: 10px; border: 2px solid #ffffff; padding: 4px 5px 4px 4px; margin-top: -2px; background: #f7b835; color: #2a377e;">play_arrow</i>
|
||||||
<i class="material-icons pause-icon" id="play-pause" style="display:none; font-size: 35px; border-radius: 10px; border: 2px solid #ffffff; padding: 4px 5px 4px 4px; margin-top: -2px; background: #f7b835; color: #2a377e;">pause</i>
|
<i class="material-icons pause-icon" id="play-pause" style="display:none; font-size: 35px; border-radius: 10px; border: 2px solid #ffffff; padding: 4px 5px 4px 4px; margin-top: -2px; background: #f7b835; color: #2a377e;">pause</i>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<audio id="hlsAudioPlayer" preload="none"></audio>
|
<audio id="hlsAudioPlayer" preload="none"></audio>
|
||||||
@@ -1,60 +1,60 @@
|
|||||||
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
||||||
|
|
||||||
<h1 class="titlePage">Policy Privacy</h1>
|
<h1 class="titlePage">Policy Privacy</h1>
|
||||||
<p class="subtitlePage">Ultimo aggiornamento: 17/11/2025</p>
|
<p class="subtitlePage">Ultimo aggiornamento: 17/11/2025</p>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
<div class="tec">
|
<div class="tec">
|
||||||
<p><b>Titolare del Trattamento</b><br>Il Titolare del trattamento dei dati personali è A.S.V. Studios APPS, con sede legale in Italia, contattabile all’indirizzo e-mail <a href="mailto:pp.app@rpigroup.net">pp.app@rpigroup.net</a>. Per ulteriori informazioni o per esercitare i diritti previsti dalla normativa sulla protezione dei dati personali, è possibile inviare una richiesta scritta all’indirizzo sopra indicato.</p>
|
<p><b>Titolare del Trattamento</b><br>Il Titolare del trattamento dei dati personali è A.S.V. Studios APPS, con sede legale in Italia, contattabile all’indirizzo e-mail <a href="mailto:pp.app@rpigroup.net">pp.app@rpigroup.net</a>. Per ulteriori informazioni o per esercitare i diritti previsti dalla normativa sulla protezione dei dati personali, è possibile inviare una richiesta scritta all’indirizzo sopra indicato.</p>
|
||||||
<p>
|
<p>
|
||||||
<b>Dati Raccolti</b><br>
|
<b>Dati Raccolti</b><br>
|
||||||
Raccogliamo i seguenti dati personali, alcuni dei quali forniti volontariamente dall’Utente e altri raccolti automaticamente durante l’utilizzo dei moduli di contatto all'interno dell'Applicazione:<br>
|
Raccogliamo i seguenti dati personali, alcuni dei quali forniti volontariamente dall’Utente e altri raccolti automaticamente durante l’utilizzo dei moduli di contatto all'interno dell'Applicazione:<br>
|
||||||
• Dati di contatto (ad esempio: nome, indirizzo e-mail) – forniti direttamente dall’Utente al momento della scritta dei moduli di contatto
|
• Dati di contatto (ad esempio: nome, indirizzo e-mail) – forniti direttamente dall’Utente al momento della scritta dei moduli di contatto
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<b>Finalità del Trattamento</b><br>
|
<b>Finalità del Trattamento</b><br>
|
||||||
I dati personali sono trattati per le seguenti finalità:<br>
|
I dati personali sono trattati per le seguenti finalità:<br>
|
||||||
• Risposta alla e-mail tramite modulo di contatto<br>
|
• Risposta alla e-mail tramite modulo di contatto<br>
|
||||||
Gli Utenti possono esercitare in qualsiasi momento i diritti previsti dalla normativa vigente sulla protezione dei dati personali, come l’accesso, la rettifica o la cancellazione dei propri dati.
|
Gli Utenti possono esercitare in qualsiasi momento i diritti previsti dalla normativa vigente sulla protezione dei dati personali, come l’accesso, la rettifica o la cancellazione dei propri dati.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<b>Base Giuridica del Trattamento</b><br>
|
<b>Base Giuridica del Trattamento</b><br>
|
||||||
Il trattamento dei dati personali si basa su diverse basi giuridiche, che vengono applicate nella pratica come segue:<br>
|
Il trattamento dei dati personali si basa su diverse basi giuridiche, che vengono applicate nella pratica come segue:<br>
|
||||||
• Esecuzione di un contratto: trattiamo i dati personali per fornire il servizio richiesto dall’utente, ad esempio offrire assistenza sull'uso dell'Applicativo o inserimento della propria emittente all'interno dell'Applicativo.<br>
|
• Esecuzione di un contratto: trattiamo i dati personali per fornire il servizio richiesto dall’utente, ad esempio offrire assistenza sull'uso dell'Applicativo o inserimento della propria emittente all'interno dell'Applicativo.<br>
|
||||||
• Rispetto delle leggi: trattiamo i dati quando siamo obbligati dalla legge, ad esempio per conservare alcune informazioni per finalità fiscali o per rispondere a richieste delle autorità.
|
• Rispetto delle leggi: trattiamo i dati quando siamo obbligati dalla legge, ad esempio per conservare alcune informazioni per finalità fiscali o per rispondere a richieste delle autorità.
|
||||||
</p>
|
</p>
|
||||||
<p><b>Modalità di Trattamento e Conservazione</b><br>I dati vengono archiviati tramite applicativi proprietari di posta elettronica. I dati sono conservati per il tempo strettamente necessario al raggiungimento delle finalità indicate, salvo diversi obblighi di legge.</p>
|
<p><b>Modalità di Trattamento e Conservazione</b><br>I dati vengono archiviati tramite applicativi proprietari di posta elettronica. I dati sono conservati per il tempo strettamente necessario al raggiungimento delle finalità indicate, salvo diversi obblighi di legge.</p>
|
||||||
<p>
|
<p>
|
||||||
<b>Comunicazione dei Dati a Terzi</b><br>
|
<b>Comunicazione dei Dati a Terzi</b><br>
|
||||||
I dati personali non verranno diffusi, ma potranno essere comunicati a soggetti terzi specifici, quali:<br>
|
I dati personali non verranno diffusi, ma potranno essere comunicati a soggetti terzi specifici, quali:<br>
|
||||||
• Fornitori di servizi di Hosting, come aziende che gestiscono infrastrutture cloud, incaricate della manutenzione e gestione dei server;<br>
|
• Fornitori di servizi di Hosting, come aziende che gestiscono infrastrutture cloud, incaricate della manutenzione e gestione dei server;<br>
|
||||||
• Partner tecnologici, ad esempio fornitori di software, servizi informatici o piattaforme di pagamento, necessari per l’erogazione di particolari funzionalità;<br>
|
• Partner tecnologici, ad esempio fornitori di software, servizi informatici o piattaforme di pagamento, necessari per l’erogazione di particolari funzionalità;<br>
|
||||||
• Autorità giudiziarie o amministrative, in caso di richieste formali o obblighi di legge.<br>
|
• Autorità giudiziarie o amministrative, in caso di richieste formali o obblighi di legge.<br>
|
||||||
La comunicazione dei dati ai soggetti terzi avverrà esclusivamente per le finalità indicate e nel rispetto delle misure di sicurezza previste dalla normativa vigente sulla protezione dei dati personali, garantendo così la tutela della privacy dell’utente.
|
La comunicazione dei dati ai soggetti terzi avverrà esclusivamente per le finalità indicate e nel rispetto delle misure di sicurezza previste dalla normativa vigente sulla protezione dei dati personali, garantendo così la tutela della privacy dell’utente.
|
||||||
</p>
|
</p>
|
||||||
<p><b>Trattamento dei dati Extra-UE</b><br>Secondo il Regolamento Generale sulla Protezione dei Dati (GDPR), il trattamento dei dati personali non può avvenire in paesi extra-UE senza adeguate garanzie. Il trattamento dei dati non può avvenire in paesi extra-UE, salvo il rispetto delle condizioni previste dalla normativa vigente (ad esempio, decisioni di adeguatezza o garanzie appropriate ai sensi del GDPR).</p>
|
<p><b>Trattamento dei dati Extra-UE</b><br>Secondo il Regolamento Generale sulla Protezione dei Dati (GDPR), il trattamento dei dati personali non può avvenire in paesi extra-UE senza adeguate garanzie. Il trattamento dei dati non può avvenire in paesi extra-UE, salvo il rispetto delle condizioni previste dalla normativa vigente (ad esempio, decisioni di adeguatezza o garanzie appropriate ai sensi del GDPR).</p>
|
||||||
<p>
|
<p>
|
||||||
<b>Diritti dell’Utente</b><br>
|
<b>Diritti dell’Utente</b><br>
|
||||||
In qualità di interessato, l’Utente gode dei seguenti diritti, in conformità con il GDPR:<br>
|
In qualità di interessato, l’Utente gode dei seguenti diritti, in conformità con il GDPR:<br>
|
||||||
• Diritto di accesso: puoi richiedere conferma che i tuoi dati siano trattati e riceverne una copia (ad esempio, inviando una e-mail per sapere quali dati personali sono stati raccolti e utilizzati).<br>
|
• Diritto di accesso: puoi richiedere conferma che i tuoi dati siano trattati e riceverne una copia (ad esempio, inviando una e-mail per sapere quali dati personali sono stati raccolti e utilizzati).<br>
|
||||||
• Diritto di rettifica: hai la possibilità di correggere dati personali inesatti o aggiornare informazioni non più attuali (per esempio, chiedendo la modifica dell’indirizzo e-mail se è cambiato).<br>
|
• Diritto di rettifica: hai la possibilità di correggere dati personali inesatti o aggiornare informazioni non più attuali (per esempio, chiedendo la modifica dell’indirizzo e-mail se è cambiato).<br>
|
||||||
• Diritto alla cancellazione (diritto all’oblio): puoi ottenere la cancellazione dei tuoi dati personali (ad esempio, domandando la rimozione del tuo profilo dal servizio).<br>
|
• Diritto alla cancellazione (diritto all’oblio): puoi ottenere la cancellazione dei tuoi dati personali (ad esempio, domandando la rimozione del tuo profilo dal servizio).<br>
|
||||||
• Diritto di limitazione: puoi richiedere che il trattamento dei tuoi dati sia limitato in determinate circostanze (ad esempio, se hai contestato l’esattezza dei dati e vuoi che vengano sospesi fino alla verifica).<br>
|
• Diritto di limitazione: puoi richiedere che il trattamento dei tuoi dati sia limitato in determinate circostanze (ad esempio, se hai contestato l’esattezza dei dati e vuoi che vengano sospesi fino alla verifica).<br>
|
||||||
• Diritto di opposizione: puoi opporti al trattamento dei tuoi dati per finalità di marketing (per esempio, chiedendo di non ricevere più comunicazioni promozionali).<br>
|
• Diritto di opposizione: puoi opporti al trattamento dei tuoi dati per finalità di marketing (per esempio, chiedendo di non ricevere più comunicazioni promozionali).<br>
|
||||||
• Diritto di reclamo: puoi presentare un reclamo all’Autorità Garante per la Protezione dei Dati Personali se ritieni che i tuoi diritti non siano stati rispettati (ad esempio, compilando l’apposito modulo sul sito del Garante).
|
• Diritto di reclamo: puoi presentare un reclamo all’Autorità Garante per la Protezione dei Dati Personali se ritieni che i tuoi diritti non siano stati rispettati (ad esempio, compilando l’apposito modulo sul sito del Garante).
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<b>Contatti</b><br>
|
<b>Contatti</b><br>
|
||||||
Per esercitare i diritti sopra elencati o per qualsiasi domanda, è possibile contattare il Titolare del trattamento tramite i seguenti canali:<br>
|
Per esercitare i diritti sopra elencati o per qualsiasi domanda, è possibile contattare il Titolare del trattamento tramite i seguenti canali:<br>
|
||||||
• E-mail: <a href="mailto:pp.app@rpigroup.net">pp.app@rpigroup.net</a><br>
|
• E-mail: <a href="mailto:pp.app@rpigroup.net">pp.app@rpigroup.net</a><br>
|
||||||
Si prega di indicare nell’oggetto dell’e-mail il diritto che si intende esercitare e di fornire i propri dati identificativi per facilitare la gestione della richiesta.
|
Si prega di indicare nell’oggetto dell’e-mail il diritto che si intende esercitare e di fornire i propri dati identificativi per facilitare la gestione della richiesta.
|
||||||
</p>
|
</p>
|
||||||
<p><b>Modifiche a questa Informativa</b><br>La presente informativa può essere soggetta a modifiche e aggiornamenti. La versione più recente sarà sempre disponibile all’interno del Servizio. Gli utenti saranno informati delle modifiche rilevanti tramite una notifica all’interno del Servizio, così da garantire massima trasparenza e permettere a tutti di essere sempre aggiornati.</p>
|
<p><b>Modifiche a questa Informativa</b><br>La presente informativa può essere soggetta a modifiche e aggiornamenti. La versione più recente sarà sempre disponibile all’interno del Servizio. Gli utenti saranno informati delle modifiche rilevanti tramite una notifica all’interno del Servizio, così da garantire massima trasparenza e permettere a tutti di essere sempre aggiornati.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a href="<?php echo $base_path; ?>/home" data-page="home" class="linkBox mt-3">
|
<a href="<?php echo $base_path; ?>/home" data-page="home" class="linkBox mt-3">
|
||||||
<div class="clickBox mt-5 mb-4">
|
<div class="clickBox mt-5 mb-4">
|
||||||
<svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12l4-4m-4 4 4 4"/></svg>
|
<svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12l4-4m-4 4 4 4"/></svg>
|
||||||
Torna alla Home
|
Torna alla Home
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
@@ -1,32 +1,32 @@
|
|||||||
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
// views/home.php - Vista della pagina principale
|
// views/home.php - Vista della pagina principale
|
||||||
$stations = loadRadioStations();
|
$stations = loadRadioStations();
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<h1 class="titlePage">Radio</h1>
|
<h1 class="titlePage">Radio</h1>
|
||||||
<p class="subtitlePage">Seleziona la tua radio che vuoi ascoltare</p>
|
<p class="subtitlePage">Seleziona la tua radio che vuoi ascoltare</p>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
<div class="stationList">
|
<div class="stationList">
|
||||||
<div class="row g-2">
|
<div class="row g-2">
|
||||||
<?php foreach ($stations as $station): ?>
|
<?php foreach ($stations as $station): ?>
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
<div class="stationCard <?php if((string)$station->thematic === 'true'){echo "isthematic";} ?>" data-id="<?php echo $station->id; ?>">
|
<div class="stationCard <?php if((string)$station->thematic === 'true'){echo "isthematic";} ?>" data-id="<?php echo $station->id; ?>">
|
||||||
<a href="<?php echo $base_path; ?>/play/<?php echo $station->id; ?>" data-page="play/<?php echo $station->id; ?>" class="nav-link stationLink">
|
<a href="<?php echo $base_path; ?>/play/<?php echo $station->id; ?>" data-page="play/<?php echo $station->id; ?>" class="nav-link stationLink">
|
||||||
<img src="<?php echo $station->logo; ?>" alt="<?php echo $station->name; ?>" class="stationLogo">
|
<img src="<?php echo $station->logo; ?>" alt="<?php echo $station->name; ?>" class="stationLogo">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a href="<?php echo $base_path; ?>/home" data-page="home" class="linkBox mt-3">
|
<a href="<?php echo $base_path; ?>/home" data-page="home" class="linkBox mt-3">
|
||||||
<div class="clickBox mt-5 mb-4">
|
<div class="clickBox mt-5 mb-4">
|
||||||
<svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12l4-4m-4 4 4 4"/></svg>
|
<svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12l4-4m-4 4 4 4"/></svg>
|
||||||
Torna alla Home
|
Torna alla Home
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
@@ -1,38 +1,38 @@
|
|||||||
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
||||||
|
|
||||||
<h1 class="titlePage">Termini & Condizioni</h1>
|
<h1 class="titlePage">Termini & Condizioni</h1>
|
||||||
<p class="subtitlePage">Ultimo aggiornamento: 17/11/2025</p>
|
<p class="subtitlePage">Ultimo aggiornamento: 17/11/2025</p>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
<div class="tec">
|
<div class="tec">
|
||||||
<p><b>Introduzione</b><br> RPIGroup Play vi dà il benvenuto. I presenti Termini e Condizioni (di seguito “T&C”) regolamentano l’accesso e l’uso dell’applicazione “RPIGroup Play” (di seguito “Portale”, “Servizio”, “Applicazione” e “Sito”) e tutti i servizi correlati. Accedendo e utilizzando il Portale, l’utente (di seguito “Utente”) accetta i presenti T&C al primo accesso, condizione necessaria per poter utilizzare il Servizio. L’utente potrà in qualsiasi momento declinare i seguenti T&C, sapendo che non potrà più accedere all’Applicazione offerta.</p>
|
<p><b>Introduzione</b><br> RPIGroup Play vi dà il benvenuto. I presenti Termini e Condizioni (di seguito “T&C”) regolamentano l’accesso e l’uso dell’applicazione “RPIGroup Play” (di seguito “Portale”, “Servizio”, “Applicazione” e “Sito”) e tutti i servizi correlati. Accedendo e utilizzando il Portale, l’utente (di seguito “Utente”) accetta i presenti T&C al primo accesso, condizione necessaria per poter utilizzare il Servizio. L’utente potrà in qualsiasi momento declinare i seguenti T&C, sapendo che non potrà più accedere all’Applicazione offerta.</p>
|
||||||
<p><b>Titolarità e Gestione</b><br>RPIGroup Play è fornito da A.S.V. Studios APPS (di seguito “Gestore”, anche indicato come “Proprietario” e “Sviluppatore”), unico titolare del presente Servizio.</p>
|
<p><b>Titolarità e Gestione</b><br>RPIGroup Play è fornito da A.S.V. Studios APPS (di seguito “Gestore”, anche indicato come “Proprietario” e “Sviluppatore”), unico titolare del presente Servizio.</p>
|
||||||
<p><b>Descrizione del Servizio</b><br>L’Applicazione consente di ascoltare in streaming le emittenti iscritte all'interno del gruppo RPIGroup, sia in formato audio e video (ove previsto).</p>
|
<p><b>Descrizione del Servizio</b><br>L’Applicazione consente di ascoltare in streaming le emittenti iscritte all'interno del gruppo RPIGroup, sia in formato audio e video (ove previsto).</p>
|
||||||
<p><b>Account e Registrazione</b><br>Per utilizzare il Servizio, l'utente non deve effettuare nessun tipo di registrazione o accesso.</p>
|
<p><b>Account e Registrazione</b><br>Per utilizzare il Servizio, l'utente non deve effettuare nessun tipo di registrazione o accesso.</p>
|
||||||
<!-- <p>
|
<!-- <p>
|
||||||
<b>Obblighi dell'Utente</b><br>
|
<b>Obblighi dell'Utente</b><br>
|
||||||
L’Utente si impegna a utilizzare il Servizio in modo lecito e corretto, rispettando i presenti T&C e i termini d’uso. In particolare, l’Utente si impegna a:<br>
|
L’Utente si impegna a utilizzare il Servizio in modo lecito e corretto, rispettando i presenti T&C e i termini d’uso. In particolare, l’Utente si impegna a:<br>
|
||||||
• Non violare i diritti di proprietà intellettuale del Gestore e di terzi;<br>
|
• Non violare i diritti di proprietà intellettuale del Gestore e di terzi;<br>
|
||||||
• Non utilizzare l’Applicazione per scopi illegali o non autorizzati;<br>
|
• Non utilizzare l’Applicazione per scopi illegali o non autorizzati;<br>
|
||||||
• Non distribuire contenuti dannosi, quali software malevoli (malware), spam, materiale diffamatorio, offensivo, illecito o comunque inappropriato;<br>
|
• Non distribuire contenuti dannosi, quali software malevoli (malware), spam, materiale diffamatorio, offensivo, illecito o comunque inappropriato;<br>
|
||||||
• Non tentare di accedere, modificare o compromettere il funzionamento del Servizio o i dati di altri utenti;<br>
|
• Non tentare di accedere, modificare o compromettere il funzionamento del Servizio o i dati di altri utenti;<br>
|
||||||
• Non utilizzare strumenti esterni, quali software automatizzati (ad esempio bot, spider o altri strumenti che simulano l’attività umana), per interagire con l’Applicazione.<br>
|
• Non utilizzare strumenti esterni, quali software automatizzati (ad esempio bot, spider o altri strumenti che simulano l’attività umana), per interagire con l’Applicazione.<br>
|
||||||
La violazione di questi termini può comportare la sospensione o la cancellazione dell’account e, nei casi più gravi, l’eventuale segnalazione alle autorità competenti.
|
La violazione di questi termini può comportare la sospensione o la cancellazione dell’account e, nei casi più gravi, l’eventuale segnalazione alle autorità competenti.
|
||||||
</p> -->
|
</p> -->
|
||||||
<p><b>Proprietà Intellettuale</b><br>Tutti i diritti di proprietà intellettuale relativi al Servizio, compresi design, marchi, loghi e contenuti scaricabili, sono di proprietà esclusiva del Gestore, dell'Associazione Culturale Comunicare e di tutte le emittenti iscritte all'interno del portale.</p>
|
<p><b>Proprietà Intellettuale</b><br>Tutti i diritti di proprietà intellettuale relativi al Servizio, compresi design, marchi, loghi e contenuti scaricabili, sono di proprietà esclusiva del Gestore, dell'Associazione Culturale Comunicare e di tutte le emittenti iscritte all'interno del portale.</p>
|
||||||
<p><b>Contenuti Generati Dall’Utente</b><br>Il servizio non consente agli utenti di creare e caricare contenuti</p>
|
<p><b>Contenuti Generati Dall’Utente</b><br>Il servizio non consente agli utenti di creare e caricare contenuti</p>
|
||||||
<p><b>Prezzi e Pagamenti</b><br>L'Applicazione è disponibile gratuitamente per tutti gli utilizzatori, ed è disponibile in formato gratuito per computer e smartphone.</p>
|
<p><b>Prezzi e Pagamenti</b><br>L'Applicazione è disponibile gratuitamente per tutti gli utilizzatori, ed è disponibile in formato gratuito per computer e smartphone.</p>
|
||||||
<p><b>Limitazioni di Responsabilità</b><br>Il Gestore non sarà responsabile per alcun danno, inclusi ma non limitati a danni diretti, indiretti, incidentali, speciali, consequenziali o punitivi, quali perdita di dati, perdita di profitti, interruzione dell’attività, danni reputazionali o altri danni economici, derivanti dall’utilizzo del Servizio o dall’impossibilità di utilizzarlo, sia che tali danni si verifichino durante il normale utilizzo, sia in seguito a malfunzionamenti, errori, sospensioni, interruzioni, cancellazioni, o altre circostanze connesse al Servizio. Questa esclusione di responsabilità si applica indipendentemente dal fatto che i danni siano prevedibili o che il Gestore sia stato informato della possibilità di tali danni. L’Applicazione è fornita “così com’è” e senza garanzie di alcun tipo, esplicite o implicite.</p>
|
<p><b>Limitazioni di Responsabilità</b><br>Il Gestore non sarà responsabile per alcun danno, inclusi ma non limitati a danni diretti, indiretti, incidentali, speciali, consequenziali o punitivi, quali perdita di dati, perdita di profitti, interruzione dell’attività, danni reputazionali o altri danni economici, derivanti dall’utilizzo del Servizio o dall’impossibilità di utilizzarlo, sia che tali danni si verifichino durante il normale utilizzo, sia in seguito a malfunzionamenti, errori, sospensioni, interruzioni, cancellazioni, o altre circostanze connesse al Servizio. Questa esclusione di responsabilità si applica indipendentemente dal fatto che i danni siano prevedibili o che il Gestore sia stato informato della possibilità di tali danni. L’Applicazione è fornita “così com’è” e senza garanzie di alcun tipo, esplicite o implicite.</p>
|
||||||
<p><b>Modifiche e Interruzioni del Servizio</b><br>Il Gestore si riserva il diritto di modificare, sospendere o interrompere il Servizio in qualsiasi momento, con o senza preavviso, qualora si renda necessario effettuare interventi di manutenzione, aggiornamenti tecnici, o per garantire la sicurezza del sistema e degli utenti. In caso di interruzione definitiva del Servizio, gli utenti saranno informati tramite comunicazione via e-mail e avranno la possibilità di richiedere un rimborso proporzionale ai servizi già pagati ma non usufruiti. Eventuali alternative o modalità di accesso ai dati saranno comunicate contestualmente all’avviso di interruzione.</p>
|
<p><b>Modifiche e Interruzioni del Servizio</b><br>Il Gestore si riserva il diritto di modificare, sospendere o interrompere il Servizio in qualsiasi momento, con o senza preavviso, qualora si renda necessario effettuare interventi di manutenzione, aggiornamenti tecnici, o per garantire la sicurezza del sistema e degli utenti. In caso di interruzione definitiva del Servizio, gli utenti saranno informati tramite comunicazione via e-mail e avranno la possibilità di richiedere un rimborso proporzionale ai servizi già pagati ma non usufruiti. Eventuali alternative o modalità di accesso ai dati saranno comunicate contestualmente all’avviso di interruzione.</p>
|
||||||
<!-- <p><b>Criteri per l’Interruzione e la Cessazione</b><br>Il Gestore può, a sua esclusiva discrezione, sospendere o chiudere l’account dell’Utente in caso di violazione dei presenti T&C. Tali violazioni includono, a titolo esemplificativo ma non esaustivo, comportamenti fraudolenti, uso improprio della piattaforma o mancato rispetto delle regole di condotta. Prima che venga presa una decisione definitiva sulla sospensione o chiusura dell’account, l’Utente avrà la possibilità di presentare le proprie osservazioni o contestare la decisione.</p> -->
|
<!-- <p><b>Criteri per l’Interruzione e la Cessazione</b><br>Il Gestore può, a sua esclusiva discrezione, sospendere o chiudere l’account dell’Utente in caso di violazione dei presenti T&C. Tali violazioni includono, a titolo esemplificativo ma non esaustivo, comportamenti fraudolenti, uso improprio della piattaforma o mancato rispetto delle regole di condotta. Prima che venga presa una decisione definitiva sulla sospensione o chiusura dell’account, l’Utente avrà la possibilità di presentare le proprie osservazioni o contestare la decisione.</p> -->
|
||||||
<p><b>Leggi Applicabile e Foro di Competente</b><br>Questi Termini e Condizioni sono regolati dalla legge italiana. In caso di controversie riguardanti l’interpretazione o l’applicazione dei Termini e Condizioni, la competenza sarà attribuita esclusivamente al Tribunale di Milano, salvo diversa indicazione prevista dalla legge per l’Utente, come nei casi in cui la normativa vigente, ad esempio il Codice del Consumo, preveda il foro di residenza o domicilio del consumatore.</p>
|
<p><b>Leggi Applicabile e Foro di Competente</b><br>Questi Termini e Condizioni sono regolati dalla legge italiana. In caso di controversie riguardanti l’interpretazione o l’applicazione dei Termini e Condizioni, la competenza sarà attribuita esclusivamente al Tribunale di Milano, salvo diversa indicazione prevista dalla legge per l’Utente, come nei casi in cui la normativa vigente, ad esempio il Codice del Consumo, preveda il foro di residenza o domicilio del consumatore.</p>
|
||||||
<p><b>Accettazione dei Termini e Condizioni</b><br>L'Utente accetta automaticamente i seguenti termini e condizioni tramite l'accesso all'interno dell'Applicazione.</p>
|
<p><b>Accettazione dei Termini e Condizioni</b><br>L'Utente accetta automaticamente i seguenti termini e condizioni tramite l'accesso all'interno dell'Applicazione.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a href="<?php echo $base_path; ?>/home" data-page="home" class="linkBox mt-3">
|
<a href="<?php echo $base_path; ?>/home" data-page="home" class="linkBox mt-3">
|
||||||
<div class="clickBox mt-5 mb-4">
|
<div class="clickBox mt-5 mb-4">
|
||||||
<svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12l4-4m-4 4 4 4"/></svg>
|
<svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12l4-4m-4 4 4 4"/></svg>
|
||||||
Torna alla Home
|
Torna alla Home
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
@@ -1,17 +1,17 @@
|
|||||||
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
||||||
|
|
||||||
<h1 class="titlePage">TV</h1>
|
<h1 class="titlePage">TV</h1>
|
||||||
<p class="subtitlePage">Guarda in streaming <b>RC105 TV</b></p>
|
<p class="subtitlePage">Guarda in streaming <b>RC105 TV</b></p>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
<div class="tec">
|
<div class="tec">
|
||||||
<iframe src="https://tv.rpigroup.net/a9699134-efb3-4932-b8db-5a49ae214031.html" style="width:100%; height: 225px;" frameborder="no" scrolling="no" allowfullscreen="true"></iframe>
|
<iframe src="https://tv.rpigroup.net/a9699134-efb3-4932-b8db-5a49ae214031.html" style="width:100%; height: 225px;" frameborder="no" scrolling="no" allowfullscreen="true"></iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a href="<?php echo $base_path; ?>/home" data-page="home" class="linkBox mt-3">
|
<a href="<?php echo $base_path; ?>/home" data-page="home" class="linkBox mt-3">
|
||||||
<div class="clickBox mt-5 mb-4">
|
<div class="clickBox mt-5 mb-4">
|
||||||
<svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12l4-4m-4 4 4 4"/></svg>
|
<svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12l4-4m-4 4 4 4"/></svg>
|
||||||
Torna alla Home
|
Torna alla Home
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
# hestiacp autogenerated robots.txt
|
# hestiacp autogenerated robots.txt
|
||||||
User-agent: *
|
User-agent: *
|
||||||
Crawl-delay: 10
|
Crawl-delay: 10
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
|
|
||||||
<script src="<?php echo $base_path; ?>/js/app.js?v=<?=time()?>"></script>
|
<script src="<?php echo $base_path; ?>/js/app.js?v=<?=time()?>"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,48 +1,48 @@
|
|||||||
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
header('X-Content-Type-Options: nosniff');
|
header('X-Content-Type-Options: nosniff');
|
||||||
header('X-Frame-Options: SAMEORIGIN');
|
header('X-Frame-Options: SAMEORIGIN');
|
||||||
header('X-XSS-Protection: 1; mode=block');
|
header('X-XSS-Protection: 1; mode=block');
|
||||||
header('Referrer-Policy: strict-origin-when-cross-origin');
|
header('Referrer-Policy: strict-origin-when-cross-origin');
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="it">
|
<html lang="it">
|
||||||
<head>
|
<head>
|
||||||
<title><?php echo $title_site; ?></title>
|
<title><?php echo $title_site; ?></title>
|
||||||
<meta name="description" content="<?php echo $description_site; ?>">
|
<meta name="description" content="<?php echo $description_site; ?>">
|
||||||
<meta name="application-name" content="<?php echo $title_site; ?>">
|
<meta name="application-name" content="<?php echo $title_site; ?>">
|
||||||
<link rel="icon" type="image/png" href="<?php echo $logo_site; ?>">
|
<link rel="icon" type="image/png" href="<?php echo $logo_site; ?>">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="msapplication-tap-highlight" content="no">
|
<meta name="msapplication-tap-highlight" content="no">
|
||||||
<meta name="HandheldFriendly" content="True">
|
<meta name="HandheldFriendly" content="True">
|
||||||
<meta name="MobileOptimized" content="320"/>
|
<meta name="MobileOptimized" content="320"/>
|
||||||
<meta name="viewport" content="minimal-ui, width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
<meta name="viewport" content="minimal-ui, width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||||
<meta name="robots" content="index, follow">
|
<meta name="robots" content="index, follow">
|
||||||
<meta name="mobile-web-app-capable" content="yes">
|
<meta name="mobile-web-app-capable" content="yes">
|
||||||
<meta name="application-name" content="<?php echo $title_site; ?>">
|
<meta name="application-name" content="<?php echo $title_site; ?>">
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||||
<meta name="apple-mobile-web-app-title" content="<?php echo $title_site; ?>">
|
<meta name="apple-mobile-web-app-title" content="<?php echo $title_site; ?>">
|
||||||
<meta name="theme-color" content="#2a377e">
|
<meta name="theme-color" content="#2a377e">
|
||||||
<meta name="apple-mobile-web-app-status-bar-style" content="#2a377e">
|
<meta name="apple-mobile-web-app-status-bar-style" content="#2a377e">
|
||||||
<meta name="screen-orientation" content="portrait">
|
<meta name="screen-orientation" content="portrait">
|
||||||
<meta name="x5-orientation" content="portrait">
|
<meta name="x5-orientation" content="portrait">
|
||||||
<meta name="x5-fullscreen" content="true">
|
<meta name="x5-fullscreen" content="true">
|
||||||
<meta name="browsermode" content="application">
|
<meta name="browsermode" content="application">
|
||||||
<link rel="manifest" href="<?=$base_path?>/manifest.json?v=<?=$version_app?>">
|
<link rel="manifest" href="<?=$base_path?>/manifest.json?v=<?=$version_app?>">
|
||||||
<link rel="stylesheet" href="<?=$base_path?>/css/bootstrap.css">
|
<link rel="stylesheet" href="<?=$base_path?>/css/bootstrap.css">
|
||||||
<link rel="stylesheet" href="<?=$base_path?>/css/style.css?v=<?=$version_app?>">
|
<link rel="stylesheet" href="<?=$base_path?>/css/style.css?v=<?=$version_app?>">
|
||||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
||||||
<!-- <link rel="stylesheet" href="<?=$base_path?>/css/animation.css?v=<?=$version_app?>">
|
<!-- <link rel="stylesheet" href="<?=$base_path?>/css/animation.css?v=<?=$version_app?>">
|
||||||
<script src="https://code.jquery.com/jquery-2.2.4.js"></script>
|
<script src="https://code.jquery.com/jquery-2.2.4.js"></script>
|
||||||
<script src="<?=$base_path?>/js/bootstrap.js"></script> -->
|
<script src="<?=$base_path?>/js/bootstrap.js"></script> -->
|
||||||
<script>
|
<script>
|
||||||
// Passa il percorso base a JavaScript
|
// Passa il percorso base a JavaScript
|
||||||
var BASE_PATH = "<?=$base_path?>";
|
var BASE_PATH = "<?=$base_path?>";
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body class="<?php echo $show_app ? 'appBody' : 'desktopBody'; ?>">
|
<body class="<?php echo $show_app ? 'appBody' : 'desktopBody'; ?>">
|
||||||
Reference in New Issue
Block a user