troppe modifiche, non so cosa scrivere

This commit is contained in:
2025-10-02 11:54:59 +02:00
parent f68162b80b
commit d405a0e21c
16 changed files with 153 additions and 73 deletions

View File

@@ -1,12 +1,16 @@
FROM php:8.2-apache FROM php:8.2-apache
RUN docker-php-ext-install mysqli pdo pdo_mysql RUN docker-php-ext-install mysqli pdo pdo_mysql
COPY htdocs/ /var/www/html/ COPY htdocs/ /var/www/html/
COPY docker/php/db.php /var/www/html/db.php COPY docker/php/config.php /var/www/html/config/config.php
RUN apt-get update && apt-get install -y \
unzip \
curl \
git \
&& rm -rf /var/lib/apt/lists/*
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN composer --version
WORKDIR /var/www/html/admin
RUN composer install --no-interaction
RUN chown -R www-data:www-data /var/www/html RUN chown -R www-data:www-data /var/www/html
# For now remove OpenID files from container, OpenID integration will come soon.
RUN rm /var/www/html/admin/login.php.keycloak
RUN rm /var/www/html/admin/logout.php.keycloak
RUN rm /var/www/html/admin/composer.json
RUN rm /var/www/html/admin/composer.lock
RUN a2enmod rewrite RUN a2enmod rewrite
EXPOSE 80 EXPOSE 80

View File

@@ -53,28 +53,52 @@ C:\xampp\php\php.exe generate_hash.php <password>
VALUES ('admin', '$2y$10$IS9v8CJNJnRXslV1NWDSquAjJ0GgU1sm6spBmGp6mjTLiNApfGcQi'); VALUES ('admin', '$2y$10$IS9v8CJNJnRXslV1NWDSquAjJ0GgU1sm6spBmGp6mjTLiNApfGcQi');
``` ```
5. **Importa il file ``schema.sql`` nel tuo database MySQL** 5. **Importa il file ``schema.sql`` nel tuo database MySQL**
6. **Modifica il file ``db.php`` cambiando l'host, il nome utente e la password (necessari per la connessione al database MySQL)** 6. **Modifica il file ``config/config.php`` inserendo i valori richiesti**
- Esempio: - Esempio file ``config/config.php``:
```php ```php
$host = "localhost"; <?php
$user = "utente"; // Impostazioni Database
$pass = "password123"; if (!defined('DB_HOST')) {
define('DB_HOST', 'db');
}
if (!defined('DB_USER')) {
define('DB_USER', 'orario');
}
if (!defined('DB_PASS')) {
define('DB_PASS', 'orario');
}
if (!defined('DB_NAME')) {
define('DB_NAME', 'school_timetable');
}
// Impostazioni sito generali
if (!defined('APP_NAME')) {
define('APP_NAME', 'Orario Scuola');
}
if (!defined('YEAR')) {
define('YEAR', '2025/26');
}
// Impostazioni autenticazione dashboard amministrativa
if (!defined('AUTH_TYPE')) {
define('AUTH_TYPE','local'); // Può essere keycloak o local (integrata)
}
if (!defined('KEYCLOAK_DOMAIN')) {
define('KEYCLOAK_DOMAIN','');
}
if (!defined('KEYCLOAK_REALM')) {
define('KEYCLOAK_REALM','');
}
if (!defined('KEYCLOAK_CLIENT_ID')) {
define('KEYCLOAK_CLIENT_ID','');
}
if (!defined('KEYCLOAK_CLIENT_SECRET')) {
define('KEYCLOAK_CLIENT_SECRET','');
}
if (!defined('APP_DOMAIN')) {
define('APP_DOMAIN','');
}
?>
``` ```
7. **(Opzionale) Modifica ``admin/login.php.keycloak`` e ``admin/logout.php.keycloak`` con i dati di un'istanza keycloak, in caso tu voglia usare Keycloak e non l'autenticazione integrata. Cancella poi i file ``login.php`` e ``logout.php`` e rinomina ``admin/login.php.keycloak`` in ``login.php`` e ``admin/logout.php.keycloak`` in ``logout.php``** 7. **Apri ``http://localhost`` e goditi il sito**
- Esempio (``login.php.keycloak``):
```php
$oidc = new OpenIDConnectClient(
'https://keycloak.local/realms/master/',
'orario', // Client ID Keycloak
'abcdefghijklmnop' // Client secret Keycloak
);
$oidc->setRedirectURL('https://orario.local/admin/login.php'); // orario.local è il dominio base di questa piattaforma
```
- Esempio (``logout.php.keycloak``):
```php
header('Location: https://keycloak.local/realms/master/protocol/openid-connect/logout?post_logout_redirect_uri=https://orario.local&client_id=orario');
```
8. **Apri ``http://localhost`` e goditi il sito**
## Installazione con Docker ## Installazione con Docker
NOTA: L'installazione con Docker è in fase di sviluppo attivo, quindi potrebbe non funzionare. NOTA: L'installazione con Docker è in fase di sviluppo attivo, quindi potrebbe non funzionare.
@@ -91,6 +115,10 @@ docker compose up -d --build
``` ```
3. Il container dovrebbe diventare disponibile su ``http://localhost:8080`` 3. Il container dovrebbe diventare disponibile su ``http://localhost:8080``
### Per utenti Docker avanzati
Se sei un utente Docker avanzato e vuoi personalizzare puoi modificare la configurazione di docker nei file ``docker/php/config.php``, ``docker-compose.yml`` e ``Dockerfile`` per adattare tutto al tuo ambiente.
Per la maggior parte degli utenti consigliamo di usare la configurazione per Docker predefinita.
## Licenza ## Licenza
**Orario Scuola, Copyright (C) 2025 EmmeV.** **Orario Scuola, Copyright (C) 2025 EmmeV.**

41
docker/php/config.php Normal file
View File

@@ -0,0 +1,41 @@
<?php
// Impostazioni Database
if (!defined('DB_HOST')) {
define('DB_HOST', 'db');
}
if (!defined('DB_USER')) {
define('DB_USER', 'orario');
}
if (!defined('DB_PASS')) {
define('DB_PASS', 'orario');
}
if (!defined('DB_NAME')) {
define('DB_NAME', 'school_timetable');
}
// Impostazioni sito generali
if (!defined('APP_NAME')) {
define('APP_NAME', 'Orario Scuola');
}
if (!defined('YEAR')) {
define('YEAR', '2025/26');
}
// Impostazioni autenticazione dashboard amministrativa
if (!defined('AUTH_TYPE')) {
define('AUTH_TYPE','local'); // Può essere keycloak o local (integrata)
}
if (!defined('KEYCLOAK_DOMAIN')) {
define('KEYCLOAK_DOMAIN','');
}
if (!defined('KEYCLOAK_REALM')) {
define('KEYCLOAK_REALM','');
}
if (!defined('KEYCLOAK_CLIENT_ID')) {
define('KEYCLOAK_CLIENT_ID','');
}
if (!defined('KEYCLOAK_CLIENT_SECRET')) {
define('KEYCLOAK_CLIENT_SECRET','');
}
if (!defined('APP_DOMAIN')) {
define('APP_DOMAIN','');
}
?>

View File

@@ -1,11 +0,0 @@
<?php
$host = "db";
$user = "orario";
$pass = "orario";
$dbname = "school_timetable";
$conn = new mysqli($host, $user, $pass, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
?>

View File

@@ -2,7 +2,6 @@
session_start(); session_start();
if (!isset($_SESSION['admin'])) { header("Location: login.php"); exit; } if (!isset($_SESSION['admin'])) { header("Location: login.php"); exit; }
include("../lib/db.php"); include("../lib/db.php");
include("../config/config.php");
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['name'])) { if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['name'])) {
$name = $_POST['name']; $name = $_POST['name'];

View File

@@ -1,9 +1,9 @@
<?php <?php
use Jumbojett\OpenIDConnectClient;
require 'vendor/autoload.php';
session_start(); session_start();
include("../lib/db.php"); include("../lib/db.php");
include("../config/config.php"); if ($_SERVER["REQUEST_METHOD"] == "POST" && AUTH_TYPE == 'local') {
if ($_SERVER["REQUEST_METHOD"] == "POST" && AUTH_TYPE === 'local') {
$username = $_POST['username']; $username = $_POST['username'];
$password = $_POST['password']; $password = $_POST['password'];
$stmt = $conn->prepare("SELECT * FROM admin WHERE username = ?"); $stmt = $conn->prepare("SELECT * FROM admin WHERE username = ?");
@@ -20,8 +20,9 @@ if ($_SERVER["REQUEST_METHOD"] == "POST" && AUTH_TYPE === 'local') {
} }
$error = "Credenziali non valide"; $error = "Credenziali non valide";
} }
if (AUTH_TYPE === 'local') { if (AUTH_TYPE == 'local') {
echo ```<!DOCTYPE html> echo <<<HTML
<!DOCTYPE html>
<html> <html>
<head> <head>
<title>Login Admin</title> <title>Login Admin</title>
@@ -45,16 +46,16 @@ if (AUTH_TYPE === 'local') {
<input type="password" name="password" placeholder="Password" required><br> <input type="password" name="password" placeholder="Password" required><br>
<button type="submit">Login</button> <button type="submit">Login</button>
</form> </form>
<?php if(isset($error)) echo "<br><div class='error'>$error</div>"; ?> HTML;
if(isset($error)) echo "<br><div class='error'>$error</div>";
echo <<<HTML
</div> </div>
<p style="text-align: center;">Copyright (C) 2025 EmmeV. - Released under <a href="https://git.vichingo455.freeddns.org/emmev-code/orario/src/branch/stable/LICENSE.txt" target="_blank">GNU AGPL 3.0 License</a>.</p> <p style="text-align: center;">Copyright (C) 2025 EmmeV. - Released under <a href="https://git.vichingo455.freeddns.org/emmev-code/orario/src/branch/stable/LICENSE.txt" target="_blank">GNU AGPL 3.0 License</a>.</p>
</body> </body>
</html>```; </html>
HTML;
} }
else if (AUTH_TYPE === 'keycloak') { else if (AUTH_TYPE === 'keycloak') {
require 'vendor/autoload.php';
use Jumbojett\OpenIDConnectClient;
session_start();
// Configura il client Keycloak // Configura il client Keycloak
$oidc = new OpenIDConnectClient( $oidc = new OpenIDConnectClient(
'https://' + KEYCLOAK_DOMAIN + '/realms/' + KEYCLOAK_REALM + '/', 'https://' + KEYCLOAK_DOMAIN + '/realms/' + KEYCLOAK_REALM + '/',

View File

@@ -1,7 +1,6 @@
<?php <?php
session_start(); session_start();
include("../lib/db.php"); include("../lib/db.php");
include("../config/config.php");
if (!isset($_SESSION['admin']) || $_SESSION['auth_type'] != 'local') { if (!isset($_SESSION['admin']) || $_SESSION['auth_type'] != 'local') {
header("Location: login.php"); header("Location: login.php");

View File

@@ -2,7 +2,6 @@
session_start(); session_start();
if (!isset($_SESSION['admin'])) { header("Location: login.php"); exit; } if (!isset($_SESSION['admin'])) { header("Location: login.php"); exit; }
include("../lib/db.php"); include("../lib/db.php");
include("../config/config.php");
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['name'])) { if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['name'])) {
$name = $_POST['name']; $name = $_POST['name'];

View File

@@ -2,7 +2,6 @@
session_start(); session_start();
if (!isset($_SESSION['admin'])) { header("Location: login.php"); exit; } if (!isset($_SESSION['admin'])) { header("Location: login.php"); exit; }
include("../lib/db.php"); include("../lib/db.php");
include("../config/config.php");
// --- Recupera tutte le materie --- // --- Recupera tutte le materie ---
$subjects = []; $subjects = [];

View File

@@ -1,7 +1,6 @@
<?php <?php
session_start(); session_start();
include("../lib/db.php"); include("../lib/db.php");
include("../config/config.php");
if (!isset($_SESSION['admin']) || $_SESSION['auth_type'] != 'local' || $_SESSION['admin'] != 'admin') { if (!isset($_SESSION['admin']) || $_SESSION['auth_type'] != 'local' || $_SESSION['admin'] != 'admin') {
header("Location: login.php"); header("Location: login.php");

View File

@@ -1,17 +1,42 @@
<?php <?php
// Impostazioni Database // Impostazioni Database
define('DB_HOST', 'db'); if (!defined('DB_HOST')) {
define('DB_USER', 'orario'); define('DB_HOST', '<MYSQL_HOST>'); // Host del database (ad esempio localhost)
define('DB_PASS', 'orario'); }
define('DB_NAME', 'school_timetable'); 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 // Impostazioni sito generali
define('APP_NAME', 'Orario Scuola'); if (!defined('APP_NAME')) {
define('YEAR', '2025/26'); define('APP_NAME', 'Orario Scuola'); // Nome del sito
}
if (!defined('YEAR')) {
define('YEAR', '2025/26'); // Anno Scolastico Corrente
}
// Impostazioni autenticazione dashboard amministrativa // Impostazioni autenticazione dashboard amministrativa
if (!defined('AUTH_TYPE')) {
define('AUTH_TYPE','local'); // Può essere keycloak o local (integrata) define('AUTH_TYPE','local'); // Può essere keycloak o local (integrata)
define('KEYCLOAK_DOMAIN',''); }
define('KEYCLOAK_REALM',''); // Impostazioni autenticazione via Keycloak (facoltative se AUTH_TYPE sta impostato su local)
define('KEYCLOAK_CLIENT_ID',''); if (!defined('KEYCLOAK_DOMAIN')) {
define('KEYCLOAK_CLIENT_SECRET',''); define('KEYCLOAK_DOMAIN',''); // Dominio di Keycloak (ad esempio auth.yourdomain.com)
define('APP_DOMAIN',''); }
if (!defined('KEYCLOAK_REALM')) {
define('KEYCLOAK_REALM',''); // Realm di Keycloak (ad esempio master)
}
if (!defined('KEYCLOAK_CLIENT_ID')) {
define('KEYCLOAK_CLIENT_ID',''); // Client ID per Keycloak (ad esempio orario)
}
if (!defined('KEYCLOAK_CLIENT_SECRET')) {
define('KEYCLOAK_CLIENT_SECRET',''); // Client Secret per Keycloak (ad esempio abcdefghijklm)
}
if (!defined('APP_DOMAIN')) {
define('APP_DOMAIN',''); // Dominio del sito (ad esempio orario.yourdomain.com)
}
?> ?>

View File

@@ -1,6 +1,5 @@
<?php <?php
include("lib/db.php"); include("lib/db.php");
include("config/config.php");
$teacher = $_GET['teacher']; $teacher = $_GET['teacher'];
$days = ["Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"]; $days = ["Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"];
$hours = [ $hours = [

View File

@@ -1,6 +1,5 @@
<?php <?php
include("lib/db.php"); include("lib/db.php");
include("config/config.php");
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>

View File

@@ -1,6 +1,5 @@
<?php <?php
include("lib/db.php"); include("lib/db.php");
include("config/config.php");
$room = $_GET['room']; // aula selezionata $room = $_GET['room']; // aula selezionata
$days = ["Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"]; $days = ["Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"];
$hours = [ $hours = [

View File

@@ -1,8 +1,9 @@
<?php <?php
$host = "<MYSQL_HOST>"; include_once __DIR__ . '/../config/config.php';
$user = "<MYSQL_USER>"; $host = DB_HOST;
$pass = "<MYSQL_PASSWORD>"; $user = DB_USER;
$dbname = "school_timetable"; $pass = DB_PASS;
$dbname = DB_NAME;
$conn = new mysqli($host, $user, $pass, $dbname); $conn = new mysqli($host, $user, $pass, $dbname);
if ($conn->connect_error) { if ($conn->connect_error) {

View File

@@ -1,6 +1,5 @@
<?php <?php
include("lib/db.php"); include("lib/db.php");
include("config/config.php");
$class_id = intval($_GET['class_id']); $class_id = intval($_GET['class_id']);
$class = $conn->query("SELECT * FROM classes WHERE id=$class_id")->fetch_assoc(); $class = $conn->query("SELECT * FROM classes WHERE id=$class_id")->fetch_assoc();
$days = ["Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"]; $days = ["Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"];