Una piattaforma web per visualizzare gli orari scolastici delle classi, degli insegnanti e dei vari laboratori (se presenti)
- Server web (consigliati nginx o apache2 per Linux, XAMPP per Windows)
- PHP 8.0 o successivo (configurato nel tuo server web)
- Composer
- MariaDB 10/11/12
- Clona la repository e copia la cartella htdocs in una cartella accessibile dal server web
- Esempio (Debian):
git clone https://git.vichingo455.com/emmev-code/orario
cp -r orario/htdocs/* /var/www/html/- Installa
composere le estensioni di php
- Debian:
sudo apt install -y composer php-cli curl php-mysql php-curl php-mbstring php-xml php-zip- Windows: Scarica il programma di installazione di Composer ed installalo. Assicurati di modificare il file php.ini per abilitare le estensioni mysql, curl, mbstring, xml, zip, cli.
- Installa le dipendenze del pannello d'amministrazione
- Debian:
cd /var/www/html
composer install- Windows (con XAMPP):
cd C:\xampp\htdocs
composer install- (opzionale) Genera una password hashata
- Debian
cd orario/utils
php generate_hash.php <password>- Windows:
cd orario\utils
C:\xampp\php\php.exe generate_hash.php <password>- Modifica quindi questa linea nel file
schema.sql, sostituendo l'hash predefinito con quello generato prima:
VALUES ('admin', '$2y$10$IS9v8CJNJnRXslV1NWDSquAjJ0GgU1sm6spBmGp6mjTLiNApfGcQi');- Importa il file
schema.sqlnel tuo database MySQL
- Esempio Debian:
mysql -u root -p < orario/schema.sql- Crea il file
config/config.phpinserendo i valori richiesti
- Esempio file
config/config.php(trovi il file base sottoconfig/config.sample.php):
<?php
// Impostazioni Database
if (!defined('DB_HOST')) {
define('DB_HOST', '<MYSQL_HOST>'); // Host del database (ad esempio localhost)
}
if (!defined('DB_USER')) {
define('DB_USER', '<MYSQL_USER>'); // Utente del database (ad esempio orario)
}
if (!defined('DB_PASS')) {
define('DB_PASS', '<MYSQL_PASSWORD>'); // Password dell'utente specificato prima (ad esempio password123)
}
if (!defined('DB_NAME')) {
define('DB_NAME', 'school_timetable'); // Nome del database, non modificare se non sai cosa stai facendo.
}
// Impostazioni sito generali
if (!defined('APP_NAME')) {
define('APP_NAME', 'Orario Scuola'); // Nome del sito
}
if (!defined('YEAR')) {
define('YEAR', '2025/26'); // Anno Scolastico Corrente
}
if (!defined('PDF_EXPORT')) {
define('PDF_EXPORT', true); // Consenti l'esportazione degli orari in PDF. Imposta su false per impedire.
}
if (!defined('MAINTENANCE')) {
define('MAINTENANCE', false); // Abilita la modalità di manutenzione della piattaforma.
}
// Impostazioni autenticazione dashboard amministrativa
if (!defined('AUTH_TYPE')) {
define('AUTH_TYPE','local'); // Può essere local (integrata), oidc (OpenID Connect)
}
if (!defined('APP_DOMAIN')) {
define('APP_DOMAIN',''); // Dominio del sito (ad esempio orario.yourdomain.com), richiesto per autenticazioni non local
}
// Impostazioni autenticazione via OpenID Connect (richiesto solo se AUTH_TYPE sta impostato su oidc)
if (!defined('OIDC_ISSUER')) {
define('OIDC_ISSUER',''); // Issuer URL per OIDC (ad esempio https://tuokeycloak.com/realms/master)
}
if (!defined('OIDC_CLIENT_ID')) {
define('OIDC_CLIENT_ID',''); // Client ID per OIDC (ad esempio orario)
}
if (!defined('OIDC_CLIENT_SECRET')) {
define('OIDC_CLIENT_SECRET',''); // Client Secret per OIDC (ad esempio abcdefghijklm)
}
if (!defined('OIDC_ALLOWED_USERS')) {
define('OIDC_ALLOWED_USERS',[]); // Contiene i nomi utente degli utenti OIDC autorizzati ad accedere all'amministrazione
}
if (!defined('OIDC_NO_LOGOUT')) {
define('OIDC_NO_LOGOUT',false); // Se attivato, non esegue il logout dal provider OIDC (solo dalla piattaforma)
}
// Impostazioni avanzate. NON MODIFICARE SE NON SAI QUELLO CHE STAI FACENDO!!
if (!defined('PHP_MAX_RAM')) {
define('PHP_MAX_RAM','128M'); // Limite di memoria per PHP, si consiglia di aumentarlo in caso di bisogno e di non andare sotto i 128 MB. Imposta a -1 per disattivare. - https://www.php.net/manual/en/ini.core.php#ini.memory-limit
}
if (!defined('SESSION_LIFETIME')) {
define('SESSION_LIFETIME',3600); // Durata del cookie di login
}
// Labs (funzioni interne)
if (!defined('API_URL')) {
define('API_URL', ''); // URL API di importazione, lascia vuoto per disabilitare. Esempio: http://localhost:3006/classe
}
?>- Apri
http://localhoste goditi il sito
- Installa Curl, Git e Docker
apt install curl git
curl -fsSL https://get.docker.com | bash- Scarica i file richiesti:
wget https://git.vichingo455.com/emmev-code/orario/raw/branch/stable/schema.sql
wget https://git.vichingo455.com/emmev-code/orario/raw/branch/stable/docker-compose.yml- Avvia il container:
docker compose up -d- Il container dovrebbe diventare disponibile su
http://localhost:8080
Per cambiare le impostazioni dell'istanza basta aprire docker-compose.yml con un editor di testo e modificare le variabili d'ambiente:
environment:
# --- Configuratione Database ---
DB_HOST: db # Host database
DB_USER: orario # Utente database
DB_PASS: orario # Password dell'utente del database
DB_NAME: school_timetable # Nome del database
# --- Impostazioni sito ---
APP_NAME: "Orario Scuola" # Nome del sito
YEAR: "2025/26" # Anno scolastico corrente
PDF_EXPORT: true # Abilita l'esportazione degli orari in PDF
MAINTENANCE: false # Abilita la modalità di manutenzione
# --- Impostazioni Autenticazione ---
AUTH_TYPE: "local" # Tipo di autenticazione: può essere local o oidc
APP_DOMAIN: "" # Dominio dell'app, ad esempio orario.tuosito.com
# --- Impostazioni di OAuth2 (solo se il tipo di autenticazione è oidc) ---
OIDC_ISSUER: "" # OIDC Issuer, ad esempio https://sso.tuosito.com/realms/master
OIDC_CLIENT_ID: "" # Client ID per OIDC, ad esempio orario
OIDC_CLIENT_SECRET: "" # Client Secret per OIDC, ad esempio abcde12345
OIDC_ALLOWED_USERS: '[]' # Nomi utente che possono accedere al pannello di controllo, lascia vuoto per consentire tutti gli utenti. Esempio: '["admin","prof","segreteria"]'
OIDC_NO_LOGOUT: false # Se attivato, non esegue il logout dal provider OIDC (solo dalla piattaforma)
# --- Impostazioni Avanzate ---
# NON MODIFICARE SE NON SAI QUELLO CHE STAI FACENDO!!
PHP_MAX_RAM: "128M" # Limite di memoria per PHP, si consiglia di aumentarlo in caso di bisogno e di non andare sotto i 128 MB. Imposta a -1 per disattivare. - https://www.php.net/manual/en/ini.core.php#ini.memory-limit
SESSION_LIMIT: 3600 # Durata del cookie di login
# --- Labs ---
# Queste sono funzioni interne che non sono documentate
API_URL: "" # URL della API per l'importazione, lascia vuoto per disabilitarePer usare nuove versioni della piattaforma, potrebbe necessario migrare il database dallo schema vecchio a quello nuovo.
Prima di iniziare la migrazione, assicurarsi di avere un backup del database. Le tabelle vecchie verranno mantenute aggiungendogli il suffisso _legacy.
Supponendo che la cartella di installazione sia /var/www/html:
- Assicurarsi che la cartella
/var/www/utilsesista e contenga i file richiesti(richiesta solo per la migrazione). Per correggere:
mkdir /var/www/utils
cp -r orario/utils/* /var/www/utils/- Assicurarsi che il file
/var/www/schema.sql esista(richiesto solo durante la migrazione). Per correggere:
cp orario/schema.sql /var/www/schema.sql- Una volta eseguita la migrazione questi file possono essere eliminati
Quando un amministratore accede al dashboard con lo schema legacy ancora attivo, viene aperta automaticamente la pagina admin/migrate.php.
Quella pagina mostrerà una descrizione breve dei cambiamenti effettuati. Basterà premere il pulsante "Avvia aggiornamento" e il database verrà aggiornato.
Per migrare da riga di comando, è possibile usare lo strumento incluso con la piattaforma:
php utils/migrate.phpLo strumento chiederà il permesso a procedere e vi informerà del risultato della migrazione.
Se vuoi fare la migrazione manuale, puoi usare migrate_sql.sql.
Passi consigliati:
- Esegui backup completo del database.
- Rinomina le tabelle legacy:
USE school_timetable;
RENAME TABLE classes TO classes_legacy, subjects TO subjects_legacy, timetable TO timetable_legacy;- Importa
schema.sql. - Esegui
migrate_sql.sqlper popolare il nuovo modello.
Orario Scuola, Copyright (C) 2025-2026 EmmeV.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.