#!/usr/bin/env php <?php // Auteur : Cédrix pour a5l.fr // Projet : scripts-bash/ytdll // Télécharger les pistes audios ajoutées récemment // depuis des chaines Youtubes // Version 2024.07.07-14.31 // Version initiale /* Création de la base de données Linux Debian 12 / PostGres 16 Suivez les instructions suivantes pour créer votre base de données et tous les éléments associés. -- Connectez-vous en tant qu'utilisateur ayant des privilèges suffisants -- depuis le compte root sudo su - postgres -- Modification du fichier pg_hba nano /etc/postgresql/16/main/ph_hba.conf -- modifier la ligne local all all peer -- avec la valeur suivante local all all trust -- avec le compte root redémarrez postgres systemctl restart postgresql -- Connectez-vous en tant qu'utilisateur ayant des privilèges suffisants -- depuis le compte root sudo su - postgres -- Connection au requeteur psql -- Créer un nouveau role CREATE ROLE r_ytdll WITH LOGIN PASSWORD 'changeme'; -- Créer la base de données CREATE DATABASE b_ytdll OWNER r_ytdll; -- Connectez-vous à la base de données b_ytdll : \c b_ytdll -- Créez un nouveau schéma CREATE SCHEMA s_ytdll AUTHORIZATION r_ytdll; -- Accorder tous les privilèges sur le schéma à l'utilisateur GRANT ALL PRIVILEGES ON SCHEMA s_ytdll TO r_ytdll; -- Accorder des privilèges sur les tables et séquences existantes et futures GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA s_ytdll TO r_ytdll; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA s_ytdll TO r_ytdll; ALTER DEFAULT PRIVILEGES IN SCHEMA s_ytdll GRANT ALL PRIVILEGES ON TABLES TO r_ytdll; ALTER DEFAULT PRIVILEGES IN SCHEMA s_ytdll GRANT ALL PRIVILEGES ON SEQUENCES TO r_ytdll; -- Schéma s_ytdll par défaut SET search_path TO s_ytdll; \d ALTER ROLE r_ytdll SET search_path TO s_ytdll; ALTER DATABASE b_ytdll SET search_path TO s_ytdll; */ // -- GESTION DES PRE REQUIS -- // Vérifier si l'extension pgsql est chargée if (!extension_loaded('pgsql')) { die("L'extension PHP 'pgsql' n'est pas installée. Veuillez l'installer avant de continuer.\n"); } // Chemin du HOME $homeDir = getenv('HOME'); // Configuration de l'autoloader spl_autoload_register(function ($class) use ($homeDir) { $baseDir = $homeDir . '/.local/share/ytdll/lib/'; $file = $baseDir . str_replace('\\', '/', $class) . '.php'; if (file_exists($file)) { require $file; } }); // -- GESTION DE LA CONFIGURATION PRIMAIRE -- function getUserInput($prompt) { echo $prompt; return trim(fgets(STDIN)); } function createConfigFile($configPath, $templatePath) { // Vérifie si le fichier de configuration existe if (!file_exists($configPath)) { // Copie le fichier de modèle if (!copy($templatePath, $configPath)) { die("Échec de la copie du fichier de configuration modèle.\n"); } // Demande à l'utilisateur de saisir les valeurs nécessaires $databaseHost = getUserInput("Veuillez saisir le host de la base de données : "); $databaseName = getUserInput("Veuillez saisir le nom de la base de données : "); $databaseUser = getUserInput("Veuillez saisir l'utilisateur de la base de données : "); $databasePassword = getUserInput("Veuillez saisir le mot de passe de la base de données : "); // Lit le fichier de modèle $configContent = file_get_contents($configPath); // Remplace les valeurs par défaut par les valeurs saisies par l'utilisateur $configArray = [ 'database' => [ 'host' => $databaseHost, 'dbname' => $databaseName, 'user' => $databaseUser, 'password' => $databasePassword ] ]; // Encode en JSON $jsonConfig = json_encode($configArray, JSON_PRETTY_PRINT); // Écrit le fichier de configuration JSON file_put_contents($configPath, $jsonConfig); echo "Le fichier de configuration a été créé avec succès.\n"; } } // Appel de la fonction pour créer le fichier de configuration $configPath = $homeDir . '/.config/fr.a5l.ytdll.json'; $templatePath = $homeDir . '/.local/share/ytdll/config.php'; createConfigFile($configPath, $templatePath); // -- DEBUT -- // Lit le fichier de configuration primaire $configContent = file_get_contents($configPath); // Décode le JSON en tableau associatif $config = json_decode($configContent, true); // Initialiser la connexion à la base de données $database = new Database($config['database']); unset($config); // Initialiser au gestionnaire de configuration $configManager = new Config($database); // -- GESTION DES VERSIONS de TABLE -- $updateManager = new UpdateManager($configManager, $pdo); $updateManager->manageVersionTables();